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

unix.superglobalmegacorp.com

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