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

  1.  
  2. %!% Prototype: macro_save_macro ()
  3. define macro_save_macro ()
  4. {
  5.    variable str = get_last_macro ();
  6.    variable file;
  7.    variable macro_name;
  8.    
  9.    file = read_file_from_mini ("Macro filename:");
  10.    !if (strlen (file)) return;
  11.    
  12.    macro_name = read_mini ("Name of macro:", Null_String, Null_String);
  13.    !if (strlen (macro_name)) return;
  14.    
  15.    str = Sprintf ("%%%%%%MACRO NAME: %s\n@%s\n\n", macro_name, str, 2);
  16.    
  17.    if (-1 == append_string_to_file (str, file))
  18.      {
  19.     error ("Error appending macro to file");
  20.      }
  21. }
  22.  
  23.    
  24. define macro_to_function ()
  25. {
  26.    variable macro = get_last_macro ();
  27.    variable i, imax, ch, num;
  28.    variable last_was_insert, f, ftype;
  29.    
  30.    pop2buf ("*macro*");
  31.    eob ();
  32.    
  33.    newline ();
  34.    insert ("\ndefine macro_");
  35.    push_spot ();
  36.    insert ("\n{\n");
  37.    
  38.    imax = strlen (macro);
  39.    num = 0;
  40.    i = 0;
  41.    % Push macro characters on stack 
  42.    while (i < imax)
  43.      {
  44.     ch = macro[i];
  45.     if (ch == '\\')
  46.       {
  47.          i++;
  48.          ch = macro[i];
  49.       }
  50.     else if (ch == '^') 
  51.       {
  52.          i++;
  53.          ch = macro[i];
  54.          ch -= '@';
  55.       }
  56.     
  57.     ch;                   %  push it on stack
  58.     num++;
  59.     i++;
  60.      }
  61.    
  62.    while (num)
  63.      {
  64.     num--;
  65.     ungetkey (());
  66.      }
  67.    
  68.    while (input_pending (0))
  69.      {
  70.     (ftype, f) = get_key_function ();
  71.     
  72.     
  73.     if (0 == strcmp (f, "self_insert_cmd"))
  74.       {
  75.          !if (last_was_insert)
  76.            {
  77.           insert ("  insert (\"\");  % insert text here\n");
  78.           last_was_insert = 1;
  79.            }
  80.          continue;
  81.       }
  82.  
  83.     if (ftype)
  84.       {
  85.          insert (Sprintf ("  call (\"%s\");\n", f, 1));
  86.       }
  87.     else insert (Sprintf ("  %s ();\n", f, 1));
  88.          
  89.     last_was_insert = 0;
  90.      }
  91.    
  92.    insert ("}\n");
  93.    pop_spot ();
  94. }
  95.  
  96.    
  97.    
  98. define macro_assign_macro_to_key ()
  99. {
  100.    variable key = Null_String;
  101.    variable ch = 0;
  102.    flush ("Press key to assign macro to:");
  103.    
  104.    do
  105.      {
  106.     ch = getkey ();
  107.     if (ch == 0) ch = "^@"; else ch = char (ch);
  108.     key = strcat (key, ch);
  109.      }
  110.    while (input_pending (5));
  111.    
  112.    local_setkey (strcat ("@", get_last_macro ()), key);
  113.    message (strcat ("Macro set to ", expand_keystring (key)));
  114. }
  115.  
  116.