root/src/cm.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


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

/* [<][>][^][v][top][bottom][index][help] */