Annotation of 43BSD/contrib/mh/miscellany/less/position.c, revision 1.1.1.1

1.1       root        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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.