Logo Search packages:      
Sourcecode: ne version File versions  Download package


/* Optimal cursor motion definitions.

      Copyright (C) 1985, 1989 Free Software Foundation, Inc.
      Based primarily on public domain code written by Chris Torek
      Originally part of GNU Emacs.
      Vastly edited and modified for use within ne.

      This file is part of ne, the nice editor.

      This program is free software; you can redistribute it and/or modify it
      under the terms of the GNU General Public License as published by the Free
      Software Foundation; either version 2, or (at your option) any later
      This program is distributed in the hope that it will be useful, but WITHOUT
      ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
      FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
      more details.
      You should have received a copy of the GNU Library General Public License
      along with the GNU C Library; see the file COPYING.LIB.  If not, write to
      the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
      02111-1307, USA.  */

/* This structure holds everything needed to do cursor motion. */

extern struct cm {

      /* Cursor position.  -1 in *both* variables means the cursor
            position is unknown, in order to force absolute cursor motion. */

      int   cm_curY,    /* current row */
                  cm_curX;    /* current column */

      /* Capabilities from terminfo */

      char  *cm_up,           /* up (up) */
                  *cm_down,   /* down (do) */
                  *cm_left,   /* left (bs) */
                  *cm_right,  /* right (nd) */
                  *cm_home,   /* home (ho) */
                  *cm_cr,           /* carriage return (cr) */
                  *cm_ll,           /* last line (ll) */
                  *cm_tab,          /* tab (ta) */
                  *cm_backtab,            /* backtab (bt) */
                  *cm_abs,    /* absolute (cm) */
                  *cm_habs,   /* horizontal absolute (ch) */
                  *cm_vabs,   /* vertical absolute (cv) */
                  *cm_multiup,            /* multiple up (UP) */
                  *cm_multidown,          /* multiple down (DO) */
                  *cm_multileft,          /* multiple left (LE) */
                  *cm_multiright;   /* multiple right (RI) */

      int   cm_cols,    /* Number of cols on screen (co) */
                  cm_rows,    /* Number of rows on screen (li) */
                  cm_tabwidth;      /* tab width (it) */

      unsigned int
                  cm_autowrap:1,          /* autowrap flag (am) */
                  cm_magicwrap:1,   /* vt100s: cursor stays in last col but
                                                            will wrap if next char is printing (xn) */
                  cm_usetabs:1,           /* if set, use tabs */
                  cm_autolf:1,            /* \r performs a \r\n (rn) */
                  cm_losewrap:1;    /* if reach right margin, forget cursor location */

      /* Costs */

      int   cc_up,            /* cost for up */
                  cc_down,    /* etc */
                  cc_abs,           /* abs costs are actually min costs */
} Wcm;

/* Shorthands */

#define curY            Wcm.cm_curY
#define curX            Wcm.cm_curX
#define Up        Wcm.cm_up
#define Down            Wcm.cm_down
#define Left            Wcm.cm_left
#define Right           Wcm.cm_right
#define Tab       Wcm.cm_tab
#define BackTab         Wcm.cm_backtab
#define TabWidth  Wcm.cm_tabwidth
#define CR        Wcm.cm_cr
#define Home            Wcm.cm_home
#define LastLine  Wcm.cm_ll
#define AbsPosition     Wcm.cm_abs
#define ColPosition     Wcm.cm_habs
#define RowPosition     Wcm.cm_vabs
#define MultiUp         Wcm.cm_multiup
#define MultiDown Wcm.cm_multidown
#define MultiLeft Wcm.cm_multileft
#define MultiRight      Wcm.cm_multiright
#define AutoWrap  Wcm.cm_autowrap
#define MagicWrap Wcm.cm_magicwrap
#define UseTabs         Wcm.cm_usetabs
#define ScreenRows      Wcm.cm_rows
#define ScreenCols      Wcm.cm_cols

#define UpCost          Wcm.cc_up
#define DownCost  Wcm.cc_down
#define LeftCost  Wcm.cc_left
#define RightCost Wcm.cc_right
#define HomeCost  Wcm.cc_home
#define CRCost          Wcm.cc_cr
#define LastLineCost    Wcm.cc_ll
#define TabCost         Wcm.cc_tab
#define BackTabCost     Wcm.cc_backtab
#define AbsPositionCost Wcm.cc_abs
#define ColPositionCost Wcm.cc_habs
#define RowPositionCost Wcm.cc_vabs
#define MultiUpCost     Wcm.cc_multiup
#define MultiDownCost   Wcm.cc_multidown
#define MultiLeftCost   Wcm.cc_multileft
#define MultiRightCost  Wcm.cc_multiright

#define     cmat(row,col)     (curY = (row), curX = (col))
#define cmplus(n)                         \
  {                                       \
    if ((curX += (n)) >= ScreenCols && !MagicWrap)    \
      {                                         \
      if (Wcm.cm_losewrap) losecursor ();       \
      else if (AutoWrap) curX = 0, curY++;            \
      else curX--;                              \
      }                                         \

#define losecursor()    (curX = -1, curY = -1)

int cmputc(int);
int Wcm_init (void);
void cmcostinit (void);
void cmgoto (int row, int col);

#include "debug.h"

Generated by  Doxygen 1.6.0   Back to index