|
|
1.1 ! root 1: /* Cursor motion calculation definitions for GNU Emacs ! 2: Copyright (C) 1985 Free Software Foundation, Inc. ! 3: ! 4: This file is part of GNU Emacs. ! 5: ! 6: GNU Emacs is free software; you can redistribute it and/or modify ! 7: it under the terms of the GNU General Public License as published by ! 8: the Free Software Foundation; either version 1, or (at your option) ! 9: any later version. ! 10: ! 11: GNU Emacs is distributed in the hope that it will be useful, ! 12: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 14: GNU General Public License for more details. ! 15: ! 16: You should have received a copy of the GNU General Public License ! 17: along with GNU Emacs; see the file COPYING. If not, write to ! 18: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ ! 19: ! 20: ! 21: /* This structure holds everything needed to do cursor motion except the pad ! 22: character (PC) and the output speed of the terminal (ospeed), which ! 23: termcap wants in global variables. */ ! 24: ! 25: extern struct cm { ! 26: /* Cursor position */ ! 27: int cm_curY, /* current row */ ! 28: cm_curX; /* current column */ ! 29: /* -1 in either one means position unknown */ ! 30: /* Capabilities from termcap(5) (including extensions) */ ! 31: char *cm_up, /* up (up) */ ! 32: *cm_down, /* down (do) */ ! 33: *cm_left, /* left (bs) */ ! 34: *cm_right, /* right (nd) */ ! 35: *cm_home, /* home (ho) */ ! 36: *cm_cr, /* carriage return (cr) */ ! 37: *cm_ll, /* last line (ll) */ ! 38: *cm_abs, /* absolute (cm) */ ! 39: *cm_habs, /* horizontal absolute (ch) */ ! 40: *cm_vabs, /* vertical absolute (cv) */ ! 41: *cm_ds, /* "don't send" string (ds) */ ! 42: *cm_tab; /* tab (ta) */ ! 43: int cm_tabwidth, /* tab width (tw) */ ! 44: cm_cols, /* Number of cols on screen (co) */ ! 45: cm_rows; /* Number of rows on screen (li) */ ! 46: unsigned int ! 47: cm_autowrap:1, /* autowrap flag (am) */ ! 48: cm_magicwrap:1, /* vt100s: cursor stays in last col but ! 49: will wrap if next char is printing (xn) */ ! 50: cm_usetabs:1, /* if set, use tabs */ ! 51: cm_autolf:1, /* \r performs a \r\n (rn) */ ! 52: cm_losewrap:1; /* if reach right margin, forget cursor location */ ! 53: /* Costs */ ! 54: int cc_up, /* cost for up */ ! 55: cc_down, /* etc */ ! 56: cc_left, ! 57: cc_right, ! 58: cc_home, ! 59: cc_cr, ! 60: cc_ll, ! 61: cc_abs, /* abs costs are actually min costs */ ! 62: cc_habs, ! 63: cc_vabs, ! 64: cc_tab; ! 65: } Wcm; ! 66: ! 67: extern char PC; /* Pad character */ ! 68: extern short ospeed; /* Output speed (from sg_ospeed) */ ! 69: ! 70: /* Shorthand */ ! 71: #ifndef NoCMShortHand ! 72: #define curY Wcm.cm_curY ! 73: #define curX Wcm.cm_curX ! 74: #define Up Wcm.cm_up ! 75: #define Down Wcm.cm_down ! 76: #define Left Wcm.cm_left ! 77: #define Right Wcm.cm_right ! 78: #define Home Wcm.cm_home ! 79: #define CR Wcm.cm_cr ! 80: #define LastLine Wcm.cm_ll ! 81: #define TabWidth Wcm.cm_tabwidth ! 82: #define DontSend Wcm.cm_ds ! 83: #define AbsPosition Wcm.cm_abs ! 84: #define ColPosition Wcm.cm_habs ! 85: #define RowPosition Wcm.cm_vabs ! 86: #define AutoWrap Wcm.cm_autowrap ! 87: #define MagicWrap Wcm.cm_magicwrap ! 88: #define UseTabs Wcm.cm_usetabs ! 89: #define AutoLF Wcm.cm_autolf ! 90: #define ScreenRows Wcm.cm_rows ! 91: #define ScreenCols Wcm.cm_cols ! 92: ! 93: #define cmat(row,col) (curY = (row), curX = (col)) ! 94: #define cmplus(n) {if ((curX += (n)) >= ScreenCols && !MagicWrap)\ ! 95: {if (Wcm.cm_losewrap) curY = -1; \ ! 96: else if (AutoWrap) curX = 0, curY++; else curX--;}} ! 97: ! 98: extern void cmputc (); ! 99: ! 100: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.