diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 2000-02-25 19:08:53 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 2000-02-25 19:08:53 +0000 |
commit | 998d769a0cf8bef7d4ca0d26945c151a23b542ec (patch) | |
tree | fe53a083eaa06a2bf7631453e18a161a86ad9d62 /usr.bin/mg/modes.c | |
parent | b0226ecd4460819556afd27fd575d64421fd0f68 (diff) |
initial import of mg2a
Diffstat (limited to 'usr.bin/mg/modes.c')
-rw-r--r-- | usr.bin/mg/modes.c | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/usr.bin/mg/modes.c b/usr.bin/mg/modes.c new file mode 100644 index 00000000000..49144f2fd6f --- /dev/null +++ b/usr.bin/mg/modes.c @@ -0,0 +1,138 @@ +/* + * Commands to toggle modes. Without an argument, toggle mode. + * Negitive or zero argument, mode off. Positive argument, mode on. + */ + +#include "def.h" +#include "kbd.h" + +int defb_nmodes = 0; +MAPS *defb_modes[PBMODES] = {&map_table[0]}; +int defb_flag = 0; + +static int changemode(f, n, mode) +int f, n; +char *mode; +{ + register int i; + MAPS *m; + VOID upmodes(); + + if((m = name_mode(mode)) == NULL) { + ewprintf("Can't find mode %s", mode); + return FALSE; + } + if(!(f & FFARG)) { + for(i=0; i <= curbp->b_nmodes; i++) + if(curbp->b_modes[i] == m) { + n = 0; /* mode already set */ + break; + } + } + if(n > 0) { + for(i=0; i <= curbp->b_nmodes; i++) + if(curbp->b_modes[i] == m) return TRUE; /* mode already set */ + if(curbp->b_nmodes >= PBMODES-1) { + ewprintf("Too many modes"); + return FALSE; + } + curbp->b_modes[++(curbp->b_nmodes)] = m; + } else { + /* fundamental is b_modes[0] and can't be unset */ + for(i=1; i <= curbp->b_nmodes && m != curbp->b_modes[i]; i++) {} + if(i > curbp->b_nmodes) return TRUE; /* mode wasn't set */ + for(; i < curbp->b_nmodes; i++) + curbp->b_modes[i] = curbp->b_modes[i+1]; + curbp->b_nmodes--; + } + upmodes(curbp); + return TRUE; +} + +indentmode(f, n) +{ + return changemode(f, n, "indent"); +} + +fillmode(f, n) +{ + return changemode(f, n, "fill"); +} + +/* + * Fake the GNU "blink-matching-paren" variable. + */ +blinkparen(f, n) +{ + return changemode(f, n, "blink"); +} + +#ifdef NOTAB +notabmode(f, n) +{ + if(changemode(f, n, "notab") == FALSE) return FALSE; + if(f & FFARG) { + if(n <= 0) curbp->b_flag &= ~BFNOTAB; + else curbp->b_flag |= BFNOTAB; + } else curbp->b_flag ^= BFNOTAB; + return TRUE; +} +#endif + +overwrite(f, n) +int f, n; +{ + if(changemode(f, n, "overwrite") == FALSE) return FALSE; + if(f & FFARG) { + if(n <= 0) curbp->b_flag &= ~BFOVERWRITE; + else curbp->b_flag |= BFOVERWRITE; + } else curbp->b_flag ^= BFOVERWRITE; + return TRUE; +} + +set_default_mode(f, n) +int f, n; +{ + register int i; + register MAPS *m; + char mode[32]; + + if(eread("Set Default Mode: ", mode, 32, EFNEW) != TRUE) + return ABORT; + if((m = name_mode(mode)) == NULL) { + ewprintf("can't find mode %s", mode); + return FALSE; + } + if(!(f & FFARG)) { + for(i=0; i <= defb_nmodes; i++) + if(defb_modes[i] == m) { + n = 0; /* mode already set */ + break; + } + } + if(n > 0) { + for(i=0; i <= defb_nmodes; i++) + if(defb_modes[i] == m) return TRUE; /* mode already set */ + if(defb_nmodes >= PBMODES-1) { + ewprintf("Too many modes"); + return FALSE; + } + defb_modes[++defb_nmodes] = m; + } else { + /* fundamental is defb_modes[0] and can't be unset */ + for(i=1; i <= defb_nmodes && m != defb_modes[i]; i++) {} + if(i > defb_nmodes) return TRUE; /* mode wasn't set */ + for(; i < defb_nmodes; i++) + defb_modes[i] = defb_modes[i+1]; + defb_nmodes--; + } + if(strcmp(mode, "overwrite")==0) + if(n<=0) defb_flag &= ~BFOVERWRITE; + else defb_flag |= BFOVERWRITE; +#ifdef NOTAB + if(strcmp(mode, "notab")==0) + if(n<=0) defb_flag &= ~BFNOTAB; + else defb_flag |= BFNOTAB; +#endif + return TRUE; +} |