calc.sl

A simple calculator that takes a SLang expression, evaluates it and prints the result in the form of a comment after the expression.

If you use it with two windows, one window (Calculator) is used to edit expressions, in the other one (*calcres*) the results are displayed.

 File   Edit   Mode   Search   Buffers   Windows   System   Help 
 R(E1):
         45
 
 R(E2):
         "0: 0"
         "1: 1"
         "2: 4"
 
 [EOB]
 -**-----|V0.99.16| *calcres* () | 9/9,1------------------------- 
 %-------------- :-)   E1
 a=0; for (i=0; i<10; i++) a+=i;
 a;
         %R:  45
 
 %-------------- :-)   E2
 for (i=0; i<3; i++) sprintf ("%d: %d", i, i*i);
         %R:  "2: 4"
 
 %-------------- :-)   E3
 [EOB]
 -**-----|V0.99.16| Calculator (SLangCalc) | 11/11,1------------- 

The evaluation is started with calc_make_calculation() (^C^A if ^C is your _Reserved_Key_Prefix). Use the calc_mode_hook to define your own bindings e.g. in your .jedrc:

   define calc_mode_hook ()
   {
      local_setkey ("calc_make_calculation", "^[^M");  % Alt-Return
   }
The result of an expression is everything that is left on the SLang stack after the expression is evaluated. The result of evaluation of
   1+1; 2+2;
would be
   2
   4
but only 4 is written into the expression buffer. The other results can be found in the result buffer using calc_result_window() (^C^W).

An expression can be any valid SLang code. Multiple expressions can be divided by a tag with calc_next_expression() (^C^N).

There are 25 predefined variables ([a-z]) that can be used without declaration and displayed with calc_display_variables() (^C^V).

Use calc_help() (^C^H) (or look at the mode menu) for help on keys.

Other operations

Expressions can be saved (^C^S) to a file and loaded (^C^R) later.

The display format for integer and float results can be changed from the mode menu. The combined mode displays integer results in dec, oct, hex and bin format.

Installation

Put the file somewhere on your jed_library_path and
   autoload ("calc", "calc.sl");
   autoload ("calc2", "calc.sl");
in your .jedrc file.

Then you can invoke the calculator with M-x calc or M-x calc2 for two-window mode.

To get a Calc menu entry insert in your .jedrc:

if you have jed 99.13:

     static define load_popups_hook (menubar)
     {
        %
        menu_insert_item (3, "Global.S&ystem", "Ca&lculate", "calc");
     }            
     variable Menu_Load_Popups_Hook = &load_popups_hook;
if you have a newer version than jed 99.13:
     define calc_load_popup_hook (menubar)
     {
        menu_insert_item (7, "Global.S&ystem", "Ca&lculate", "calc");
     }
     append_to_hook ("load_popup_hooks", &calc_load_popup_hook);
or insert the menu_insert_item() function to an already defined _load_popup_hook.