/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*/
/*                                                                     */
/*        P�l Hedne 1990                                               */
/*                                                                     */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*/
/* #include "gresk.cb"*/
extern begin_command, end_command, put_commands;
extern embrace;
extern tab_and, tab, open_line, end_enter;
extern ToggleMath, MathModus;
extern check_tab;
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                     */
_init (...)
{
       int math_key;
  global math_key;

  math_key=0;
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                     */
defmathkeys (...)
{
       keyboard_push ();

  assign_to_key ("<Ctrl-End>", "subscript");
       assign_to_key ("<Ctrl-Home>", "superscript");
       assign_to_key ("<Ctrl-Right>", "geq");
       assign_to_key ("<Ctrl-Left>", "leq");
       assign_to_key ("<Ctrl-PgDn>", "neq");
       assign_to_key ("<Ctrl-PgUp>", "simeq");
       assign_to_key ("<Ctrl-->", "equiv");
       assign_to_key ("<Ctrl-b><a>", "begin_array");
       assign_to_key ("<Ctrl-b><d>", "begin_displaymath");
       assign_to_key ("<Ctrl-b><e>", "begin_equation");
       assign_to_key ("<Ctrl-b><m>", "begin_math");
       assign_to_key ("<Ctrl-b><y>", "begin_eqnarray");
       assign_to_key ("<Ctrl-a>", "arrow");
       assign_to_key ("<Ctrl-c>", "approx");
       assign_to_key ("<Ctrl-d>", "deriv");
       assign_to_key ("<Ctrl-e><a>", "end_array");
       assign_to_key ("<Ctrl-e><d>", "end_displaymath");
       assign_to_key ("<Ctrl-e><e>", "end_equation");
       assign_to_key ("<Ctrl-e><y>", "end_eqnarray");
       assign_to_key ("<Ctrl-e><m>", "end_math");
       assign_to_key ("<Ctrl-f>", "frac");

       assign_to_key ("<Ctrl-g><a>", "tex_alpha");
       assign_to_key ("<Ctrl-g><b>", "tex_beta");
       assign_to_key ("<Ctrl-g><c>", "tex_psi");
       assign_to_key ("<Ctrl-g><C>", "tex_Psi");
       assign_to_key ("<Ctrl-g><d>", "tex_delta");
       assign_to_key ("<Ctrl-g><D>", "tex_Delta");
       assign_to_key ("<Ctrl-g><e>", "tex_epsilon");
       assign_to_key ("<Ctrl-g><E>", "tex_eta");
       assign_to_key ("<Ctrl-g><v><e>", "tex_varepsilon");
       assign_to_key ("<Ctrl-g><f>", "tex_phi");
       assign_to_key ("<Ctrl-g><F>", "tex_Phi");
       assign_to_key ("<Ctrl-g><v><f>", "tex_varphi");
       assign_to_key ("<Ctrl-g><g>", "tex_gamma");
       assign_to_key ("<Ctrl-g><G>", "tex_Gamma");
       assign_to_key ("<Ctrl-g><t><e>", "tex_theta");
       assign_to_key ("<Ctrl-g><v><t>", "tex_vartheta");
       assign_to_key ("<Ctrl-g><i>", "tex_iota");
       assign_to_key ("<Ctrl-g><k>", "tex_kappa");
       assign_to_key ("<Ctrl-g><l>", "tex_lambda");
       assign_to_key ("<Ctrl-g><L>", "tex_Lambda");
       assign_to_key ("<Ctrl-g><m>", "tex_mu");
       assign_to_key ("<Ctrl-g><n>", "tex_nu");
       assign_to_key ("<Ctrl-g><o>", "tex_o");
       assign_to_key ("<Ctrl-g><p>", "tex_pi");
       assign_to_key ("<Ctrl-g><v><p>", "tex_varpi");
       assign_to_key ("<Ctrl-g><P>", "tex_Pi");
       assign_to_key ("<Ctrl-g><r>", "tex_rho");
       assign_to_key ("<Ctrl-g><v><r>", "tex_varrho");
       assign_to_key ("<Ctrl-g><s>", "tex_sigma");
       assign_to_key ("<Ctrl-g><S>", "tex_Sigma");
       assign_to_key ("<Ctrl-g><v><s>", "tex_varsigma");
       assign_to_key ("<Ctrl-g><t>", "tex_tau");
       assign_to_key ("<Ctrl-g><T>", "tex_Theta");
       assign_to_key ("<Ctrl-g><x>", "tex_xi");
       assign_to_key ("<Ctrl-g><X>", "tex_Xi");
       assign_to_key ("<Ctrl-g><y>", "tex_upsilon");
       assign_to_key ("<Ctrl-g><Y>", "tex_Upsilon");
       assign_to_key ("<Ctrl-g><z>", "tex_zeta");
       assign_to_key ("<Ctrl-g><w>", "tex_omega");
       assign_to_key ("<Ctrl-g><W>", "tex_Omega");

       assign_to_key ("<Ctrl-i>", "infty");
       assign_to_key ("<Ctrl-j>", "integral");
       assign_to_key ("<Ctrl-k>", "dot");

       assign_to_key ("<Ctrl-l><c>", "cos");
       assign_to_key ("<Ctrl-l><e>", "exp");
       assign_to_key ("<Ctrl-l><l>", "lim");
       assign_to_key ("<Ctrl-l><s>", "sin");
       assign_to_key ("<Ctrl-l><t>", "tan");

       assign_to_key ("<Ctrl-n>", "nabla");
       assign_to_key ("<Ctrl-o>", "overbrace");
       assign_to_key ("<Ctrl-p>", "partial");
       assign_to_key ("<Ctrl-r>", "prod");
       assign_to_key ("<Ctrl-q>", "sqrt");
       assign_to_key ("<Ctrl-s>", "sum");
       assign_to_key ("<Ctrl-t>", "times");
  assign_to_key ("<Ctrl-u><b>", "bold");
  assign_to_key ("<Ctrl-u><c>", "caps");
  assign_to_key ("<Ctrl-u><e>", "emphasize");
  assign_to_key ("<Ctrl-u><i>", "italic");
  assign_to_key ("<Ctrl-u><o>", "overline");
  assign_to_key ("<Ctrl-u><r>", "roman");
  assign_to_key ("<Ctrl-u><s>", "sansserif");
  assign_to_key ("<Ctrl-u><t>", "typewriter");
  assign_to_key ("<Ctrl-u><u>", "underline");
       assign_to_key ("<Ctrl-v>", "angle");
       assign_to_key ("<Ctrl-w>", "underbrace");

       math_key = inq_keyboard ();
       keyboard_pop (1);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                     */
MathKeys (...)
{
  if (math_key == 0) defmathkeys ();
       use_local_keyboard (math_key);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                     */
NonMathKeys (...)
{
       use_local_keyboard (0);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
partial (...)
{
       insert ("\\,\\partial ");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
deriv (...)
{
       insert ("\\,{\\rm d}\\,");
       move_rel(0,-2);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
leq (...)
{
       insert ("\\leq ");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
geq (...)
{
       insert ("\\geq ");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
simeq (...)
{
       insert ("\\simeq ");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
neq (...)
{
       insert ("\\neq ");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
equiv (...)
{
       insert ("\\equiv ");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
approx (...)
{
       insert ("\\approx ");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                     */
times (...)
{
       insert ("\\times ");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                     */
nabla (...)
{
       insert ("\\nabla ");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                     */
angle (...)
{
       insert ("\\angle ");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                     */
infty (...)
{
       insert ("\\infty ");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                     */
sum (...)
{
       insert ("\\sum");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                     */
integral (...)
{
       insert ("\\int");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                     */
cos (...)
{
       insert ("\\cos\\!\\,");
       move_rel (0, -2);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                     */
exp (...)
{
       insert ("\\exp\\!\\,");
       move_rel (0, -2);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                     */
lim (...)
{
       insert ("\\lim\\!\\,");
       move_rel (0, -2);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                     */
sin (...)
{
       insert ("\\sin\\!\\,");
       move_rel (0, -2);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                     */
tan (...)
{
       insert ("\\tan\\!\\,");
       move_rel (0, -2);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                     */
prod (...)
{
       insert ("\\prod ");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                     */
arrow (...)
{
       sel_arrow ("arrow");
}

/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
sel_arrow (...)
{
       int ins, ichar;

       string text, dumtext;

       if (get_parm (0, text))
               {
               ins = insert_mode (1);
               while ((ichar = read_char ()) < 0);
        dumtext = int_to_key (ichar);                  /*  .. to mnemonic code ("<alt>-d") */
/*          error ("dumtext = %s ", dumtext);*/
                switch (dumtext)
                       {
                       case "<Up>":
                               {
                               upper (substr (text, 1, 1));
                               insert ("\\" + ("up" + (text + " ")));
                               }
                       case "<Down>":
                               {
                               upper (substr (text, 1, 1));
                               insert ("\\" + ("down" + (text + " ")));
                               }
                       case "<Left>":
                               {
                               upper (substr (text, 1, 1));
                               insert ("\\" + ("left" + (text + " ")));
                               }
                       case "<Right>":
                               {
                               upper (substr (text, 1, 1));
                               insert ("\\" + ("right" + (text + " ")));
                               }
                       case "<Shift-Up>":
                               {
                               upper (substr (text, 1, 1));
                               insert ("\\" + ("Up" + (text + " ")));
                               }
                       case "<Shift-Down>":
                               {
                               upper (substr (text, 1, 1));
                               insert ("\\" + ("Down" + (text + " ")));
                               }
                       case "<Shift-Left>":
                               {
                               upper (substr (text, 1, 1));
                               insert ("\\" + ("Left" + (text + " ")));
                               }
                       case "<Shift-Right>":
                               {
                               upper (substr (text, 1, 1));
                               insert ("\\" + ("Right" + (text + " ")));
                               }
                       case "<End>":
                               {
                               upper (substr (text, 1, 1));
                               insert ("\\" + ("sw" + (text + " ")));
                               }
                       case "<Home>":
                               {
                               upper (substr (text, 1, 1));
                               insert ("\\" + ("nw" + (text + " ")));
                               }
                       case "<PgUp>":
                               {
                               upper (substr (text, 1, 1));
                               insert ("\\" + ("ne" + (text + " ")));
                               }
                       case "<PgDn>":
                               {
                               upper (substr (text, 1, 1));
                               insert ("\\" + ("se" + (text + " ")));
                               }
                       case "<Keypad-5>":
                               {
                               upper (substr (text, 1, 1));
                               insert ("\\" + ("Leftright" + (text + " ")));
                               }
                               /* default                                                                                                                                               */
                       default:
                               push_back (ichar);
                       }
               }
}

/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
dot (...)
{
       embrace ("dot",0);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
sqrt (...)
{
       embrace ("sqrt",0);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
frac (...)
{
       embrace ("frac",0);
       move_rel (0, 1);
       insert ("{}");
       move_rel (0, -3);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
underbrace (...)
{
       embrace ("underbrace",0);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
overbrace (...)
{
       embrace ("overbrace",0);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
subscript (...)
{
       embrace ("_", 1);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
superscript (...)
{
       embrace ("^", 1);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
/*                                                                                                                                                                               ;       */
/*                                                                array                                                                                   ;              */
/*                                                                                                                                                                               ;       */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
begin_array (...)
{
       int ikey;

  begin_command ("array");

  ToggleMath (1);

  assign_to_key ("<Tab>", "tab_and");
       assign_to_key ("<Ctrl-Enter>", "end_enter");

}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
end_array (...)
{
       int line1, col1, ntab, length;
       string text, mess;

       end_command ("array");
       assign_to_key ("<Tab>", "tab");
       assign_to_key ("<Ctrl-Enter>", "open_line");
       ToggleMath (0);
  check_tab("array");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
array (...)
{
       put_commands ("array");
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
/*                                                                                                                                                                               ;       */
/*                                               EQUATION                                                                                                        ;       */
/*                                                                                                                                                                               ;       */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
equation (...)
{
       put_commands ("equation");
}

/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
begin_equation (...)
{
       begin_command ("equation");
       ToggleMath (1);
}

/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */

end_equation (...)
{
       end_command ("equation");
       ToggleMath (0);
}

/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
/*                                                                                                                                                                               ;       */
/*                                               EQNARRAY                                                                                                        ;       */
/*                                                                                                                                                                               ;       */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
eqnarray (...)
{
       put_commands ("eqnarray");
}

/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */

begin_eqnarray (...)
{

  begin_command ("eqnarray");

       ToggleMath (1);

  assign_to_key ("<Tab>", "tab_and");
       assign_to_key ("<Ctrl-Enter>", "end_enter");
/*      assign_to_key ("<Ctrl-n>", "nonumber");*/

}

/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */

end_eqnarray (...)
{
       end_command ("eqnarray");
       assign_to_key ("<Tab>", "tab");
       assign_to_key ("<Ctrl-Enter>", "open_line");
       ToggleMath (0);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
/*                                                                                                                                                                               ;       */
/*                                               displaymath                                                                                                     ;  */
/*                                                                                                                                                                               ;       */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
displaymath (...)
{
       put_commands ("displaymath");
}

/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */

begin_displaymath (...)
{
       begin_command ("displaymath");
       ToggleMath (1);
}

/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */

end_displaymath (...)
{
       end_command ("displaymath");
       ToggleMath (0);
}


/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
/*                                                                                                                                                                               ;       */
/*                                               math                                                                                                   ;                        */
/*                                                                                                                                                                               ;       */
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
math (...)
{
       put_commands ("math");
}

/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */

begin_math (...)
{
       begin_command ("math");
       ToggleMath (1);
}

/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */

end_math (...)
{
       end_command ("math");
       ToggleMath (0);
}
/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;          */
nonumber (...)
{
       insert ("\nonumber");
}