[saori: Weirds : "Weirds.dll"]
{
  scalar SetHwnd("set_hwnd", $hwnd);
  scalar SetOwnerID("owner_id", $id);
  scalar Show("show");
  scalar ShowMenu("show", $menu);
  scalar SetStyle("set_style", $style);
  scalar SetMenu("set_menu", $menu);
  scalar NotifyKeyPress("notify_keypress", $keyid);
  scalar MenuClose("menu_close");
}

<_OnLoadFile>
{
  @DoubleClick push "MenuPopUp";
  @KeyPress push "OnNotifyKeyPress";
  @HwndListener push "WeirdsHwnd";
}

<WeirdsHwnd>
{
  Weirds.SetHwnd(%_r[0]);
}

<OnSelfReload>
{
  $crlf = hex("0d") . hex("0a");
  $desc = readtextfile($_GhostPath . "descript.txt") . $crlf;
  @r = re.match( $desc, "(?:(?:.*?|name,(.+?))\r?\n)*");
  $name = @r[1];
}
"\![change,ghost,$name]"

[function: scalar epoc2timelen($__epoc)]
{
  $days = 24 * 60 * 60;
  $hors = 60 * 60;

  $out = "";
  $sec = $__epoc;
  $day = $sec / $days;

  if ($day){
    $sec %= $days;
    each (0 .. (2 - strlen($day))){$out << " ";}
    $Out << $day << "";
  }

  $hour = $sec / $hors;
  if ($hour){
    $sec %= $hors;
    each (0 .. (2 - strlen($hour))){$out << " ";}
    $out << $hour << "";
  }

  $min = $sec / 60;
  if ($min){
    $sec %= 60;
    each (0 .. (2 - strlen($min))){$out << " ";}
    $out << $min << "";
  }
  if ($sec){
    each (0 .. (2 - strlen($sec))){$out << " ";}
    $out << $sec << "b";
  }
  return $out;
}

