[saori: Suzuka : "SuzukaW.dll"]
{
  scalar AnStart("start", "antenna", $sensorpath, $interval);
  vector AnIndex("index", "antenna", $mode);
  vector AnLog("log", "antenna", $id, $begin, $length, $mode, $npre, $npos, $opre, $opos);
  scalar AnDeleteLog("deletelog", "antenna", $siteid);
  scalar AnGet("sense", "antenna", $id);

  scalar Start("start", "headline", $sensorpath, $interval);
  vector Index("index", "headline", $mode);
  vector Log("log", "headline", $id, $begin, $length, $mode, $b1, $e1, $b2, $e2);
  scalar DeleteLog("deletelog", "headline", $siteid);
  scalar Sense("sense", "headline", $siteid);
  scalar Last("last", "headline");
  scalar SetHwnd("sethwnd", $hwnd);
}

<_OnLoadFile>
{
  @HwndListener push "SuzukaSetHwnd";
}

<OnSuzuka.Start>
{
  Suzuka.SetHwnd(%_r[0]);
  Suzuka.AnStart(%_r[1], 1);
  Suzuka.Start(%_r[2], 1);
}

<SuzukaSetHwnd>
{
  Suzuka.SetHwnd(%_r[0]);
}

#̕ӂ͊TSuzuka쓮pCxg

<OnAntennaGet>
{
  Suzuka.AnGet(%_r[0]);
}

<OnAntennaDebug>
{
  $s2 = hex(2);
  @log = Suzuka.AnLog("satos-d", 0, 1000, "Nn"," ", " ", " ", " ");
  
  system.debug(@log[4]);
}

#
#܂Suzuka̕Ԃl邽߂̂̕⏕֐B
#

#AeiOWeirdspf[^ɕϊ
# @log[0] = ID
# @log[1] = Name
# @log[2] = URL
# @log[3] = Date
# @log[4] = @index

# @index[n] = @entry

# @entry[0] = Update Flag(N/O)
# @entry[1] = Name
# @entry[2] = URL
# @entry[3] = Date
# @entry[4] = Author

[function: scalar GetAnIndexforMenu($__id, $__folder)]
{
  $c_n = 0;
  $s1 = hex(1);
  $s2 = hex(2);
  @log = Suzuka.AnLog($__id, 0, 1000, "Nn", "N" . $s1, $s2, "O" . $s1, $s2);
  @index = re.split( re.merge(@log[4], "\\\\", "\\"), $s2);
  $ct = CTime.Time();
  $limit = 40;
  $count = 0;
  each(@index)
  {
	$tmp = $__folder . $s1;
	@entry = re.split($_i, $s1);
    if (++ $count > $limit)
      break;
	$title = entityref(@entry[1]);
    $title = re.merge($title, "͂Ăȃ_CA[ - ", "");

    $isnew = "";
	if (@entry[0] == "N") {
	  $isnew = "S";
    } else {
	  $isnew = "";
    }
    $isnew << $s1;
    $dft = $ct - @entry[3];
    if ($dft > 7 * 24 * 60 * 60){
      break;
    } else {
      each (0 .. ($dft / (24 * 60 * 60))){
        $isnew << "+";
      }
    }
    if (@entry >= 4){
      $isnew << CTime.ToTime(@entry[3]) << " ";
    }
    if (@entry[2] === ".infoseek.co.jp/" || @entry[2] === ".tripod.co.jp/"){
      if ($__id == "nanika"){
        continue;
      } elsif (@log[2] === "hatena.ne.jp/"){
        $isnew << "[-] ";
      }
    }
    if (@entry >= 5){
      $author = re.merge(@entry[4], "(.+?)(?:(?:\(|i).+(?:\)|j))?", "$1");
      $author = re.merge($author, "^(.+?)(?:[\s@]*(?:||d))$", "$1");
      if (strlen($author) > 10){
        $author = substr($author, 0, 8) . " ...";
      }
      $isnew << "[" << $author << "] ";
    }
    
    @res[0] = 0; @bbs[0] = 0;

    if ($__id == "otame")
    {
      @res = re.match($title, "yS[Xgz(.+)");
      @bbs = re.match($title, "y(?:f|G|)z(.+)");
    }
    if (@res[0]) {
      $otg << "AeiyS[Xgz" << $s1;
      $otg << $isnew << @res[1]
	       << $s1 << "Link" << $s1 << @entry[2] << $s2;
    } elsif (@bbs[0]) {
      $otb << "Aeiyz" << $s1;
      $otb << $isnew << @bbs[1]
	       << $s1 << "Link" << $s1 << @entry[2] << $s2;
    } else {
      $tmp << $isnew << $title << $s1 << "Link" << $s1 << @entry[2] << $s2;
	  $out << $tmp;
      if ((++ $c_n) > 30){
        break;
      }
    }
  }

  if ($otg)
    %Antenna["otame-ghost"] = $otg;
  if ($otb)
    %Antenna["otame-bbs"] = $otb;
  return $out;
}

