// Keymenu v0.1
//    by XE_ManUp

block load
{
  es_load popup
   es_xregcmd keymenu keymenu/keymenu_sort "Build a dynamic menu using a keygroup."
   es_xsetinfo _keymenu_validargs "createsenddeletegetpages"
   es_xkeygroupcreate _keymenus_created
   es_xsetinfo _keymenu_argc 0
   es_xsetinfo _keymenu_arg1 0
   es_xsetinfo _keymenu_format 0
   es_xsetinfo _keymenu_menuname 0
   es_xsetinfo _keymenu_keygroup 0
   es_xsetinfo _keymenu_exists 0
   es_xsetinfo _keymenu_returnvar 0
   es_xsetinfo _keymenu_doblock 0
   es_xsetinfo _keymenu_titletext 0
   es_xsetinfo _keymenu_commandstring 0
   es_xsetinfo _keymenu_token1 0
   es_xsetinfo _keymenu_token2 0
   es_xsetinfo _keymenu_token3 0
   es_xsetinfo _keymenu_wildcard_key 0
   es_xsetinfo _keymenu_menuoptions 0
   es_xsetinfo _keymenu_optionspermenu_format 0
   es_xsetinfo _keymenu_optionspermenu_format_temp 0
   es_xsetinfo _keymenu_titletext 0
   es_xsetinfo _keymenu_tokencount 0
   es_xsetinfo _keymenu_keyvalue 0
   es_xsetinfo _keymenu_varset 0
   es_xsetinfo _keymenu_menucount_temp 0
   es_xsetinfo _keymenu_menuname 0
   es_xsetinfo _keymenu_userid 0
   es_xsetinfo _keymenu_pagenumber 0
   es_xsetinfo _keymenu_pagevar 0
   es_xsetinfo _keymenu_wildcard_keyvalue 0
}

block keymenu_sort
{
   es_xgetargc _keymenu_argc
   es es_xif (server_var(_keymenu_argc) > 1) do
   {
      es_xgetargv _keymenu_arg1 1
      es es_xif (server_var(_keymenu_arg1) in server_var(_keymenu_validargs)) do
      {
         es es_xformat _keymenu_format keymenu/keymenu_%1 server_var(_keymenu_arg1)
         es es_xdoblock server_var(_keymenu_format)
      }
      else do
      {
         es es_xdbgmsg 0 [KeyMenu]: ' server_var(_keymenu_arg1) ' is not a valid argument.
      }
   }
   else do
   {
      es es_xdbgmsg 0 [KeyMenu]: keymenu <create | delete | send | getpages>
   }
}

//keymenu create <menu name> <return var> <script/block> <keygroup> <menu display> <menu return> "Menu Title Text:"
//keymenu create mymenu myvar keymenu/test mylist #keyvalue name #key My Menu Text:

