home *** CD-ROM | disk | FTP | other *** search
- /*
- * 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;
- }
-