1: /*
   2:  * Routines dealing with the "position" table.
   3:  * This is a table which tells the position (in the input file) of the
   4:  * first char on each currently displayed line.
   5:  *
   6:  * {{ The position table is scrolled by moving all the entries.
   7:  *    Would be better to have a circular table
   8:  *    and just change a couple of pointers. }}
   9:  */
  10: 
  11: #include "less.h"
  12: #include "position.h"
  13: 
  14: #define NPOS    100     /* {{ sc_height must be less than NPOS }} */
  15: static POSITION table[NPOS];    /* The position table */
  16: 
  17: extern int sc_width, sc_height;
  18: 
  19: /*
  20:  * Return the position of one of:
  21:  *	the top (first) line on the screen
  22:  *	the second line on the screen
  23:  *	the bottom line on the screen
  24:  *	the line after the bottom line on the screen
  25:  */
  26:     public POSITION
  27: position(where)
  28:     int where;
  29: {
  30:     switch (where)
  31:     {
  32:     case BOTTOM:
  33:         where = sc_height - 2;
  34:         break;
  35:     case BOTTOM_PLUS_ONE:
  36:         where = sc_height - 1;
  37:         break;
  38:     }
  39:     return (table[where]);
  40: }
  41: 
  42: /*
  43:  * Add a new file position to the bottom of the position table.
  44:  */
  45:     public void
  46: add_forw_pos(pos)
  47:     POSITION pos;
  48: {
  49:     register int i;
  50: 
  51:     /*
  52: 	 * Scroll the position table up.
  53: 	 */
  54:     for (i = 1;  i < sc_height;  i++)
  55:         table[i-1] = table[i];
  56:     table[sc_height - 1] = pos;
  57: }
  58: 
  59: /*
  60:  * Add a new file position to the top of the position table.
  61:  */
  62:     public void
  63: add_back_pos(pos)
  64:     POSITION pos;
  65: {
  66:     register int i;
  67: 
  68:     /*
  69: 	 * Scroll the position table down.
  70: 	 */
  71:     for (i = sc_height - 1;  i > 0;  i--)
  72:         table[i] = table[i-1];
  73:     table[0] = pos;
  74: }
  75: 
  76: /*
  77:  * Initialize the position table, done whenever we clear the screen.
  78:  */
  79:     public void
  80: pos_clear()
  81: {
  82:     register int i;
  83: 
  84:     for (i = 0;  i < sc_height;  i++)
  85:         table[i] = NULL_POSITION;
  86: }
  87: 
  88: /*
  89:  * See if the byte at a specified position is currently on the screen.
  90:  * Check the position table to see if the position falls within its range.
  91:  * Return the position table entry if found, -1 if not.
  92:  */
  93:     public int
  94: onscreen(pos)
  95:     POSITION pos;
  96: {
  97:     register int i;
  98: 
  99:     if (pos < table[0])
 100:         return (-1);
 101:     for (i = 1;  i < sc_height;  i++)
 102:         if (pos < table[i])
 103:             return (i-1);
 104:     return (-1);
 105: }

Defined functions

Defined variables

public defined in line 93; never used
table defined in line 15; used 10 times

Defined macros

NPOS defined in line 14; used 1 times
  • in line 15
Last modified: 1986-04-21
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1079
Valid CSS Valid XHTML 1.0 Strict