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

1.18    ! kjell       1: /*     $OpenBSD: modes.c,v 1.17 2008/06/11 23:23:55 kjell Exp $        */
1.11      kjell       2:
                      3: /* This file is in the public domain. */
1.4       niklas      4:
1.1       deraadt     5: /*
1.5       mickey      6:  * Commands to toggle modes.   Without an argument, these functions will
                      7:  * toggle the given mode.  A negative or zero argument will turn the mode
1.3       millert     8:  * off.  A positive argument will turn the mode on.
1.1       deraadt     9:  */
                     10:
                     11: #include "def.h"
                     12: #include "kbd.h"
                     13:
1.17      kjell      14: int    changemode(int, int, char *);
1.3       millert    15:
                     16: int     defb_nmodes = 0;
1.13      deraadt    17: struct maps_s  *defb_modes[PBMODES] = { &fundamental_mode };
1.3       millert    18: int     defb_flag = 0;
1.2       millert    19:
1.17      kjell      20: int
1.8       vincent    21: changemode(int f, int n, char *mode)
1.2       millert    22: {
1.3       millert    23:        int      i;
1.13      deraadt    24:        struct maps_s   *m;
1.2       millert    25:
                     26:        if ((m = name_mode(mode)) == NULL) {
                     27:                ewprintf("Can't find mode %s", mode);
1.10      db         28:                return (FALSE);
1.2       millert    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 */
1.10      db         42:                                return (TRUE);
1.2       millert    43:                if (curbp->b_nmodes >= PBMODES - 1) {
                     44:                        ewprintf("Too many modes");
1.10      db         45:                        return (FALSE);
1.2       millert    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)
1.10      db         53:                        return (TRUE);  /* mode wasn't set */
1.2       millert    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);
1.10      db         59:        return (TRUE);
1.1       deraadt    60: }
                     61:
1.3       millert    62: int
1.8       vincent    63: indentmode(int f, int n)
1.1       deraadt    64: {
1.10      db         65:        return (changemode(f, n, "indent"));
1.1       deraadt    66: }
                     67:
1.3       millert    68: int
1.8       vincent    69: fillmode(int f, int n)
1.1       deraadt    70: {
1.10      db         71:        return (changemode(f, n, "fill"));
1.1       deraadt    72: }
                     73:
1.3       millert    74: #ifdef NOTAB
                     75: int
1.8       vincent    76: notabmode(int f, int n)
1.1       deraadt    77: {
1.2       millert    78:        if (changemode(f, n, "notab") == FALSE)
1.10      db         79:                return (FALSE);
1.2       millert    80:        if (f & FFARG) {
                     81:                if (n <= 0)
                     82:                        curbp->b_flag &= ~BFNOTAB;
                     83:                else
                     84:                        curbp->b_flag |= BFNOTAB;
                     85:        } else
                     86:                curbp->b_flag ^= BFNOTAB;
1.10      db         87:        return (TRUE);
1.1       deraadt    88: }
1.3       millert    89: #endif /* NOTAB */
1.1       deraadt    90:
1.3       millert    91: int
1.15      kjell      92: overwrite_mode(int f, int n)
1.1       deraadt    93: {
1.2       millert    94:        if (changemode(f, n, "overwrite") == FALSE)
1.10      db         95:                return (FALSE);
1.2       millert    96:        if (f & FFARG) {
                     97:                if (n <= 0)
                     98:                        curbp->b_flag &= ~BFOVERWRITE;
                     99:                else
                    100:                        curbp->b_flag |= BFOVERWRITE;
                    101:        } else
                    102:                curbp->b_flag ^= BFOVERWRITE;
1.10      db        103:        return (TRUE);
1.1       deraadt   104: }
                    105:
1.3       millert   106: int
1.8       vincent   107: set_default_mode(int f, int n)
1.1       deraadt   108: {
1.3       millert   109:        int      i;
1.13      deraadt   110:        struct maps_s   *m;
1.16      kjell     111:        char     modebuf[32], *bufp;
1.2       millert   112:
1.16      kjell     113:        if ((bufp = eread("Set Default Mode: ", modebuf, sizeof(modebuf),
1.12      kjell     114:            EFNEW)) == NULL)
1.10      db        115:                return (ABORT);
1.9       vincent   116:        else if (bufp[0] == '\0')
1.10      db        117:                return (FALSE);
1.16      kjell     118:        if ((m = name_mode(modebuf)) == NULL) {
                    119:                ewprintf("can't find mode %s", modebuf);
1.10      db        120:                return (FALSE);
1.2       millert   121:        }
                    122:        if (!(f & FFARG)) {
                    123:                for (i = 0; i <= defb_nmodes; i++)
                    124:                        if (defb_modes[i] == m) {
1.3       millert   125:                                /* mode already set */
                    126:                                n = 0;
1.2       millert   127:                                break;
                    128:                        }
                    129:        }
                    130:        if (n > 0) {
                    131:                for (i = 0; i <= defb_nmodes; i++)
                    132:                        if (defb_modes[i] == m)
1.3       millert   133:                                /* mode already set */
1.10      db        134:                                return (TRUE);
1.2       millert   135:                if (defb_nmodes >= PBMODES - 1) {
                    136:                        ewprintf("Too many modes");
1.10      db        137:                        return (FALSE);
1.2       millert   138:                }
                    139:                defb_modes[++defb_nmodes] = m;
                    140:        } else {
                    141:                /* fundamental is defb_modes[0] and can't be unset */
1.3       millert   142:                for (i = 1; i <= defb_nmodes && m != defb_modes[i]; i++);
1.2       millert   143:                if (i > defb_nmodes)
1.3       millert   144:                        /* mode was not set */
1.10      db        145:                        return (TRUE);
1.2       millert   146:                for (; i < defb_nmodes; i++)
                    147:                        defb_modes[i] = defb_modes[i + 1];
                    148:                defb_nmodes--;
                    149:        }
1.16      kjell     150:        if (strcmp(modebuf, "overwrite") == 0) {
1.5       mickey    151:                if (n <= 0)
1.2       millert   152:                        defb_flag &= ~BFOVERWRITE;
1.5       mickey    153:                else
1.2       millert   154:                        defb_flag |= BFOVERWRITE;
1.3       millert   155:        }
1.1       deraadt   156: #ifdef NOTAB
1.16      kjell     157:        if (strcmp(modebuf, "notab") == 0) {
1.2       millert   158:                if (n <= 0)
                    159:                        defb_flag &= ~BFNOTAB;
                    160:                else
                    161:                        defb_flag |= BFNOTAB;
1.14      kjell     162:        }
1.3       millert   163: #endif /* NOTAB */
1.10      db        164:        return (TRUE);
1.1       deraadt   165: }