iz[Z^[Dj Lua֘A̐


͂߂

uiz[Z^[DjŎgLuavłSachikoC-Luaƕ\L܂B

{c[ł́A͂ꂽeUTF-8ɕϊāALuaɓnĎs܂B
āAVtgJISɂ܂͔Ȃ͂łAppȊO̕ꍇ͐FXƒӂĉB

luaL_openlibsĂяoĂ̂ŁALua̕WCug܂BA쌋ʂ͂قƂǖmFłB
܂Aprint("abc")݂Ȃ͎̂g܂B\eRETɑĉB

At@xbg啶Ŏn܂镶SachikoC-Lua̗\Ƃ܂BϐȂǂ̐擪̓At@xbgɂĉB

{^s{^񉟂т luaL_newstate()AluaL_dostring()Alua_close() ĂяoĂ܂B
āAϐȂǂێĂƂ͂ł܂B

lua-5.2.1.tar.gz ̃\[X𖳕ύX̂܂܂őgݍł܂BȂ̂ŁAlVC++double^(_ 64bitjłB
SachikoC-LuaƎ̕ȊÓALua5.2.1p̃hLgQƂĉB
ALuaɗpӂĂ̂SachikoC-LuaŊpłȂ@\܂B


SachikoC-Lua }N

	SEARCH_ADDRESS_START
	SEARCH_ADDRESS_END
ꂼAuJnAhXvuIAhXvɒu܂B擪0xt܂B
""̒ɋLqĂASEARCH_ADDRESS_START_OLDȂǂ̋LqłAPŒu܂̂ŒӂĉB


SachikoC-Lua ֐ꗗ

	value, succeeded = DPEEK1(address)
	value, succeeded = DPEEK2(address)
	value, succeeded = DPEEK4(address)
Faddressil^jǂݏoAhX
߂lPFvalueil^jǂݏoȂΓǂݏolAǂݏosȂΕsl
߂lQFsucceedediboolean^jǂݏoȂtrueAǂݏosȂfalse

^[QbgvZX̃Aꂼ{1,2,4}oCgǂݏo܂B
gGfBA`̕Ƃĉ߂āAvalueɕԂ܂B
{c[̃LbVoRAړǂ݂܂B
vZXǂ݂ɍŝŁAx͒xȂ܂BɂCPEEKngĉB


	value, succeeded = CPEEK1(address)
	value, succeeded = CPEEK2(address)
	value, succeeded = CPEEK4(address)
{c[̃LbVoRœǂވȊÓADPEEKnƓłB
ALbVɓ̂͑S̈̂̈ꕔȂ̂ŁALbVǂ܂Ƃ͌܂B
POKEnŏ݂sĂALbVɔf܂B
񂾗̈Ăѓǂނ悤ȏ̏ꍇ́ADPEEKngĉB


	value, succeeded = MPEEK1(address)
	value, succeeded = MPEEK2(address)
	value, succeeded = MPEEK4(address)
u^[QbgiājLvŕۑĂǂވȊÓADPEEKnCPEEKnƓłB
eωAhXꍇȂǂ̔rΏۂƂĎg܂B


	succeeded = POKE1(address, value)
	succeeded = POKE2(address, value)
	succeeded = POKE4(address, value)
PFaddressil^jރAhX
QFvalueil^jޒl
߂lFsucceedediboolean^jݐȂtrueAݎsȂfalse

^[QbgvZX̃ɁAꂼ{1,2,4}oCg݂܂B
value̒lgGfBA`̐Ƃď݂܂B
{c[̃LbVɂ͔f܂B


	address, size, addressNext, isRW, isR = MEM_INFO(address)
Faddressil^j擾AhX
߂lPFaddressil^j擾ȂΈ̂܂܂̒lA擾sȂ0
߂lQFsizeil^j擾ȂΎ̃̈܂ł̃TCYA擾sȂ0
߂lRFaddressNextil^j擾ȂΎ̃̈̃AhXA擾sȂ0
߂lSFisRWiboolean^j擾ȂΓǂݏ\ۂA擾sȂfalse
߂lTFisRiboolean^j擾ȂΓǂݏo\ۂA擾sȂfalse

w肵AhX܂ރ̈ɊւāAWin32API(VirtualQueryEx)p
Ẽ̈܂ł̃TCY
Ẽ̈̃AhX
Eǂݏ\ۂ
Eǂݏo\ۂ
̏擾܂B
AVirtualQueryExŎ擾łƂ͈قȂAAhXy[WEɐ؂艺悤ȂƂ͂܂BAuǂݏ\ۂvuǂݏo\ۂvłB
͓̈ɂȂĂ̂ŁAJnAhX珇Ƀ̈񋓂āuǂݏ\ȗ̈ł΁Asizefor[vvAŜ̊{̗ɂȂ܂BiASearch^ugĒPȌ̂ł΁Â悤ȂƂ͈ӎȂōς݂܂Bj
擾addressNext0ɂȂĂꍇ́Aũ̈v݂ȂƂƂɂȂ܂B


	ADRSLIST_FREE()
A߂lFȂ

ʂ̃AhXꗗāAusĂȂԁvɂ܂B
Search^úuʏv{^ƓłB


	ADRSLIST_INIT()
A߂lFȂ

ʂ̃AhXꗗA[ɂ܂B
Jn鎞Ɏg܂B


	isExist = ADRSLIST_IS_EXIST()
FȂ
߂lFisExistiboolean^jAhXꗗ݂ȂtrueA݂ȂȂfalse

{^ꂽꍇɁAu񌟍vׂui荞݌vׂ̔fɎg܂B
truȅꍇ́ui荞݌vAfalsȅꍇ́u񌟍vׂAƂƂɂȂ܂B


	isFull = ADRSLIST_IS_FULL()
FȂ
߂lFisFulliboolean^jAhXꗗtԂȂtrueA󂫂Ȃfalse

ʂ̃AhXő匏idlł1048576jLĂAȂǉłȂtrueɂȂ܂BA


	length = ADRSLIST_LENGTH()
FȂ
߂lFlengthil^jAhXꗗ̋LĂ錏

ʂ̃AhXLĂ錏Ԃ܂B
AADRSLIST_IS_EXIST() false ̎ɂ͈Ӗ܂B


	ADRSLIST_ADD(address)
Faddressil^jAhXꗗɒǉAhX
߂lFȂ

ʂ̃AhXꗗ̖ɁAaddressǉ܂B
AADRSLIST_IS_FULL() true ̏ꍇɂ͉܂B


	address = ADRSLIST_GET(index)
Findexil^jAhXꗗɋLĂAhX̔ԍ
߂lFaddressil^jAhXꗗɋLĂAhX

ʂ̃AhXꗗindexԖڂɋLĂAhX擾܂B
index͈̔͂́A0ȏADRSLIST_LENGTH()łB
AADRSLIST_IS_EXIST() false ̎ɂ͈Ӗ܂B


	ADRSLIST_DEL(index)
Findexil^jAhXꗗɋLĂAhX̔ԍ
߂lFȂ

ʂ̃AhXꗗindexԖڂɋLĂAhX폜܂B
index͈̔͂́A0ȏADRSLIST_LENGTH()łB
(index+1)Ԗڈȍ~̃AhXOɋl߂Ȃǂ̏͂܂BindexԖڂ󂫂ɂȂ܂B
ADRSLIST_LENGTH()ω܂B
ƂADRSLIST_DEFRAG()ĂяoāAl߂ĉB


	ADRSLIST_DEFRAG()
A߂lFȂ

ADRSLIST_DEL()ɂĂł󂫂l߂鏈s܂B
l߂AADRSLIST_LENGTH()ω܂B


uv{^Ɠl̏usv{^ōs
uSearchvƓl̏uExecvōsɂ́Aȉ̂悤ȕusR[h͗vɋLqāusv{^ĉB
ȂAuExecvŁuRET̓e(܂̓G[̓e)\vɕ\éAuSearchvł̓|bvAbv_CAOŕ\܂B
	function COND(AD)
	iu͗v̓ej
	end

	if ADRSLIST_IS_EXIST() then

	 LENGTH = ADRSLIST_LENGTH()
	 for INDEX=0,LENGTH-1 do
	  AD = ADRSLIST_GET(INDEX)
	  if (not COND(AD)) then ADRSLIST_DEL(INDEX) end
	 end
	 ADRSLIST_DEFRAG()

	else

	 ADRSLIST_INIT()
	 AD_BASE = SEARCH_ADDRESS_START
	 while 1 do
	  AD_BASE,SIZE,AD_NEXT,IS_RW,IS_R = MEM_INFO(AD_BASE)
	  if IS_RW then
	   AD_END = SIZE-1+AD_BASE
	   if (AD_END > SEARCH_ADDRESS_END) then AD_END = SEARCH_ADDRESS_END end
	   for AD=AD_BASE,AD_END do
	    if (COND(AD)) then ADRSLIST_ADD(AD) end
	   end
	  end
	  if (ADRSLIST_IS_FULL()) then break end
	  AD_BASE=AD_NEXT
	  if (AD_BASE==0) then break end
	  if (AD_BASE>SEARCH_ADDRESS_END) then break end
	 end

	end