<MenuPopUp>
(%_r[3] == "0")
{
  $ghostuptime = epoc2timelen( CTime.Time() - $StartTime);
  $procuptime =  epoc2timelen( CTime.ProcUptime());
}
"
\_q
\q[O/Aei,OnShowMenu]\n[]
@\q[wbhC,OnShowMenu,Head]\n[]
@@\q[S[Xg,OnStickerMenu]\n[]
@@@\q[,close]\n[]
\n[]
@@@@@\q[[h,OnSelfReload]\n[]
ғԁF\n[]
@S[XgF$ghostuptime\n[]
@vZXF$procuptime\n[]
\_q
"

<OnMenuClose>
{
  Weirds.MenuClose();
  return 0;
}

<OnNotifyKeyPress>
{
  Weirds.NotifyKeyPress(%_r[0]);
}

[function: scalar GhostMenu()]
{
  $tick = CTime.Tick();
  $s1 = hex(1);
  $s2 = hex(2);
  $crlf = hex("0d") . hex("0a");
  $basepath = $_GhostPath . "..\..\..\";
  @ghosts = enumfolders($basepath . "*");

  each (@ghosts) {
    $id = $_i;
    if ($id == "." || $id == "..") {
      continue;
    }
    $desc = readtextfile($basepath . $_i . "\ghost\master\descript.txt") . $crlf;
    @r = re.match( $desc, "(?:(?:.*?|name,(.+?)|sakura\.name,(.+?)|kero\.name,(.+?))\r?\n)*");
    $name = @r[1];
    if ($name) {
      %sakura[$id] = @r[2];
      %kero[$id] = @r[3];
      %name[$id] = $name;
      if (%sort === $name) {
        $tmp_id = %sort[$name];
        erase %sort[$name];
        %sort[$name . " (" . $tmp_id . ")"] = $tmp_id;
        %sort[$name . " (" . $id . ")"] = $id;
      } else {
        %sort[$name] = $id;
      }
    }
  }

  $pages = %sort / 20;
  if (%sort % 20) {
    ++ $pages;
  }
  $page = 1;
  $count = 0;


  $out = format("$s1$s1Ghost Menu (Total: ${%sort;} entries)$s1Dummy$s2");
  each (%sort){
    $name = $_key;
    $id = $_val;
    $truename = re.merge(%name[$id], "\""", "\\\""");
    $sakura = %sakura[$id];
    $kero   = %kero[$id];
    if ($name) {
      $name = re.merge($name, "\\\\", "\\");
      $folder = "";
      $folder << "S[Xg(" << $page << "/" << $pages << ")\" << $name << $s1 << $s1 ;
      $out << $folder << $name  << $s1 << "Dummy" << $s2;
      $out << $folder << $s1 << "Separator" << $s2;
      $out << $folder << $sakura << "" << $s1 << "Script" << $s1 << "\![call,ghost," << $truename << "]" << $s2;
      $out << $folder << "vr[" << $s1 << "Script" << $s1 << $s1
           << "IfGhost: " << $sakura << $s1
           << "Script: " << "\_q\0\s[0]\1\s[10]\_seXg\e" << $s1
           << "Marker: US[Xgj[" << $s1
           << "Option: notranslate" << $s1
           << $s2;
      $out << $folder << "S[XgtH_J" << $s1 << "Folder" << $s1 << $basepath << $id << $s2;
      $out << $folder << $s1 << "Separator" << $s1 << $s2;
      $out << $folder << "ID: " << $id << $s1 << "Dummy" << $s2;
      if (strlen($sakura)){
        $out << $folder << "0: " << $sakura << $s1 << "Dummy" << $s2;
      }
      if (strlen($kero)){
        $out << $folder << "1: " << $kero << $s1 << "Dummy" << $s2;
      }
      ++ $count;
      if (($count % 20) == 0) {
        ++ $page;
      }
    }
  }
  $out << $s1 << $s1 << $s1 << "Separator" << $s2;
  $out << $s1 << $s1 << entityref("&copy;SDN 2003 (") << (CTime.Tick() - $tick) << " msec.)" << $s1 << "Dummy" << $s2;
  return $out;
}

<GhostMenuUpdate>
{
  $GhostMenu = GhostMenu();
}

<OnWeirdsInit>
{
  $s1 = hex("1");
  $s2 = hex("2");
  $style = format(chain("style_string"));
  chain("AntennaForceUpdate");

  Weirds.SetStyle($style);
  $s1 = hex("1");

  Weirds.SetHwnd(%_r[0]);
  Weirds.SetOwnerID(%_r[1]);
  $GhostMenu = GhostMenu();
}


<WeirdsShow>
{
}
<WeirdsHide>
{
}

<OnWeirdsFinalize>
{
}

<OnShowMenu>
{
  Weirds.ShowMenu(chain("AntennaToMenu"));
  return "\b[-1]";
}
(%_r[0] == "Note")
{
  $s1 = hex("1");
  $s2 = hex("2");
  Weirds.ShowMenu(chain("ErrorToMenu") . $GhostMenu .
  format("$s1$s1$s1Separator$s2$s1$s1ċN$s1Event$s1OnSelfReload$s1$s2"));
  return "\b[-1]";
}

<OnAddStickerTexts>
{
}

<OnStickerMenu>
{
  Weirds.ShowMenu($GhostMenu);
  return "\b[-1]";
}

<style_string>
"
foreground.image$s1${$_GhostPath;}..\..\shell\master\menu_foreground.png$s2
foreground.font.color$s1255,255,255$s2
foreground.base.color$s10,0,0$s2
background.image$s1${$_GhostPath;}..\..\shell\master\menu_background.png$s2
background.font.color$s10,0,0$s2
background.base.color$s1255,255,255$s2
sidebar.image$s1${$_GhostPath;}..\..\shell\master\menu_sidebar.png$s2
sidebar.align.y$s1bottom$s2
background.align.x$s1right$s2
background.align.y$s1bottom$s2
menu.item.width$s1190$s2
sidebar.width$s116$s2
menu.item.fontname$s1MS UI Gothic$s2
menu.disable.font.color$s1126,126,128$s2
"
