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: }