[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.7

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