home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d3xx / d352 / mg.lha / MG / src.LZH / mg / modes.c < prev    next >
C/C++ Source or Header  |  1990-05-23  |  3KB  |  167 lines

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