Annotation of coherent/g/usr/bin/vi/move3.c, revision 1.1

1.1     ! root        1: /* move3.c */
        !             2: 
        !             3: /* Author:
        !             4:  *     Steve Kirkendall
        !             5:  *     14407 SW Teal Blvd. #C
        !             6:  *     Beaverton, OR 97005
        !             7:  *     [email protected]
        !             8:  */
        !             9: 
        !            10: 
        !            11: /* This file contains movement functions that perform character searches */
        !            12: 
        !            13: #include "config.h"
        !            14: #include "vi.h"
        !            15: 
        !            16: #ifndef NO_CHARSEARCH
        !            17: static MARK    (*prevfwdfn)(); /* function to search in same direction */
        !            18: static MARK    (*prevrevfn)(); /* function to search in opposite direction */
        !            19: static char    prev_key;       /* sought cvhar from previous [fFtT] */
        !            20: 
        !            21: MARK   m__ch(m, cnt, cmd)
        !            22:        MARK    m;      /* current position */
        !            23:        long    cnt;
        !            24:        int     cmd;    /* command: either ',' or ';' */
        !            25: {
        !            26:        MARK    (*tmp)();
        !            27: 
        !            28:        if (!prevfwdfn)
        !            29:        {
        !            30:                msg("No previous f, F, t, or T command");
        !            31:                return MARK_UNSET;
        !            32:        }
        !            33: 
        !            34:        if (cmd == ',')
        !            35:        {
        !            36:                m =  (*prevrevfn)(m, cnt, prev_key);
        !            37: 
        !            38:                /* Oops! we didn't want to change the prev*fn vars! */
        !            39:                tmp = prevfwdfn;
        !            40:                prevfwdfn = prevrevfn;
        !            41:                prevrevfn = tmp;
        !            42: 
        !            43:                return m;
        !            44:        }
        !            45:        else
        !            46:        {
        !            47:                return (*prevfwdfn)(m, cnt, prev_key);
        !            48:        }
        !            49: }
        !            50: 
        !            51: /* move forward within this line to next occurrence of key */
        !            52: MARK   m_fch(m, cnt, key)
        !            53:        MARK    m;      /* where to search from */
        !            54:        long    cnt;
        !            55:        int     key;    /* what to search for */
        !            56: {
        !            57:        REG char        *text;
        !            58: 
        !            59:        DEFAULT(1);
        !            60: 
        !            61:        prevfwdfn = m_fch;
        !            62:        prevrevfn = m_Fch;
        !            63:        prev_key = key;
        !            64: 
        !            65:        pfetch(markline(m));
        !            66:        text = ptext + markidx(m);
        !            67:        while (cnt-- > 0)
        !            68:        {
        !            69:                do
        !            70:                {
        !            71:                        m++;
        !            72:                        text++;
        !            73:                } while (*text && *text != key);
        !            74:        }
        !            75:        if (!*text)
        !            76:        {
        !            77:                return MARK_UNSET;
        !            78:        }
        !            79:        return m;
        !            80: }
        !            81: 
        !            82: /* move backward within this line to previous occurrence of key */
        !            83: MARK   m_Fch(m, cnt, key)
        !            84:        MARK    m;      /* where to search from */
        !            85:        long    cnt;
        !            86:        int     key;    /* what to search for */
        !            87: {
        !            88:        REG char        *text;
        !            89: 
        !            90:        DEFAULT(1);
        !            91: 
        !            92:        prevfwdfn = m_Fch;
        !            93:        prevrevfn = m_fch;
        !            94:        prev_key = key;
        !            95: 
        !            96:        pfetch(markline(m));
        !            97:        text = ptext + markidx(m);
        !            98:        while (cnt-- > 0)
        !            99:        {
        !           100:                do
        !           101:                {
        !           102:                        m--;
        !           103:                        text--;
        !           104:                } while (text >= ptext && *text != key);
        !           105:        }
        !           106:        if (text < ptext)
        !           107:        {
        !           108:                return MARK_UNSET;
        !           109:        }
        !           110:        return m;
        !           111: }
        !           112: 
        !           113: /* move forward within this line almost to next occurrence of key */
        !           114: MARK   m_tch(m, cnt, key)
        !           115:        MARK    m;      /* where to search from */
        !           116:        long    cnt;
        !           117:        int     key;    /* what to search for */
        !           118: {
        !           119:        /* skip the adjacent char */
        !           120:        pfetch(markline(m));
        !           121:        if (plen <= markidx(m))
        !           122:        {
        !           123:                return MARK_UNSET;
        !           124:        }
        !           125:        m++;
        !           126: 
        !           127:        m = m_fch(m, cnt, key);
        !           128:        if (m == MARK_UNSET)
        !           129:        {
        !           130:                return MARK_UNSET;
        !           131:        }
        !           132: 
        !           133:        prevfwdfn = m_tch;
        !           134:        prevrevfn = m_Tch;
        !           135: 
        !           136:        return m - 1;
        !           137: }
        !           138: 
        !           139: /* move backward within this line almost to previous occurrence of key */
        !           140: MARK   m_Tch(m, cnt, key)
        !           141:        MARK    m;      /* where to search from */
        !           142:        long    cnt;
        !           143:        int     key;    /* what to search for */
        !           144: {
        !           145:        /* skip the adjacent char */
        !           146:        if (markidx(m) == 0)
        !           147:        {
        !           148:                return MARK_UNSET;
        !           149:        }
        !           150:        m--;
        !           151: 
        !           152:        m = m_Fch(m, cnt, key);
        !           153:        if (m == MARK_UNSET)
        !           154:        {
        !           155:                return MARK_UNSET;
        !           156:        }
        !           157: 
        !           158:        prevfwdfn = m_Tch;
        !           159:        prevrevfn = m_tch;
        !           160: 
        !           161:        return m + 1;
        !           162: }
        !           163: #endif

unix.superglobalmegacorp.com

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