[function: scalar GetAnErrorIndex()]
{
  $s1 = hex(1);
  $s2 = hex(2);
  @errorlog = Suzuka.AnIndex("In");
  if (@errorlog == 0)
  {
    return Suzuka.lasterror();
  }
  $out << format("$s1$s1Aeij[$s1SubMenu$s2");
  $out << format("Aeij[\$s1$s1Aei$s1Folder$s1")
       << $_GhostPath << "sensor" << $s2;
  $out << format("Aeij[\$s1$s1$s1Separator$s2");
  $sep = "";
  $sep << $s1 <<  $s1 << "Separator" << $s1 << $s2;

  %state["S"] = " ()";
  %state["N"] = " (XV)";
  %state["H"] = " (擾s)";
  %state["P"] = " (͎s)";
  %state["U"] = " (s)";

  $logdel = format("$s1O폜$s1Event$s1OnAnDeleteLog$s1");
  $sfolder = format("$s1ZTtH_$s1Folder$s1");

  each ( @errorlog )
  {
    @entry = re.split($_i, "\t");

    $err = "";
    if ("SN" !== @entry[3]) {
      $err << "S";
    }
    $submenu = "";
    $submenu << "Aeij[\" << @entry[0] << $s1;
    $out << "Aeij[\" << $s1 << $err << @entry[0] << $s1
         << "SubMenu" << $s2;
    $out << $submenu << $s1
         << "XV" << $s1 << "Event" << $s1
         << "OnAntennaGet" << $s1 << @entry[4] << $s1 << $s2;
    $out << $submenu << $s1
         << @entry[0] << " " << $s1 << "Link" << $s1
         << @entry[1] << $s1 << $s2;

    $out << $submenu << $sep;
    $out << $submenu << $sfolder
         << $_GhostPath << "sensor\" << @entry[4] << $s2;
    $out << $submenu << $logdel << @entry[4] << $s2;

    $out << $submenu << $sep;
    $out << $submenu << $s1
         << "ŏI擾 [" << CTime.ToDate(@entry[2]) << "] "
         << %state[@entry[3]] << $s1 << "Dummy" << $s2;
    $out << $submenu << $s1 << "ŏIXV [" << CTime.ToDate(@entry[5]) << "]"
         << $s1 << "Dummy" << $s2;
  }
  return $out;
}

<AntennaForceUpdate>
{
  each (Suzuka.AnIndex("ByName"))
  {
    @entry = re.split($_i, "\t");
    $id = @entry[4];
    $name = @entry[0];
    %Antenna[$id] = GetAnIndexforMenu($id, $name );
  }
  return "1";
}

<OnAntennaUpdate>
{
  $s1 = hex(1);
  $s2 = hex(2);

  $id = %_r[0];
  each (Suzuka.AnIndex("Nn"))
  {
    @entry = re.split($_i, "\t");
    if (@entry[4] == $id)
    {
      $name = @entry[0];
      if($name)
      {
        %Antenna[$id] = GetAnIndexforMenu($id, $name );
      }
    }
  }
  cancel;
# ܂Lvȋ@\łȂ悤Ȃ̂ŃTXyh

  @log = Suzuka.AnLog($id, 0, 20, "newly-only", "N" . $s1, $s2, "O" . $s1, $s2);
  if ( @log )
  {
    each(re.split(@log[4], $s2))
    {
      @site = re.split($_i, $s1);
      $headline << "[" << (CTime.ToDate(@site[3])) << "] \_a[" << @site[1] << "]" << @site[2] << "\_a\n[]";
    }
    if ($headline)
    {
      return format($_this);
    }
  }
  else
  {
    return Suzuka.lasterror();
  }
  cancel;
}
"
\b[2]
\_q$name̍XVTCgXg\n[]
$headline\_q
\n[]
\q[close,close]
"


<OnAnDeleteLog>
{
  if (Suzuka.AnDeleteLog(%_r[0]))
  {
    return "폜܂B";
  }
  else
  {
    return Suzuka.lasterror();
  }
}


###############################################################################
#
# wbhCp
#
###############################################################################

