Annotation of 43BSD/contrib/jove/case.c, revision 1.1

1.1     ! root        1: /*************************************************************************
        !             2:  * This program is copyright (C) 1985, 1986 by Jonathan Payne.  It is    *
        !             3:  * provided to you without charge for use only on a licensed Unix        *
        !             4:  * system.  You may copy JOVE provided that this notice is included with *
        !             5:  * the copy.  You may not sell copies of this program or versions        *
        !             6:  * modified for use on microcomputer systems, unless the copies are      *
        !             7:  * included with a Unix system distribution and the source is provided.  *
        !             8:  *************************************************************************/
        !             9: 
        !            10: #include "jove.h"
        !            11: #include "ctype.h"
        !            12: 
        !            13: CapChar()
        !            14: {
        !            15:        register int    num,
        !            16:                        restore = 0;
        !            17:        Bufpos  b;
        !            18: 
        !            19:        DOTsave(&b);
        !            20: 
        !            21:        if (exp < 0) {
        !            22:                restore++;
        !            23:                exp = -exp;
        !            24:                num = exp;
        !            25:                BackChar();     /* Cap previous EXP chars */
        !            26:        } else
        !            27:                num = exp;
        !            28:                
        !            29:        exp = 1;        /* So all the commands are done once */
        !            30: 
        !            31:        while (num--) {
        !            32:                if (upper(&linebuf[curchar])) {
        !            33:                        modify();
        !            34:                        makedirty(curline);
        !            35:                }
        !            36:                if (eolp()) {
        !            37:                        if (curline->l_next == 0)
        !            38:                                break;
        !            39:                        SetLine(curline->l_next);
        !            40:                }
        !            41:                else
        !            42:                        curchar++;
        !            43:        }
        !            44:        if (restore)
        !            45:                SetDot(&b);
        !            46: }
        !            47: 
        !            48: CapWord()
        !            49: {
        !            50:        register int    num,
        !            51:                        restore = 0;
        !            52:        Bufpos  b;
        !            53: 
        !            54:        DOTsave(&b);
        !            55: 
        !            56:        if (exp < 0) {
        !            57:                restore++;
        !            58:                exp = -exp;
        !            59:                num = exp;
        !            60:                BackWord();     /* Cap previous EXP words */
        !            61:        } else
        !            62:                num = exp;
        !            63:                
        !            64:        exp = 1;        /* So all the commands are done once */
        !            65: 
        !            66:        while (num--) {
        !            67:                to_word(1);     /* Go to the beginning of the next word. */
        !            68:                if (eobp())
        !            69:                        break;
        !            70:                if (upper(&linebuf[curchar])) {
        !            71:                        modify();
        !            72:                        makedirty(curline);
        !            73:                }
        !            74:                curchar++;
        !            75:                while (!eolp() && isword(linebuf[curchar])) {
        !            76:                        if (lower(&linebuf[curchar])) {
        !            77:                                modify();
        !            78:                                makedirty(curline);
        !            79:                        }
        !            80:                        curchar++;
        !            81:                }
        !            82:        }
        !            83:        if (restore)
        !            84:                SetDot(&b);
        !            85: }
        !            86: 
        !            87: case_word(up)
        !            88: {
        !            89:        Bufpos  before;
        !            90: 
        !            91:        DOTsave(&before);
        !            92:        ForWord();      /* This'll go backward if negative argument. */
        !            93:        case_reg(before.p_line, before.p_char, curline, curchar, up);
        !            94: }
        !            95: 
        !            96: static
        !            97: upper(c)
        !            98: register char  *c;
        !            99: {
        !           100:        if (islower(*c)) {
        !           101:                *c -= ' ';
        !           102:                return 1;
        !           103:        }
        !           104:        return 0;
        !           105: }
        !           106: 
        !           107: static
        !           108: lower(c)
        !           109: register char  *c;
        !           110: {
        !           111:        if (isupper(*c)) {
        !           112:                *c += ' ';
        !           113:                return 1;
        !           114:        }
        !           115:        return 0;
        !           116: }
        !           117: 
        !           118: case_reg(line1, char1, line2, char2, up)
        !           119: Line   *line1,
        !           120:        *line2;
        !           121: int    char1;
        !           122: {
        !           123:        (void) fixorder(&line1, &char1, &line2, &char2);
        !           124:        DotTo(line1, char1);
        !           125: 
        !           126:        exp = 1;
        !           127:        for (;;) {
        !           128:                if (curline == line2 && curchar == char2)
        !           129:                        break;
        !           130:                if (!eolp())
        !           131:                        if ((up) ? upper(&linebuf[curchar]) : lower(&linebuf[curchar])) {
        !           132:                                makedirty(curline);
        !           133:                                modify();
        !           134:                        }
        !           135:                ForChar();
        !           136:        }
        !           137: }
        !           138: 
        !           139: CasRegLower()
        !           140: {
        !           141:        CaseReg(0);
        !           142: }
        !           143: 
        !           144: CasRegUpper()
        !           145: {
        !           146:        CaseReg(1);
        !           147: }
        !           148: 
        !           149: CaseReg(up)
        !           150: {
        !           151:        register Mark   *mp = CurMark();
        !           152:        Bufpos  savedot;
        !           153: 
        !           154:        DOTsave(&savedot);
        !           155:        case_reg(curline, curchar, mp->m_line, mp->m_char, up);
        !           156:        SetDot(&savedot);
        !           157: }
        !           158: 
        !           159: UppWord()
        !           160: {
        !           161:        case_word(1);
        !           162: }
        !           163: 
        !           164: LowWord()
        !           165: {
        !           166:        case_word(0);
        !           167: }

unix.superglobalmegacorp.com

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