Skip to content

Instantly share code, notes, and snippets.

@nikolat
Created June 27, 2011 13:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nikolat/1048890 to your computer and use it in GitHub Desktop.
Save nikolat/1048890 to your computer and use it in GitHub Desktop.
Call PLUGIN from YAYA
USAGE1
{
void PLUGIN('SAKNIFE\SAKNIFE.DLL', 'OnSwissArmyKnifeExecute', 'empty_recycle_bin')
}
USAGE2
{
PLUGIN('BeerShower\yaya.dll', 'OnMenuExec')
// valueex[0]: OnBeerShower
}
//******************************************************************************
//PLUGIN
//******************************************************************************
#define C_CRLF2 CHR(0xd,0xa,0xd,0xa) /* 改行コードx2 */
#define C_CRLF CHR(0xd,0xa) /* 改行コード */
//------------------------------------------------------------------------------
//関数名:PLUGIN
//機能 :PLUGINにリクエストを送出します
//引数 :_argv[0]  対象DLL名
//    _argv[1]  Event ID
//    _argv[2]~ Reference0~
//------------------------------------------------------------------------------
PLUGIN
{
if PLUGINLOAD(_argv[0]) == 0 {
0
return
}
// リクエスト文字列を作成
_reqheader = /
"GET PLUGIN/2.0%(C_CRLF)/
Charset: %(CHARSETLIBEX(_argv[0]))%(C_CRLF)/
Sender: AYA%(C_CRLF)/
ID: %(_argv[1])%(C_CRLF)"
for _i = 2; _i < _argc; _i++ {
_reqheader += "Reference%(_i - 2): %(_argv[_i])%(C_CRLF)"
}
_reqheader += C_CRLF
// 実行
SHIORI3FW.RequestLib(_argv[0], _reqheader)
_script = ''
_event = ''
for _i = 0; _i < ARRAYSIZE(var.lib.key); _i++ {
case var.lib.key[_i] {
when 'Script'
_script = var.lib.value[_i]
when 'Event'
_event = var.lib.value[_i]
}
}
_script
SHIORI3FW.MakeValueexVariablePlugin(_event)
}
//------------------------------------------------------------------------------
//関数名:PLUGINLOAD
//機能 :PLUGINを読み込みます
//引数 :_argv[0]  対象DLL名
//------------------------------------------------------------------------------
PLUGINLOAD
{
// load エラーなら抜ける 初回のloadならGET Versionを送出する
_r_load = LOADLIB(_argv[0])
if !_r_load {
0
return
}
if _r_load == 1 {
if SUBSTR(SHIORI3FW.SendNOTIFYVersionPlugin(_argv[0]), 0, 1) != '2' {
UNLOADLIB(_argv[0])
0
return
}
SAORI.DllList ,= _argv[0]
}
1
}
//------------------------------------------------------------------------------
//関数名:SHIORI3FW.SendNOTIFYVersionPlugin
//機能 :PLUGINへID: versionを送出します
//引数 :_argv[0] PLUGINファイル名
//------------------------------------------------------------------------------
SHIORI3FW.SendNOTIFYVersionPlugin
{
SHIORI3FW.RequestLib(_argv[0],/
"NOTIFY PLUGIN/2.0%(C_CRLF)/
Charset: %(CHARSETLIBEX(_argv[0]))%(C_CRLF)/
Sender: AYA%(C_CRLF)/
ID: version%(C_CRLF2)")
LIB.STATUSCODE
}
//------------------------------------------------------------------------------
//関数名:SHIORI3FW.MakeValueexVariablePlugin
//機能 :リクエストヘッダからvalueex*変数を作成します
//引数 :_argv[0] イベントID
//------------------------------------------------------------------------------
SHIORI3FW.MakeValueexVariablePlugin
{
SHIORI3FW.ValueexList = IARRAY
valueex0 = _argv[0]
valueex[0] = _argv[0]
for _i = 0; _i < ARRAYSIZE(var.lib.key); _i++ {
if SUBSTR(_keyname = var.lib.key[_i], 0, 9) == "Reference" {
_n = TOINT(SUBSTR(_keyname, 9, 3)) + 1
_varname = "valueex%(_n)"
void EVAL("%(_varname) = var.lib.value[_i]")
SHIORI3FW.ValueexList ,= _varname
valueex[_n] = var.lib.value[_i]
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment