Annotation of 43BSDReno/contrib/jove/case.c, revision 1.1.1.1

1.1       root        1: /***************************************************************************
                      2:  * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne.  JOVE *
                      3:  * is provided to you without charge, and with no warranty.  You may give  *
                      4:  * away copies of JOVE, including sources, provided that this notice is    *
                      5:  * included in all the files.                                              *
                      6:  ***************************************************************************/
                      7: 
                      8: #include "jove.h"
                      9: #include "disp.h"
                     10: #include "ctype.h"
                     11: 
                     12: private        int
                     13: # if !(defined(IBMPC) || defined(MAC))
                     14:        lower proto((char *)),
                     15: # endif
                     16:        upper proto((char *));
                     17: 
                     18: private void
                     19:        CaseReg proto((int up)),
                     20:        case_reg proto((struct line *line1,int char1,struct line *line2,int char2,int up)),
                     21:        case_word proto((int up));
                     22: 
                     23: void
                     24: CapChar()
                     25: {
                     26:        register int    num,
                     27:                        restore = NO;
                     28:        Bufpos  b;
                     29: 
                     30:        DOTsave(&b);
                     31: 
                     32:        num = arg_value();
                     33:        if (num < 0) {
                     34:                restore = YES;
                     35:                num = -num;
                     36:                b_char(num);    /* Cap previous EXP chars */
                     37:        }
                     38:        while (num--) {
                     39:                if (upper(&linebuf[curchar])) {
                     40:                        modify();
                     41:                        makedirty(curline);
                     42:                }
                     43:                if (eolp()) {
                     44:                        if (curline->l_next == 0)
                     45:                                break;
                     46:                        SetLine(curline->l_next);
                     47:                } else
                     48:                        curchar += 1;
                     49:        }
                     50:        if (restore)
                     51:                SetDot(&b);
                     52: }
                     53: 
                     54: void
                     55: CapWord()
                     56: {
                     57:        register int    num,
                     58:                        restore = NO;
                     59:        Bufpos  b;
                     60: 
                     61:        DOTsave(&b);
                     62:        num = arg_value();
                     63:        if (num < 0) {
                     64:                restore = YES;
                     65:                num = -num;
                     66:                b_word(num);            /* Cap previous EXP words */
                     67:        }
                     68:        while (num--) {
                     69:                to_word(1);     /* Go to the beginning of the next word. */
                     70:                if (eobp())
                     71:                        break;
                     72:                if (upper(&linebuf[curchar])) {
                     73:                        modify();
                     74:                        makedirty(curline);
                     75:                }
                     76:                curchar += 1;
                     77:                while (!eolp() && isword(linebuf[curchar])) {
                     78:                        if (lower(&linebuf[curchar])) {
                     79:                                modify();
                     80:                                makedirty(curline);
                     81:                        }
                     82:                        curchar += 1;
                     83:                }
                     84:        }
                     85:        if (restore)
                     86:                SetDot(&b);
                     87: }
                     88: 
                     89: private void
                     90: case_word(up)
                     91: int    up;
                     92: {
                     93:        Bufpos  before;
                     94: 
                     95:        DOTsave(&before);
                     96:        ForWord();      /* this'll go backward if negative argument */
                     97:        case_reg(before.p_line, before.p_char, curline, curchar, up);
                     98: }
                     99: 
                    100: private int
                    101: upper(c)
                    102: register char  *c;
                    103: {
                    104:        if (islower(*c)) {
                    105: #if !defined(ASCII)                    /* check for IBM extended character set */
                    106:                if (*c <= 127)
                    107: #endif /* ASCII */
                    108:                *c -= ' ';
                    109: #if defined(IBMPC)                     /* ... and change Umlaute       */
                    110:                else
                    111:                   switch (*c) {
                    112:                     case 129: *c = 154; break;         /* ue */
                    113:                     case 132: *c = 142; break;         /* ae */
                    114:                     case 148: *c = 153; break;         /* oe */
                    115:                   }
                    116: #endif /* IBMPC */
                    117: #if defined(MAC)
                    118:                else *c = CaseEquiv[*c];
                    119: #endif
                    120:                return 1;
                    121:        }
                    122:        return 0;
                    123: }
                    124: 
                    125: #if !(defined(IBMPC) || defined(MAC))
                    126: private
                    127: #endif
                    128: int
                    129: lower(c)
                    130: char   *c;
                    131: {
                    132:        if (isupper(*c)) {
                    133: #if !defined(ASCII)
                    134:                if (*c <= 127)
                    135: #endif /* ASCII */
                    136:                *c += ' ';
                    137: #if defined(IBMPC)
                    138:                else
                    139:                   switch (*c) {
                    140:                     case 142: *c = 132; break;         /* Ae */
                    141:                     case 153: *c = 148; break;         /* Oe */
                    142:                     case 154: *c = 129; break;         /* Ue */
                    143:                   }
                    144: #endif /* IBMPC */
                    145: #if defined(MAC)
                    146:                else {
                    147:                        int n;
                    148: 
                    149:                        for(n = 128; n < 256; n++) {
                    150:                                if((CaseEquiv[n] == *c) && islower(n)) {
                    151:                                        *c = n;
                    152:                                        break;
                    153:                                }
                    154:                        }
                    155:                        if(n > 255) return(0);
                    156:                }
                    157: #endif /* MAC */
                    158:                return 1;
                    159:        }
                    160:        return 0;
                    161: }
                    162: 
                    163: private void
                    164: case_reg(line1, char1, line2, char2, up)       
                    165: Line   *line1,
                    166:        *line2;
                    167: int    char1,
                    168:        char2,
                    169:        up;
                    170: {
                    171:        (void) fixorder(&line1, &char1, &line2, &char2);
                    172:        DotTo(line1, char1);
                    173: 
                    174:        for (;;) {
                    175:                if (curline == line2 && curchar == char2)
                    176:                        break;
                    177:                if (!eolp())
                    178:                        if ((up) ? upper(&linebuf[curchar]) : lower(&linebuf[curchar])) {
                    179:                                makedirty(curline);
                    180:                                modify();
                    181:                        }
                    182:                f_char(1);
                    183:        }
                    184: }
                    185: 
                    186: void
                    187: CasRegLower()
                    188: {
                    189:        CaseReg(0);
                    190: }
                    191: 
                    192: void
                    193: CasRegUpper()
                    194: {
                    195:        CaseReg(1);
                    196: }
                    197: 
                    198: private void
                    199: CaseReg(up)
                    200: int    up;
                    201: {
                    202:        register Mark   *mp = CurMark();
                    203:        Bufpos  savedot;
                    204: 
                    205:        DOTsave(&savedot);
                    206:        case_reg(curline, curchar, mp->m_line, mp->m_char, up);
                    207:        SetDot(&savedot);
                    208: }
                    209: 
                    210: void
                    211: UppWord()
                    212: {
                    213:        case_word(1);
                    214: }
                    215: 
                    216: void
                    217: LowWord()
                    218: {
                    219:        case_word(0);
                    220: }

unix.superglobalmegacorp.com

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