lua.md 2.7 KB

Lua

Ha ezt a nyelvet választod, akkor kezd a programodat a #!lua sorral.

Példa program

#!lua

-- globális változók
szamlalo = 123
szam = 3.1415
cim = 0x0048C
sztring = "valami"
tomb = {}

-- Induláskor lefuttatandó dolgok
function setup()
  -- lokális változók
  lokalisvagyok = 234
end

-- Minden képkockánál lefuttatandó dolgok, 60 FPS
function loop()
  -- Lua stílusú print
  print("Épp", "futok")
  -- MEG-4 stílusú kimenet
  printf("a számláló %d, balshift %d\n", szamlalo, getkey(KEY_LSHIFT))
end

További információk

A többi nyelvvel ellentétben ez nem szerves része a MEG-4-nek, hanem egy külsős szoftver. Emiatt nincs (és nem is lehet) tökéletesen integrálva (például nincs debuggolója és a hibaüzenetek sincsenek lefordítva). Maga a futtató a többi nyelvhez képest iszonyat lassú, de működik, használható.

A beágyazott verzió a Lua 5.4.7, több módosítással. A biztonság érdekében a nyelvből kikerült a konkurencia, valamint a dinamikus modulkezelés, fájlelérés, csővezetékek, parancsfuttatás. A coroutine, io és os függvénycsomagok és a függvényeik nincsenek (de a nyelv eszköztára és a baselib összes többi része továbbra is elérhető). A hiányzó táblák helyett azonban bekerült a MEG-4 API, ami ugyanúgy használható, mint a többi nyelvnél (pár apró, lényegtelen eltéréssel a jobb integráció kedvéért).

Amennyiben érdekel ez a nyelv, magyarul itt találsz róla bővebb információt, illetve a hivatalos Programming in Lua útmutató (angolul).

API Eltérések

  • [memsave] egyformán elfogad MEG-4 memória címet (integer) vagy Lua táblát integer számokkal (ami egy bájttömb akar lenni).
  • [memload] híváskor mindenképp egy érvényes MEG-4 memória címet vár, de aztán Lua táblát ad vissza. Ha nem speciális MMIO területre akarsz betölteni, akkor MEM_USER-t (0x30000-et) adj meg, és csak használd az adatokat a visszaadott Lua táblában.
  • [memcpy] paramétere lehet két MEG-4 memória cím, ahogy megszokott, de az egyik lehet Lua tábla is (de csak az egyik, mindkettő nem). Ezzel a funkcióval lehet adatokat másolni a MEG-4 memória és a Lua között (de az [inb] és az [outb] is működik).
  • [remap] csak Lua táblát fogad el (amiben 256 integer számnak kell lennie).
  • [maze] utolsó két paramétere (numnpc és npc) helyett lehet használni egy darab Lua táblát (amiben minden elem egy újabb Lua tábla).
  • [printf], [sprintf] és [trace] esetén nem a MEG-4 szabályait követi a [formázó sztring], hanem a Lua-ét (habár e kettő majdnem teljesen ugyanaz).