DnDじゃなくて
GHOST自身が作成する方法
NAR
\![execute,compressarchive]を使う
updates2.dau
YAYAで頑張って作る
YAYAで頑張って作ってみた
100行プログラミング。 Download => daumaker.nar
- developer_options.txtを読んで除外ファイルを考慮している。
- profileフォルダやvarフォルダはデフォルトで除いている。
- GHOSTのルートディレクトリにupdates2.dauが作成される。
- updates2.dauの正式な書式の仕様って何処にあるの?
OnMenuExec
{
"\![get,property,OnGetGhostPathFromPlugin,ghostlist(%(sender)).path]\e"
res_event = 'OnPluginExec'
res_reference[0] = "Version=%(version())"
res_reference[1] = 'From=DauMaker'
}
OnGetGhostPathFromPlugin
{
_path = reference[0]
sys.fnc.MakeUpdates2Dau(SUBSTR(_path, 0, STRLEN(_path) - 1))
res_event = 'OnUpdatedataCreated'
res_marker = version()
}
sys.fnc.MakeUpdates2Dau
{
_path = _argv[0]
_delim = CHR(0x01)
_ignore = sys.fnc.getIgnoeFiles(_path, _delim)
_files = SPLIT(sys.fnc.getUpdateFiles(_path, _delim, _ignore), _delim)
_fname = _path + '\updates2.dau'
if !FOPEN(_fname, 'w')
return
foreach _files; _f {
_relative_path = REPLACE(REPLACE(_f, _path + '\', ''), '\', '/')
_hash = TOLOWER(FDIGEST(_f, 'MD5'))
FWRITE(_fname, _relative_path + CHR(0x01) + _hash + CHR(0x01))
}
FCLOSE(_fname)
}
sys.fnc.getUpdateFiles
{
_path = _argv[0]
_delim = _argv[1]
_ignorestr = _argv[2]
_ignores = SPLIT(_ignorestr, _delim)
if !_ignorestr; _ignores = IARRAY()
_ignore_default = '\\profile|\\var|updates2\.dau|update\.txt|ngm\.dat'
_fenum = FENUM(_path, _delim)
if !_fenum; return
_fs = SPLIT(_fenum, _delim)
_ret = ''
foreach _fs; _f {
if RE_MATCH(_f, _ignore_default); continue
_sub_ret = ''
if SUBSTR(_f, 0, 1) == '\' {
if ASEARCH(_path + _f + '\', _ignores) >= 0; continue
_sub_ret = sys.fnc.getUpdateFiles(_path + _f, _delim, _ignorestr)
if !_sub_ret; continue
}
else {
if ASEARCH(_path + '\' + _f, _ignores) >= 0; continue
_sub_ret = _path + '\' + _f
}
if _ret != ''; _ret += _delim
_ret += _sub_ret
}
_ret
}
sys.fnc.getIgnoeFiles
{
_path = _argv[0]
_delim = _argv[1]
_fname = _path + '\developer_options.txt'
if !FOPEN(_fname, 'r')
return
_ret = ''
while 1 {
if (_line = FREAD(_fname)) == -1; break
_params = IARRAY()
foreach _line; _l {
_params ,= CUTSPACE(_l)
}
if ASEARCH('noupdate', _params) >= 1 {
if _ret != ''; _ret += _delim
_ret += REPLACE(_path + '\' + _params[0], '/', '\')
}
}
FCLOSE(_fname)
_ret
}
version
{
'DauMaker/1.0'
}