From 7ee2475d15dc4b375d8b23adbac67136cbcf3084 Mon Sep 17 00:00:00 2001 From: Daniel Flanagan Date: Thu, 9 Dec 2021 10:56:47 -0600 Subject: [PATCH] sc --- common/sc-im/lua/dice.lua | 95 +++++++++++++++++++++++++++++++++++++++ common/sc-im/lua/h.lua | 0 common/sc-im/scimrc | 20 +++++++++ 3 files changed, 115 insertions(+) create mode 100644 common/sc-im/lua/dice.lua create mode 100644 common/sc-im/lua/h.lua create mode 100644 common/sc-im/scimrc diff --git a/common/sc-im/lua/dice.lua b/common/sc-im/lua/dice.lua new file mode 100644 index 0000000..6f345a5 --- /dev/null +++ b/common/sc-im/lua/dice.lua @@ -0,0 +1,95 @@ +local os = require "os" +local math = require "math" + +math.randomseed(os.clock()) + +function table.tostring(self, indent, done) + local result = "" + done = done or {} + indent = indent or 0 + if type(self) == "table" then + for key, value in pairs(self) do + result = result .. string.rep(" ", indent) + if type(value) == "table" and not done[value] then + done[value] = true + result = result .. + string.format( + "[%s] => table\n", + tostring(key) + ) .. + "{\n" .. + table.tostring(value, indent + 2, done) .. + "}\n" + else + result = result .. + string.format("[%s] => %s\n", + tostring(key), + tostring(value) + ) + end + end + else + result = result .. self .. "\n" + end + return result +end + +function log(s) + s = "[timestamp: " .. tostring(os.time()) .. "]\n" .. s + local out = s:gsub("\n", "\n ") + local file = io.open("/tmp/sc-im-dice.log", "a+") + file:write("\n") + file:write(out) + io.close(file) +end + +local dstr_matcher = "(%d*)d(%d+)" + +function dstr(n, s, fl) + n = tonumber(n) or 1 + local sum = 0 + for di = 1, n do + sum = sum + math.random(1, tonumber(s)) + end + return sum +end + +function rolls(s) + local pieces = {} + for nd, ds in s:gmatch(dstr_matcher) do + local sum = dstr(tonumber(nd), tonumber(ds)) + pieces[#pieces+1] = { + tostring(nd) .. "d" .. tostring(ds), + tostring(sum) + } + end + return pieces +end + +function replacerolls(s, rolls) + local result = s + for k, n in ipairs(rolls) do + result = result:gsub(n[1], n[2], 1) + end + return result +end + +function evalreturn(s) + local f = loadstring("return " .. s) + return f() +end + +function sc_parserollstr(s) + local r = rolls(s) + log(table.tostring(r)) + return evalreturn(replacerolls(s, r)) +end + +function sc_rollres(c, r) + local os = require "os" + local seed = (os.time() + os.clock()) * 10000000 + math.randomseed(seed) + log("Setting Seed: " .. tostring(seed)) + local sum = sc_parserollstr(sc.lgetstr(c, r)) + sc.lsetnum(c, r, sum) +end diff --git a/common/sc-im/lua/h.lua b/common/sc-im/lua/h.lua new file mode 100644 index 0000000..e69de29 diff --git a/common/sc-im/scimrc b/common/sc-im/scimrc new file mode 100644 index 0000000..9d914fd --- /dev/null +++ b/common/sc-im/scimrc @@ -0,0 +1,20 @@ +set autocalc +set numeric +set numeric_decimal=0 +set overlap +set xlsx_readformulas + +color "type=HEADINGS fg=WHITE bg=BLACK bold=0 dim=0 standout=0 reverse=0" +color "type=HEADINGS_ODD fg=WHITE bg=BLACK bold=0 dim=0 standout=0 reverse=0" +color "type=CELL_SELECTION_SC fg=WHITE bg=BLACK bold=1 dim=0 standout=1" +color "type=CELL_SELECTION fg=WHITE bg=BLACK bold=1 dim=0 standout=1" +color "type=STRG fg=WHITE bg=BLACK bold=0 dim=1" +color "type=NUMB fg=BLUE bg=BLACK bold=0 dim=1" +color "type=EXPRESSION fg=GREEN bg=BLACK bold=0 dim=1" +color "type=CELL_NEGATIVE fg=RED bg=BLACK bold=0 dim=1" + +nmap "J" "" +nmap "fi" ":format \"0\"" +nmap "B" "Vir" +nmap " " "Ek" +