aboutsummaryrefslogtreecommitdiff
path: root/examples/list-pak.pd_lua
diff options
context:
space:
mode:
Diffstat (limited to 'examples/list-pak.pd_lua')
-rw-r--r--examples/list-pak.pd_lua56
1 files changed, 56 insertions, 0 deletions
diff --git a/examples/list-pak.pd_lua b/examples/list-pak.pd_lua
new file mode 100644
index 0000000..1651582
--- /dev/null
+++ b/examples/list-pak.pd_lua
@@ -0,0 +1,56 @@
+--[[
+
+list-pak
+
+ Like [pack] for any kind of type. Argument specifies number of inlets. All
+ inlets are hot (as in Max' [pak])
+
+ --Written by Frank Barknecht
+
+--]]
+
+-- Some footils --
+
+-- selectors
+local selectors = {"float", "list", "symbol", "bang", "pointer"}
+
+-- check if item x is in table t:
+local function contains(t, x)
+ for _,v in ipairs(t) do
+ if v == x then return true end
+ end
+ return false
+end
+
+-- Pd class
+
+local ListPak = pd.Class:new():register("list-pak")
+
+function ListPak:initialize(name, atoms)
+ self.outlets = 1
+ self.stored = {}
+ if atoms[1] == nil then
+ self.inlets = 1
+ elseif type(atoms[1]) == "number" and atoms[1] >= 0 then
+ self.inlets = math.max(atoms[1], 1)
+ else
+ pd.post("list-pak: First arg must be a positive float or empty")
+ return false
+ end
+ for i=1,self.inlets do
+ table.insert(self.stored, 0)
+ end
+ return true
+end
+
+function ListPak:in_n(i, sel, atoms)
+ if not contains(selectors, sel) then
+ -- insert selector
+ self.stored[i] = sel
+ else
+ if table.getn(atoms) > 0 then
+ self.stored[i] = atoms[1]
+ end
+ end
+ self:outlet(1, "list", self.stored)
+end