home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / e20313sr.zip / emacs / 20.3.1 / src / cm.h < prev    next >
C/C++ Source or Header  |  1999-07-31  |  6KB  |  184 lines

  1. /* Cursor motion calculation definitions for GNU Emacs
  2.    Copyright (C) 1985, 1989 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 2, 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, Inc., 59 Temple Place - Suite 330,
  19. Boston, MA 02111-1307, USA.  */
  20.  
  21. /* Holds the minimum and maximum costs for the parametrized capabilities.  */
  22. struct parmcap
  23.   {
  24.     int mincost, maxcost;
  25.   };
  26.  
  27. /* This structure holds everything needed to do cursor motion except the pad
  28.    character (PC) and the output speed of the terminal (ospeed), which
  29.    termcap wants in global variables.  */
  30.  
  31. struct cm
  32.   {
  33.     /* Cursor position.  -1 in *both* variables means the cursor
  34.        position is unknown, in order to force absolute cursor motion. */
  35.  
  36.     int cm_curY;            /* Current row */
  37.     int cm_curX;            /* Current column */
  38.  
  39.     /* Capabilities from termcap */
  40.     char *cm_up;        /* up (up) */
  41.     char *cm_down;        /* down (do) */
  42.     char *cm_left;        /* left (le) */
  43.     char *cm_right;        /* right (nd) */
  44.     char *cm_home;        /* home (ho) */
  45.     char *cm_cr;        /* carriage return (cr) */
  46.     char *cm_ll;        /* last line (ll) */
  47.     char *cm_tab;        /* tab (ta) */
  48.     char *cm_backtab;        /* backtab (bt) */
  49.     char *cm_abs;        /* absolute (cm) */
  50.     char *cm_habs;        /* horizontal absolute (ch) */
  51.     char *cm_vabs;        /* vertical absolute (cv) */
  52. #if 0
  53.     char *cm_ds;        /* "don't send" string (ds) */
  54. #endif
  55.     char *cm_multiup;        /* multiple up (UP) */
  56.     char *cm_multidown;        /* multiple down (DO) */
  57.     char *cm_multileft;        /* multiple left (LE) */
  58.     char *cm_multiright;    /* multiple right (RI) */
  59.     int cm_cols;        /* number of cols on screen (co) */
  60.     int cm_rows;        /* number of rows on screen (li) */
  61.     int cm_tabwidth;        /* tab width (it) */
  62.     unsigned int cm_autowrap:1;    /* autowrap flag (am) */
  63.     unsigned int cm_magicwrap:1; /* VT-100: cursor stays in last col but
  64.                     will cm_wrap if next char is
  65.                     printing (xn) */
  66.     unsigned int cm_usetabs:1;    /* if set, use tabs */
  67.     unsigned int cm_losewrap:1;    /* if reach right margin, forget cursor
  68.                    location */
  69.     unsigned int cm_autolf:1;    /* \r performs a \r\n (rn) */
  70.  
  71.     /* Parametrized capabilities.  This needs to be a struct since
  72.        the costs are accessed through pointers.  */
  73.  
  74. #if 0
  75.     struct parmcap cc_abs;    /* absolute (cm) */
  76.     struct parmcap cc_habs;    /* horizontal absolute (ch) */
  77.     struct parmcap cc_vabs;    /* vertical absolute (cv) */
  78.     struct parmcap cc_multiup;    /* multiple up (UP) */
  79.     struct parmcap cc_multidown; /* multiple down (DO) */
  80.     struct parmcap cc_multileft; /* multiple left (LE) */
  81.     struct parmcap cc_multiright; /* multiple right (RI) */
  82. #endif
  83.  
  84.     /* Costs for the non-parametrized capabilities */
  85.     int cc_up;            /* cost for up */
  86.     int cc_down;        /* etc. */
  87.     int cc_left;
  88.     int cc_right;
  89.     int cc_home;
  90.     int cc_cr;
  91.     int cc_ll;
  92.     int cc_tab;
  93.     int cc_backtab;
  94.     /* These are temporary, until the code is installed to use the
  95.        struct parmcap fields above.  */
  96.     int cc_abs;
  97.     int cc_habs;
  98.     int cc_vabs;
  99.   };
  100.  
  101. extern struct cm Wcm;        /* Terminal capabilities */
  102. extern char PC;            /* Pad character */
  103.  
  104. #if defined (HAVE_LIBNCURSES) && ! defined (NCURSES_OSPEED_T)
  105. extern short ospeed;
  106. #else
  107. #if defined (HAVE_TERMIOS_H) && defined (LINUX)
  108. #include <termios.h>
  109. /* HJL's version of libc is said to need this on the Alpha.
  110.    On the other hand, DEC OSF1 on the Alpha needs ospeed to be a short.  */
  111. extern speed_t ospeed;
  112. #else
  113. extern short ospeed;        /* Output speed (from sg_ospeed) */
  114. #endif
  115. #endif
  116.  
  117. /* Shorthand */
  118. #ifndef NoCMShortHand
  119. #define curY        Wcm.cm_curY
  120. #define curX        Wcm.cm_curX
  121. #define Up        Wcm.cm_up
  122. #define Down        Wcm.cm_down
  123. #define Left        Wcm.cm_left
  124. #define Right        Wcm.cm_right
  125. #define Tab        Wcm.cm_tab
  126. #define BackTab        Wcm.cm_backtab
  127. #define TabWidth    Wcm.cm_tabwidth
  128. #define CR        Wcm.cm_cr
  129. #define Home        Wcm.cm_home
  130. #define LastLine    Wcm.cm_ll
  131. #define AbsPosition    Wcm.cm_abs
  132. #define ColPosition    Wcm.cm_habs
  133. #define RowPosition    Wcm.cm_vabs
  134. #define MultiUp        Wcm.cm_multiup
  135. #define MultiDown    Wcm.cm_multidown
  136. #define MultiLeft    Wcm.cm_multileft
  137. #define MultiRight    Wcm.cm_multiright
  138. #define AutoWrap    Wcm.cm_autowrap
  139. #define MagicWrap    Wcm.cm_magicwrap
  140. #define UseTabs        Wcm.cm_usetabs
  141. #define FrameRows    Wcm.cm_rows
  142. #define FrameCols    Wcm.cm_cols
  143.  
  144. #define UpCost        Wcm.cc_up
  145. #define DownCost    Wcm.cc_down
  146. #define LeftCost    Wcm.cc_left
  147. #define RightCost    Wcm.cc_right
  148. #define HomeCost    Wcm.cc_home
  149. #define CRCost        Wcm.cc_cr
  150. #define LastLineCost    Wcm.cc_ll
  151. #define TabCost        Wcm.cc_tab
  152. #define BackTabCost    Wcm.cc_backtab
  153. #define AbsPositionCost    Wcm.cc_abs
  154. #define ColPositionCost    Wcm.cc_habs
  155. #define RowPositionCost    Wcm.cc_vabs
  156. #define MultiUpCost    Wcm.cc_multiup
  157. #define MultiDownCost    Wcm.cc_multidown
  158. #define MultiLeftCost    Wcm.cc_multileft
  159. #define MultiRightCost    Wcm.cc_multiright
  160. #endif
  161.  
  162. #define cmat(row,col)    (curY = (row), curX = (col))
  163. #define cmplus(n)                    \
  164.   {                            \
  165.     if ((curX += (n)) >= FrameCols && !MagicWrap)    \
  166.       {                            \
  167.     if (Wcm.cm_losewrap) losecursor ();        \
  168.     else if (AutoWrap) curX = 0, curY++;        \
  169.     else curX--;                    \
  170.       }                            \
  171.   }
  172.  
  173. #define losecursor()    (curX = -1, curY = -1)
  174.  
  175. extern int cost;
  176. extern int evalcost ();
  177.  
  178. extern void cmcheckmagic ();
  179. extern int cmputc ();
  180. extern void cmcostinit ();
  181. extern void cmgoto ();
  182. extern void Wcm_clear ();
  183. extern int Wcm_init ();
  184.