diff --git a/host/scripts/inlretro.lua b/host/scripts/inlretro.lua index 2e4cac9..566dee0 100644 --- a/host/scripts/inlretro.lua +++ b/host/scripts/inlretro.lua @@ -1,31 +1,104 @@ -- main script that runs application logic and flow --- Dictionary table definitions -dict = {} -dict["DICT_PINPORT"] = 1 -dict["DICT_IO"] = 2 -dict["DICT_NES"] = 3 -dict["DICT_SNES"] = 4 -dict["DICT_BUFFER"] = 5 -dict["DICT_USB"] = 6 -dict["DICT_OPER"] = 7 - -pinport = {} -pinport["LED_IP"] = 65 -pinport["LED_OP"] = 66 -pinport["LED_OFF"] = 67 -pinport["LED_ON"] = 68 USB_IN = 0x80 --device to host USB_OUT = 0x00 --host to device +-- read all the C shared_dict*.h files and create tables with all values +-- This isn't 'Nam there are rules! +-- dictionary #define that start with underscore are skipped this skips over header and special cases +-- currently only finds lowercase #define statements (seems C does too!) +-- multiline comments /* comment */ are not permitted, will throw error! +-- #define statements must have a numeric value such as: #define FOO 4 +-- #define without number will error like this: "#define FOO BAR" or "#define FOO BAR - 100" is bad too! +-- fills passed in table with keys and values to be used for making usb dictionary calls +-- accepts decimal or hex when 0x00 format + +function create_dict_tables( table, file ) + assert(io.input(file, "r")) + + local count = 0 + local define = 0 + local define_end = 0 + local comment = 0 + for line in io.lines() do + count = count + 1 + --search for multiline comment opening, starting at index 1, plain search = true + if string.find( line, "/*", 1, true) then + print("\n\n!!!ERROR!!!\nmultiline comment found line number", count) + print("while parsing file:", file, "\nonly inline comments are permitted!!!\n") + error("multiline comments not allowed in dictionary files!") + end + define, define_end = string.find( line, "#define") + if define then + comment = string.find(line, "//") + --check for comment following define, if present cut out comment + if comment and (comment>define) then + line = string.sub(line, 1, comment-1 ) + end + --check for comment prior to define, skip if present + if not (comment and (comment