関数と定数が DxLib.as として出力されます。めっちゃ手抜きです。
関数と定数が DxLib.as として出力されます。めっちゃ手抜きです。
#module// 指定オフセットから右から検索していき見つけた位置を返す。(1byteのみ)#defcfunc searchR1 str _in, int ps, int shidx = -1in = _inmax = strlen(in)repeat max, psif peek(in, max-cnt) == sh : idx = max-cnt : breakloopreturn idx// instr 右から検索版#defcfunc instrl var s1, str s2ind = 0repeatres = instr(s1, ind, s2)if res == -1 : breakind += res + 1loopreturn ind-1#defcfunc GetMacroName str _tmp, var macro, var constsdim tmp, 1024tmp = _tmpsdim macro, 128sdim const, 128flag = 0if instr(tmp, 0, "public const int ") != -1{flag = 1sdim res, 128split tmp, " ", res;markpos = -1repeat length(res)if res(cnt) == "="{tmpcnt = cnt// スペースの可能性を考慮して検索(マクロ名を取得)repeat tmpcnttmpcnt--if res(tmpcnt) != ""{macro = res(tmpcnt)break}loop// スペースの場合があるので連結処理をする(定数値を取得)tmpcnt = cnt + 1 // 足しておくsdim tmpconst, 128repeat length(res)-tmpcnt, tmpcnttmpconst += res(cnt)+" "loop// セミコロンを除去tmpconst = strtrim(tmpconst, 0, ' ')const = strtrim(tmpconst, 0, ';')//}loop}return flag#defcfunc GetFuncName str _tmp, var _fnc, array _argsdim tmp, 1024tmp = _tmpsdim _arg, 256 : sdim _fnc, 128num = -1if instr(tmp, 0, "extern") != -1{num = 0ks = instr(tmp, 0, "(")ke = instrl(tmp, ")")if ks != -1 | ke != -1{args = strmid(tmp, ks+1, ke-ks-1)tmp2 = strmid(tmp, 0, ks)tmp2 = strtrim(tmp2, 0, ' ')ps = searchR1(tmp2, 0, ' ')if ps != -1 {// 関数名を取得tmp3 = strmid(tmp2, ps, strlen(tmp2))_fnc = strtrim(tmp3, 0, ' ')// 引き続き引数を取得// 引数がないケースを取得cargs = argscargs = strtrim(cargs, 3, ' ')cargs = strtrim(cargs, 3, '\t')if cargs == "" : num = 0 : return num// 引数ありのケースsdim tmp2split args, ",", tmp2num = statrepeat numtmp3 = tmp2(cnt)tmp3 = strtrim(tmp3, 3, '\t')tmp3 = strtrim(tmp3, 0, ' ')ps = searchR1(tmp3, 0, ' ')if ps != -1{tmp4 = strmid(tmp3, 0, ps)tmp4 = strtrim(tmp4, 0, ' ')_arg(cnt) = tmp4}loop}}}return num#globaldialog "cs",16if stat == 0 : endfname = refstrnotesel bufnoteload fnamesdim def, 1024*512sdim fncs, 1024*512repeat notemaxnoteget tmp, cntif GetMacroName(tmp, macro, const){def += "#define global "+ macro +" "+ const +"\n"}num = GetFuncName(tmp, fnc, arg)if num != -1{sdim outargsrepeat numif arg(cnt) == "int" || arg(cnt) == "ulong"{outargs += "int"}else:if arg(cnt) == "System.Text.StringBuilder" || arg(cnt) == "string"{outargs += "str"}else:if arg(cnt) == "double"{outargs += "double"}else:if arg(cnt) == "float"{outargs += "float"}else{outargs += "sptr"}// 最後以外は , をつけるif cnt != num - 1 : outargs += ","loop// 接頭辞の dx_ を外す(手抜き)split fnc, "dx_", fnc2fncs += "#func global "+ fnc2(1) +" \""+ fnc +"\" "+outargs+"\n"}loopsdim outbuf, 1024*512notesel outbufnoteadd "#ifndef __DXLIB__"noteadd "#define __DXLIB__"noteadd "#uselib \"DxLib.dll\""noteadd fncsnoteadd defnoteadd "#endif"notesave "DxLib.as"