home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / jed098-4.zip / JED / LIB / MODEHOOK.SL < prev    next >
Text File  |  1997-02-01  |  2KB  |  92 lines

  1. % modehook.sl    -*- SLang -*-
  2. %!% check for the following mode statements:
  3. %!% -*- mode: NAME -*-        set mode to NAME
  4. %!% -*- evalfile: FILE -*-    evaluate file FILE
  5. %!% -*- eval: expression -*-    evaluate expression
  6. %!% -*- VAR: VALUE -*-        set VAR = VALUE
  7. %!%
  8. %!% these statements may be combined
  9. %!% -*- mode: NAME; evalfile: FILE; VAR: VALUE -*-
  10. define modeline_hook2 ()
  11. {
  12.    variable keyword, value, mode = 0, tag = "-*-", modestr;
  13.  
  14.    bob ();
  15.    !if (fsearch (tag)) return 0;
  16.  
  17.    while (ffind (tag))
  18.      {
  19.     go_right (3);
  20. #iffalse
  21.     if (looking_at ("END -*-")) break;
  22. #endif
  23.  
  24.     push_spot ();
  25.     skip_white (); 
  26.     !if (ffind (tag), pop_spot ()) break;    % closing tag exists?
  27.  
  28.     forever
  29.       {
  30.          skip_chars (" \t;");
  31.          push_mark ();
  32.          !if (ffind_char (':'))
  33.            {
  34.           pop_mark_0 ();
  35.           break;
  36.            }
  37.          keyword = bufsubstr ();         
  38.          go_right_1 ();
  39.  
  40.          push_mark ();
  41.          do
  42.            {
  43.           skip_chars ("^-;");
  44.           if (looking_at_char (';') or looking_at (tag))
  45.             break;
  46.            }
  47.          while (right (1));
  48.          value = strtrim (bufsubstr ());
  49.          
  50.          push_spot ();
  51.          
  52.          ERROR_BLOCK
  53.            {
  54.           pop_spot ();
  55.            }
  56.          % error (Sprintf ("keyword <%s> value <%s>", keyword, value, 2));
  57.          switch (keyword)
  58.            { case "mode":
  59.           modestr = "_mode";
  60.           value = strlow (str_replace_all (value, "-", "_"));
  61.           !if (is_substr (value, modestr)) 
  62.             value = strcat (value, modestr);
  63.           if (is_defined(value))
  64.             {
  65.                eval (value);
  66.                mode++;
  67.             }
  68.            }
  69.            { case "evalfile":
  70.           () = evalfile (value);
  71.            }
  72.            { case "eval" :
  73.           eval (value);
  74.            }
  75.            { is_defined (()) < 0 :        % set a value
  76.           eval (strncat (keyword, " = ", value, 3));
  77.            }
  78. #iffalse
  79.            { is_defined (()) > 0 :
  80.           if (value [0] == '.')        % RPN interpret
  81.             eval (strncat (value, " ", keyword, 3));
  82.            }
  83. #endif
  84.            { pop (); }
  85.          
  86.          pop_spot ();
  87.       }
  88.     go_down_1 ();
  89.      }
  90.    mode;
  91. }
  92.