block keymenu_create
{
   es_xsetinfo createtimer 0
   profile begin createtimer

   es es_xif (server_var(_keymenu_argc) >= 9) do
   {
      es_xgetargv _keymenu_menuname 2
      es es_xformat _keymenu_format _keymenu_%1 server_var(_keymenu_menuname)
      es es_exists _keymenu_exists keygroup server_var(_keymenu_format)
      es es_xif (server_var(_keymenu_exists) = 0) do
      {
         es_xgetargv _keymenu_keygroup 5
         es es_exists _keymenu_exists keygroup server_var(_keymenu_keygroup)
         es es_xif (server_var(_keymenu_exists) = 1) do
         {
            es_xgetargv _keymenu_returnvar 3
            es es_xsetinfo serveR_var(_keymenu_returnvar) 0
            es_xgetargv _keymenu_doblock 4
            es_xgetargs _keymenu_commandstring
            es es_xif (# in server_var(_keymenu_commandstring)) do
            {
               es es_xtoken _keymenu_tokencount server_var(_keymenu_commandstring) 0 #
               es es_xif (server_var(_keymenu_tokencount) = 3) do
               {
                  //es es_xtoken _keymenu_token1 server_var(_keymenu_commandstring) 1 #
                  es es_xtoken _keymenu_token2 server_var(_keymenu_commandstring) 2 #
                  es es_xtoken _keymenu_token3 server_var(_keymenu_commandstring) 3 #

                  // Retrieve the title text:
                  es es_xsetinfo _keymenu_titletext server_var(_keymenu_token3)
                  es es_xif ("keyvalue" in server_var(_keymenu_titletext)) do
                  {
                     es es_xtoken _keymenu_keyvalue server_var(_keymenu_titletext) 2
                     es es_xformat _keymenu_format "keyvalue %1" server_var(_keymenu_keyvalue)
                     es es_xstring _keymenu_titletext replace server_var(_keymenu_format)
                  }
                  else do
                  {
                     es es_xif ("key" in server_var(_keymenu_titletext)) do
                     {
                        es_xstring _keymenu_titletext replace key
                     }
                  }
                  es es_xif ("keyvalue" in server_var(_keymenu_token2)) do
                  {
                     es_xsetinfo _keymenu_menucount 0
                     es_xsetinfo _keymenu_linecount 0
                     es_xsetinfo _keymenu_menulines 0
                     es es_xforeachkey _keymenu_wildcard_key in server_var(_keymenu_keygroup) "es_xmath _keymenu_menulines + 1"
                     es es_xif (server_var(_keymenu_menulines) > 0) do
                     {
                        es es_xtoken _keymenu_keyvalue server_var(_keymenu_token2) 2
                        es_xstring _keymenu_token3 replace "keyvalue "
                        es es_xstring _keymenu_token3 replace server_var(_keymenu_titletext)
                        es es_xsetinfo _keymenu_menulines_temp server_var(_keymenu_menulines)
                        es while "server_var(_keymenu_menulines_temp) >= 1" "es_xdoblock keymenu/count_pages"
                        es es_xformat _keymenu_format _keymenu_%1 server_var(_keymenu_menuname)
                        es es_xkeygroupcreate server_var(_keymenu_format)
                        es es_xkeycreate _keymenus_created server_var(_keymenu_format)
                        es es_xkeycreate server_var(_keymenu_format) information
                        es es_keysetvalue server_var(_keymenu_format) information pages server_var(_keymenu_menucount)
                        es_xsetinfo _keymenu_linecount 0
                        es es_xforeachkey _keymenu_wildcard_key in server_var(_keymenu_keygroup) "es_xdoblock keymenu/build_menu_keyvalue"
                     }
                  }
                  else do
                  {
                     es_xsetinfo _keymenu_menucount 0
                     es_xsetinfo _keymenu_linecount 0
                     es_xsetinfo _keymenu_menulines 0
                     es es_xforeachkey _keymenu_wildcard_key in server_var(_keymenu_keygroup) "es_xmath _keymenu_menulines + 1"
                     es es_xif (server_var(_keymenu_menulines) > 0) do
                     {
                        //es es_xformat _keymenu_format " %1" server_var(_keymenu_titletext)
                        es es_xstring _keymenu_token3 replace server_var(_keymenu_titletext)
                        es es_xsetinfo _keymenu_menulines_temp server_var(_keymenu_menulines)
                        es while "server_var(_keymenu_menulines_temp) >= 1" "es_xdoblock keymenu/count_pages"
                        es es_xformat _keymenu_format _keymenu_%1 server_var(_keymenu_menuname)
                        es es_xkeygroupcreate server_var(_keymenu_format)
                        es es_xkeycreate _keymenus_created server_var(_keymenu_format)
                        es es_xkeycreate server_var(_keymenu_format) information
                        es es_keysetvalue server_var(_keymenu_format) information pages server_var(_keymenu_menucount)
                        es_xsetinfo _keymenu_linecount 0
                        es es_xforeachkey _keymenu_wildcard_key in server_var(_keymenu_keygroup) "es_xdoblock keymenu/build_menu_key"
                     }
                     else do
                     {
                        es es_xdbgmsg [KeyMath]: There are not any keys in the keygroup ' server_var(_keymenu_keygroup) '
                     }
                  }
                  ///////////////////////////
                  // END BUILD MENU DISPLAY
                  ///////////////////////////
               }
               else do
               {
                  es es_xdbgmsg 0 [KeyMenu]: Improper syntax for <menu display> or <menu return>
                  es es_xdbgmsg 0 [KeyMenu]:     #key
                  es es_xdbgmsg 0 [KeyMenu]:     #keyvalue <key value name>
               }
            }
            else do
            {
               es es_xdbgmsg 0 [KeyMenu]: Improper syntax for <menu display> or <menu return>
               es es_xdbgmsg 0 [KeyMenu]:     #key
               es es_xdbgmsg 0 [KeyMenu]:     #keyvalue <key value name>
            }
         }
         else do
         {
            es es_xdbgmsg 0 [KeyMenu]: keymenu ' server_var(_keymenu_keygroup) ' does not exist.
         }
      }
      else do
      {
         es es_xdbgmsg 0 [KeyMenu]: keymenu ' server_var(_keymenu_menuname) ' has already been created!
      }
   }
   else do
   {
      es es_xdbgmsg 0 [KeyMenu]: keymenu create <menu name> <return var> <script/block> <keygroup> <menu display> <menu return> "Menu Title Text:"
   }
   es_xsetinfo _keymenu_menucount 0
   es_xsetinfo _keymenu_menucount_temp 0
   profile end createtimer
}

block count_pages
{
   es_xmath _keymenu_menucount + 1
   // mymenu1
   es es_xformat _keymenu_format %1%2 server_var(_keymenu_menuname) server_var(_keymenu_menucount)
   // _keymenu_optionspermenu_mymenu1
   es es_xformat _keymenu_optionspermenu_format _keymenu_optionspermenu_%1%2 server_var(_keymenu_menuname) server_var(_keymenu_menucount)
   es es_xif (server_var(_keymenu_menucount) = 1) do
   {
      es_xmath _keymenu_menulines_temp - 8
      es es_xif (server_var(_keymenu_menulines_temp) < 1) do
      {
         es_xmath _keymenu_menulines_temp + 8
         es es_xsetinfo server_var(_keymenu_optionspermenu_format) server_var(_keymenu_menulines_temp)
         es_xsetinfo _keymenu_menulines_temp 0
      }
      else do
      {
         es es_xsetinfo server_var(_keymenu_optionspermenu_format) 8
      }
   }
   else do
   {
      es_xmath _keymenu_menulines_temp - 7
      es es_xif (server_var(_keymenu_menulines_temp) < 1) do
      {
         es_xmath _keymenu_menulines_temp + 7
         es es_xsetinfo server_var(_keymenu_optionspermenu_format) server_var(_keymenu_menulines_temp)
         es_xsetinfo _keymenu_menulines_temp 0
      }
      else do
      {
         es es_xsetinfo server_var(_keymenu_optionspermenu_format) 7
      }
   }
}

block build_menu_key
{
   es_xmath _keymenu_linecount + 1
   // WHEN IT IS THE FIRST LINE, FORMAT THE TOP OF THE MENU
   es es_xif (server_var(_keymenu_linecount) = 1) do
   {
      es_xmath _keymenu_menucount_temp + 1
      es es_xformat _keymenu_format %1%2 server_var(_keymenu_menuname) server_var(_keymenu_menucount_temp)
      es es_xformat _keymenu_optionspermenu_format _keymenu_optionspermenu_%1%2 server_var(_keymenu_menuname) server_var(_keymenu_menucount_temp)
      es popup create server_var(_keymenu_format)
      es es_xformat _keymenu_text "%1:        %2/%3" server_var(_keymenu_titletext) server_var(_keymenu_menucount_temp) server_var(_keymenu_menucount)
      es popup addline server_var(_keymenu_format) server_var(_keymenu_text)
      es popup addline server_var(_keymenu_format) "------------------"
      es es_xformat _keymenu_text "->1. %1" server_var(_keymenu_wildcard_key)
      es popup addline server_var(_keymenu_format) server_var(_keymenu_text)
      es popup select server_var(_keymenu_format) server_var(_keymenu_linecount) server_var(_keymenu_doblock)
      es es_xif (server_var(_keymenu_token3) = key) do
      {
         es popup menuvalue server_var(_keymenu_format) server_var(_keymenu_returnvar) server_var(_keymenu_linecount) server_var(_keymenu_wildcard_key)
      }
      else do
      {
         es es_xkeygetvalue _keymenu_wildcard_keyvalue server_var(_keymenu_keygroup) server_var(_keymenu_wildcard_key) server_var(_keymenu_token3)
         es popup menuvalue server_var(_keymenu_format) server_var(_keymenu_returnvar) server_var(_keymenu_linecount) server_var(_keymenu_wildcard_keyvalue)
      }
   }


   // WHEN IT IS NOT THE FIRST LINE OF A NEW MENU, ADD MAPS
   else do
   {
      // If the linecount is less than or equalto how many maps are on this page, add the maps
      if (server_var(_keymenu_linecount) <= server_var(server_var(_keymenu_optionspermenu_format))) do
      {
         es es_xformat _keymenu_text "->%1. %2" server_var(_keymenu_linecount) server_var(_keymenu_wildcard_key)
         es popup addline server_var(_keymenu_format) server_var(_keymenu_text)
         es popup select server_var(_keymenu_format) server_var(_keymenu_linecount) server_var(_keymenu_doblock)
         es es_xif (server_var(_keymenu_token3) = key) do
         {
            es popup menuvalue server_var(_keymenu_format) server_var(_keymenu_returnvar) server_var(_keymenu_linecount) server_var(_keymenu_wildcard_key)
         }
         else do
         {
            es es_xkeygetvalue _keymenu_wildcard_keyvalue server_var(_keymenu_keygroup) server_var(_keymenu_wildcard_key) server_var(_keymenu_token3)
            es popup menuvalue server_var(_keymenu_format) server_var(_keymenu_returnvar) server_var(_keymenu_linecount) server_var(_keymenu_wildcard_keyvalue)
         }
      }
      es es_xif (server_var(server_var(_keymenu_optionspermenu_format)) = server_var(_keymenu_linecount)) do
      {
         es_xsetinfo _keymenu_linecount 0
         es es_xif (server_var(_keymenu_menucount_temp) = 1) do
         {
            es es_xif (server_var(_keymenu_menucount_temp) < server_var(_keymenu_menucount)) do
            {
               es popup addline server_var(_keymenu_format) "------------------"
               es popup addline server_var(_keymenu_format) "->9. More"
               es_xmath _keymenu_menucount_temp + 1
               es es_xformat _keymenu_optionspermenu_format_temp %1%2 server_var(_keymenu_menuname) server_var(_keymenu_menucount_temp)
               es popup submenu server_var(_keymenu_format) 9 server_var(_keymenu_optionspermenu_format_temp)
               es_xmath _keymenu_menucount_temp - 1
               es popup addline server_var(_keymenu_format) "0. Cancel"
            }
            es es_xif (server_var(_keymenu_menucount_temp) = server_var(_keymenu_menucount)) do
            {
               es popup addline server_var(_keymenu_format) "------------------"
               es popup addline server_var(_keymenu_format) "0. Cancel"
            }
         }
         else do
         {
            es es_xif (server_var(_keymenu_menucount_temp) < server_var(_keymenu_menucount)) do
            {
               es popup addline server_var(_keymenu_format) "------------------"
               es popup addline server_var(_keymenu_format) "->8. Back"
               es_xmath _keymenu_menucount_temp - 1
               es es_xformat _keymenu_optionspermenu_format_temp %1%2 server_var(_keymenu_menuname) server_var(_keymenu_menucount_temp)
               es popup submenu server_var(_keymenu_format) 8 server_var(_keymenu_optionspermenu_format_temp)
               es_xmath _keymenu_menucount_temp + 2
               es popup addline server_var(_keymenu_format) "->9. More"
               es es_xformat _keymenu_optionspermenu_format_temp %1%2 server_var(_keymenu_menuname) server_var(_keymenu_menucount_temp)
               es popup submenu server_var(_keymenu_format) 9 server_var(_keymenu_optionspermenu_format_temp)
               es_xmath _keymenu_menucount_temp - 1
               es popup addline server_var(_keymenu_format) "0. Cancel"
            }
            es es_xif (server_var(_keymenu_menucount_temp) = server_var(_keymenu_menucount)) do
            {
               es popup addline server_var(_keymenu_format) "------------------"
               es popup addline server_var(_keymenu_format) "->8. Back"
               es_xmath _keymenu_menucount_temp - 1
               es es_xformat _keymenu_optionspermenu_format_temp %1%2 server_var(_keymenu_menuname) server_var(_keymenu_menucount_temp)
               es popup submenu server_var(_keymenu_format) 8 server_var(_keymenu_optionspermenu_format_temp)
               es_xmath _keymenu_menucount_temp + 1
               es popup addline server_var(_keymenu_format) "0. Cancel"
            }
         }
      }
   }
}

block build_menu_keyvalue
{
   es es_xkeygetvalue _keymenu_wildcard_keyvalue server_var(_keymenu_keygroup) server_var(_keymenu_wildcard_key) server_var(_keymenu_keyvalue)
   es_xmath _keymenu_linecount + 1
   // WHEN IT IS THE FIRST LINE, FORMAT THE TOP OF THE MENU
   es es_xif (server_var(_keymenu_linecount) = 1) do
   {
      es_xmath _keymenu_menucount_temp + 1
      es es_xformat _keymenu_format %1%2 server_var(_keymenu_menuname) server_var(_keymenu_menucount_temp)
      es es_xformat _keymenu_optionspermenu_format _keymenu_optionspermenu_%1%2 server_var(_keymenu_menuname) server_var(_keymenu_menucount_temp)
      es popup create server_var(_keymenu_format)
      es es_xformat _keymenu_text "%1:        %2/%3" server_var(_keymenu_titletext) server_var(_keymenu_menucount_temp) server_var(_keymenu_menucount)
      es popup addline server_var(_keymenu_format) server_var(_keymenu_text)
      es popup addline server_var(_keymenu_format) "------------------"
      es es_xformat _keymenu_text "->1. %1" server_var(_keymenu_wildcard_keyvalue)
      es popup addline server_var(_keymenu_format) server_var(_keymenu_text)
      es popup select server_var(_keymenu_format) server_var(_keymenu_linecount) server_var(_keymenu_doblock)
      es es_xif (server_var(_keymenu_token3) = key) do
      {
         es popup menuvalue server_var(_keymenu_format) server_var(_keymenu_returnvar) server_var(_keymenu_linecount) server_var(_keymenu_wildcard_key)
      }
      else do
      {
         es es_xkeygetvalue _keymenu_wildcard_keyvalue server_var(_keymenu_keygroup) server_var(_keymenu_wildcard_key) server_var(_keymenu_token3)
         es popup menuvalue server_var(_keymenu_format) server_var(_keymenu_returnvar) server_var(_keymenu_linecount) server_var(_keymenu_wildcard_keyvalue)
      }
   }


   // WHEN IT IS NOT THE FIRST LINE OF A NEW MENU, ADD MAPS
   else do
   {
      // If the linecount is less than or equalto how many maps are on this page, add the maps
      if (server_var(_keymenu_linecount) <= server_var(server_var(_keymenu_optionspermenu_format))) do
      {
         es es_xformat _keymenu_text "->%1. %2" server_var(_keymenu_linecount) server_var(_keymenu_wildcard_keyvalue)
         es popup addline server_var(_keymenu_format) server_var(_keymenu_text)
         es popup select server_var(_keymenu_format) server_var(_keymenu_linecount) server_var(_keymenu_doblock)
         es es_xif (server_var(_keymenu_token3) = key) do
         {
            es popup menuvalue server_var(_keymenu_format) server_var(_keymenu_returnvar) server_var(_keymenu_linecount) server_var(_keymenu_wildcard_key)
         }
         else do
         {
            es es_xkeygetvalue _keymenu_wildcard_keyvalue server_var(_keymenu_keygroup) server_var(_keymenu_wildcard_key) server_var(_keymenu_token3)
            es popup menuvalue server_var(_keymenu_format) server_var(_keymenu_returnvar) server_var(_keymenu_linecount) server_var(_keymenu_wildcard_keyvalue)
         }
      }
      es es_xif (server_var(server_var(_keymenu_optionspermenu_format)) = server_var(_keymenu_linecount)) do
      {
         es_xsetinfo _keymenu_linecount 0
         es es_xif (server_var(_keymenu_menucount_temp) = 1) do
         {
            es es_xif (server_var(_keymenu_menucount_temp) < server_var(_keymenu_menucount)) do
            {
               es popup addline server_var(_keymenu_format) "------------------"
               es popup addline server_var(_keymenu_format) "->9. More"
               es_xmath _keymenu_menucount_temp + 1
               es es_xformat _keymenu_optionspermenu_format_temp %1%2 server_var(_keymenu_menuname) server_var(_keymenu_menucount_temp)
               es popup submenu server_var(_keymenu_format) 9 server_var(_keymenu_optionspermenu_format_temp)
               es_xmath _keymenu_menucount_temp - 1
               es popup addline server_var(_keymenu_format) "0. Cancel"
            }
            es es_xif (server_var(_keymenu_menucount_temp) = server_var(_keymenu_menucount)) do
            {
               es popup addline server_var(_keymenu_format) "------------------"
               es popup addline server_var(_keymenu_format) "0. Cancel"
            }
         }
         else do
         {
            es es_xif (server_var(_keymenu_menucount_temp) < server_var(_keymenu_menucount)) do
            {
               es popup addline server_var(_keymenu_format) "------------------"
               es popup addline server_var(_keymenu_format) "->8. Back"
               es_xmath _keymenu_menucount_temp - 1
               es es_xformat _keymenu_optionspermenu_format_temp %1%2 server_var(_keymenu_menuname) server_var(_keymenu_menucount_temp)
               es popup submenu server_var(_keymenu_format) 8 server_var(_keymenu_optionspermenu_format_temp)
               es_xmath _keymenu_menucount_temp + 2
               es popup addline server_var(_keymenu_format) "->9. More"
               es es_xformat _keymenu_optionspermenu_format_temp %1%2 server_var(_keymenu_menuname) server_var(_keymenu_menucount_temp)
               es popup submenu server_var(_keymenu_format) 9 server_var(_keymenu_optionspermenu_format_temp)
               es_xmath _keymenu_menucount_temp - 1
               es popup addline server_var(_keymenu_format) "0. Cancel"
            }
            es es_xif (server_var(_keymenu_menucount_temp) = server_var(_keymenu_menucount)) do
            {
               es popup addline server_var(_keymenu_format) "------------------"
               es popup addline server_var(_keymenu_format) "->8. Back"
               es_xmath _keymenu_menucount_temp - 1
               es es_xformat _keymenu_optionspermenu_format_temp %1%2 server_var(_keymenu_menuname) server_var(_keymenu_menucount_temp)
               es popup submenu server_var(_keymenu_format) 8 server_var(_keymenu_optionspermenu_format_temp)
               es_xmath _keymenu_menucount_temp + 1
               es popup addline server_var(_keymenu_format) "0. Cancel"
            }
         }
      }
   }
}

// keymenu send <menu name> <userid> [page]
block keymenu_send
{
   es_xsetinfo sendtimer 0
   profile begin sendtimer

   es_xgetargc _keymenu_argc
   es es_xif (server_var(_keymenu_argc) >= 4) do
   {
      es_xgetargv _keymenu_menuname 2
      es_xgetargv _keymenu_userid 3
      es es_xformat _keymenu_format _keymenu_%1 server_var(_keymenu_menuname)
      es es_xexists _keymenu_exists keygroup server_var(_keymenu_format)
      es es_xif (server_var(_keymenu_exists) = 1) do
      {
         es es_xif (server_var(_keymenu_argc) = 5) do
         {
            es_xgetargv _keymenu_pagenumber 4
            es es_xif (server_var(_keymenu_pagenumber) > 0) do
            {
               es es_xkeygetvalue _keymenu_exists server_var(_keymenu_format) information pages
               es es_xif (server_var(_keymenu_pagenumber) <= server_var(_keymenu_exists)) do
               {
                  es es_xformat _keymenu_format %1%2 server_var(_keymenu_menuname) server_var(_keymenu_pagenumber)
               }
               else do
               {
                  es_xdbgmsg 0 [KeyMenu]: There are not ' server_var(_keymenu_pagenumber) ' pages. There are only ' server_var(_keymenu_exists) '.
               }
            }
            else do
            {
               es_xdbgmsg 0 [KeyMenu]: You must enter a page number greater than 0.
            }
         }
         else do
         {
            es es_xformat _keymenu_format %11 server_var(_keymenu_menuname)
         }
         es popup send server_var(_keymenu_format) server_var(_keymenu_userid)
      }
      else do
      {
         es es_xdbgmsg 0 [KeyMenu]: The menu ' server_var(_keymenu_menuname) ' does not exist.
      }
   }
   else do
   {
      es es_xdbgmsg 0 [KeyMenu]: keymenu send <menu name> <userid> [page]
   }
   profile end sendtimer
}

//keymenu getpages <var> <menu name>
block keymenu_getpages
{
   es_xsetinfo getpagestimer 0
   profile begin getpagestimer

   es_xgetargc _keymenu_argc
   es es_xif (server_var(_keymenu_argc) = 4) do
   {
      es_xgetargv _keymenu_menuname 3
      es es_xformat _keymenu_format _keymenu_%1 server_var(_keymenu_menuname)
      es es_xexists _keymenu_exists keygroup server_var(_keymenu_format)
      es es_xif (server_var(_keymenu_exists) = 1) do
      {
         es_xgetargv _keymenu_pagevar 2
         es es_xsetinfo server_var(_keymenu_pagevar) 0
         es es_xkeygetvalue server_var(_keymenu_pagevar) server_var(_keymenu_format) information pages
      }
   }
   else do
   {
      es es_xdbgmsg 0 [KeyMenu]: keymenu getpages <var> <menu name>
   }
   profile end getpagestimer
}

// keymenu delete <menu name>
block keymenu_delete
{
   es_xsetinfo deletetimer 0
   profile begin deletetimer

   es_xgetargc _keymenu_argc
   es es_xif (server_var(_keymenu_argc) = 3) do
   {
      es_xgetargv _keymenu_menuname 2
      es es_xformat _keymenu_format _keymenu_%1 server_var(_keymenu_menuname)
      es es_xexists _keymenu_exists keygroup server_var(_keymenu_format)
      es es_xif (server_var(_keymenu_exists) = 1) do
      {
         es_xsetinfo _keymenu_deltemp 0
         es es_xkeygetvalue _keymenu_exists server_var(_keymenu_format) information pages
         while "server_var(_keymenu_deltemp) < server_var(_keymenu_exists)" "es_xdoblock keymenu/keymenu_delete_popup"
         es es_xformat _keymenu_format _keymenu_%1 server_var(_keymenu_menuname)
         es es_xkeydelete _keymenus_created server_var(_keymenu_format)
         es es_xkeygroupdelete server_var(_keymenu_format)
      }
   }
   else do
   {
      es es_xdbgmsg 0 [KeyMenu]: keymenu delete <menu name>
   }
   profile end deletetimer
}

block keymenu_delete_popup
{
   es_xmath _keymenu_deltemp + 1
   es es_xformat _keymenu_format %1%2 server_var(_keymenu_menuname) server_var(_keymenu_deltemp)
   es popup unsendname server_var(_keymenu_menuname) #all
   es popup delete server_var(_keymenu_format)
}

