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 starting file position of a line displayed on the screen.
21: * The line may be specified as a line number relative to the top
22: * of the screen, but is usually one of these special cases:
23: * the top (first) line on the screen
24: * the second line on the screen
25: * the bottom line on the screen
26: * the line after the bottom line on the screen
27: */
28: public POSITION
29: position(where)
30: int where;
31: {
32: switch (where)
33: {
34: case BOTTOM:
35: where = sc_height - 2;
36: break;
37: case BOTTOM_PLUS_ONE:
38: where = sc_height - 1;
39: break;
40: }
41: return (table[where]);
42: }
43:
44: /*
45: * Add a new file position to the bottom of the position table.
46: */
47: public void
48: add_forw_pos(pos)
49: POSITION pos;
50: {
51: register int i;
52:
53: /*
54: * Scroll the position table up.
55: */
56: for (i = 1; i < sc_height; i++)
57: table[i-1] = table[i];
58: table[sc_height - 1] = pos;
59: }
60:
61: /*
62: * Add a new file position to the top of the position table.
63: */
64: public void
65: add_back_pos(pos)
66: POSITION pos;
67: {
68: register int i;
69:
70: /*
71: * Scroll the position table down.
72: */
73: for (i = sc_height - 1; i > 0; i--)
74: table[i] = table[i-1];
75: table[0] = pos;
76: }
77:
78: /*
79: * Initialize the position table, done whenever we clear the screen.
80: */
81: public void
82: pos_clear()
83: {
84: register int i;
85:
86: for (i = 0; i < sc_height; i++)
87: table[i] = NULL_POSITION;
88: }
89:
90: /*
91: * See if the byte at a specified position is currently on the screen.
92: * Check the position table to see if the position falls within its range.
93: * Return the position table entry if found, -1 if not.
94: */
95: public int
96: onscreen(pos)
97: POSITION pos;
98: {
99: register int i;
100:
101: if (pos < table[0])
102: return (-1);
103: for (i = 1; i < sc_height; i++)
104: if (pos < table[i])
105: return (i-1);
106: return (-1);
107: }
Defined functions
position
defined in line
28; used 20 times
- in /usr/src/local/less/command.c line
159,
198
- in /usr/src/local/less/funcs.h line
30
- in /usr/src/local/less/prim.c line
44,
92,
126,
215,
236,
270,
397,
408,
418,
479,
485,
608,
623,
630,
637
- in /usr/src/local/less/prompt.c line
74,
100
Defined variables
table
defined in line
15; used 10 times
Defined macros
NPOS
defined in line
14; used 1 times