[BACK]Return to modes.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / mg

Annotation of src/usr.bin/mg/modes.c, Revision 1.2

1.1       deraadt     1: /*
                      2:  * Commands to toggle modes. Without an argument, toggle mode.
                      3:  * Negitive or zero argument, mode off.         Positive argument, mode on.
                      4:  */
                      5:
                      6: #include "def.h"
                      7: #include "kbd.h"
                      8:
1.2     ! millert     9: int             defb_nmodes = 0;
        !            10: MAPS           *defb_modes[PBMODES] = {&map_table[0]};
        !            11: int             defb_flag = 0;
        !            12:
        !            13: static int
        !            14: changemode(f, n, mode)
        !            15:        int             f, n;
        !            16:        char           *mode;
        !            17: {
        !            18:        register int    i;
        !            19:        MAPS           *m;
        !            20:
        !            21:        if ((m = name_mode(mode)) == NULL) {
        !            22:                ewprintf("Can't find mode %s", mode);
        !            23:                return FALSE;
        !            24:        }
        !            25:        if (!(f & FFARG)) {
        !            26:                for (i = 0; i <= curbp->b_nmodes; i++)
        !            27:                        if (curbp->b_modes[i] == m) {
        !            28:                                n = 0;  /* mode already set */
        !            29:                                break;
        !            30:                        }
        !            31:        }
        !            32:        if (n > 0) {
        !            33:                for (i = 0; i <= curbp->b_nmodes; i++)
        !            34:                        if (curbp->b_modes[i] == m)
        !            35:                                return TRUE;    /* mode already set */
        !            36:                if (curbp->b_nmodes >= PBMODES - 1) {
        !            37:                        ewprintf("Too many modes");
        !            38:                        return FALSE;
        !            39:                }
        !            40:                curbp->b_modes[++(curbp->b_nmodes)] = m;
        !            41:        } else {
        !            42:                /* fundamental is b_modes[0] and can't be unset */
        !            43:                for (i = 1; i <= curbp->b_nmodes && m != curbp->b_modes[i]; i++) {
        !            44:                }
        !            45:                if (i > curbp->b_nmodes)
        !            46:                        return TRUE;    /* mode wasn't set */
        !            47:                for (; i < curbp->b_nmodes; i++)
        !            48:                        curbp->b_modes[i] = curbp->b_modes[i + 1];
        !            49:                curbp->b_nmodes--;
        !            50:        }
        !            51:        upmodes(curbp);
        !            52:        return TRUE;
1.1       deraadt    53: }
                     54:
                     55: indentmode(f, n)
                     56: {
1.2     ! millert    57:        return changemode(f, n, "indent");
1.1       deraadt    58: }
                     59:
                     60: fillmode(f, n)
                     61: {
1.2     ! millert    62:        return changemode(f, n, "fill");
1.1       deraadt    63: }
                     64:
                     65: /*
                     66:  * Fake the GNU "blink-matching-paren" variable.
                     67:  */
                     68: blinkparen(f, n)
                     69: {
1.2     ! millert    70:        return changemode(f, n, "blink");
1.1       deraadt    71: }
                     72:
                     73: #ifdef NOTAB
                     74: notabmode(f, n)
                     75: {
1.2     ! millert    76:        if (changemode(f, n, "notab") == FALSE)
        !            77:                return FALSE;
        !            78:        if (f & FFARG) {
        !            79:                if (n <= 0)
        !            80:                        curbp->b_flag &= ~BFNOTAB;
        !            81:                else
        !            82:                        curbp->b_flag |= BFNOTAB;
        !            83:        } else
        !            84:                curbp->b_flag ^= BFNOTAB;
        !            85:        return TRUE;
1.1       deraadt    86: }
                     87: #endif
                     88:
                     89: overwrite(f, n)
1.2     ! millert    90:        int             f, n;
1.1       deraadt    91: {
1.2     ! millert    92:        if (changemode(f, n, "overwrite") == FALSE)
        !            93:                return FALSE;
        !            94:        if (f & FFARG) {
        !            95:                if (n <= 0)
        !            96:                        curbp->b_flag &= ~BFOVERWRITE;
        !            97:                else
        !            98:                        curbp->b_flag |= BFOVERWRITE;
        !            99:        } else
        !           100:                curbp->b_flag ^= BFOVERWRITE;
        !           101:        return TRUE;
1.1       deraadt   102: }
                    103:
                    104: set_default_mode(f, n)
1.2     ! millert   105:        int             f, n;
1.1       deraadt   106: {
1.2     ! millert   107:        register int    i;
        !           108:        register MAPS  *m;
        !           109:        char            mode[32];
        !           110:
        !           111:        if (eread("Set Default Mode: ", mode, 32, EFNEW) != TRUE)
        !           112:                return ABORT;
        !           113:        if ((m = name_mode(mode)) == NULL) {
        !           114:                ewprintf("can't find mode %s", mode);
        !           115:                return FALSE;
        !           116:        }
        !           117:        if (!(f & FFARG)) {
        !           118:                for (i = 0; i <= defb_nmodes; i++)
        !           119:                        if (defb_modes[i] == m) {
        !           120:                                n = 0;  /* mode already set */
        !           121:                                break;
        !           122:                        }
        !           123:        }
        !           124:        if (n > 0) {
        !           125:                for (i = 0; i <= defb_nmodes; i++)
        !           126:                        if (defb_modes[i] == m)
        !           127:                                return TRUE;    /* mode already set */
        !           128:                if (defb_nmodes >= PBMODES - 1) {
        !           129:                        ewprintf("Too many modes");
        !           130:                        return FALSE;
        !           131:                }
        !           132:                defb_modes[++defb_nmodes] = m;
        !           133:        } else {
        !           134:                /* fundamental is defb_modes[0] and can't be unset */
        !           135:                for (i = 1; i <= defb_nmodes && m != defb_modes[i]; i++) {
        !           136:                }
        !           137:                if (i > defb_nmodes)
        !           138:                        return TRUE;    /* mode wasn't set */
        !           139:                for (; i < defb_nmodes; i++)
        !           140:                        defb_modes[i] = defb_modes[i + 1];
        !           141:                defb_nmodes--;
        !           142:        }
        !           143:        if (strcmp(mode, "overwrite") == 0)
        !           144:                if (n <= 0)
        !           145:                        defb_flag &= ~BFOVERWRITE;
        !           146:                else
        !           147:                        defb_flag |= BFOVERWRITE;
1.1       deraadt   148: #ifdef NOTAB
1.2     ! millert   149:        if (strcmp(mode, "notab") == 0)
        !           150:                if (n <= 0)
        !           151:                        defb_flag &= ~BFNOTAB;
        !           152:                else
        !           153:                        defb_flag |= BFNOTAB;
1.1       deraadt   154: #endif
1.2     ! millert   155:        return TRUE;
1.1       deraadt   156: }