#̕ӂ͊TSuzuka쓮pCxg
#
#܂Suzuka̕Ԃl邽߂̂̕⏕֐B
#

#OCfbNXWeirdspf[^ɕϊ
[function: scalar GetIndexforMenu($__mode, $__recent, $__old)]
{
  $s1 = hex(1);
  $s2 = hex(2);
  @index = Suzuka.Index($__mode);
  $t = CTime.Time() - 1 * 24 * 60 * 60;
  if (@index == 0)
  {
    system.debug(Suzuka.lasterror());
  }
  each(@index)
  {
    @entry = re.split($_i, "\t");
    if ($t < @entry[5]){
      $folder = $__recent;
    } else {
      $folder = $__old;
    }
    $out 
      << $folder << $s1
      << "[" << CTime.ToDate(@entry[5]) << "] " << @entry[0] <<  $s1
      << "Event" << $s1
      << "OnHeadlineLog" << $s1
      << @entry[4] << $s1
      << $s2;
  }
  return $out;
}

[function: scalar GetErrorIndex()]
{
  $s1 = hex(1);
  $s2 = hex(2);
  @errorlog = Suzuka.Index("In");
  if (@errorlog == 0)
  {
    return Suzuka.lasterror();
  }
  $out << format("$s1$s1wbhC(${@errorlog;} entries)$s1Folder$s1")
       << $_Rootpath << "headline" << $s2;
  $sep = "";
  $sep << $s1 <<  $s1 << "Separator" << $s1 << $s2;

  %state["S"] = " ()";
  %state["N"] = " (XV)";
  %state["H"] = " (擾s)";
  %state["P"] = " (͎s)";
  %state["U"] = " (s)";

  $logdel = format("$s1$s1O폜$s1Event$s1OnDeleteLog$s1");
  $sfolder = format("$s1$s1ZTtH_$s1Folder$s1");

  $max = @errorlog / 30;
  if (@errorlog % 30){
    ++ $max;
  }
  $i = 0;
  each ( @errorlog )
  {
    $p = (++ $i) / 30 + 1;
    $folder = format("wbhCj[($p/$max)\");
    @entry = re.split($_i, "\t");

    $style = "";
    if ("SN" !== @entry[3]) {
      $style << "S";
    }
    $submenu = $folder . @entry[0];

    $out << $folder << $s1 << $style << $s1 << @entry[0] << $s1
         << "SubMenu" << $s2;

    $out << $submenu << $s1 << $s1
         << "wbhCZX" << $s1 << "Event" << $s1
         << "OnHeadlineSense" << $s1 << @entry[4] << $s1 << $s2;
    $out << $submenu << $s1 << $s1
         << "wbhCO" << $s1 << "Event" << $s1 << "OnHeadlineLog"
         << $s1 << @entry[4] << $s1 << $s2;
    $out << $submenu << $s1 << $s1
         << @entry[0] << " " << $s1 << "Link" << $s1
         << @entry[1] << $s1 << $s2;

    $out << $submenu << $s1 << $sep;
    $out << $submenu << $sfolder
         << $_RootPath << "headline\" << @entry[4] << $s2;
    $out << $submenu << $logdel << @entry[4] << $s2;

    $out << $submenu << $s1 << $sep;
    $out << $submenu << $s1 << $s1
         << "ŏI擾 [" << CTime.ToDate(@entry[2]) << "] "
         << %state[@entry[3]] << $s1 << "Dummy" << $s2;
    $out << $submenu << $s1 << $s1 << "ŏIXV [" << CTime.ToDate(@entry[5]) << "]"
         << $s1 << "Dummy" << $s2;
  }
  return $out;
}

<OnHeadlineSense>
{
  Suzuka.Sense(%_r[0]);
}

<OnDeleteLog>
{
  if (Suzuka.DeleteLog(%_r[0]))
  {
    return "폜܂B";
  }
  else
  {
    return Suzuka.lasterror();
  }
}

<OnHeadlineLog>
{
  $mode = %_r[1];
  if (! $mode) {
    $mode = "";
  }
  $logmode = %_r[2];
  if (! $logmode) {
    $logmode = "newly";
  }
  $s1 = hex(1);
  $s2 = hex(2);
  @log = Suzuka.Log(%_r[0], 0, 200, $logmode, "", $s2, "@", $s2);
  if ( @log ) {
    $id   = @log[0];
    $name = @log[1];
    $url  = @log[2];
    $date = CTime.ToDate(@log[3]);
    @headlines = re.split(@log[4], $s2);
    if (@headlines == 0){
      cancel;
    }
    $header = format("\_q\b[2]\_a[$url]$name\_a$mode [$date]\n[]");
    $footer = "\n[]\q[Close,close]@@@@@@($p/$mp)\_q";
    $headline = "\t";
    $headline << $header;
    $p = 1; #y[WJE^
    $mp = @headlines / 10;
    if (@headlines % 10) {
      ++ $mp;
    }
    each (0 .. @headlines) {
      @ex_data = re.split(@headlines[$_i], $s1);
      if (@ex_data >= 2) {
        $headline << "\_a[" << @ex_data[1] << "]" << entityref(@ex_data[0]) << "\_a\n[]";
      } else {
        $headline << entityref(@headlines[$_i]) << "\n[]";
      }
      if (($_i + 1) % 10 == 0) {
        $headline << format($footer);
        ++ $p;
        if (($_i + 1) < @headlines) {
          $headline << "\t\x\c\t" << $header;
        }
      }
    }
    if (@headlines % 10 != 0) {
      $headline << format($footer);
    }
    return $headline;
  } else {
    $error = Suzuka.lasterror();
    return format("\_q $error\n[]r0 = ${%_r[0];}\n[]r1 = ${%_r[1];}\n[]r2 = ${%_r[2];}\n[]");
  }
}

# OnHeadlineUpdateCxgB
# Reference0: TCgIDB
#
#@Weirds.StickerɃZbgf[^쐬ACxgnhoRŃZbgB
#@ۂ̃wbhC\OnHeadlineLogCxgցB
#
<OnHeadlineUpdate>
{
  $s1 = hex(1);
  $s2 = hex(2);
  @log = Suzuka.Log(%_r[0], 0, 100, "newly-only", "", $s2, "", $s2);
  if ( @log ) {
    $id   = @log[0];
    $name = @log[1];
    $url  = @log[2];
    $date = CTime.ToDate(@log[3]);
    @headlines = re.split(@log[4], $s2);
    $headline = "";

    each (@headlines) {
     $lurl = $url;
      @items = re.split($_i, $s1);
      if (@items >= 2) {
        $lurl = @items[1];
      }
      $headline << @items[0] << "(" << $name << ")" << $s1 << $lurl << $s1 << $s2;
    }
    call("OnAddStickerTexts", $headline);
  } else {
    $error = Suzuka.lasterror();
    return format("\_q $error\n[]r0 = $r0\n[]r1 = $r1\n[]r2 = $r2\n[]");
  }

  return call("OnHeadlineLog", %_r[0], "wbhC", "newly-only");
}

###############################################################################
#
#
#@j[
#
#
###############################################################################


<AntennaToMenu>
{
  $menu = "";
  $s1 = hex(1);
  $s2 = hex(2);
  $separator = format("$s1$s1$s1Separator$s2");
  $menu << GetIndexforMenu("Dr", "wbhC()" . $s1, "wbhC(ߋ)" . $s1);
  $menu << $separator;

  $antenna = "";
  @index = Suzuka.AnIndex("Nn");
  each(@index)
  {
    @entry = re.split($_i, "\t");
    $name = @entry[0];
    $id   = @entry[4];
    $dir = $name;
    $tmp = %Antenna[$id];
    if ($tmp) {
      $antenna << $tmp;
    } else {
      $antenna << (%Antenna[$id] = GetAnIndexforMenu($id, $dir));
    }
  }

  $antenna << %Antenna["otame-ghost"];
  $antenna << %Antenna["otame-bbs"];
  if ($antenna){
    $menu << $s1 << $s1 << "Antenna Log" << $s1 << "Dummy" << $s2;
    $menu << $separator;
    $menu << $antenna;
    $menu << $separator;
  }
  $menu << format(entityref("$s1$s1&copy;SDN 2003.$s1Dummy$s2"));
#  $menu << $separator;

  $head = "";
  $head << $s1 << $s1 << "H/A Menu"
        << $s1 << "Dummy" << $s2 << $separator;
  return $head . $menu;
}

<ErrorToMenu>
{
  $tick = CTime.Tick();
  $menu = "";
  $s1 = hex(1);
  $s2 = hex(2);
  $separator = format("$s1$s1$s1Separator$s2");
  $menu << GetErrorIndex();
  $menu << GetAnErrorIndex();
  $menu << $separator;

  $head = "";
  $head << $s1 << "" << $s1 << "H/A Menu"
        << $s1 << "Dummy" << $s2 << $separator;
  return $head . $menu;
}
