From 41c3948262076644763bd64279d51304d0872cb8 Mon Sep 17 00:00:00 2001 From: paul eeepc Date: Mon, 10 Jul 2017 03:16:45 -0500 Subject: [PATCH] Completed parsing of dictionary #define statements to create dictionary tables. Now lua scripts can make usb dictionary calls based off of C shared_dict*.h files. Don't have to have separate lua tables for host, and C #defines for firmware to keep things aligned! Tested and working on all current shared_dict*.h files including some simple error checking. Does not permit multi-line comments, but inline is fine and properly accounted for. defines starting with underscore are skipped to not trip up header define guard statement. defines can't be set to other defines, macros, or math, only a decimal/hex number. Tested and able to turn on/off/ip/op LED on kazzo. --- host/scripts/inlretro.lua | 105 ++++++++++++++++++++++++++++++++------ 1 file changed, 89 insertions(+), 16 deletions(-) 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