├── .gitignore ├── README.md ├── deprecated ├── README.md └── help │ ├── o.expr.maxhelp │ ├── o.message.maxhelp │ ├── o.pak.maxhelp │ ├── o.unless.maxhelp │ └── o.when.maxhelp ├── dev-internal ├── clippings │ ├── o.clipping.ComposeExprDisplay.maxpat │ ├── o.clipping.PackExprRoute.maxpat │ ├── o.clipping.lambda.recursion.maxpat │ └── o.clipping.mtof.maxpat ├── context-patcherargs │ ├── o.patcherargs-inner.maxpat │ ├── o.patcherargs.maxhelp │ └── o.patcherargs.maxpat ├── demos │ ├── needlovefromjohn │ │ ├── o.demo.heartbeat.maxpat │ │ ├── o.demo.rhythmengine.maxpat │ │ ├── o.demo.runtime.maxpat │ │ ├── o.demo.sequencer.maxpat │ │ └── o.demo.sequencer2.maxpat │ ├── o.demo.pack.kslider.maxpat │ └── using-rand-func-with-presets.maxpat ├── doc-xml-generator.maxpat └── error-generating │ └── error-generator.maxpat ├── dev ├── README.md ├── aspect │ ├── abstractions │ │ ├── o.aspect.assert.maxpat │ │ ├── o.aspect.joinpoint.maxpat │ │ ├── o.aspect.log.outlet.maxpat │ │ ├── o.aspect.print.maxpat │ │ ├── o.aspect.profile.maxpat │ │ ├── o.aspect.receive.maxpat │ │ ├── o.aspect.send.maxpat │ │ ├── o.aspect.udpsend.maxpat │ │ ├── o.in.maxpat │ │ ├── o.init.maxpat │ │ ├── o.out.maxpat │ │ └── o.port.maxpat │ ├── o.demo.aspect.maxhelp │ └── o.demo.aspect.maxpat ├── demos │ └── o.snapshot~.click-id.maxpat ├── help │ ├── o.context.maxhelp │ ├── o.gui.attach.maxhelp │ ├── o.mappatch.maxhelp │ ├── o.schedule~.maxhelp │ ├── o.slip.decode.maxhelp │ ├── o.slip.encode.maxhelp │ ├── o.snapshot~.maxhelp │ ├── o.table.maxhelp │ ├── o.timetag.join~.maxhelp │ ├── o.timetag.split~.maxhelp │ ├── o.timetag~.maxhelp │ └── o.validate.maxhelp ├── o.betweentimes.maxhelp ├── o.betweentimes.maxpat ├── o.callpatch.maxhelp ├── o.callpatch.maxpat ├── o.delay.maxhelp ├── o.delay.maxpat ├── o.diff.maxhelp ├── o.diff.maxpat ├── o.edge~.maxhelp ├── o.edge~.maxpat ├── o.expr.external-editor.maxpat ├── o.let.maxhelp ├── o.let.maxpat ├── o.metro.maxhelp ├── o.metro.maxpat ├── o.osc-p.maxhelp ├── o.osc-p.maxpat ├── o.oscbundle.maxhelp ├── o.oscbundle.maxpat ├── o.poissonprocess.maxhelp ├── o.poissonprocess.maxpat ├── o.prependself.maxhelp ├── o.prependself.maxpat ├── o.routeself.maxhelp ├── o.routeself.maxpat ├── o.stream.maxhelp ├── o.stream.maxpat ├── o.stream2.maxhelp ├── o.stream2.maxpat ├── o.timetag.fromfloat~.maxhelp ├── o.timetag.fromfloat~.maxpat ├── o.timetag.tofloat~.maxhelp └── o.timetag.tofloat~.maxpat ├── docs ├── _c74_common.css ├── _c74_common.xml ├── _c74_common.xsl ├── _c74_compat.html ├── _c74_platform.xsl ├── refpages │ ├── _c74_ref_common.xsl │ ├── _c74_ref_modules.xml │ └── odot_ref │ │ ├── _c74_contents.xml │ │ ├── _c74_ref.xsl │ │ ├── _expr.functions.xml │ │ ├── o.append.maxref.xml │ │ ├── o.change.maxref.xml │ │ ├── o.collect.maxref.xml │ │ ├── o.compose.maxref.xml │ │ ├── o.cond.maxref.xml │ │ ├── o.dict.maxref.xml │ │ ├── o.difference.maxref.xml │ │ ├── o.display.maxref.xml │ │ ├── o.edge~.maxref.xml │ │ ├── o.explode.maxref.xml │ │ ├── o.expr.codebox.maxref.xml │ │ ├── o.flatten.maxref.xml │ │ ├── o.gui.attach.maxref.xml │ │ ├── o.if.maxref.xml │ │ ├── o.intersection.maxref.xml │ │ ├── o.listenumerate.maxref.xml │ │ ├── o.pack.maxref.xml │ │ ├── o.prepend.maxref.xml │ │ ├── o.print.maxref.xml │ │ ├── o.printbytes.maxref.xml │ │ ├── o.route.maxref.xml │ │ ├── o.schedule.maxref.xml │ │ ├── o.select.maxref.xml │ │ ├── o.timetag.maxref.xml │ │ ├── o.union.maxref.xml │ │ ├── o.var.maxref.xml │ │ └── template │ │ └── template.xml └── tutorials │ ├── _c74_tut_common.xsl │ └── odot-tut │ ├── 01_max_and_odot.maxref.xml │ └── _c74_tut.xsl ├── examples ├── o.demo.Euclidean_distance.maxpat ├── o.demo.basic.sequencer.maxpat ├── o.demo.betweentimes.maxpat ├── o.demo.cellular.automata.maxpat ├── o.demo.counter.maxpat ├── o.demo.datarecorder.list.maxpat ├── o.demo.datarecorder.subbundles.maxpat ├── o.demo.delay.maxpat ├── o.demo.delayline.maxpat ├── o.demo.floattotime.maxpat ├── o.demo.maxcontrols.maxhelp ├── o.demo.maxcontrols.maxpat ├── o.demo.prefixes.maxpat ├── o.demo.recurrence.maxpat ├── o.demo.recursion.maxpat ├── o.demo.sfplayer.1.maxhelp ├── o.demo.sfplayer.2.maxhelp ├── o.demo.substituteaddress.maxpat ├── o.demo.typewriter.maxpat ├── o.demo.xy.direction.maxpat ├── o.sfplayer.1.maxpat └── o.sfplayer.2.maxpat ├── extras └── odot │ ├── o.compatibility │ ├── odot-max-compatibility.maxpat │ └── odot-osc-compatibility.maxpat │ ├── o.examples.overview.maxpat │ ├── o.expr.overview.maxpat │ ├── o.glossary.maxpat │ ├── o.overview.maxpat │ ├── o.start.here.maxpat │ └── o.tutorial.maxpat ├── help ├── o.append.maxhelp ├── o.atomize.maxhelp ├── o.change.maxhelp ├── o.collect.maxhelp ├── o.compose.maxhelp ├── o.cond.maxhelp ├── o.dict.maxhelp ├── o.difference.maxhelp ├── o.display.maxhelp ├── o.downcast.maxhelp ├── o.explode.maxhelp ├── o.expr-helpers │ ├── o.linear_ramp.maxpat │ ├── odot-abs.maxhelp │ ├── odot-acos.maxhelp │ ├── odot-acosh.maxhelp │ ├── odot-add.maxhelp │ ├── odot-add_assign.maxhelp │ ├── odot-and.maxhelp │ ├── odot-andalso.maxhelp │ ├── odot-apply.maxhelp │ ├── odot-aseq.maxhelp │ ├── odot-asin.maxhelp │ ├── odot-asinh.maxhelp │ ├── odot-assign.maxhelp │ ├── odot-assign_to_index.maxhelp │ ├── odot-assigntobundlemember.maxhelp │ ├── odot-atan.maxhelp │ ├── odot-atan2.maxhelp │ ├── odot-atanh.maxhelp │ ├── odot-avg.maxhelp │ ├── odot-bitand.maxhelp │ ├── odot-bitor.maxhelp │ ├── odot-blob.maxhelp │ ├── odot-bool.maxhelp │ ├── odot-bound.maxhelp │ ├── odot-bundle.maxhelp │ ├── odot-butlast.maxhelp │ ├── odot-cast.maxhelp │ ├── odot-cbrt.maxhelp │ ├── odot-ceil.maxhelp │ ├── odot-char.maxhelp │ ├── odot-clip.maxhelp │ ├── odot-comment.maxhelp │ ├── odot-cos.maxhelp │ ├── odot-cosh.maxhelp │ ├── odot-cross.maxhelp │ ├── odot-cumsum.maxhelp │ ├── odot-decrement.maxhelp │ ├── odot-degtorad.maxhelp │ ├── odot-delete.maxhelp │ ├── odot-det.maxhelp │ ├── odot-div.maxhelp │ ├── odot-div_assign.maxhelp │ ├── odot-dot.maxhelp │ ├── odot-e.maxhelp │ ├── odot-emptybundle.maxhelp │ ├── odot-eq.maxhelp │ ├── odot-erf.maxhelp │ ├── odot-erfc.maxhelp │ ├── odot-eval.maxhelp │ ├── odot-exists.maxhelp │ ├── odot-exp.maxhelp │ ├── odot-expm1.maxhelp │ ├── odot-extrema.maxhelp │ ├── odot-first.maxhelp │ ├── odot-float32.maxhelp │ ├── odot-float64.maxhelp │ ├── odot-floattotime.maxhelp │ ├── odot-floor.maxhelp │ ├── odot-fmod.maxhelp │ ├── odot-ftom.maxhelp │ ├── odot-gamma.maxhelp │ ├── odot-ge.maxhelp │ ├── odot-getaddresses.maxhelp │ ├── odot-getbundlemember.maxhelp │ ├── odot-getmsgcount.maxhelp │ ├── odot-gettimetag.maxhelp │ ├── odot-gt.maxhelp │ ├── odot-halfpi.maxhelp │ ├── odot-hton32.maxhelp │ ├── odot-hton64.maxhelp │ ├── odot-hypot.maxhelp │ ├── odot-identity.maxhelp │ ├── odot-if.maxhelp │ ├── odot-ilogb.maxhelp │ ├── odot-increment.maxhelp │ ├── odot-int16.maxhelp │ ├── odot-int32.maxhelp │ ├── odot-int64.maxhelp │ ├── odot-int8.maxhelp │ ├── odot-interleave.maxhelp │ ├── odot-j0.maxhelp │ ├── odot-j1.maxhelp │ ├── odot-jn.maxhelp │ ├── odot-join.maxhelp │ ├── odot-l2norm.maxhelp │ ├── odot-lambda.maxhelp │ ├── odot-last.maxhelp │ ├── odot-le.maxhelp │ ├── odot-length.maxhelp │ ├── odot-lgamma.maxhelp │ ├── odot-list.maxhelp │ ├── odot-list_lookup.maxhelp │ ├── odot-lnten.maxhelp │ ├── odot-lntwo.maxhelp │ ├── odot-log.maxhelp │ ├── odot-log10.maxhelp │ ├── odot-logb.maxhelp │ ├── odot-logtene.maxhelp │ ├── odot-logtwoe.maxhelp │ ├── odot-lreduce.maxhelp │ ├── odot-lt.maxhelp │ ├── odot-map.maxhelp │ ├── odot-match.maxhelp │ ├── odot-max.maxhelp │ ├── odot-mean.maxhelp │ ├── odot-median.maxhelp │ ├── odot-min.maxhelp │ ├── odot-minus1.maxhelp │ ├── odot-mod.maxhelp │ ├── odot-mod_assign.maxhelp │ ├── odot-mtof.maxhelp │ ├── odot-mul.maxhelp │ ├── odot-mul_assign.maxhelp │ ├── odot-ne.maxhelp │ ├── odot-nextafter.maxhelp │ ├── odot-nfill.maxhelp │ ├── odot-nonzero.maxhelp │ ├── odot-not.maxhelp │ ├── odot-nth.maxhelp │ ├── odot-ntoh32.maxhelp │ ├── odot-ntoh64.maxhelp │ ├── odot-nullcoalesce.maxhelp │ ├── odot-nullcoalesce_assign.maxhelp │ ├── odot-oneoverpi.maxhelp │ ├── odot-or.maxhelp │ ├── odot-orelse.maxhelp │ ├── odot-phi.maxhelp │ ├── odot-pi.maxhelp │ ├── odot-plus1.maxhelp │ ├── odot-pow.maxhelp │ ├── odot-product.maxhelp │ ├── odot-prog1.maxhelp │ ├── odot-prog2.maxhelp │ ├── odot-progn.maxhelp │ ├── odot-quarterpi.maxhelp │ ├── odot-quickhull.maxhelp │ ├── odot-quote.maxhelp │ ├── odot-radtodeg.maxhelp │ ├── odot-range.maxhelp │ ├── odot-readstring.maxhelp │ ├── odot-remainder.maxhelp │ ├── odot-rest.maxhelp │ ├── odot-rev.maxhelp │ ├── odot-round.maxhelp │ ├── odot-rreduce.maxhelp │ ├── odot-scale.maxhelp │ ├── odot-settimetag.maxhelp │ ├── odot-sign.maxhelp │ ├── odot-sin.maxhelp │ ├── odot-sinh.maxhelp │ ├── odot-sort.maxhelp │ ├── odot-sortidx.maxhelp │ ├── odot-split.maxhelp │ ├── odot-sqrt.maxhelp │ ├── odot-sqrthalf.maxhelp │ ├── odot-sqrttwo.maxhelp │ ├── odot-strchar.maxhelp │ ├── odot-strcmp.maxhelp │ ├── odot-strfind.maxhelp │ ├── odot-string.maxhelp │ ├── odot-strlen.maxhelp │ ├── odot-strtotime.maxhelp │ ├── odot-sub.maxhelp │ ├── odot-sub_assign.maxhelp │ ├── odot-sum.maxhelp │ ├── odot-tan.maxhelp │ ├── odot-tanh.maxhelp │ ├── odot-thirteenth_root_of_3.maxhelp │ ├── odot-tokenize.maxhelp │ ├── odot-twelfth_root_of_2.maxhelp │ ├── odot-twooverpi.maxhelp │ ├── odot-twopi.maxhelp │ ├── odot-typetags.maxhelp │ ├── odot-uint16.maxhelp │ ├── odot-uint32.maxhelp │ ├── odot-uint64.maxhelp │ ├── odot-uint8.maxhelp │ ├── odot-value.maxhelp │ ├── odot-y0.maxhelp │ ├── odot-y1.maxhelp │ └── odot-yn.maxhelp ├── o.expr.codebox.maxhelp ├── o.flatten.maxhelp ├── o.if.maxhelp ├── o.intersection.maxhelp ├── o.listenumerate.maxhelp ├── o.messageiterate.maxhelp ├── o.pack.maxhelp ├── o.prepend.maxhelp ├── o.print.maxhelp ├── o.printbytes.maxhelp ├── o.route.maxhelp ├── o.schedule.maxhelp ├── o.select.maxhelp ├── o.timetag.maxhelp ├── o.union.maxhelp └── o.var.maxhelp ├── icon.png ├── init ├── max-keycommands.txt └── odot-objectlist.txt ├── interfaces └── obj-qlookup.json ├── license.txt ├── make-release.sh ├── odot-logo.ai ├── patchers ├── namespace │ ├── o.accum.maxhelp │ ├── o.accum.maxpat │ ├── o.gather.maxhelp │ ├── o.gather.maxpat │ ├── o.gather.select.maxhelp │ ├── o.gather.select.maxpat │ ├── o.insert.maxhelp │ └── o.insert.maxpat ├── o.uniform.maxhelp ├── o.uniform.maxpat ├── o.was.maxhelp ├── o.was.maxpat ├── ordering │ ├── o.lefttoright.maxpat │ └── o.righttoleft.maxpat ├── recursion │ ├── o.recurse.maxhelp │ └── o.recurse.maxpat ├── tutorial │ ├── 01_max_and_odot.maxpat │ ├── 02_data_manipulation.maxpat │ ├── 03_packing_processes.maxpat │ ├── 04_build_merge_sep.maxpat │ ├── 05_hierarchies.maxpat │ ├── 06_expr1.maxpat │ ├── 07_expr2.maxpat │ ├── 08_expr3.maxpat │ ├── 09_expr4.maxpat │ ├── 10_subbundles_literals.maxpat │ ├── 11_all_about_time.maxpat │ ├── 12_abstractions.maxpat │ ├── advance.maxpat │ ├── close_parent.js │ ├── filelist.txt │ ├── n4m.o.tutorial-load.js │ ├── n4m.o.tutorial-load.maxpat │ ├── o.abstraction_example1.maxpat │ ├── o.abstraction_example2.maxpat │ ├── o.preset-ui.maxpat │ ├── o.synthesizer.basic~.maxpat │ ├── o.t.banner.maxpat │ ├── o.t.io.mouse.maxpat │ └── o.t.objects-covered.maxpat └── utils │ ├── o.autodoc_overview.maxpat │ ├── o.helpfilehelper.maxpat │ ├── o.overview.dep.maxpat │ └── o.overview.dev.maxpat ├── pd ├── cnmat-meta.pd ├── deprecated │ ├── o.expr-help.pd │ ├── o.message-help.pd │ ├── o.pak-help.pd │ ├── o.unless-help.pd │ └── o.when-help.pd ├── dev │ ├── o.bundle-help.pd │ ├── o.context-graph-example.pd │ ├── o.context-help.pd │ ├── o.slip.decode-help.pd │ ├── o.slip.encode-help.pd │ ├── o.table-help.pd │ ├── o.udp.receive-help.pd │ ├── o.udp.send-help.pd │ └── o.validate-help.pd ├── o.atomize-help.pd ├── o.change-help.pd ├── o.collect-help.pd ├── o.cond-help.pd ├── o.difference-help.pd ├── o.downcast-help.pd ├── o.explode-help.pd ├── o.expr-dollar-test.pd ├── o.expr-functions.pd ├── o.flatten-help.pd ├── o.if-help.pd ├── o.intersection-help.pd ├── o.menu-help.pd ├── o.messageiterate-help.pd ├── o.pack-help.pd ├── o.print-help.pd ├── o.printbytes-help.pd ├── o.route-help.pd ├── o.schedule-help.pd ├── o.select-help.pd ├── o.timetag-help.pd ├── o.union-help.pd ├── o.var-help.pd └── odot-object-list.pd ├── release-excludes.txt ├── src ├── Info.plist ├── Makefile ├── Makefile.mac.mk ├── Makefile.win.mk ├── Max-config.xcconfig ├── Max-deprecated.xcconfig ├── Max-unstable.xcconfig ├── PD-config.xcconfig ├── PD-deprecated.xcconfig ├── PD-unstable.xcconfig ├── README.md ├── include │ ├── o.h │ ├── odot.c │ ├── odot_version.h │ ├── opd_textbox.c │ ├── opd_textbox.h │ └── report_compiler.h ├── o-bundle │ └── o.bundle.c ├── o.O │ ├── .DS_Store │ └── o.O.c ├── o.append │ └── o.append.c ├── o.atomize │ ├── Makefile │ ├── o.atomize.c │ └── o.atomize.xcodeproj │ │ └── project.pbxproj ├── o.bufferfill~ │ ├── cnmat.o.sinusoids~2.maxpat │ ├── o.bufferfill~.c │ ├── o.bufferfill~.maxhelp │ └── tester.maxpat ├── o.bundle │ ├── Info.plist │ └── o.bundle.c ├── o.change │ ├── Makefile │ ├── o.change.c │ └── o.change.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcuserdata │ │ │ └── john.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ │ └── xcuserdata │ │ └── john.xcuserdatad │ │ └── xcschemes │ │ ├── o.change.xcscheme │ │ └── xcschememanagement.plist ├── o.collect │ ├── Makefile │ ├── o.collect.c │ └── o.collect.xcodeproj │ │ └── project.pbxproj ├── o.compose │ ├── Makefile │ └── o.compose.c ├── o.cond │ ├── Makefile │ ├── o.cond.c │ └── o.cond.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcuserdata │ │ │ └── john.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ │ └── xcuserdata │ │ └── john.xcuserdatad │ │ └── xcschemes │ │ ├── o.if.xcscheme │ │ └── xcschememanagement.plist ├── o.context │ └── o.context.c ├── o.daemon │ ├── o.daemon-sysV.c │ ├── o.daemon.c │ ├── o.daemon.maxhelp │ └── o.daemon_pipe.c ├── o.dict │ ├── Makefile │ └── o.dict.c ├── o.difference │ ├── Makefile │ ├── o.difference.c │ └── o.difference.xcodeproj │ │ ├── john.mode1v3 │ │ ├── john.pbxuser │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcuserdata │ │ │ └── john.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ │ └── xcuserdata │ │ └── john.xcuserdatad │ │ └── xcschemes │ │ ├── o.var.xcscheme │ │ └── xcschememanagement.plist ├── o.display │ ├── Makefile │ └── o.display.c ├── o.downcast │ └── o.downcast.c ├── o.edge~ │ └── o.edge~.c ├── o.explode │ ├── Makefile │ └── o.explode.c ├── o.expr.codebox.set │ ├── Makefile │ ├── o.expr.codebox.set.c │ └── o.expr.codebox.set.test.maxpat ├── o.expr.codebox │ ├── Makefile │ └── o.expr.codebox.c ├── o.expr │ ├── Makefile │ ├── o.expr copy.maxhelp │ ├── o.expr.c │ └── o.expr.xcodeproj │ │ └── project.pbxproj ├── o.flatten │ ├── Makefile │ └── o.flatten.c ├── o.gui.attach │ ├── o.gui.attach-clock-tester.maxpat │ ├── o.gui.attach-loadbang-test.maxhelp │ ├── o.gui.attach-tester.maxpat │ └── o.gui.attach.c ├── o.if │ ├── Makefile │ ├── o.if.c │ └── o.if.xcodeproj │ │ └── project.pbxproj ├── o.intersection │ ├── Makefile │ ├── o.intersection.c │ └── o.intersection.xcodeproj │ │ ├── john.mode1v3 │ │ ├── john.pbxuser │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcuserdata │ │ │ └── john.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ │ └── xcuserdata │ │ └── john.xcuserdatad │ │ └── xcschemes │ │ ├── o.var.xcscheme │ │ └── xcschememanagement.plist ├── o.listenumerate │ ├── Makefile │ └── o.listenumerate.c ├── o.lookup~ │ ├── o.lookup~.cpp │ ├── o.lookup~.hpp │ ├── o.lookup~.maxhelp │ └── o.phase.points~.maxhelp ├── o.mappatch │ ├── Makefile │ ├── o.mappatch.c │ └── o.mappatch.xcodeproj │ │ └── project.pbxproj ├── o.message │ ├── Makefile │ ├── o.message.c │ └── o.message.xcodeproj │ │ └── project.pbxproj ├── o.messageiterate │ └── o.messageiterate.c ├── o.pack │ ├── Makefile │ ├── o.pack.c │ └── o.pack.xcodeproj │ │ └── project.pbxproj ├── o.pak │ ├── Makefile │ ├── o.pak.c │ └── o.pak.xcodeproj │ │ ├── john.mode1v3 │ │ ├── john.pbxuser │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcuserdata │ │ │ └── john.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ │ └── xcuserdata │ │ └── john.xcuserdatad │ │ └── xcschemes │ │ ├── o.build.xcscheme │ │ └── xcschememanagement.plist ├── o.prepend │ ├── Makefile │ ├── o.prepend.c │ ├── o.prepend.help.pat │ └── o.prepend.xcodeproj │ │ └── project.pbxproj ├── o.print │ ├── Makefile │ ├── o.print.c │ └── o.print.xcodeproj │ │ └── project.pbxproj ├── o.printbytes │ ├── Makefile │ ├── o.printbytes.c │ └── o.printbytes.xcodeproj │ │ ├── john.mode1v3 │ │ ├── john.pbxuser │ │ └── project.pbxproj ├── o.route │ ├── Makefile │ ├── o.route.c │ ├── o.route.help.pat │ └── o.route.xcodeproj │ │ └── project.pbxproj ├── o.schedule │ ├── o.schedule.c │ ├── pqops.c │ └── pqops.h ├── o.schedule~ │ └── o.schedule~.c ├── o.select │ ├── Makefile │ ├── o.select.c │ └── o.select.xcodeproj │ │ └── project.pbxproj ├── o.slip.decode │ └── o.slip.decode.c ├── o.slip.encode │ └── o.slip.encode.c ├── o.snapshot~ │ └── o.snapshot~.c ├── o.svg │ ├── o.svg.c │ ├── svg-open-test.maxpat │ └── svg-test.svg ├── o.table │ ├── Makefile │ ├── o.table.c │ ├── o.table.xcodeproj │ │ ├── john.mode1v3 │ │ ├── john.pbxuser │ │ └── project.pbxproj │ ├── otable_util.c │ └── otable_util.h ├── o.timetag.join~ │ └── o.timetag.join~.c ├── o.timetag.split~ │ └── o.timetag.split~.c ├── o.timetag │ ├── Makefile │ ├── o.timetag.c │ └── o.timetag.xcodeproj │ │ └── project.pbxproj ├── o.timetag~ │ └── o.timetag~.c ├── o.todo.org ├── o.udp.receive │ └── o.udp.receive.c ├── o.udp.send │ ├── max-sender-test.maxpat │ └── o.udp.send.c ├── o.uniform │ ├── Makefile │ └── o.uniform.c ├── o.union │ ├── Makefile │ ├── o.union.c │ └── o.union.xcodeproj │ │ ├── john.mode1v3 │ │ ├── john.pbxuser │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcuserdata │ │ │ └── john.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ │ └── xcuserdata │ │ └── john.xcuserdatad │ │ └── xcschemes │ │ ├── o.var.xcscheme │ │ └── xcschememanagement.plist ├── o.unless │ ├── Makefile │ ├── o.unless.c │ └── o.unless.xcodeproj │ │ └── project.pbxproj ├── o.validate │ └── o.validate.c ├── o.var │ ├── Makefile │ ├── o.var.c │ └── o.var.xcodeproj │ │ └── project.pbxproj ├── o.when │ ├── Makefile │ ├── o.when.c │ └── o.when.xcodeproj │ │ └── project.pbxproj ├── odot.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ ├── odot.xccheckout │ │ └── odot.xcscmblueprint ├── odot_current_version.sh ├── omenu │ └── o.menu.c ├── package.pl └── pd-build │ ├── Makefile │ ├── cnmat-meta.pd │ └── copy-src-files.sh └── testing └── init-all-externals.maxpat /.gitignore: -------------------------------------------------------------------------------- 1 | *.[oa] 2 | *.mxo 3 | *.mxe 4 | *.pd_darwin 5 | *.class 6 | *.objinfo.txt 7 | *.tar.gz 8 | *.tgz 9 | *.zip 10 | *.def 11 | #*# 12 | xcuserdata 13 | .DS_Store 14 | build 15 | build-gcc 16 | *.pbxuser 17 | *.mode1v3 18 | *.mode2v3 19 | *.perspectivev3 20 | !default.pbxuser 21 | !default.mode1v3 22 | !default.mode2v3 23 | !default.perspectivev3 24 | !xcshareddata 25 | xcuserdata 26 | odot_current_version.h 27 | package-info.json -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CNMAT-odot 2 | 3 | Odot is a set of externals and language developed by Adrian Freed and John MacCallum, with support from Andy Schmeder, Ilya Rostovtsev, Rama Gottfried, Jeff Lubow, and many others at the Center for New Music and Audio Technologies (CNMAT) between 2007 and 2016. 4 | 5 | As of 2022, odot is developed and maintained by John MacCallum with support from CNMAT, and HfMT Hamburg. 6 | 7 | Odot emerged out of a need for an aggregate data type that could be operated upon as it is passed around over patch cords. This aggregation describes a synthesis of control-rate computation in the past, present, and future. Odot requires a host environment (Max/MSP), within which a shim layer (libomax) can operate as middleware between libo and the host itself. The libo library – the current manifestation of Open Sound Control – is utilized at the core, whereby all lower-level OSC calls are made. 8 | 9 | The odot system augments dataflow languages like Max/MSP, PD and Node Red with the following: 10 | 11 | 1. The odot bundle aggregate data type, inspired by and currently encoded with OSC 12 | 2. An expression language supporting a diverse collection of ancient and modern programming paradigms including: 13 | functional, declarative, imperative, dynamic, delegation-based objects, dynamic class-based objects, aspect-oriented 14 | 3. Timing and scheduling primitives to support sequencing and synchronization aspects of media and network programming. 15 | 16 | # Installation 17 | 18 | ### Max/MSP 19 | 20 | Odot is now available through the Max Package Manager as well as the [releases](https://github.com/CNMAT/CNMAT-odot/releases) page. 21 | 22 | ### Pd 23 | 24 | Prebuilt binaries for Pd are available for a number of platforms on the [releases](https://github.com/CNMAT/CNMAT-odot/releases) page, 25 | including Mac OS X, Windows, Arch Linux, and Raspberry Pi OS. 26 | 27 | ### OM# 28 | 29 | An implementation of odot for OM# is available here: [https://github.com/cac-t-u-s/o.OM/](https://github.com/cac-t-u-s/o.OM/). 30 | 31 | ### Building 32 | 33 | Instructions for building can be found in the `src` folder. You will also need to build 34 | [libo](https://github.com/CNMAT/libo) and [libomax](https://github.com/CNMAT/libomax)--see those repos for instructions. 35 | 36 | # Bugs and Issues 37 | 38 | Please file issues on the [GitHub Issue Tracker](https://github.com/CNMAT/CNMAT-odot/issues). 39 | 40 | # Discussion 41 | 42 | Join us on Discord! https://discord.gg/EqHE8TG 43 | 44 | # History 45 | 46 | * Adrian Freed designed and developed the first iteration of odot as a series of patches and abstractions in order to broaden Max/MSP's patchchords from thin cables into trunk lines able to move heterogeneous bundles of data without tedious wiring. It was built on Matt Wright's OSC implementation in Max/MSP. 47 | * John MacCallum ported the bulk of these patches to C and contributed the expression language. 48 | * Andy Schmeder developed the deadline scheduling and time computation. 49 | * Rama Gottfried did the first port to Pure Data (PD). 50 | * Ilya Rostovtsev did the first port to Node Red. 51 | * Adrian Freed, John MacCallum, and Ilya Rostovtsev stabilized the design and released odot 1.0 in 2014. 52 | 53 | Integration of OSC encoding in a dataflow languages was pioneered by Amanda Chaudhary in the OSW language. 54 | The first release of odot integrates numerous user contributions from Dave Defilippo, Jeff Lubow, Derek Razo, Jules Espiau, and Yotam Mann. 55 | -------------------------------------------------------------------------------- /deprecated/README.md: -------------------------------------------------------------------------------- 1 | ### Note about the deprecated folder 2 | 3 | These objects have been removed from the release for various reasons, 4 | usually having been replaced by a more useful version of the same object. 5 | Actual deletion from the release is possible, but not likely. 6 | The objects here are well tested, and were at one point heavily used, 7 | however they are entirely unsupported now. 8 | 9 | ### Installation 10 | 11 | To use these objects: 12 | you must manually add the dev folder to your search path. 13 | While this is annoying, the act of doing it represents tacit 14 | approval to use these with the knowledge that they are unsupported 15 | and may be deleted at some point in the future. 16 | -------------------------------------------------------------------------------- /dev-internal/clippings/o.clipping.ComposeExprDisplay.maxpat: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 6, 6 | "minor" : 1, 7 | "revision" : 6, 8 | "architecture" : "x86" 9 | } 10 | , 11 | "rect" : [ 25.0, 69.0, 640.0, 480.0 ], 12 | "bglocked" : 0, 13 | "openinpresentation" : 0, 14 | "default_fontsize" : 12.0, 15 | "default_fontface" : 0, 16 | "default_fontname" : "Arial", 17 | "gridonopen" : 0, 18 | "gridsize" : [ 15.0, 15.0 ], 19 | "gridsnaponopen" : 0, 20 | "statusbarvisible" : 2, 21 | "toolbarvisible" : 1, 22 | "boxanimatetime" : 200, 23 | "imprint" : 0, 24 | "enablehscroll" : 1, 25 | "enablevscroll" : 1, 26 | "devicewidth" : 0.0, 27 | "description" : "", 28 | "digest" : "", 29 | "tags" : "", 30 | "boxes" : [ { 31 | "box" : { 32 | "fontname" : "Arial", 33 | "fontsize" : 12.0, 34 | "id" : "obj-3", 35 | "linecount" : 8, 36 | "maxclass" : "o.display", 37 | "numinlets" : 1, 38 | "numoutlets" : 1, 39 | "outlettype" : [ "" ], 40 | "patching_rect" : [ 27.0, 257.0, 150.0, 128.0 ], 41 | "text" : "/address : 3.,\n/list : [1, 4, true, false, nil],\n/subbundle : {\n\t/thing : 1\n},\n/value : 56.,\n/thing : [1, 2, 3],\n/foo : [4, 5, 6, 7, 8, 9, 10]", 42 | "textcolor" : [ 0.0, 0.0, 0.0, 1.0 ] 43 | } 44 | 45 | } 46 | , { 47 | "box" : { 48 | "fontname" : "Arial", 49 | "fontsize" : 12.0, 50 | "id" : "obj-2", 51 | "linecount" : 3, 52 | "maxclass" : "o.expr.codebox", 53 | "numinlets" : 1, 54 | "numoutlets" : 2, 55 | "outlettype" : [ "FullPacket", "FullPacket" ], 56 | "patching_rect" : [ 27.0, 171.0, 167.0, 59.0 ], 57 | "text" : "/value ??= 56.0,\n/thing = list(1, 2, 3),\n/foo = aseq(4, 10, 1)", 58 | "textcolor" : [ 0.0, 0.0, 0.0, 1.0 ] 59 | } 60 | 61 | } 62 | , { 63 | "box" : { 64 | "fontname" : "Arial", 65 | "fontsize" : 12.0, 66 | "id" : "obj-1", 67 | "linecount" : 5, 68 | "maxclass" : "o.compose", 69 | "numinlets" : 2, 70 | "numoutlets" : 1, 71 | "outlettype" : [ "" ], 72 | "patching_rect" : [ 27.0, 72.0, 166.0, 78.0 ], 73 | "text" : "/address : 3.,\n/list : [1, 4, true, false, nil],\n/subbundle : {\n\t/thing : 1\n}", 74 | "textcolor" : [ 0.0, 0.0, 0.0, 1.0 ] 75 | } 76 | 77 | } 78 | ], 79 | "lines" : [ { 80 | "patchline" : { 81 | "destination" : [ "obj-2", 0 ], 82 | "disabled" : 0, 83 | "hidden" : 0, 84 | "source" : [ "obj-1", 0 ] 85 | } 86 | 87 | } 88 | , { 89 | "patchline" : { 90 | "destination" : [ "obj-3", 0 ], 91 | "disabled" : 0, 92 | "hidden" : 0, 93 | "midpoints" : [ 36.5, 242.0, 36.5, 242.0 ], 94 | "source" : [ "obj-2", 0 ] 95 | } 96 | 97 | } 98 | ], 99 | "dependency_cache" : [ { 100 | "name" : "o.compose.mxo", 101 | "type" : "iLaX" 102 | } 103 | , { 104 | "name" : "o.expr.codebox.mxo", 105 | "type" : "iLaX" 106 | } 107 | , { 108 | "name" : "o.display.mxo", 109 | "type" : "iLaX" 110 | } 111 | ] 112 | } 113 | 114 | } 115 | -------------------------------------------------------------------------------- /dev-internal/clippings/o.clipping.lambda.recursion.maxpat: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 6, 6 | "minor" : 1, 7 | "revision" : 6, 8 | "architecture" : "x64" 9 | } 10 | , 11 | "rect" : [ 516.0, 313.0, 640.0, 480.0 ], 12 | "bglocked" : 0, 13 | "openinpresentation" : 0, 14 | "default_fontsize" : 12.0, 15 | "default_fontface" : 0, 16 | "default_fontname" : "Arial", 17 | "gridonopen" : 0, 18 | "gridsize" : [ 15.0, 15.0 ], 19 | "gridsnaponopen" : 0, 20 | "statusbarvisible" : 2, 21 | "toolbarvisible" : 1, 22 | "boxanimatetime" : 200, 23 | "imprint" : 0, 24 | "enablehscroll" : 1, 25 | "enablevscroll" : 1, 26 | "devicewidth" : 0.0, 27 | "description" : "", 28 | "digest" : "", 29 | "tags" : "", 30 | "boxes" : [ { 31 | "box" : { 32 | "fontname" : "Arial", 33 | "fontsize" : 12.0, 34 | "id" : "obj-6", 35 | "maxclass" : "o.display", 36 | "numinlets" : 1, 37 | "numoutlets" : 1, 38 | "outlettype" : [ "" ], 39 | "patching_rect" : [ 42.0, 102.0, 297.0, 34.0 ], 40 | "text" : "/results : [6, 362880, 120]", 41 | "textcolor" : [ 0.0, 0.0, 0.0, 1.0 ] 42 | } 43 | 44 | } 45 | , { 46 | "box" : { 47 | "fontname" : "Arial", 48 | "fontsize" : 12.0, 49 | "id" : "obj-2", 50 | "linecount" : 2, 51 | "maxclass" : "o.expr.codebox", 52 | "numinlets" : 1, 53 | "numoutlets" : 2, 54 | "outlettype" : [ "FullPacket", "FullPacket" ], 55 | "patching_rect" : [ 42.0, 27.0, 336.0, 45.0 ], 56 | "text" : "/factorial = \"lambda(v, (v > 1)? v * /factorial(v - 1) : 1)\",\n/results = map(readstring(/factorial), [3,9,5]), delete(/factorial)", 57 | "textcolor" : [ 0.0, 0.0, 0.0, 1.0 ] 58 | } 59 | 60 | } 61 | ], 62 | "lines" : [ { 63 | "patchline" : { 64 | "destination" : [ "obj-6", 0 ], 65 | "disabled" : 0, 66 | "hidden" : 0, 67 | "source" : [ "obj-2", 0 ] 68 | } 69 | 70 | } 71 | ], 72 | "dependency_cache" : [ { 73 | "name" : "o.expr.codebox.mxo", 74 | "type" : "iLaX" 75 | } 76 | , { 77 | "name" : "o.display.mxo", 78 | "type" : "iLaX" 79 | } 80 | ] 81 | } 82 | 83 | } 84 | -------------------------------------------------------------------------------- /dev-internal/clippings/o.clipping.mtof.maxpat: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 6, 6 | "minor" : 1, 7 | "revision" : 6, 8 | "architecture" : "x64" 9 | } 10 | , 11 | "rect" : [ 429.0, 377.0, 640.0, 480.0 ], 12 | "bglocked" : 0, 13 | "openinpresentation" : 0, 14 | "default_fontsize" : 12.0, 15 | "default_fontface" : 0, 16 | "default_fontname" : "Arial", 17 | "gridonopen" : 0, 18 | "gridsize" : [ 15.0, 15.0 ], 19 | "gridsnaponopen" : 0, 20 | "statusbarvisible" : 2, 21 | "toolbarvisible" : 1, 22 | "boxanimatetime" : 200, 23 | "imprint" : 0, 24 | "enablehscroll" : 1, 25 | "enablevscroll" : 1, 26 | "devicewidth" : 0.0, 27 | "description" : "", 28 | "digest" : "", 29 | "tags" : "", 30 | "boxes" : [ { 31 | "box" : { 32 | "fontname" : "Arial", 33 | "fontsize" : 12.0, 34 | "id" : "obj-6", 35 | "maxclass" : "o.display", 36 | "numinlets" : 1, 37 | "numoutlets" : 1, 38 | "outlettype" : [ "" ], 39 | "patching_rect" : [ 42.0, 102.0, 297.0, 34.0 ], 40 | "textcolor" : [ 0.0, 0.0, 0.0, 1.0 ] 41 | } 42 | 43 | } 44 | , { 45 | "box" : { 46 | "fontname" : "Arial", 47 | "fontsize" : 12.0, 48 | "id" : "obj-2", 49 | "linecount" : 2, 50 | "maxclass" : "o.expr.codebox", 51 | "numinlets" : 1, 52 | "numoutlets" : 2, 53 | "outlettype" : [ "FullPacket", "FullPacket" ], 54 | "patching_rect" : [ 42.0, 27.0, 366.0, 45.0 ], 55 | "text" : "/mtof = \"lambda(n, 440.0 * pow(2.0 , (n - 69) / 12.0))\",\n/frequencies = map(readstring(/mtof), aseq(0,127,1)), delete(/mtof)", 56 | "textcolor" : [ 0.0, 0.0, 0.0, 1.0 ] 57 | } 58 | 59 | } 60 | ], 61 | "lines" : [ { 62 | "patchline" : { 63 | "color" : [ 1.0, 0.8, 0.4, 1.0 ], 64 | "destination" : [ "obj-6", 0 ], 65 | "disabled" : 0, 66 | "hidden" : 0, 67 | "source" : [ "obj-2", 0 ] 68 | } 69 | 70 | } 71 | ], 72 | "dependency_cache" : [ { 73 | "name" : "o.expr.codebox.mxo", 74 | "type" : "iLaX" 75 | } 76 | , { 77 | "name" : "o.display.mxo", 78 | "type" : "iLaX" 79 | } 80 | ] 81 | } 82 | 83 | } 84 | -------------------------------------------------------------------------------- /dev-internal/context-patcherargs/o.patcherargs.maxhelp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 7, 6 | "minor" : 3, 7 | "revision" : 4, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "rect" : [ 38.0, 79.0, 753.0, 531.0 ], 13 | "bglocked" : 0, 14 | "openinpresentation" : 0, 15 | "default_fontsize" : 12.0, 16 | "default_fontface" : 0, 17 | "default_fontname" : "Arial", 18 | "gridonopen" : 1, 19 | "gridsize" : [ 15.0, 15.0 ], 20 | "gridsnaponopen" : 1, 21 | "objectsnaponopen" : 1, 22 | "statusbarvisible" : 2, 23 | "toolbarvisible" : 1, 24 | "lefttoolbarpinned" : 0, 25 | "toptoolbarpinned" : 0, 26 | "righttoolbarpinned" : 0, 27 | "bottomtoolbarpinned" : 0, 28 | "toolbars_unpinned_last_save" : 0, 29 | "tallnewobj" : 0, 30 | "boxanimatetime" : 200, 31 | "enablehscroll" : 1, 32 | "enablevscroll" : 1, 33 | "devicewidth" : 0.0, 34 | "description" : "", 35 | "digest" : "", 36 | "tags" : "", 37 | "style" : "", 38 | "subpatcher_template" : "Default Max 7", 39 | "boxes" : [ { 40 | "box" : { 41 | "id" : "obj-2", 42 | "maxclass" : "newobj", 43 | "numinlets" : 1, 44 | "numoutlets" : 1, 45 | "outlettype" : [ "bang" ], 46 | "patching_rect" : [ 204.0, 110.0, 60.0, 22.0 ], 47 | "style" : "", 48 | "text" : "loadbang" 49 | } 50 | 51 | } 52 | , { 53 | "box" : { 54 | "id" : "obj-1", 55 | "linecount" : 2, 56 | "maxclass" : "newobj", 57 | "numinlets" : 1, 58 | "numoutlets" : 0, 59 | "patching_rect" : [ 204.0, 167.0, 342.0, 35.0 ], 60 | "style" : "", 61 | "text" : "o.patcherargs-inner 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 @foo 1 @bar 2 @steve a yep" 62 | } 63 | 64 | } 65 | ], 66 | "lines" : [ { 67 | "patchline" : { 68 | "destination" : [ "obj-1", 0 ], 69 | "source" : [ "obj-2", 0 ] 70 | } 71 | 72 | } 73 | ], 74 | "dependency_cache" : [ { 75 | "name" : "o.patcherargs-inner.maxpat", 76 | "bootpath" : "~/Documents/dev-lib/CNMAT-odot/dev-internal/context-patcherargs", 77 | "patcherrelativepath" : ".", 78 | "type" : "JSON", 79 | "implicit" : 1 80 | } 81 | , { 82 | "name" : "o.patcherargs.maxpat", 83 | "bootpath" : "~/Documents/dev-lib/CNMAT-odot/dev-internal/context-patcherargs", 84 | "patcherrelativepath" : ".", 85 | "type" : "JSON", 86 | "implicit" : 1 87 | } 88 | , { 89 | "name" : "o.context.mxo", 90 | "type" : "iLaX" 91 | } 92 | , { 93 | "name" : "o.route.mxo", 94 | "type" : "iLaX" 95 | } 96 | , { 97 | "name" : "o.print.mxo", 98 | "type" : "iLaX" 99 | } 100 | , { 101 | "name" : "o.compose.mxo", 102 | "type" : "iLaX" 103 | } 104 | ], 105 | "autosave" : 0, 106 | "bgfillcolor_type" : "gradient", 107 | "bgfillcolor_color1" : [ 0.376471, 0.384314, 0.4, 1.0 ], 108 | "bgfillcolor_color2" : [ 0.290196, 0.309804, 0.301961, 1.0 ], 109 | "bgfillcolor_color" : [ 0.290196, 0.309804, 0.301961, 1.0 ], 110 | "bgfillcolor_angle" : 270.0, 111 | "bgfillcolor_proportion" : 0.39 112 | } 113 | 114 | } 115 | -------------------------------------------------------------------------------- /dev/README.md: -------------------------------------------------------------------------------- 1 | ### Note about the dev folder 2 | 3 | The contents of the dev folder should be considered "unstable", 4 | but not in the sense that they may have bugs or crash. 5 | In fact, most of the objects and abstractions in the dev folder are 6 | well-tested and integral to a number of projects. 7 | 8 | The instability is with respect to the design of the objects themselves, 9 | i.e. the configuration of inlets and outlets, what they take as input, 10 | and what they produce as output. Their inclusion in this folder as part 11 | of an odot release means that they are understood to be generally useful 12 | and necessary, but their design has not yet stabilized. 13 | 14 | The ultimate goal for each of these objects is either transition into the 15 | main externals folder once they have stabilized, or deprecation in the 16 | case that other additions have made them no longer necessary. 17 | 18 | ### Installation 19 | 20 | To use these objects: 21 | you must manually add the dev folder to your search path. While this is 22 | annoying, the act of doing it represents tacit approval to use these 23 | with the knowledge that they may change in the future. 24 | -------------------------------------------------------------------------------- /dev/aspect/abstractions/o.aspect.receive.maxpat: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 6, 6 | "minor" : 1, 7 | "revision" : 4, 8 | "architecture" : "x86" 9 | } 10 | , 11 | "rect" : [ 805.0, 44.0, 640.0, 480.0 ], 12 | "bglocked" : 0, 13 | "openinpresentation" : 0, 14 | "default_fontsize" : 12.0, 15 | "default_fontface" : 0, 16 | "default_fontname" : "Arial", 17 | "gridonopen" : 0, 18 | "gridsize" : [ 8.0, 8.0 ], 19 | "gridsnaponopen" : 0, 20 | "statusbarvisible" : 2, 21 | "toolbarvisible" : 1, 22 | "boxanimatetime" : 200, 23 | "imprint" : 0, 24 | "enablehscroll" : 1, 25 | "enablevscroll" : 1, 26 | "devicewidth" : 0.0, 27 | "description" : "", 28 | "digest" : "", 29 | "tags" : "", 30 | "boxes" : [ { 31 | "box" : { 32 | "fontname" : "Arial", 33 | "fontsize" : 12.0, 34 | "id" : "obj-6", 35 | "maxclass" : "newobj", 36 | "numinlets" : 1, 37 | "numoutlets" : 0, 38 | "patching_rect" : [ 240.0, 96.0, 134.0, 20.0 ], 39 | "text" : "s o.aspect.probe.return" 40 | } 41 | 42 | } 43 | , { 44 | "box" : { 45 | "fontname" : "Arial", 46 | "fontsize" : 12.0, 47 | "id" : "obj-5", 48 | "maxclass" : "newobj", 49 | "numinlets" : 0, 50 | "numoutlets" : 1, 51 | "outlettype" : [ "" ], 52 | "patching_rect" : [ 240.0, 56.0, 97.0, 20.0 ], 53 | "text" : "r o.aspect.probe" 54 | } 55 | 56 | } 57 | , { 58 | "box" : { 59 | "comment" : "", 60 | "id" : "obj-3", 61 | "maxclass" : "outlet", 62 | "numinlets" : 1, 63 | "numoutlets" : 0, 64 | "patching_rect" : [ 104.0, 144.0, 25.0, 25.0 ] 65 | } 66 | 67 | } 68 | , { 69 | "box" : { 70 | "fontname" : "Arial", 71 | "fontsize" : 12.0, 72 | "id" : "obj-1", 73 | "maxclass" : "newobj", 74 | "numinlets" : 0, 75 | "numoutlets" : 1, 76 | "outlettype" : [ "" ], 77 | "patching_rect" : [ 104.0, 56.0, 63.0, 20.0 ], 78 | "text" : "r o.aspect" 79 | } 80 | 81 | } 82 | ], 83 | "lines" : [ { 84 | "patchline" : { 85 | "destination" : [ "obj-3", 0 ], 86 | "disabled" : 0, 87 | "hidden" : 0, 88 | "source" : [ "obj-1", 0 ] 89 | } 90 | 91 | } 92 | , { 93 | "patchline" : { 94 | "destination" : [ "obj-6", 0 ], 95 | "disabled" : 0, 96 | "hidden" : 0, 97 | "source" : [ "obj-5", 0 ] 98 | } 99 | 100 | } 101 | ], 102 | "dependency_cache" : [ ] 103 | } 104 | 105 | } 106 | -------------------------------------------------------------------------------- /docs/_c74_common.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/_c74_compat.html: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | 23 | 24 | 25 | 26 | 27 | Compatibility Notice 28 | 29 | 30 | 31 | 32 | 33 |

34 | If you are reading this, you are running Max 5 on OSX 10.4.10 or below. Unfortunately, due to bugs in Apple's web browser support in these versions of the operating system, the Max 5 in-application documentation won't display properly.

35 | 36 |

37 | We recommend updating to OSX 10.4.11 and apologize for any inconvenience this may cause.

38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /docs/_c74_platform.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | 22 | 23 | 24 | 25 | 1 26 | 27 | 28 | 1 29 | 0 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /docs/refpages/_c74_ref_modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | jit-ref 22 | m4l-ref 23 | max-ref 24 | msp-ref 25 | odot_ref 26 | -------------------------------------------------------------------------------- /docs/refpages/odot_ref/_c74_ref.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /docs/refpages/odot_ref/template/template.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | CNMAT 15 | odot 16 | odot objects 17 | 18 | 19 | 20 | 21 | 22 | 23 | OSC packet 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | OSC packet WITH WHATEVER 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | An odot bundle to operate on. 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | The resulting odot bundle (FullPacket). 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | odot, address, bundle 95 | 96 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /docs/tutorials/odot-tut/01_max_and_odot.maxref.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
ODOT tutorial 1: Max and ODOT
10 | 11 | Learn about how Max and ODOT work together 12 | In this ODOT tutorial, we will learn about how Max and ODOT work together. This involves taking what we know about Max and extending it to the suite of externals included in the ODOT package. 13 | Open the tutorial. 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | -------------------------------------------------------------------------------- /docs/tutorials/odot-tut/_c74_tut.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /help/o.expr-helpers/odot-char.maxhelp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 1, 7 | "revision" : 10, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "box", 13 | "rect" : [ 62.0, 103.0, 524.0, 232.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "Default Max 7", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "fontface" : 1, 44 | "id" : "obj-8", 45 | "maxclass" : "comment", 46 | "numinlets" : 1, 47 | "numoutlets" : 0, 48 | "patching_rect" : [ 270.0, 27.0, 57.0, 20.0 ], 49 | "text" : "char()" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-3", 56 | "linecount" : 5, 57 | "maxclass" : "comment", 58 | "numinlets" : 1, 59 | "numoutlets" : 0, 60 | "patching_rect" : [ 270.0, 62.0, 227.0, 74.0 ], 61 | "text" : "cast data to a character value.\n\narguments:\n\n1. data to cast" 62 | } 63 | 64 | } 65 | , { 66 | "box" : { 67 | "id" : "obj-1", 68 | "maxclass" : "newobj", 69 | "numinlets" : 1, 70 | "numoutlets" : 1, 71 | "outlettype" : [ "bang" ], 72 | "patching_rect" : [ 28.0, 27.0, 60.0, 22.0 ], 73 | "text" : "loadbang" 74 | } 75 | 76 | } 77 | , { 78 | "box" : { 79 | "fontface" : 0, 80 | "id" : "obj-19", 81 | "linecount" : 2, 82 | "maxclass" : "o.expr.codebox", 83 | "numinlets" : 1, 84 | "numoutlets" : 2, 85 | "outlettype" : [ "FullPacket", "FullPacket" ], 86 | "patching_rect" : [ 28.0, 94.0, 156.0, 44.0 ], 87 | "text" : "/i = 55,\n/i/to/ascii = char(/i)" 88 | } 89 | 90 | } 91 | , { 92 | "box" : { 93 | "fontface" : 0, 94 | "id" : "obj-20", 95 | "linecount" : 2, 96 | "maxclass" : "o.display", 97 | "numinlets" : 1, 98 | "numoutlets" : 1, 99 | "outlettype" : [ "" ], 100 | "patching_rect" : [ 28.0, 162.0, 123.0, 46.0 ], 101 | "text" : "/i : 55,\n/i/to/ascii : '7'" 102 | } 103 | 104 | } 105 | ], 106 | "lines" : [ { 107 | "patchline" : { 108 | "destination" : [ "obj-19", 0 ], 109 | "source" : [ "obj-1", 0 ] 110 | } 111 | 112 | } 113 | , { 114 | "patchline" : { 115 | "destination" : [ "obj-20", 0 ], 116 | "source" : [ "obj-19", 0 ] 117 | } 118 | 119 | } 120 | ], 121 | "dependency_cache" : [ { 122 | "name" : "o.display.mxo", 123 | "type" : "iLaX" 124 | } 125 | , { 126 | "name" : "o.expr.codebox.mxo", 127 | "type" : "iLaX" 128 | } 129 | ], 130 | "autosave" : 0 131 | } 132 | 133 | } 134 | -------------------------------------------------------------------------------- /help/o.expr-helpers/odot-e.maxhelp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 1, 7 | "revision" : 10, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "box", 13 | "rect" : [ 70.0, 97.0, 349.0, 227.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "Default Max 7", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "fontface" : 1, 44 | "id" : "obj-8", 45 | "maxclass" : "comment", 46 | "numinlets" : 1, 47 | "numoutlets" : 0, 48 | "patching_rect" : [ 180.0, 44.0, 51.0, 20.0 ], 49 | "text" : "e()" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-3", 56 | "linecount" : 3, 57 | "maxclass" : "comment", 58 | "numinlets" : 1, 59 | "numoutlets" : 0, 60 | "patching_rect" : [ 180.0, 79.0, 128.0, 47.0 ], 61 | "text" : "Return the constant e\n\narguments: n/a" 62 | } 63 | 64 | } 65 | , { 66 | "box" : { 67 | "fontsize" : 11.0, 68 | "id" : "obj-11", 69 | "maxclass" : "newobj", 70 | "numinlets" : 1, 71 | "numoutlets" : 1, 72 | "outlettype" : [ "bang" ], 73 | "patching_rect" : [ 40.0, 39.0, 56.0, 21.0 ], 74 | "text" : "loadbang" 75 | } 76 | 77 | } 78 | , { 79 | "box" : { 80 | "fontface" : 0, 81 | "id" : "obj-4", 82 | "maxclass" : "o.display", 83 | "numinlets" : 1, 84 | "numoutlets" : 1, 85 | "outlettype" : [ "" ], 86 | "patching_rect" : [ 40.0, 152.0, 118.0, 33.0 ], 87 | "text" : "/e : 2.71828" 88 | } 89 | 90 | } 91 | , { 92 | "box" : { 93 | "fontface" : 0, 94 | "id" : "obj-5", 95 | "maxclass" : "o.expr.codebox", 96 | "numinlets" : 1, 97 | "numoutlets" : 2, 98 | "outlettype" : [ "FullPacket", "FullPacket" ], 99 | "patching_rect" : [ 40.0, 79.0, 63.0, 31.0 ], 100 | "text" : "/e = e()" 101 | } 102 | 103 | } 104 | ], 105 | "lines" : [ { 106 | "patchline" : { 107 | "destination" : [ "obj-5", 0 ], 108 | "source" : [ "obj-11", 0 ] 109 | } 110 | 111 | } 112 | , { 113 | "patchline" : { 114 | "destination" : [ "obj-4", 0 ], 115 | "source" : [ "obj-5", 0 ] 116 | } 117 | 118 | } 119 | ], 120 | "dependency_cache" : [ { 121 | "name" : "o.expr.codebox.mxo", 122 | "type" : "iLaX" 123 | } 124 | , { 125 | "name" : "o.display.mxo", 126 | "type" : "iLaX" 127 | } 128 | ], 129 | "autosave" : 0 130 | } 131 | 132 | } 133 | -------------------------------------------------------------------------------- /help/o.expr-helpers/odot-halfpi.maxhelp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 1, 7 | "revision" : 10, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "box", 13 | "rect" : [ 70.0, 97.0, 337.0, 193.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "Default Max 7", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "fontface" : 1, 44 | "id" : "obj-8", 45 | "maxclass" : "comment", 46 | "numinlets" : 1, 47 | "numoutlets" : 0, 48 | "patching_rect" : [ 157.0, 29.0, 51.0, 20.0 ], 49 | "text" : "halfpi()" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-3", 56 | "linecount" : 3, 57 | "maxclass" : "comment", 58 | "numinlets" : 1, 59 | "numoutlets" : 0, 60 | "patching_rect" : [ 157.0, 64.0, 159.0, 47.0 ], 61 | "text" : "Return the constant HALFPI\n\narguments: n/a" 62 | } 63 | 64 | } 65 | , { 66 | "box" : { 67 | "fontsize" : 11.0, 68 | "id" : "obj-11", 69 | "maxclass" : "newobj", 70 | "numinlets" : 1, 71 | "numoutlets" : 1, 72 | "outlettype" : [ "bang" ], 73 | "patching_rect" : [ 25.0, 24.0, 56.0, 21.0 ], 74 | "text" : "loadbang" 75 | } 76 | 77 | } 78 | , { 79 | "box" : { 80 | "fontface" : 0, 81 | "id" : "obj-4", 82 | "maxclass" : "o.display", 83 | "numinlets" : 1, 84 | "numoutlets" : 1, 85 | "outlettype" : [ "" ], 86 | "patching_rect" : [ 25.0, 137.0, 118.0, 33.0 ], 87 | "text" : "/hp : 1.5708" 88 | } 89 | 90 | } 91 | , { 92 | "box" : { 93 | "fontface" : 0, 94 | "id" : "obj-5", 95 | "maxclass" : "o.expr.codebox", 96 | "numinlets" : 1, 97 | "numoutlets" : 2, 98 | "outlettype" : [ "FullPacket", "FullPacket" ], 99 | "patching_rect" : [ 25.0, 64.0, 103.0, 31.0 ], 100 | "text" : "/hp = halfpi()" 101 | } 102 | 103 | } 104 | ], 105 | "lines" : [ { 106 | "patchline" : { 107 | "destination" : [ "obj-5", 0 ], 108 | "source" : [ "obj-11", 0 ] 109 | } 110 | 111 | } 112 | , { 113 | "patchline" : { 114 | "destination" : [ "obj-4", 0 ], 115 | "source" : [ "obj-5", 0 ] 116 | } 117 | 118 | } 119 | ], 120 | "dependency_cache" : [ { 121 | "name" : "o.expr.codebox.mxo", 122 | "type" : "iLaX" 123 | } 124 | , { 125 | "name" : "o.display.mxo", 126 | "type" : "iLaX" 127 | } 128 | ], 129 | "autosave" : 0 130 | } 131 | 132 | } 133 | -------------------------------------------------------------------------------- /help/o.expr-helpers/odot-lnten.maxhelp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 1, 7 | "revision" : 10, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "box", 13 | "rect" : [ 70.0, 97.0, 349.0, 227.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "Default Max 7", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "fontface" : 1, 44 | "id" : "obj-8", 45 | "maxclass" : "comment", 46 | "numinlets" : 1, 47 | "numoutlets" : 0, 48 | "patching_rect" : [ 180.0, 44.0, 51.0, 20.0 ], 49 | "text" : "lnten()" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-3", 56 | "linecount" : 3, 57 | "maxclass" : "comment", 58 | "numinlets" : 1, 59 | "numoutlets" : 0, 60 | "patching_rect" : [ 180.0, 79.0, 152.0, 47.0 ], 61 | "text" : "The natural logarithm of 10\n\narguments: n/a" 62 | } 63 | 64 | } 65 | , { 66 | "box" : { 67 | "fontsize" : 11.0, 68 | "id" : "obj-11", 69 | "maxclass" : "newobj", 70 | "numinlets" : 1, 71 | "numoutlets" : 1, 72 | "outlettype" : [ "bang" ], 73 | "patching_rect" : [ 40.0, 39.0, 56.0, 21.0 ], 74 | "text" : "loadbang" 75 | } 76 | 77 | } 78 | , { 79 | "box" : { 80 | "fontface" : 0, 81 | "id" : "obj-4", 82 | "maxclass" : "o.display", 83 | "numinlets" : 1, 84 | "numoutlets" : 1, 85 | "outlettype" : [ "" ], 86 | "patching_rect" : [ 40.0, 152.0, 116.0, 33.0 ], 87 | "text" : "/lnten : 2.30259" 88 | } 89 | 90 | } 91 | , { 92 | "box" : { 93 | "fontface" : 0, 94 | "id" : "obj-5", 95 | "maxclass" : "o.expr.codebox", 96 | "numinlets" : 1, 97 | "numoutlets" : 2, 98 | "outlettype" : [ "FullPacket", "FullPacket" ], 99 | "patching_rect" : [ 40.0, 79.0, 116.0, 31.0 ], 100 | "text" : "/lnten = lnten()" 101 | } 102 | 103 | } 104 | ], 105 | "lines" : [ { 106 | "patchline" : { 107 | "destination" : [ "obj-5", 0 ], 108 | "source" : [ "obj-11", 0 ] 109 | } 110 | 111 | } 112 | , { 113 | "patchline" : { 114 | "destination" : [ "obj-4", 0 ], 115 | "source" : [ "obj-5", 0 ] 116 | } 117 | 118 | } 119 | ], 120 | "dependency_cache" : [ { 121 | "name" : "o.expr.codebox.mxo", 122 | "type" : "iLaX" 123 | } 124 | , { 125 | "name" : "o.display.mxo", 126 | "type" : "iLaX" 127 | } 128 | ], 129 | "autosave" : 0 130 | } 131 | 132 | } 133 | -------------------------------------------------------------------------------- /help/o.expr-helpers/odot-lntwo.maxhelp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 1, 7 | "revision" : 10, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "box", 13 | "rect" : [ 87.0, 107.0, 349.0, 227.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "Default Max 7", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "fontface" : 1, 44 | "id" : "obj-8", 45 | "maxclass" : "comment", 46 | "numinlets" : 1, 47 | "numoutlets" : 0, 48 | "patching_rect" : [ 180.0, 44.0, 51.0, 20.0 ], 49 | "text" : "lntwo()" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-3", 56 | "linecount" : 3, 57 | "maxclass" : "comment", 58 | "numinlets" : 1, 59 | "numoutlets" : 0, 60 | "patching_rect" : [ 180.0, 79.0, 145.0, 47.0 ], 61 | "text" : "The natural logarithm of 2\n\narguments: n/a" 62 | } 63 | 64 | } 65 | , { 66 | "box" : { 67 | "fontsize" : 11.0, 68 | "id" : "obj-11", 69 | "maxclass" : "newobj", 70 | "numinlets" : 1, 71 | "numoutlets" : 1, 72 | "outlettype" : [ "bang" ], 73 | "patching_rect" : [ 40.0, 39.0, 56.0, 21.0 ], 74 | "text" : "loadbang" 75 | } 76 | 77 | } 78 | , { 79 | "box" : { 80 | "fontface" : 0, 81 | "id" : "obj-4", 82 | "maxclass" : "o.display", 83 | "numinlets" : 1, 84 | "numoutlets" : 1, 85 | "outlettype" : [ "" ], 86 | "patching_rect" : [ 40.0, 152.0, 123.0, 33.0 ], 87 | "text" : "/lntwo : 0.693147" 88 | } 89 | 90 | } 91 | , { 92 | "box" : { 93 | "fontface" : 0, 94 | "id" : "obj-5", 95 | "maxclass" : "o.expr.codebox", 96 | "numinlets" : 1, 97 | "numoutlets" : 2, 98 | "outlettype" : [ "FullPacket", "FullPacket" ], 99 | "patching_rect" : [ 40.0, 79.0, 116.0, 31.0 ], 100 | "text" : "/lntwo = lntwo()" 101 | } 102 | 103 | } 104 | ], 105 | "lines" : [ { 106 | "patchline" : { 107 | "destination" : [ "obj-5", 0 ], 108 | "source" : [ "obj-11", 0 ] 109 | } 110 | 111 | } 112 | , { 113 | "patchline" : { 114 | "destination" : [ "obj-4", 0 ], 115 | "source" : [ "obj-5", 0 ] 116 | } 117 | 118 | } 119 | ], 120 | "dependency_cache" : [ { 121 | "name" : "o.expr.codebox.mxo", 122 | "type" : "iLaX" 123 | } 124 | , { 125 | "name" : "o.display.mxo", 126 | "type" : "iLaX" 127 | } 128 | ], 129 | "autosave" : 0 130 | } 131 | 132 | } 133 | -------------------------------------------------------------------------------- /help/o.expr-helpers/odot-logtene.maxhelp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 1, 7 | "revision" : 4, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "box", 13 | "rect" : [ 70.0, 97.0, 349.0, 227.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "Default Max 7", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "fontface" : 1, 44 | "id" : "obj-8", 45 | "maxclass" : "comment", 46 | "numinlets" : 1, 47 | "numoutlets" : 0, 48 | "patching_rect" : [ 180.0, 44.0, 62.0, 20.0 ], 49 | "text" : "logtene()" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-3", 56 | "linecount" : 3, 57 | "maxclass" : "comment", 58 | "numinlets" : 1, 59 | "numoutlets" : 0, 60 | "patching_rect" : [ 180.0, 79.0, 152.0, 47.0 ], 61 | "text" : "log(10 * e): 0.43420...\n\narguments: n/a" 62 | } 63 | 64 | } 65 | , { 66 | "box" : { 67 | "fontsize" : 11.0, 68 | "id" : "obj-11", 69 | "maxclass" : "newobj", 70 | "numinlets" : 1, 71 | "numoutlets" : 1, 72 | "outlettype" : [ "bang" ], 73 | "patching_rect" : [ 40.0, 39.0, 56.0, 21.0 ], 74 | "text" : "loadbang" 75 | } 76 | 77 | } 78 | , { 79 | "box" : { 80 | "fontface" : 0, 81 | "fontsize" : 11.0, 82 | "id" : "obj-4", 83 | "maxclass" : "o.display", 84 | "numinlets" : 1, 85 | "numoutlets" : 1, 86 | "outlettype" : [ "" ], 87 | "patching_rect" : [ 40.0, 152.0, 123.0, 33.0 ], 88 | "text" : "/l2e : 1.4427" 89 | } 90 | 91 | } 92 | , { 93 | "box" : { 94 | "fontface" : 0, 95 | "fontsize" : 11.0, 96 | "id" : "obj-5", 97 | "maxclass" : "o.expr.codebox", 98 | "numinlets" : 1, 99 | "numoutlets" : 2, 100 | "outlettype" : [ "FullPacket", "FullPacket" ], 101 | "patching_rect" : [ 40.0, 79.0, 116.0, 31.0 ], 102 | "text" : "/lte = logtene()" 103 | } 104 | 105 | } 106 | ], 107 | "lines" : [ { 108 | "patchline" : { 109 | "destination" : [ "obj-5", 0 ], 110 | "source" : [ "obj-11", 0 ] 111 | } 112 | 113 | } 114 | , { 115 | "patchline" : { 116 | "destination" : [ "obj-4", 0 ], 117 | "source" : [ "obj-5", 0 ] 118 | } 119 | 120 | } 121 | ], 122 | "dependency_cache" : [ { 123 | "name" : "o.expr.codebox.mxo", 124 | "type" : "iLaX" 125 | } 126 | , { 127 | "name" : "o.display.mxo", 128 | "type" : "iLaX" 129 | } 130 | ], 131 | "autosave" : 0 132 | } 133 | 134 | } 135 | -------------------------------------------------------------------------------- /help/o.expr-helpers/odot-logtwoe.maxhelp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 1, 7 | "revision" : 10, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "box", 13 | "rect" : [ 70.0, 97.0, 349.0, 227.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "Default Max 7", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "fontface" : 1, 44 | "id" : "obj-8", 45 | "maxclass" : "comment", 46 | "numinlets" : 1, 47 | "numoutlets" : 0, 48 | "patching_rect" : [ 180.0, 44.0, 62.0, 20.0 ], 49 | "text" : "logtwoe()" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-3", 56 | "linecount" : 3, 57 | "maxclass" : "comment", 58 | "numinlets" : 1, 59 | "numoutlets" : 0, 60 | "patching_rect" : [ 180.0, 79.0, 152.0, 47.0 ], 61 | "text" : "log(2 * e): 1.44269...\n\narguments: n/a" 62 | } 63 | 64 | } 65 | , { 66 | "box" : { 67 | "fontsize" : 11.0, 68 | "id" : "obj-11", 69 | "maxclass" : "newobj", 70 | "numinlets" : 1, 71 | "numoutlets" : 1, 72 | "outlettype" : [ "bang" ], 73 | "patching_rect" : [ 40.0, 39.0, 56.0, 21.0 ], 74 | "text" : "loadbang" 75 | } 76 | 77 | } 78 | , { 79 | "box" : { 80 | "fontface" : 0, 81 | "id" : "obj-4", 82 | "maxclass" : "o.display", 83 | "numinlets" : 1, 84 | "numoutlets" : 1, 85 | "outlettype" : [ "" ], 86 | "patching_rect" : [ 40.0, 152.0, 116.0, 33.0 ], 87 | "text" : "/l2e : 1.4427" 88 | } 89 | 90 | } 91 | , { 92 | "box" : { 93 | "fontface" : 0, 94 | "id" : "obj-5", 95 | "maxclass" : "o.expr.codebox", 96 | "numinlets" : 1, 97 | "numoutlets" : 2, 98 | "outlettype" : [ "FullPacket", "FullPacket" ], 99 | "patching_rect" : [ 40.0, 79.0, 116.0, 31.0 ], 100 | "text" : "/l2e = logtwoe()" 101 | } 102 | 103 | } 104 | ], 105 | "lines" : [ { 106 | "patchline" : { 107 | "destination" : [ "obj-5", 0 ], 108 | "source" : [ "obj-11", 0 ] 109 | } 110 | 111 | } 112 | , { 113 | "patchline" : { 114 | "destination" : [ "obj-4", 0 ], 115 | "source" : [ "obj-5", 0 ] 116 | } 117 | 118 | } 119 | ], 120 | "dependency_cache" : [ { 121 | "name" : "o.expr.codebox.mxo", 122 | "type" : "iLaX" 123 | } 124 | , { 125 | "name" : "o.display.mxo", 126 | "type" : "iLaX" 127 | } 128 | ], 129 | "autosave" : 0 130 | } 131 | 132 | } 133 | -------------------------------------------------------------------------------- /help/o.expr-helpers/odot-nextafter.maxhelp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 1, 7 | "revision" : 10, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "box", 13 | "rect" : [ 62.0, 103.0, 461.0, 232.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "Default Max 7", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "fontface" : 1, 44 | "id" : "obj-8", 45 | "maxclass" : "comment", 46 | "numinlets" : 1, 47 | "numoutlets" : 0, 48 | "patching_rect" : [ 221.0, 27.0, 67.0, 20.0 ], 49 | "text" : "nextafter()" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-3", 56 | "linecount" : 6, 57 | "maxclass" : "comment", 58 | "numinlets" : 1, 59 | "numoutlets" : 0, 60 | "patching_rect" : [ 221.0, 62.0, 227.0, 87.0 ], 61 | "text" : "return the next representable double-precision floating-point number\n\narguments:\n\n1. value (float)" 62 | } 63 | 64 | } 65 | , { 66 | "box" : { 67 | "id" : "obj-1", 68 | "maxclass" : "newobj", 69 | "numinlets" : 1, 70 | "numoutlets" : 1, 71 | "outlettype" : [ "bang" ], 72 | "patching_rect" : [ 32.0, 27.0, 60.0, 22.0 ], 73 | "text" : "loadbang" 74 | } 75 | 76 | } 77 | , { 78 | "box" : { 79 | "fontface" : 0, 80 | "id" : "obj-19", 81 | "maxclass" : "o.expr.codebox", 82 | "numinlets" : 1, 83 | "numoutlets" : 2, 84 | "outlettype" : [ "FullPacket", "FullPacket" ], 85 | "patching_rect" : [ 32.0, 62.0, 150.0, 31.0 ], 86 | "text" : "/next = nextafter(0.)" 87 | } 88 | 89 | } 90 | , { 91 | "box" : { 92 | "fontface" : 0, 93 | "id" : "obj-20", 94 | "maxclass" : "o.display", 95 | "numinlets" : 1, 96 | "numoutlets" : 1, 97 | "outlettype" : [ "" ], 98 | "patching_rect" : [ 32.0, 129.0, 143.0, 33.0 ], 99 | "text" : "/next : 4.94066e-324" 100 | } 101 | 102 | } 103 | ], 104 | "lines" : [ { 105 | "patchline" : { 106 | "destination" : [ "obj-19", 0 ], 107 | "source" : [ "obj-1", 0 ] 108 | } 109 | 110 | } 111 | , { 112 | "patchline" : { 113 | "destination" : [ "obj-20", 0 ], 114 | "source" : [ "obj-19", 0 ] 115 | } 116 | 117 | } 118 | ], 119 | "dependency_cache" : [ { 120 | "name" : "o.display.mxo", 121 | "type" : "iLaX" 122 | } 123 | , { 124 | "name" : "o.expr.codebox.mxo", 125 | "type" : "iLaX" 126 | } 127 | ], 128 | "autosave" : 0 129 | } 130 | 131 | } 132 | -------------------------------------------------------------------------------- /help/o.expr-helpers/odot-oneoverpi.maxhelp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 1, 7 | "revision" : 10, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "box", 13 | "rect" : [ 70.0, 97.0, 406.0, 227.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "Default Max 7", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "fontface" : 1, 44 | "id" : "obj-8", 45 | "maxclass" : "comment", 46 | "numinlets" : 1, 47 | "numoutlets" : 0, 48 | "patching_rect" : [ 191.0, 44.0, 74.0, 20.0 ], 49 | "text" : "oneoverpi()" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-3", 56 | "linecount" : 3, 57 | "maxclass" : "comment", 58 | "numinlets" : 1, 59 | "numoutlets" : 0, 60 | "patching_rect" : [ 191.0, 79.0, 188.0, 47.0 ], 61 | "text" : "Return the constant 1 / pi\n\narguments: n/a" 62 | } 63 | 64 | } 65 | , { 66 | "box" : { 67 | "fontsize" : 11.0, 68 | "id" : "obj-11", 69 | "maxclass" : "newobj", 70 | "numinlets" : 1, 71 | "numoutlets" : 1, 72 | "outlettype" : [ "bang" ], 73 | "patching_rect" : [ 40.0, 39.0, 56.0, 21.0 ], 74 | "text" : "loadbang" 75 | } 76 | 77 | } 78 | , { 79 | "box" : { 80 | "fontface" : 0, 81 | "id" : "obj-4", 82 | "maxclass" : "o.display", 83 | "numinlets" : 1, 84 | "numoutlets" : 1, 85 | "outlettype" : [ "" ], 86 | "patching_rect" : [ 40.0, 152.0, 103.0, 33.0 ], 87 | "text" : "/1op : 0.31831" 88 | } 89 | 90 | } 91 | , { 92 | "box" : { 93 | "fontface" : 0, 94 | "id" : "obj-5", 95 | "maxclass" : "o.expr.codebox", 96 | "numinlets" : 1, 97 | "numoutlets" : 2, 98 | "outlettype" : [ "FullPacket", "FullPacket" ], 99 | "patching_rect" : [ 40.0, 79.0, 130.0, 31.0 ], 100 | "text" : "/1op = oneoverpi()" 101 | } 102 | 103 | } 104 | ], 105 | "lines" : [ { 106 | "patchline" : { 107 | "destination" : [ "obj-5", 0 ], 108 | "source" : [ "obj-11", 0 ] 109 | } 110 | 111 | } 112 | , { 113 | "patchline" : { 114 | "destination" : [ "obj-4", 0 ], 115 | "source" : [ "obj-5", 0 ] 116 | } 117 | 118 | } 119 | ], 120 | "dependency_cache" : [ { 121 | "name" : "o.expr.codebox.mxo", 122 | "type" : "iLaX" 123 | } 124 | , { 125 | "name" : "o.display.mxo", 126 | "type" : "iLaX" 127 | } 128 | ], 129 | "autosave" : 0 130 | } 131 | 132 | } 133 | -------------------------------------------------------------------------------- /help/o.expr-helpers/odot-phi.maxhelp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 1, 7 | "revision" : 10, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "box", 13 | "rect" : [ 70.0, 97.0, 436.0, 227.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "Default Max 7", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "fontface" : 1, 44 | "id" : "obj-8", 45 | "maxclass" : "comment", 46 | "numinlets" : 1, 47 | "numoutlets" : 0, 48 | "patching_rect" : [ 180.0, 44.0, 63.0, 20.0 ], 49 | "text" : "phi()" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-3", 56 | "linecount" : 3, 57 | "maxclass" : "comment", 58 | "numinlets" : 1, 59 | "numoutlets" : 0, 60 | "patching_rect" : [ 180.0, 79.0, 217.0, 47.0 ], 61 | "text" : "Return the golden ratio: (1 + sqrt(5)) / 2\n\narguments: n/a" 62 | } 63 | 64 | } 65 | , { 66 | "box" : { 67 | "fontsize" : 11.0, 68 | "id" : "obj-11", 69 | "maxclass" : "newobj", 70 | "numinlets" : 1, 71 | "numoutlets" : 1, 72 | "outlettype" : [ "bang" ], 73 | "patching_rect" : [ 40.0, 39.0, 56.0, 21.0 ], 74 | "text" : "loadbang" 75 | } 76 | 77 | } 78 | , { 79 | "box" : { 80 | "fontface" : 0, 81 | "id" : "obj-4", 82 | "maxclass" : "o.display", 83 | "numinlets" : 1, 84 | "numoutlets" : 1, 85 | "outlettype" : [ "" ], 86 | "patching_rect" : [ 40.0, 152.0, 90.0, 33.0 ], 87 | "text" : "/p : 1.61803" 88 | } 89 | 90 | } 91 | , { 92 | "box" : { 93 | "fontface" : 0, 94 | "id" : "obj-5", 95 | "maxclass" : "o.expr.codebox", 96 | "numinlets" : 1, 97 | "numoutlets" : 2, 98 | "outlettype" : [ "FullPacket", "FullPacket" ], 99 | "patching_rect" : [ 40.0, 79.0, 83.0, 31.0 ], 100 | "text" : "/p = phi()" 101 | } 102 | 103 | } 104 | ], 105 | "lines" : [ { 106 | "patchline" : { 107 | "destination" : [ "obj-5", 0 ], 108 | "source" : [ "obj-11", 0 ] 109 | } 110 | 111 | } 112 | , { 113 | "patchline" : { 114 | "destination" : [ "obj-4", 0 ], 115 | "source" : [ "obj-5", 0 ] 116 | } 117 | 118 | } 119 | ], 120 | "dependency_cache" : [ { 121 | "name" : "o.expr.codebox.mxo", 122 | "type" : "iLaX" 123 | } 124 | , { 125 | "name" : "o.display.mxo", 126 | "type" : "iLaX" 127 | } 128 | ], 129 | "autosave" : 0 130 | } 131 | 132 | } 133 | -------------------------------------------------------------------------------- /help/o.expr-helpers/odot-pi.maxhelp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 1, 7 | "revision" : 3, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "box", 13 | "rect" : [ 70.0, 97.0, 349.0, 227.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "Default Max 7", 40 | "boxes" : [ { 41 | "box" : { 42 | "fontface" : 1, 43 | "id" : "obj-8", 44 | "maxclass" : "comment", 45 | "numinlets" : 1, 46 | "numoutlets" : 0, 47 | "patching_rect" : [ 180.0, 44.0, 51.0, 20.0 ], 48 | "text" : "pi()" 49 | } 50 | 51 | } 52 | , { 53 | "box" : { 54 | "id" : "obj-3", 55 | "linecount" : 3, 56 | "maxclass" : "comment", 57 | "numinlets" : 1, 58 | "numoutlets" : 0, 59 | "patching_rect" : [ 180.0, 79.0, 128.0, 47.0 ], 60 | "text" : "Return the constant PI\n\narguments: n/a" 61 | } 62 | 63 | } 64 | , { 65 | "box" : { 66 | "fontsize" : 11.0, 67 | "id" : "obj-11", 68 | "maxclass" : "newobj", 69 | "numinlets" : 1, 70 | "numoutlets" : 1, 71 | "outlettype" : [ "bang" ], 72 | "patching_rect" : [ 40.0, 39.0, 56.0, 21.0 ], 73 | "text" : "loadbang" 74 | } 75 | 76 | } 77 | , { 78 | "box" : { 79 | "fontface" : 0, 80 | "fontsize" : 11.0, 81 | "id" : "obj-4", 82 | "maxclass" : "o.display", 83 | "numinlets" : 1, 84 | "numoutlets" : 1, 85 | "outlettype" : [ "" ], 86 | "patching_rect" : [ 40.0, 152.0, 118.0, 33.0 ], 87 | "text" : "/pi : 3.14159" 88 | } 89 | 90 | } 91 | , { 92 | "box" : { 93 | "fontface" : 0, 94 | "fontsize" : 11.0, 95 | "id" : "obj-5", 96 | "maxclass" : "o.expr.codebox", 97 | "numinlets" : 1, 98 | "numoutlets" : 2, 99 | "outlettype" : [ "FullPacket", "FullPacket" ], 100 | "patching_rect" : [ 40.0, 79.0, 77.0, 31.0 ], 101 | "text" : "/pi = pi()" 102 | } 103 | 104 | } 105 | ], 106 | "lines" : [ { 107 | "patchline" : { 108 | "destination" : [ "obj-5", 0 ], 109 | "source" : [ "obj-11", 0 ] 110 | } 111 | 112 | } 113 | , { 114 | "patchline" : { 115 | "destination" : [ "obj-4", 0 ], 116 | "source" : [ "obj-5", 0 ] 117 | } 118 | 119 | } 120 | ], 121 | "dependency_cache" : [ { 122 | "name" : "o.expr.codebox.mxo", 123 | "type" : "iLaX" 124 | } 125 | , { 126 | "name" : "o.display.mxo", 127 | "type" : "iLaX" 128 | } 129 | ], 130 | "autosave" : 0 131 | } 132 | 133 | } 134 | -------------------------------------------------------------------------------- /help/o.expr-helpers/odot-quarterpi.maxhelp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 1, 7 | "revision" : 10, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "box", 13 | "rect" : [ 70.0, 97.0, 408.0, 227.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "Default Max 7", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "fontface" : 1, 44 | "id" : "obj-8", 45 | "maxclass" : "comment", 46 | "numinlets" : 1, 47 | "numoutlets" : 0, 48 | "patching_rect" : [ 187.0, 44.0, 68.0, 20.0 ], 49 | "text" : "quarterpi()" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-3", 56 | "linecount" : 3, 57 | "maxclass" : "comment", 58 | "numinlets" : 1, 59 | "numoutlets" : 0, 60 | "patching_rect" : [ 187.0, 79.0, 186.0, 47.0 ], 61 | "text" : "Return the constant pi / 4.\n\narguments: n/a" 62 | } 63 | 64 | } 65 | , { 66 | "box" : { 67 | "fontsize" : 11.0, 68 | "id" : "obj-11", 69 | "maxclass" : "newobj", 70 | "numinlets" : 1, 71 | "numoutlets" : 1, 72 | "outlettype" : [ "bang" ], 73 | "patching_rect" : [ 40.0, 39.0, 56.0, 21.0 ], 74 | "text" : "loadbang" 75 | } 76 | 77 | } 78 | , { 79 | "box" : { 80 | "fontface" : 0, 81 | "id" : "obj-4", 82 | "maxclass" : "o.display", 83 | "numinlets" : 1, 84 | "numoutlets" : 1, 85 | "outlettype" : [ "" ], 86 | "patching_rect" : [ 40.0, 152.0, 103.0, 33.0 ], 87 | "text" : "/qp : 0.785398" 88 | } 89 | 90 | } 91 | , { 92 | "box" : { 93 | "fontface" : 0, 94 | "id" : "obj-5", 95 | "maxclass" : "o.expr.codebox", 96 | "numinlets" : 1, 97 | "numoutlets" : 2, 98 | "outlettype" : [ "FullPacket", "FullPacket" ], 99 | "patching_rect" : [ 40.0, 79.0, 123.0, 31.0 ], 100 | "text" : "/qp = quarterpi()" 101 | } 102 | 103 | } 104 | ], 105 | "lines" : [ { 106 | "patchline" : { 107 | "destination" : [ "obj-5", 0 ], 108 | "source" : [ "obj-11", 0 ] 109 | } 110 | 111 | } 112 | , { 113 | "patchline" : { 114 | "destination" : [ "obj-4", 0 ], 115 | "source" : [ "obj-5", 0 ] 116 | } 117 | 118 | } 119 | ], 120 | "dependency_cache" : [ { 121 | "name" : "o.expr.codebox.mxo", 122 | "type" : "iLaX" 123 | } 124 | , { 125 | "name" : "o.display.mxo", 126 | "type" : "iLaX" 127 | } 128 | ], 129 | "autosave" : 0 130 | } 131 | 132 | } 133 | -------------------------------------------------------------------------------- /help/o.expr-helpers/odot-sqrthalf.maxhelp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 1, 7 | "revision" : 3, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "box", 13 | "rect" : [ 70.0, 97.0, 391.0, 227.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "Default Max 7", 40 | "boxes" : [ { 41 | "box" : { 42 | "fontface" : 1, 43 | "id" : "obj-8", 44 | "maxclass" : "comment", 45 | "numinlets" : 1, 46 | "numoutlets" : 0, 47 | "patching_rect" : [ 210.0, 44.0, 64.0, 20.0 ], 48 | "text" : " sqrthalf()" 49 | } 50 | 51 | } 52 | , { 53 | "box" : { 54 | "id" : "obj-3", 55 | "linecount" : 2, 56 | "maxclass" : "comment", 57 | "numinlets" : 1, 58 | "numoutlets" : 0, 59 | "patching_rect" : [ 210.0, 79.0, 162.0, 33.0 ], 60 | "text" : "Return the square root of 0.5\narguments: n/a" 61 | } 62 | 63 | } 64 | , { 65 | "box" : { 66 | "fontsize" : 11.0, 67 | "id" : "obj-11", 68 | "maxclass" : "newobj", 69 | "numinlets" : 1, 70 | "numoutlets" : 1, 71 | "outlettype" : [ "bang" ], 72 | "patching_rect" : [ 40.0, 39.0, 56.0, 21.0 ], 73 | "text" : "loadbang" 74 | } 75 | 76 | } 77 | , { 78 | "box" : { 79 | "fontface" : 0, 80 | "fontsize" : 11.0, 81 | "id" : "obj-4", 82 | "maxclass" : "o.display", 83 | "numinlets" : 1, 84 | "numoutlets" : 1, 85 | "outlettype" : [ "" ], 86 | "patching_rect" : [ 40.0, 152.0, 143.0, 33.0 ], 87 | "text" : "/shalf : 0.707107" 88 | } 89 | 90 | } 91 | , { 92 | "box" : { 93 | "fontface" : 0, 94 | "fontsize" : 11.0, 95 | "id" : "obj-5", 96 | "maxclass" : "o.expr.codebox", 97 | "numinlets" : 1, 98 | "numoutlets" : 2, 99 | "outlettype" : [ "FullPacket", "FullPacket" ], 100 | "patching_rect" : [ 40.0, 79.0, 143.0, 31.0 ], 101 | "text" : "/shalf = sqrthalf()" 102 | } 103 | 104 | } 105 | ], 106 | "lines" : [ { 107 | "patchline" : { 108 | "destination" : [ "obj-5", 0 ], 109 | "source" : [ "obj-11", 0 ] 110 | } 111 | 112 | } 113 | , { 114 | "patchline" : { 115 | "destination" : [ "obj-4", 0 ], 116 | "source" : [ "obj-5", 0 ] 117 | } 118 | 119 | } 120 | ], 121 | "dependency_cache" : [ { 122 | "name" : "o.expr.codebox.mxo", 123 | "type" : "iLaX" 124 | } 125 | , { 126 | "name" : "o.display.mxo", 127 | "type" : "iLaX" 128 | } 129 | ], 130 | "autosave" : 0 131 | } 132 | 133 | } 134 | -------------------------------------------------------------------------------- /help/o.expr-helpers/odot-sqrttwo.maxhelp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 1, 7 | "revision" : 3, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "box", 13 | "rect" : [ 70.0, 97.0, 349.0, 227.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "Default Max 7", 40 | "boxes" : [ { 41 | "box" : { 42 | "fontface" : 1, 43 | "id" : "obj-8", 44 | "maxclass" : "comment", 45 | "numinlets" : 1, 46 | "numoutlets" : 0, 47 | "patching_rect" : [ 180.0, 44.0, 63.0, 20.0 ], 48 | "text" : " sqrttwo()" 49 | } 50 | 51 | } 52 | , { 53 | "box" : { 54 | "id" : "obj-3", 55 | "linecount" : 3, 56 | "maxclass" : "comment", 57 | "numinlets" : 1, 58 | "numoutlets" : 0, 59 | "patching_rect" : [ 180.0, 79.0, 153.0, 47.0 ], 60 | "text" : "Return the square root of 2\n\narguments: n/a" 61 | } 62 | 63 | } 64 | , { 65 | "box" : { 66 | "fontsize" : 11.0, 67 | "id" : "obj-11", 68 | "maxclass" : "newobj", 69 | "numinlets" : 1, 70 | "numoutlets" : 1, 71 | "outlettype" : [ "bang" ], 72 | "patching_rect" : [ 40.0, 39.0, 56.0, 21.0 ], 73 | "text" : "loadbang" 74 | } 75 | 76 | } 77 | , { 78 | "box" : { 79 | "fontface" : 0, 80 | "fontsize" : 11.0, 81 | "id" : "obj-4", 82 | "maxclass" : "o.display", 83 | "numinlets" : 1, 84 | "numoutlets" : 1, 85 | "outlettype" : [ "" ], 86 | "patching_rect" : [ 40.0, 152.0, 118.0, 33.0 ], 87 | "text" : "/s2 : 1.41421" 88 | } 89 | 90 | } 91 | , { 92 | "box" : { 93 | "fontface" : 0, 94 | "fontsize" : 11.0, 95 | "id" : "obj-5", 96 | "maxclass" : "o.expr.codebox", 97 | "numinlets" : 1, 98 | "numoutlets" : 2, 99 | "outlettype" : [ "FullPacket", "FullPacket" ], 100 | "patching_rect" : [ 40.0, 79.0, 116.0, 31.0 ], 101 | "text" : "/s2 = sqrttwo()" 102 | } 103 | 104 | } 105 | ], 106 | "lines" : [ { 107 | "patchline" : { 108 | "destination" : [ "obj-5", 0 ], 109 | "source" : [ "obj-11", 0 ] 110 | } 111 | 112 | } 113 | , { 114 | "patchline" : { 115 | "destination" : [ "obj-4", 0 ], 116 | "source" : [ "obj-5", 0 ] 117 | } 118 | 119 | } 120 | ], 121 | "dependency_cache" : [ { 122 | "name" : "o.expr.codebox.mxo", 123 | "type" : "iLaX" 124 | } 125 | , { 126 | "name" : "o.display.mxo", 127 | "type" : "iLaX" 128 | } 129 | ], 130 | "autosave" : 0 131 | } 132 | 133 | } 134 | -------------------------------------------------------------------------------- /help/o.expr-helpers/odot-twelfth_root_of_2.maxhelp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 1, 7 | "revision" : 10, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "box", 13 | "rect" : [ 70.0, 97.0, 413.0, 227.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "Default Max 7", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "fontface" : 1, 44 | "id" : "obj-8", 45 | "maxclass" : "comment", 46 | "numinlets" : 1, 47 | "numoutlets" : 0, 48 | "patching_rect" : [ 230.0, 44.0, 116.0, 20.0 ], 49 | "text" : "twelfth_root_of_2()" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-3", 56 | "linecount" : 3, 57 | "maxclass" : "comment", 58 | "numinlets" : 1, 59 | "numoutlets" : 0, 60 | "patching_rect" : [ 230.0, 79.0, 153.0, 47.0 ], 61 | "text" : "Return the 12th root of 2\n\narguments: n/a" 62 | } 63 | 64 | } 65 | , { 66 | "box" : { 67 | "fontsize" : 11.0, 68 | "id" : "obj-11", 69 | "maxclass" : "newobj", 70 | "numinlets" : 1, 71 | "numoutlets" : 1, 72 | "outlettype" : [ "bang" ], 73 | "patching_rect" : [ 40.0, 39.0, 56.0, 21.0 ], 74 | "text" : "loadbang" 75 | } 76 | 77 | } 78 | , { 79 | "box" : { 80 | "fontface" : 0, 81 | "id" : "obj-4", 82 | "maxclass" : "o.display", 83 | "numinlets" : 1, 84 | "numoutlets" : 1, 85 | "outlettype" : [ "" ], 86 | "patching_rect" : [ 40.0, 152.0, 90.0, 33.0 ], 87 | "text" : "/x : 1.05946" 88 | } 89 | 90 | } 91 | , { 92 | "box" : { 93 | "fontface" : 0, 94 | "id" : "obj-5", 95 | "maxclass" : "o.expr.codebox", 96 | "numinlets" : 1, 97 | "numoutlets" : 2, 98 | "outlettype" : [ "FullPacket", "FullPacket" ], 99 | "patching_rect" : [ 40.0, 79.0, 176.0, 31.0 ], 100 | "text" : "/x = twelfth_root_of_2()" 101 | } 102 | 103 | } 104 | ], 105 | "lines" : [ { 106 | "patchline" : { 107 | "destination" : [ "obj-5", 0 ], 108 | "source" : [ "obj-11", 0 ] 109 | } 110 | 111 | } 112 | , { 113 | "patchline" : { 114 | "destination" : [ "obj-4", 0 ], 115 | "source" : [ "obj-5", 0 ] 116 | } 117 | 118 | } 119 | ], 120 | "dependency_cache" : [ { 121 | "name" : "o.expr.codebox.mxo", 122 | "type" : "iLaX" 123 | } 124 | , { 125 | "name" : "o.display.mxo", 126 | "type" : "iLaX" 127 | } 128 | ], 129 | "autosave" : 0 130 | } 131 | 132 | } 133 | -------------------------------------------------------------------------------- /help/o.expr-helpers/odot-twooverpi.maxhelp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 1, 7 | "revision" : 10, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "box", 13 | "rect" : [ 70.0, 97.0, 406.0, 227.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "Default Max 7", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "fontface" : 1, 44 | "id" : "obj-8", 45 | "maxclass" : "comment", 46 | "numinlets" : 1, 47 | "numoutlets" : 0, 48 | "patching_rect" : [ 191.0, 44.0, 74.0, 20.0 ], 49 | "text" : "twooverpi()" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-3", 56 | "linecount" : 3, 57 | "maxclass" : "comment", 58 | "numinlets" : 1, 59 | "numoutlets" : 0, 60 | "patching_rect" : [ 191.0, 79.0, 190.0, 47.0 ], 61 | "text" : "Return the constant 2 / pi\n\narguments: n/a" 62 | } 63 | 64 | } 65 | , { 66 | "box" : { 67 | "fontsize" : 11.0, 68 | "id" : "obj-11", 69 | "maxclass" : "newobj", 70 | "numinlets" : 1, 71 | "numoutlets" : 1, 72 | "outlettype" : [ "bang" ], 73 | "patching_rect" : [ 40.0, 39.0, 56.0, 21.0 ], 74 | "text" : "loadbang" 75 | } 76 | 77 | } 78 | , { 79 | "box" : { 80 | "fontface" : 0, 81 | "id" : "obj-4", 82 | "maxclass" : "o.display", 83 | "numinlets" : 1, 84 | "numoutlets" : 1, 85 | "outlettype" : [ "" ], 86 | "patching_rect" : [ 40.0, 152.0, 103.0, 33.0 ], 87 | "text" : "/2op : 0.63662" 88 | } 89 | 90 | } 91 | , { 92 | "box" : { 93 | "fontface" : 0, 94 | "id" : "obj-5", 95 | "maxclass" : "o.expr.codebox", 96 | "numinlets" : 1, 97 | "numoutlets" : 2, 98 | "outlettype" : [ "FullPacket", "FullPacket" ], 99 | "patching_rect" : [ 40.0, 79.0, 130.0, 31.0 ], 100 | "text" : "/2op = twooverpi()" 101 | } 102 | 103 | } 104 | ], 105 | "lines" : [ { 106 | "patchline" : { 107 | "destination" : [ "obj-5", 0 ], 108 | "source" : [ "obj-11", 0 ] 109 | } 110 | 111 | } 112 | , { 113 | "patchline" : { 114 | "destination" : [ "obj-4", 0 ], 115 | "source" : [ "obj-5", 0 ] 116 | } 117 | 118 | } 119 | ], 120 | "dependency_cache" : [ { 121 | "name" : "o.expr.codebox.mxo", 122 | "type" : "iLaX" 123 | } 124 | , { 125 | "name" : "o.display.mxo", 126 | "type" : "iLaX" 127 | } 128 | ], 129 | "autosave" : 0 130 | } 131 | 132 | } 133 | -------------------------------------------------------------------------------- /help/o.expr-helpers/odot-twopi.maxhelp: -------------------------------------------------------------------------------- 1 | { 2 | "patcher" : { 3 | "fileversion" : 1, 4 | "appversion" : { 5 | "major" : 8, 6 | "minor" : 1, 7 | "revision" : 10, 8 | "architecture" : "x64", 9 | "modernui" : 1 10 | } 11 | , 12 | "classnamespace" : "box", 13 | "rect" : [ 70.0, 97.0, 349.0, 227.0 ], 14 | "bglocked" : 0, 15 | "openinpresentation" : 0, 16 | "default_fontsize" : 12.0, 17 | "default_fontface" : 0, 18 | "default_fontname" : "Arial", 19 | "gridonopen" : 1, 20 | "gridsize" : [ 15.0, 15.0 ], 21 | "gridsnaponopen" : 1, 22 | "objectsnaponopen" : 1, 23 | "statusbarvisible" : 2, 24 | "toolbarvisible" : 1, 25 | "lefttoolbarpinned" : 0, 26 | "toptoolbarpinned" : 0, 27 | "righttoolbarpinned" : 0, 28 | "bottomtoolbarpinned" : 0, 29 | "toolbars_unpinned_last_save" : 0, 30 | "tallnewobj" : 0, 31 | "boxanimatetime" : 200, 32 | "enablehscroll" : 1, 33 | "enablevscroll" : 1, 34 | "devicewidth" : 0.0, 35 | "description" : "", 36 | "digest" : "", 37 | "tags" : "", 38 | "style" : "", 39 | "subpatcher_template" : "Default Max 7", 40 | "assistshowspatchername" : 0, 41 | "boxes" : [ { 42 | "box" : { 43 | "fontface" : 1, 44 | "id" : "obj-8", 45 | "maxclass" : "comment", 46 | "numinlets" : 1, 47 | "numoutlets" : 0, 48 | "patching_rect" : [ 172.0, 44.0, 51.0, 20.0 ], 49 | "text" : "twopi()" 50 | } 51 | 52 | } 53 | , { 54 | "box" : { 55 | "id" : "obj-3", 56 | "linecount" : 3, 57 | "maxclass" : "comment", 58 | "numinlets" : 1, 59 | "numoutlets" : 0, 60 | "patching_rect" : [ 172.0, 79.0, 156.0, 47.0 ], 61 | "text" : "Return the constant pi * 2\n\narguments: n/a" 62 | } 63 | 64 | } 65 | , { 66 | "box" : { 67 | "fontsize" : 11.0, 68 | "id" : "obj-11", 69 | "maxclass" : "newobj", 70 | "numinlets" : 1, 71 | "numoutlets" : 1, 72 | "outlettype" : [ "bang" ], 73 | "patching_rect" : [ 40.0, 39.0, 56.0, 21.0 ], 74 | "text" : "loadbang" 75 | } 76 | 77 | } 78 | , { 79 | "box" : { 80 | "fontface" : 0, 81 | "id" : "obj-4", 82 | "maxclass" : "o.display", 83 | "numinlets" : 1, 84 | "numoutlets" : 1, 85 | "outlettype" : [ "" ], 86 | "patching_rect" : [ 40.0, 152.0, 128.0, 33.0 ], 87 | "text" : "/2p : 6.28319" 88 | } 89 | 90 | } 91 | , { 92 | "box" : { 93 | "fontface" : 0, 94 | "id" : "obj-5", 95 | "maxclass" : "o.expr.codebox", 96 | "numinlets" : 1, 97 | "numoutlets" : 2, 98 | "outlettype" : [ "FullPacket", "FullPacket" ], 99 | "patching_rect" : [ 40.0, 79.0, 97.0, 31.0 ], 100 | "text" : "/2p = twopi()" 101 | } 102 | 103 | } 104 | ], 105 | "lines" : [ { 106 | "patchline" : { 107 | "destination" : [ "obj-5", 0 ], 108 | "source" : [ "obj-11", 0 ] 109 | } 110 | 111 | } 112 | , { 113 | "patchline" : { 114 | "destination" : [ "obj-4", 0 ], 115 | "source" : [ "obj-5", 0 ] 116 | } 117 | 118 | } 119 | ], 120 | "dependency_cache" : [ { 121 | "name" : "o.expr.codebox.mxo", 122 | "type" : "iLaX" 123 | } 124 | , { 125 | "name" : "o.display.mxo", 126 | "type" : "iLaX" 127 | } 128 | ], 129 | "autosave" : 0 130 | } 131 | 132 | } 133 | -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNMAT/CNMAT-odot/ac753e280dcdc44b0e1aace9bc73714a025f0f35/icon.png -------------------------------------------------------------------------------- /init/max-keycommands.txt: -------------------------------------------------------------------------------- 1 | max definecommand e patcher insertobj o.expr.codebox; 2 | max definecommandinstructions patcher e "o. expression"; 3 | max definecommand d patcher insertobj o.display; 4 | max definecommandinstructions patcher d "o. display"; 5 | max definecommand C patcher insertobj o.compose; 6 | max definecommandinstructions patcher C "o. compose"; 7 | max definecommand O patcher inserttextobj o.; 8 | max definecommandinstructions patcher O "o."; 9 | 10 | 11 | -------------------------------------------------------------------------------- /init/odot-objectlist.txt: -------------------------------------------------------------------------------- 1 | max oblist "odot objects" o.append; 2 | max oblist "odot objects" o.change; 3 | max oblist "odot objects" o.collect; 4 | max oblist "odot objects" o.compose; 5 | max oblist "odot objects" o.cond; 6 | max oblist "odot objects" o.dict; 7 | max oblist "odot objects" o.difference; 8 | max oblist "odot objects" o.display; 9 | max oblist "odot objects" o.edge~; 10 | max oblist "odot objects" o.explode; 11 | max oblist "odot objects" o.expr.codebox; 12 | max oblist "odot objects" o.flatten; 13 | max oblist "odot objects" o.if; 14 | max oblist "odot objects" o.intersection; 15 | max oblist "odot objects" o.listenumerate; 16 | max oblist "odot objects" o.pack; 17 | max oblist "odot objects" o.prepend; 18 | max oblist "odot objects" o.print; 19 | max oblist "odot objects" o.printbytes; 20 | max oblist "odot objects" o.route; 21 | max oblist "odot objects" o.schedule; 22 | max oblist "odot objects" o.select; 23 | max oblist "odot objects" o.timetag; 24 | max oblist "odot objects" o.union; 25 | max oblist "odot objects" o.var; 26 | max oblist "odot abstractions" o.gather; 27 | max oblist "odot abstractions" o.recurse; 28 | max oblist "odot abstractions" o.uniform; 29 | max oblist "odot abstractions" o.lefttoright; 30 | max oblist "odot abstractions" o.righttoleft; 31 | max oblist "odot abstractions" o.betweentimes; 32 | max oblist "odot abstractions" o.delay; 33 | max oblist "odot abstractions" o.metro; 34 | max oblist "odot abstractions" o.poissonprocess; -------------------------------------------------------------------------------- /license.txt: -------------------------------------------------------------------------------- 1 | The Center for New Music and Audio Technologies, 2 | University of California, Berkeley. Copyright (c) 2008-14, The Regents of 3 | the University of California (Regents). 4 | Permission to use, copy, modify, distribute, and distribute modified versions 5 | of this software and its documentation without fee and without a signed 6 | licensing agreement, is hereby granted, provided that the above copyright 7 | notice, this paragraph and the following two paragraphs appear in all copies, 8 | modifications, and distributions. 9 | 10 | IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, 11 | SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING 12 | OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS 13 | BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 14 | 15 | REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 16 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 17 | PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED 18 | HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE 19 | MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. -------------------------------------------------------------------------------- /odot-logo.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNMAT/CNMAT-odot/ac753e280dcdc44b0e1aace9bc73714a025f0f35/odot-logo.ai -------------------------------------------------------------------------------- /patchers/tutorial/close_parent.js: -------------------------------------------------------------------------------- 1 | inlets = 0; 2 | outlet = 1; 3 | 4 | var p = this.patcher.parentpatcher; 5 | 6 | function bang(){ 7 | p.message("wclose"); 8 | } -------------------------------------------------------------------------------- /patchers/tutorial/filelist.txt: -------------------------------------------------------------------------------- 1 | 1, 01_max_and_odot.maxpat "Max & odot"; 2 | 2, 02_data_manipulation.maxpat "How to manipulate data"; 3 | 3, 03_packing_processes.maxpat "Packing data together and setting a process in motion"; 4 | 4, 04_build_merge_sep.maxpat "Building, merging, and separating data"; 5 | 5, 05_hierarchies.maxpat "Hierarchies and persistence"; 6 | 6, 06_expr1.maxpat "Expressions 1: functions, operators, addresses, types"; 7 | 7, 07_expr2.maxpat "Expressions 2: more on lists"; 8 | 8, 08_expr3.maxpat "Expressions 3: apply(), map(), and lambda()"; 9 | 9, 09_expr4.maxpat "Expressions 4: dynamic assignment"; 10 | 10, 10_subbundles_literals.maxpat "usage of subbundles and bundle literals in expressions"; 11 | 11, 11_all_about_time.maxpat "dealing with time: history, o.schedule and o.timetag"; 12 | 12, 12_abstractions.maxpat "Abstracting code, user interface design"; 13 | -------------------------------------------------------------------------------- /patchers/tutorial/n4m.o.tutorial-load.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const fs = require('fs'); 4 | const Max = require('max-api'); 5 | 6 | var objary = []; 7 | 8 | function printvalues(o){ 9 | for(var i in o){ 10 | let mc = o[i]['box']['maxclass']; 11 | 12 | if(mc.match(/^(o.compose|o.display|o.expr.codebox|newobj)$/)){ 13 | //console.log("class: " + mc); 14 | let tx = o[i]['text']; 15 | 16 | 17 | // if(tx != null){ 18 | console.log("text: " + tx); 19 | let patt = new RegExp(/o\.+/); 20 | console.log("found: " + tx.match(patt)); 21 | //objary.push(tx); 22 | // } 23 | } 24 | } 25 | let unique = [...new Set(objary)]; 26 | console.log("full list: ", objary); 27 | console.log("filtered: ", unique); 28 | } 29 | 30 | //printvalues(tobjects); 31 | 32 | Max.addHandler("file", (msg) => { 33 | let rawdata = fs.readFileSync(msg); 34 | let tute = JSON.parse(rawdata); 35 | let tobjects = tute['patcher']['boxes']; 36 | objary = []; 37 | printvalues(tobjects) 38 | }) -------------------------------------------------------------------------------- /pd/cnmat-meta.pd: -------------------------------------------------------------------------------- 1 | #N canvas 15 49 200 200 10; 2 | #N canvas 490 133 420 300 META 0; 3 | #X text 10 25 AUTHOR John MacCallum \, Adrian Freed \, Rama Gottfried 4 | ; 5 | #X text 10 10 VERSION odot 1.3-124-g5057d51 (pd alpha version); 6 | #X text 11 41 NAME CNMAT / odot library; 7 | #X restore 10 10 pd META; 8 | -------------------------------------------------------------------------------- /pd/deprecated/o.message-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 371 76 860 496 10; 2 | #X text 223 97 omessage is similar the standard message box except 3 | that it converts its data to OSC packets.; 4 | #X msg 615 100; 5 | #X floatatom 106 217 5 0 0 0 - - -; 6 | #X floatatom 490 218 5 0 0 0 - - -; 7 | #X text 213 245 $n style variable substitution; 8 | #X text 430 348 o.message can be used to display the contents of an 9 | OSC bundle; 10 | #N canvas 425 156 667 423 nested-bundles 0; 11 | #X msg 22 240 1 2 3; 12 | #N canvas 951 499 450 300 set 0; 13 | #X obj 71 85 inlet; 14 | #X obj 81 170 outlet; 15 | #X obj 72 108 list prepend set; 16 | #X obj 72 143 list trim; 17 | #X connect 0 0 2 0; 18 | #X connect 2 0 3 0; 19 | #X connect 3 0 1 0; 20 | #X restore 22 211 pd set; 21 | #X msg 71 240 a r s; 22 | #N canvas 951 499 450 300 set 0; 23 | #X obj 71 85 inlet; 24 | #X obj 81 170 outlet; 25 | #X obj 72 108 list prepend set; 26 | #X obj 72 143 list trim; 27 | #X connect 0 0 2 0; 28 | #X connect 2 0 3 0; 29 | #X connect 3 0 1 0; 30 | #X restore 71 211 pd set; 31 | #X msg 215 237 /foo FullPacket 1.12104e-43 0 -1.99904; 32 | #N canvas 951 499 450 300 set 0; 33 | #X obj 71 85 inlet; 34 | #X obj 81 170 outlet; 35 | #X obj 72 108 list prepend set; 36 | #X obj 72 143 list trim; 37 | #X connect 0 0 2 0; 38 | #X connect 2 0 3 0; 39 | #X connect 3 0 1 0; 40 | #X restore 215 208 pd set; 41 | #X text 207 80 the messages in a nested bundle must be on their own 42 | lines and the final square bracket must be on a new line; 43 | #X text 207 48 nested bundles can be constructed using square brackets 44 | in the arguments of a message.; 45 | #X obj 490 233 print nested; 46 | #X obj 22 53 o.message 164 62 binhex b#2F666F6F205B0A092F62617220312032 47 | b#20330A092F626C6F6F20226122202272 b#22202273220A5D; 48 | #X obj 22 153 o.route /foo; 49 | #X obj 22 183 o.route /bar /bloo; 50 | #X obj 215 167 o.atomize; 51 | #X obj 490 168 o.route /foo; 52 | #X obj 490 196 o.atomize /bar /bloo; 53 | #X connect 1 0 0 0; 54 | #X connect 3 0 2 0; 55 | #X connect 5 0 4 0; 56 | #X connect 9 0 10 0; 57 | #X connect 9 0 12 0; 58 | #X connect 9 0 13 0; 59 | #X connect 10 0 11 0; 60 | #X connect 11 0 1 0; 61 | #X connect 11 1 3 0; 62 | #X connect 12 0 5 0; 63 | #X connect 13 0 14 0; 64 | #X connect 14 0 8 0; 65 | #X connect 14 1 8 0; 66 | #X restore 106 363 pd nested-bundles; 67 | #X text 6 4 _; 68 | #N canvas 1012 621 450 300 alpha-release-notes 0; 69 | #X text 10 4 -; 70 | #X text 49 66 currently in the alpha release there are a few issues 71 | with omessage that will be fixed in the beta: - there appears to be 72 | some issue with recalling saved values on instantiation - if there 73 | is a stream of data coming into the object when closing the toplevel 74 | patch there could be a TCL/TK error due to input events to omessage 75 | causing state change after the canvas has been freed - the resize handle 76 | is not always in the right place; 77 | #X restore 106 397 pd alpha-release-notes; 78 | #X text 104 19 omessage; 79 | #X obj 106 245 o.message 88 23 binhex b#2F666F6F203120222431222033 80 | ; 81 | #X obj 103 103 o.message 88 23 binhex b#2F666F6F203120322033; 82 | #X obj 107 39 o.message 100 23 binhex b#0A; 83 | #X obj 103 140 o.print; 84 | #X obj 106 282 o.print; 85 | #X obj 490 254 o.pack /foo 0; 86 | #X obj 473 307 o.message 88 23 binhex b#2F666F6F20332E; 87 | #X connect 2 0 10 0; 88 | #X connect 3 0 15 0; 89 | #X connect 10 0 14 0; 90 | #X connect 11 0 13 0; 91 | #X connect 15 0 16 1; 92 | -------------------------------------------------------------------------------- /pd/deprecated/o.pak-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 369 35 868 410 10; 2 | #X floatatom 266 94 5 0 0 0 - - -; 3 | #X msg 396 94 testo; 4 | #X msg 309 97 testo; 5 | #X obj 109 137 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 6 | -1 -1; 7 | #X floatatom 361 96 5 0 0 0 - - -; 8 | #X floatatom 89 76 5 0 0 0 - - -; 9 | #X msg 170 191 version; 10 | #X obj 236 228 print; 11 | #X obj 308 216 o.print pack; 12 | #X obj 308 158 o.pak /foo 11 /bar sam; 13 | #X obj 88 100 o.pak /subbundle; 14 | #X connect 0 0 9 0; 15 | #X connect 1 0 9 1; 16 | #X connect 2 0 9 0; 17 | #X connect 3 0 9 0; 18 | #X connect 4 0 9 1; 19 | #X connect 5 0 10 0; 20 | #X connect 6 0 9 0; 21 | #X connect 9 0 7 0; 22 | #X connect 9 0 8 0; 23 | #X connect 10 0 9 0; 24 | -------------------------------------------------------------------------------- /pd/deprecated/o.unless-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 782 345 450 300 10; 2 | #X obj 128 166 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 3 | -1 -1; 4 | #X floatatom 149 50 5 0 0 0 - - -; 5 | #X obj 151 83 o.pack /foo; 6 | #X obj 151 110 o.unless /foo > 3; 7 | #X obj 151 165 o.print yes; 8 | #X connect 1 0 2 0; 9 | #X connect 2 0 3 0; 10 | #X connect 3 0 0 0; 11 | #X connect 3 0 4 0; 12 | -------------------------------------------------------------------------------- /pd/deprecated/o.when-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 782 345 450 300 10; 2 | #X obj 128 166 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 3 | -1 -1; 4 | #X floatatom 149 50 5 0 0 0 - - -; 5 | #X obj 151 165 o.print yes; 6 | #X obj 151 110 o.when /foo > 3; 7 | #X obj 151 83 o.pack /foo; 8 | #X connect 1 0 4 0; 9 | #X connect 3 0 0 0; 10 | #X connect 3 0 2 0; 11 | #X connect 4 0 3 0; 12 | -------------------------------------------------------------------------------- /pd/dev/o.bundle-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 78 133 981 559 10; 2 | #X obj 59 49 netreceive -u -b 7777; 3 | #X obj 59 133 o.bundle; 4 | #X obj 104 160 o.display 430 27; 5 | #X obj 59 240 o.display 430 92; 6 | #X obj 81 203 print not-a-bundle; 7 | #N canvas 0 22 450 300 prepend-set 0; 8 | #X obj 176 76 inlet; 9 | #X obj 176 102 list prepend set; 10 | #X obj 176 124 list trim; 11 | #X obj 176 146 outlet; 12 | #X connect 0 0 1 0; 13 | #X connect 1 0 2 0; 14 | #X connect 2 0 3 0; 15 | #X restore 580 127 pd prepend-set; 16 | #X msg 580 159 35 98 117 110 100 108 101 0 0 0 0 0 0 0 0 0 0 0 0 16 17 | 47 103 48 0 44 100 0 0 0 0 0 0 0 0 0 0 0 0 0 16 47 108 108 0 44 100 18 | 0 0 0 0 0 0 0 0 0 0 0 0 0 16 47 108 109 0 44 100 0 0 192 38 51 51 64 19 | 0 0 0 0 0 0 16 47 108 104 0 44 100 0 0 0 0 0 0 0 0 0 0 0 0 0 16 47 20 | 108 102 0 44 100 0 0 64 111 64 0 0 0 0 0 0 0 0 16 47 104 102 0 44 100 21 | 0 0 64 175 64 0 0 0 0 0; 22 | #X connect 0 0 1 0; 23 | #X connect 0 0 5 0; 24 | #X connect 1 0 3 0; 25 | #X connect 1 1 4 0; 26 | #X connect 1 2 2 0; 27 | #X connect 5 0 6 0; 28 | -------------------------------------------------------------------------------- /pd/dev/o.context-graph-example.pd: -------------------------------------------------------------------------------- 1 | #N canvas 0 22 450 300 10; 2 | #X obj 205 82 inlet; 3 | #X obj 205 120 o.context; 4 | #X obj 205 162 outlet; 5 | #X connect 0 0 1 0; 6 | #X connect 1 0 2 0; 7 | #X coords 0 -1 1 1 85 60 1 100 100; 8 | -------------------------------------------------------------------------------- /pd/dev/o.context-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 521 22 920 618 10; 2 | #X obj 45 53 o.context; 3 | #X obj 45 24 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 4 | -1; 5 | #X obj 45 86 o.message 539 23 binhex b#2F636F6E74657874205B0A092F6E616D 6 | b#6520226F2E636F6E746578742D68656C b#702E7064220A092F7061746820222F55 7 | b#736572732F722F446F63756D656E7473 b#2F6465762D6C69622F434E4D41542D6F 8 | b#646F742F70645F72656C656173655F70 b#61636B616765220A092F243020313030 9 | b#340A092F69736162737472616374696F b#6E2066616C73650A092F656469746D6F 10 | b#64652066616C73650A092F666F6E7420 b#224D6F6E61636F220A092F666F6E7473 11 | b#697A652031300A092F64697274792074 b#7275650A092F70697877696474682030 12 | b#0A092F70697868656967687420300A09 b#2F73637265656E2F7831203532310A09 13 | b#2F73637265656E2F79312032320A092F b#73637265656E2F783220313434310A09 14 | b#2F73637265656E2F7932203634300A09 b#2F786D617267696E20300A092F796D61 15 | b#7267696E20300A092F617267756D656E b#74730A5D; 16 | #X obj 78 364 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 17 | -1; 18 | #X obj 502 381 o.context-graph-example; 19 | #X obj 502 354 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 20 | -1 -1; 21 | #X obj 502 460 o.print GOP; 22 | #X obj 78 434 o.print subpatches; 23 | #N canvas 0 22 450 300 context 0; 24 | #X obj 163 55 inlet; 25 | #X obj 163 111 outlet; 26 | #N canvas 0 22 450 300 anothersubpatch 0; 27 | #X obj 164 55 inlet; 28 | #X obj 164 135 outlet; 29 | #N canvas 0 22 450 300 last-one 0; 30 | #X obj 206 32 inlet; 31 | #X obj 206 54 o.context; 32 | #X obj 206 76 outlet; 33 | #X obj 280 35 loadbang; 34 | #X connect 0 0 1 0; 35 | #X connect 1 0 2 0; 36 | #X connect 3 0 1 0; 37 | #X restore 164 92 pd last-one \, the deepest is first; 38 | #X connect 0 0 2 0; 39 | #X connect 2 0 1 0; 40 | #X restore 163 84 pd anothersubpatch bb 2; 41 | #X connect 0 0 2 0; 42 | #X connect 2 0 1 0; 43 | #X restore 78 390 pd context subpatch depth example 1 2 3 4 5 6 7 8 44 | 9 10 11 12 13; 45 | #X connect 0 0 2 1; 46 | #X connect 1 0 0 0; 47 | #X connect 3 0 8 0; 48 | #X connect 4 0 6 0; 49 | #X connect 5 0 4 0; 50 | #X connect 8 0 7 0; 51 | -------------------------------------------------------------------------------- /pd/dev/o.slip.decode-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 640 344 450 300 10; 2 | #X obj 234 139 print bytes; 3 | #X obj 89 149 o.slip.decode; 4 | #X obj 89 109 o.slip.encode; 5 | #X obj 88 70 o.compose 100 31 binhex b#2F666F6F203A20312C0A2F626172203A 6 | b#2032; 7 | #X obj 80 189 o.compose 100 31 binhex b#2F666F6F203A20312C0A2F626172203A 8 | b#2032; 9 | #X connect 1 0 4 1; 10 | #X connect 2 0 0 0; 11 | #X connect 2 0 1 0; 12 | #X connect 3 0 2 0; 13 | -------------------------------------------------------------------------------- /pd/dev/o.slip.encode-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 640 344 450 300 10; 2 | #X obj 234 139 print bytes; 3 | #X obj 89 109 o.slip.encode; 4 | #X obj 89 149 o.slip.decode; 5 | #X obj 89 43 o.compose 123 44 binhex b#2F666F6F203A20312C0A2F626172203A 6 | b#20322C0A2F7374657665202261626364 b#656667220A; 7 | #X obj 58 201 o.compose 123 23 binhex b#; 8 | #X connect 1 0 0 0; 9 | #X connect 1 0 2 0; 10 | #X connect 2 0 4 1; 11 | #X connect 3 0 1 0; 12 | -------------------------------------------------------------------------------- /pd/dev/o.table-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 231 24 1033 559 10; 2 | #X floatatom 125 70 5 0 0 0 - - -; 3 | #X floatatom 275 70 5 0 0 0 - - -; 4 | #X msg 1 152 one; 5 | #X msg 36 151 two; 6 | #X msg 448 189 popfirst; 7 | #X msg 448 134 peeknth \$1; 8 | #X floatatom 448 106 5 0 0 0 - - -; 9 | #X floatatom 528 106 5 0 0 0 - - -; 10 | #X msg 528 134 popnth \$1; 11 | #X msg 528 189 peekfirst; 12 | #X msg 448 219 poplast; 13 | #X msg 528 219 peeklast; 14 | #X obj 125 99 o.pack /foo 1 /key one; 15 | #X obj 125 370 o.table @key /key; 16 | #X obj 125 415 o.if !emptybundle(); 17 | #X obj 125 447 o.print; 18 | #X obj 230 445 o.print table_is_empty; 19 | #X msg 448 278 write /Users/r/table-test.txt; 20 | #X msg 448 310 read /Users/r/table-test.txt; 21 | #X text 244 372 @key argument sets address to use for entry key (must 22 | be a symbol); 23 | #X obj 275 99 o.pack /foo 1 /key two; 24 | #X text 148 37 set value with key; 25 | #X text -26 127 recall value with key; 26 | #X connect 0 0 12 0; 27 | #X connect 1 0 20 0; 28 | #X connect 2 0 13 0; 29 | #X connect 3 0 13 0; 30 | #X connect 4 0 13 0; 31 | #X connect 5 0 13 0; 32 | #X connect 6 0 5 0; 33 | #X connect 7 0 8 0; 34 | #X connect 8 0 13 0; 35 | #X connect 9 0 13 0; 36 | #X connect 10 0 13 0; 37 | #X connect 11 0 13 0; 38 | #X connect 12 0 13 0; 39 | #X connect 13 0 14 0; 40 | #X connect 14 0 15 0; 41 | #X connect 14 1 16 0; 42 | #X connect 17 0 13 0; 43 | #X connect 18 0 13 0; 44 | #X connect 20 0 13 0; 45 | -------------------------------------------------------------------------------- /pd/dev/o.udp.receive-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 646 151 653 605 10; 2 | #X obj 129 220 o.display 302 40; 3 | #X msg 129 24 status; 4 | #X obj 129 55 o.udp.receive 7777; 5 | #X obj 234 82 route received total from multicast; 6 | #X floatatom 234 108 5 0 0 0 - - -, f 5; 7 | #X floatatom 285 108 5 0 0 0 - - -, f 5; 8 | #X obj 337 142 unpack 0 0 0 0 0, f 25; 9 | #X floatatom 337 170 5 0 0 0 - - -, f 5; 10 | #X floatatom 373 170 5 0 0 0 - - -, f 5; 11 | #X floatatom 410 170 5 0 0 0 - - -, f 5; 12 | #X floatatom 447 170 5 0 0 0 - - -, f 5; 13 | #X floatatom 484 170 5 0 0 0 - - -, f 5; 14 | #X obj 389 107 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 15 | 1; 16 | #X obj 129 144 o.timetag /time/received; 17 | #X obj 88 134 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 18 | -1; 19 | #X connect 1 0 2 0; 20 | #X connect 2 0 13 0; 21 | #X connect 2 0 14 0; 22 | #X connect 2 1 3 0; 23 | #X connect 3 0 4 0; 24 | #X connect 3 1 5 0; 25 | #X connect 3 2 6 0; 26 | #X connect 3 3 12 0; 27 | #X connect 6 0 7 0; 28 | #X connect 6 1 8 0; 29 | #X connect 6 2 9 0; 30 | #X connect 6 3 10 0; 31 | #X connect 6 4 11 0; 32 | #X connect 13 0 0 0; 33 | -------------------------------------------------------------------------------- /pd/dev/o.udp.send-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 742 173 552 285 10; 2 | #X obj 98 39 o.pack /foo; 3 | #X floatatom 98 11 5 0 0 0 - - -, f 5; 4 | #X msg 150 99 connect 127.0.0.1 8888; 5 | #X obj 98 188 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 6 | 1; 7 | #X text 124 190 connected; 8 | #X obj 98 65 o.timetag /time/sent; 9 | #X obj 98 131 o.udp.send 127.0.0.1 8888; 10 | #X text 189 190 << this isn't working for some reason; 11 | #X connect 0 0 5 0; 12 | #X connect 1 0 0 0; 13 | #X connect 2 0 6 0; 14 | #X connect 5 0 6 0; 15 | #X connect 6 0 3 0; 16 | -------------------------------------------------------------------------------- /pd/dev/o.validate-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 390 208 816 487 10; 2 | #X obj 273 247 o.validate; 3 | #X obj 177 146 + 10; 4 | #X obj 161 118 unpack s 0 0 0; 5 | #X obj 161 62 o.message 100 36 binhex b#2F666F6F2031300A2F626172203230 6 | ; 7 | #X obj 160 184 pack s 0 0 0; 8 | #X obj 138 285 o.print valid; 9 | #X obj 333 286 o.print error; 10 | #X obj 293 89 o.message 100 36 binhex b#2F666F6F2031300A2F626172203230 11 | ; 12 | #X obj 160 212 route list; 13 | #X obj 230 286 print; 14 | #X connect 0 0 5 0; 15 | #X connect 0 1 9 0; 16 | #X connect 0 2 6 0; 17 | #X connect 1 0 4 1; 18 | #X connect 2 0 4 0; 19 | #X connect 2 1 1 0; 20 | #X connect 2 2 4 2; 21 | #X connect 2 3 4 3; 22 | #X connect 3 0 2 0; 23 | #X connect 4 0 8 0; 24 | #X connect 7 0 0 0; 25 | #X connect 8 0 0 0; 26 | -------------------------------------------------------------------------------- /pd/o.atomize-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 336 66 921 609 10; 2 | #X obj 461 319 o.atomize; 3 | #X obj 24 35 o.display 858 144; 4 | #N canvas 687 212 450 300 doc-text 0; 5 | #X obj 36 48 loadbang; 6 | #X obj 36 179 outlet; 7 | #X obj 36 110 o.atomize; 8 | #X msg 36 85 doc; 9 | #X obj 36 149 o.route /doc; 10 | #X connect 0 0 3 0; 11 | #X connect 2 0 4 0; 12 | #X connect 3 0 2 0; 13 | #X connect 4 0 1 0; 14 | #X restore 24 8 pd doc-text; 15 | #X floatatom 37 237 5 0 0 0 - - -, f 5; 16 | #X obj 37 269 o.pack /mysynth/2/gain 0; 17 | #X obj 215 261 o.compose 166 31 binhex b#2F6D7973796E74682F322F6672657120 18 | b#3A203434302C0A2F6E616461203A2022 b#7269656E22; 19 | #X obj 461 259 o.compose 166 44 binhex b#2F6D7973796E74682F322F6672657120 20 | b#3A203434302C0A2F6D7973796E74682F b#322F6761696E203A20302E352C0A2F6E 21 | b#616461203A20227269656E22; 22 | #X obj 215 261 o.compose 166 31 binhex b#2F6D7973796E74682F322F6672657120 23 | b#3A203434302C0A2F6E616461203A2022 b#7269656E22; 24 | #X obj 461 361 print; 25 | #X text 531 317 with no arguments \, o.atomize unpacks the bundle and 26 | outputs each message as a Max message in the order they appear in the 27 | bundle.; 28 | #X obj 215 226 loadbang; 29 | #X obj 37 319 o.union; 30 | #X obj 37 341 o.atomize /mysynth/2/freq /mysynth/2/gain; 31 | #X obj 37 374 print left; 32 | #X obj 280 373 print right; 33 | #X obj 158 375 print middle; 34 | #X connect 0 0 8 0; 35 | #X connect 2 0 1 0; 36 | #X connect 3 0 4 0; 37 | #X connect 4 0 11 0; 38 | #X connect 5 0 11 1; 39 | #X connect 6 0 0 0; 40 | #X connect 10 0 5 0; 41 | #X connect 11 0 12 0; 42 | #X connect 12 0 13 0; 43 | #X connect 12 1 15 0; 44 | #X connect 12 2 14 0; 45 | -------------------------------------------------------------------------------- /pd/o.change-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 479 89 744 561 10; 2 | #X text 15 4 -; 3 | #X obj 63 404 o.change; 4 | #X obj 23 65 o.display 642 157; 5 | #N canvas 750 23 450 300 doc-text 0; 6 | #X obj 36 179 outlet; 7 | #X obj 36 68 loadbang; 8 | #X msg 36 92 doc; 9 | #X obj 36 156 o.route /doc; 10 | #X obj 36 117 o.change; 11 | #X connect 1 0 2 0; 12 | #X connect 2 0 4 0; 13 | #X connect 3 0 0 0; 14 | #X connect 4 0 3 0; 15 | #X restore 23 38 pd doc-text; 16 | #X obj 37 270 o.compose 131 31 binhex b#2F626172203A205B342C20352C20365D 17 | b#2C0A2F666F6F203A205B312C20322C20 b#335D; 18 | #X obj 186 269 o.compose 131 31 binhex b#2F666F6F203A205B312C20322C20335D 19 | b#2C0A2F626172203A205B342C20352C20 b#365D; 20 | #X obj 332 269 o.compose 131 23 binhex b#2F666F6F203A205B312C20322C20335D 21 | b#; 22 | #X obj 477 268 o.compose 131 31 binhex b#2F666F6F203A205B312C20322C20335D 23 | b#2C0A2F626172203A205B342C20352C20 b#375D; 24 | #X obj 63 463 o.display 126 27; 25 | #X obj 222 465 o.display 136 27; 26 | #X text 92 514 different; 27 | #X text 266 514 same; 28 | #X connect 1 0 8 0; 29 | #X connect 1 1 9 0; 30 | #X connect 3 0 2 0; 31 | #X connect 4 0 1 0; 32 | #X connect 5 0 1 0; 33 | #X connect 6 0 1 0; 34 | #X connect 7 0 1 0; 35 | -------------------------------------------------------------------------------- /pd/o.collect-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 440 145 807 514 10; 2 | #X msg 143 285 /bar 1 \, /foo 11; 3 | #X obj 265 260 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 4 | -1 -1; 5 | #X floatatom 451 426 5 0 0 0 - - -, f 5; 6 | #X floatatom 501 426 5 0 0 0 - - -, f 5; 7 | #X msg 26 285 /bar 11 \, /foo 1; 8 | #X obj 517 264 + 1; 9 | #X obj 594 285 + 1; 10 | #X obj 265 348 o.collect; 11 | #X obj 451 380 o.route /foo /bar; 12 | #X obj 436 264 o.pack /foo; 13 | #X obj 517 290 o.pack /bar; 14 | #X obj 594 311 o.pack /steve; 15 | #X obj 30 39 o.display 642 131; 16 | #N canvas 750 23 450 300 doc-text 0; 17 | #X obj 36 179 outlet; 18 | #X obj 36 58 loadbang; 19 | #X msg 36 85 doc; 20 | #X obj 36 149 o.route /doc; 21 | #X obj 36 110 o.collect; 22 | #X connect 1 0 2 0; 23 | #X connect 2 0 4 0; 24 | #X connect 3 0 0 0; 25 | #X connect 4 0 3 0; 26 | #X restore 30 12 pd doc-text; 27 | #X obj 264 401 o.display 153 27; 28 | #X obj 417 236 t b f f; 29 | #X floatatom 417 193 5 0 0 0 - - -, f 5; 30 | #X text 73 230 bang triggers output and clears the internal buffer 31 | ; 32 | #X text 48 457 messages in the resulting bundle are in the order they 33 | were received; 34 | #X connect 0 0 7 0; 35 | #X connect 1 0 7 0; 36 | #X connect 4 0 7 0; 37 | #X connect 5 0 6 0; 38 | #X connect 5 0 10 0; 39 | #X connect 6 0 11 0; 40 | #X connect 7 0 8 0; 41 | #X connect 7 0 14 0; 42 | #X connect 8 0 2 0; 43 | #X connect 8 1 3 0; 44 | #X connect 9 0 7 0; 45 | #X connect 10 0 7 0; 46 | #X connect 11 0 7 0; 47 | #X connect 13 0 12 0; 48 | #X connect 15 0 1 0; 49 | #X connect 15 1 9 0; 50 | #X connect 15 2 5 0; 51 | #X connect 16 0 15 0; 52 | -------------------------------------------------------------------------------- /pd/o.cond-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 782 345 450 300 10; 2 | #X floatatom 58 82 5 0 0 0 - - -, f 5; 3 | #X obj 58 107 o.pack /foo; 4 | #X obj 138 197 o.print ==; 5 | #X obj 230 197 o.print >; 6 | #X obj 58 198 o.print <; 7 | #X obj 58 134 o.cond /foo < 3 \, /foo == 3 \, /foo > 3; 8 | #X connect 0 0 1 0; 9 | #X connect 1 0 5 0; 10 | #X connect 5 0 4 0; 11 | #X connect 5 1 2 0; 12 | #X connect 5 2 3 0; 13 | -------------------------------------------------------------------------------- /pd/o.difference-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 373 108 756 577 10; 2 | #X obj 30 60 o.display 642 144; 3 | #N canvas 750 23 450 300 doc-text 0; 4 | #X obj 36 179 outlet; 5 | #X obj 36 58 loadbang; 6 | #X msg 36 85 doc; 7 | #X obj 36 149 o.route /doc; 8 | #X obj 36 110 o.difference; 9 | #X connect 1 0 2 0; 10 | #X connect 2 0 4 0; 11 | #X connect 3 0 0 0; 12 | #X connect 4 0 3 0; 13 | #X restore 30 33 pd doc-text; 14 | #X obj 73 354 o.display 183 27; 15 | #X obj 73 256 o.compose 131 31 binhex b#2F666F6F203A205B312C20322C20335D 16 | b#2C0A2F626172203A205B342C20352C20 b#365D; 17 | #X obj 221 255 o.compose 222 31 binhex b#2F666F6F203A205B2271222C20226522 18 | b#2C202272222C202274222C202279225D b#2C0A2F626C6F6F203A205B2261222C20 19 | b#2262222C202263225D; 20 | #X obj 73 315 o.difference; 21 | #X connect 1 0 0 0; 22 | #X connect 3 0 5 0; 23 | #X connect 4 0 5 1; 24 | #X connect 5 0 2 0; 25 | -------------------------------------------------------------------------------- /pd/o.downcast-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 543 22 818 715 10; 2 | #X obj 74 115 o.expr /bar = int64(/bar); 3 | #X obj 74 58 o.message 100 36 binhex b#2F666F6F2036362E360A2F6261722031 4 | b#30; 5 | #X obj 74 146 o.timetag /time; 6 | #X obj 124 193 o.downcast @headertimetag /time; 7 | #X obj 124 228 o.expr map(lambda(a)#[ assign(quote(/typetags)+a \, 8 | typetags(value(a))) \; ]# \, getaddresses()); 9 | #X obj 122 299 o.message 283 88 binhex b#2F666F6F2036362E360A2F6261722031 10 | b#300A2F74696D65203239333130393138 b#35202D3738393033353330350A2F7479 11 | b#7065746167732F666F6F202766270A2F b#74797065746167732F62617220276927 12 | b#0A2F74797065746167732F74696D6520 b#27692720276927; 13 | #X obj 74 449 o.expr map(lambda(a)#[ assign(quote(/typetags)+a \, typetags(value(a))) 14 | \; ]# \, getaddresses()); 15 | #X obj 72 520 o.message 283 88 binhex b#2F666F6F2036362E360A2F6261722031 16 | b#300A2F74696D65203239333130393138 b#35202D3738393033353330350A2F7479 17 | b#7065746167732F666F6F202764270A2F b#74797065746167732F62617220276927 18 | b#0A2F74797065746167732F74696D6520 b#27692720276927; 19 | #X obj 74 414 o.downcast @doubles 0; 20 | #X obj 439 299 o.message 283 88 binhex b#2F666F6F2036362E360A2F6261722031 21 | b#300A2F74696D6520323031342D30362D b#31345431363A33373A33362E37353538 22 | b#32315A0A2F74797065746167732F666F b#6F202764270A2F74797065746167732F 23 | b#626172202768270A2F74797065746167 b#732F74696D65202774270A; 24 | #X obj 439 210 o.expr map(lambda(a)#[ assign(quote(/typetags)+a \, 25 | typetags(value(a))) \; ]# \, getaddresses()); 26 | #X text 323 82 Downcasts optional types supported by the odot objects 27 | to the required types of OSC 1.0.; 28 | #X text 322 55 Returns a bundle that conforms to OSC 1; 29 | #X text 321 25 o.downcast; 30 | #X connect 0 0 2 0; 31 | #X connect 1 0 0 0; 32 | #X connect 2 0 3 0; 33 | #X connect 2 0 8 0; 34 | #X connect 2 0 10 0; 35 | #X connect 3 0 4 0; 36 | #X connect 4 0 5 1; 37 | #X connect 6 0 7 1; 38 | #X connect 8 0 6 0; 39 | #X connect 10 0 9 1; 40 | -------------------------------------------------------------------------------- /pd/o.explode-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 473 80 743 668 10; 2 | #X obj 195 338 o.explode; 3 | #X obj 246 363 o.flatten; 4 | #X obj 195 259 o.compose 159 57 binhex b#2F73796E74682F312F66726571203A20 5 | b#3434302E2C0A2F73796E74682F312F61 b#6D70203A20312E2C0A2F73796E74682F 6 | b#322F66726571203A203434372E2C0A2F b#73796E74682F322F616D70203A20302E 7 | b#35; 8 | #X obj 27 91 o.display 642 131; 9 | #N canvas 750 23 450 300 doc-text 0; 10 | #X obj 36 213 outlet; 11 | #X obj 36 44 loadbang; 12 | #X msg 36 85 doc; 13 | #X obj 36 149 o.route /doc; 14 | #X obj 36 110 o.explode; 15 | #X connect 1 0 2 0; 16 | #X connect 2 0 4 0; 17 | #X connect 3 0 0 0; 18 | #X connect 4 0 3 0; 19 | #X restore 27 64 pd doc-text; 20 | #X obj 195 485 o.display 237 144; 21 | #X obj 246 399 o.display 150 66; 22 | #X text 3 10 -; 23 | #X connect 0 0 1 0; 24 | #X connect 0 0 5 0; 25 | #X connect 1 0 6 0; 26 | #X connect 2 0 0 0; 27 | #X connect 4 0 3 0; 28 | -------------------------------------------------------------------------------- /pd/o.expr-dollar-test.pd: -------------------------------------------------------------------------------- 1 | #N canvas 591 188 450 300 10; 2 | #X obj 169 74 inlet; 3 | #X obj 170 167 outlet; 4 | #X obj 170 120 o.expr /foo = \$1 + \$2; 5 | #X connect 0 0 2 0; 6 | #X connect 2 0 1 0; 7 | -------------------------------------------------------------------------------- /pd/o.flatten-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 473 80 734 604 10; 2 | #X obj 29 42 o.display 642 118; 3 | #N canvas 750 23 450 300 doc-text 0; 4 | #X obj 36 179 outlet; 5 | #X obj 36 58 loadbang; 6 | #X msg 36 85 doc; 7 | #X obj 36 149 o.route /doc; 8 | #X obj 36 110 o.flatten; 9 | #X connect 1 0 2 0; 10 | #X connect 2 0 4 0; 11 | #X connect 3 0 0 0; 12 | #X connect 4 0 3 0; 13 | #X restore 29 15 pd doc-text; 14 | #X text 31 458 addresses are created by concatenating the addresses 15 | of each sub-bundle; 16 | #X obj 399 321 o.flatten; 17 | #X obj 399 231 o.compose 256 83 binhex b#2F666F6F2F626172203A207B0A092F62 18 | b#6C6F6F203A205B312C20322C20335D0A b#7D2C0A2F666F6F203A207B0A092F6261 19 | b#722F626C6F6F203A205B2261222C2022 b#72222C202273225D0A7D; 20 | #X obj 399 357 o.display 201 27; 21 | #X obj 44 328 o.flatten; 22 | #X obj 44 238 o.compose 256 70 binhex b#2F666F6F203A205B2261222C207B0A09 23 | b#2F626172203A205B312C20322C207B0A b#09092F626C6F6F203A205B2261222C20 24 | b#2262222C20335D0A097D5D0A7D2C2022 b#76225D; 25 | #X obj 44 364 o.display 201 27; 26 | #X text 391 401 duplicate addresses are discarded.; 27 | #X connect 1 0 0 0; 28 | #X connect 3 0 5 0; 29 | #X connect 4 0 3 0; 30 | #X connect 6 0 8 0; 31 | #X connect 7 0 6 0; 32 | -------------------------------------------------------------------------------- /pd/o.if-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 495 89 749 544 10; 2 | #X floatatom 53 245 5 0 0 0 - - -, f 5; 3 | #X obj 53 270 o.pack /foo; 4 | #X obj 29 42 o.display 642 144; 5 | #N canvas 750 23 450 300 doc-text 0; 6 | #X obj 36 179 outlet; 7 | #X obj 36 58 loadbang; 8 | #X msg 36 85 doc; 9 | #X obj 36 149 o.route /doc; 10 | #X obj 36 110 o.if /foo == 0; 11 | #X connect 1 0 2 0; 12 | #X connect 2 0 4 0; 13 | #X connect 3 0 0 0; 14 | #X connect 4 0 3 0; 15 | #X restore 29 15 pd doc-text; 16 | #X obj 53 300 o.display 100 27; 17 | #X obj 53 387 o.display 100 27; 18 | #X obj 53 347 o.if /foo < 10, f 25; 19 | #X obj 200 388 o.display 100 27; 20 | #X connect 0 0 1 0; 21 | #X connect 1 0 4 0; 22 | #X connect 3 0 2 0; 23 | #X connect 4 0 6 0; 24 | #X connect 6 0 5 0; 25 | #X connect 6 1 7 0; 26 | -------------------------------------------------------------------------------- /pd/o.intersection-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 623 46 800 479 10; 2 | #X obj 29 42 o.display 642 157; 3 | #N canvas 750 23 450 300 doc-text 0; 4 | #X obj 36 179 outlet; 5 | #X obj 36 58 loadbang; 6 | #X msg 36 85 doc; 7 | #X obj 36 149 o.route /doc; 8 | #X obj 36 110 o.intersection; 9 | #X connect 1 0 2 0; 10 | #X connect 2 0 4 0; 11 | #X connect 3 0 0 0; 12 | #X connect 4 0 3 0; 13 | #X restore 29 15 pd doc-text; 14 | #X obj 73 354 o.display 138 27; 15 | #X obj 73 256 o.compose 131 31 binhex b#2F666F6F203A205B312C20322C20335D 16 | b#2C0A2F626172203A205B342C20352C20 b#365D; 17 | #X obj 221 255 o.compose 222 31 binhex b#2F666F6F203A205B2271222C20226522 18 | b#2C202272222C202274222C202279225D b#2C0A2F626C6F6F203A205B2261222C20 19 | b#2262222C202263225D; 20 | #X obj 73 315 o.intersection; 21 | #X connect 1 0 0 0; 22 | #X connect 3 0 5 0; 23 | #X connect 4 0 5 1; 24 | #X connect 5 0 2 0; 25 | -------------------------------------------------------------------------------- /pd/o.menu-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 666 281 606 300 10; 2 | #X obj 115 44 o.message 100 62 binhex b#2F666F6F202231220A2F626172202232220A2F7374657665202233220A2F6269 3 | b#6C6C79202234220A; 4 | #X obj 115 136 o.menu; 5 | #X obj 115 191 print L; 6 | #X obj 215 191 print R; 7 | #X obj 245 9 loadbang; 8 | #X msg 245 100 displaymode 1; 9 | #X msg 345 100 displaymode 0; 10 | #X connect 0 0 1 0; 11 | #X connect 1 0 2 0; 12 | #X connect 1 1 3 0; 13 | #X connect 4 0 5 0; 14 | #X connect 4 0 0 0; 15 | #X connect 5 0 1 0; 16 | #X connect 6 0 1 0; 17 | -------------------------------------------------------------------------------- /pd/o.messageiterate-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 324 232 752 501 10; 2 | #X obj 84 303 o.messageiterate; 3 | #X obj 84 229 o.compose 248 57 binhex b#2F666F6F203A20312C0A2F626172203A 4 | b#20322C0A2F7374657665203A2022616C b#6962616261222C0A2F626F6F203A205B 5 | b#312C20322C20332C20342C20352C2022 b#6F74686572207374756666225D; 6 | #X obj 84 368 o.print; 7 | #X text 195 302 iterate messages in bundle; 8 | #X obj 94 340 print ---; 9 | #X obj 29 42 o.display 642 118; 10 | #N canvas 1023 23 450 300 doc-text 0; 11 | #X obj 36 179 outlet; 12 | #X obj 36 48 loadbang; 13 | #X obj 57 344 o.messageiterate; 14 | #X msg 36 85 doc; 15 | #X obj 36 149 o.route /doc; 16 | #X obj 36 110 o.messageiterate; 17 | #X connect 1 0 3 0; 18 | #X connect 3 0 5 0; 19 | #X connect 4 0 0 0; 20 | #X connect 5 0 4 0; 21 | #X restore 29 15 pd doc-text; 22 | #X connect 0 0 2 0; 23 | #X connect 0 0 4 0; 24 | #X connect 1 0 0 0; 25 | #X connect 6 0 5 0; 26 | -------------------------------------------------------------------------------- /pd/o.pack-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 534 23 796 718 10; 2 | #X obj 32 40 o.display 642 144; 3 | #N canvas 750 23 450 300 doc-text 0; 4 | #X obj 36 179 outlet; 5 | #X obj 36 58 loadbang; 6 | #X msg 36 85 doc; 7 | #X obj 36 149 o.route /doc; 8 | #X obj 36 110 o.pack /foo; 9 | #X connect 1 0 2 0; 10 | #X connect 2 0 4 0; 11 | #X connect 3 0 0 0; 12 | #X connect 4 0 3 0; 13 | #X restore 32 13 pd doc-text; 14 | #X obj 66 302 o.pack /foo /bar /boom 0; 15 | #X floatatom 66 274 5 0 0 0 - - -, f 5; 16 | #X msg 136 272 1 2 3; 17 | #X text 57 229 left inlet triggers output; 18 | #X text 229 303 default arguments can be placed after OSC addresses 19 | ; 20 | #X obj 66 339 o.display 149 27; 21 | #X obj 69 519 o.display 185 27; 22 | #X obj 69 482 o.pack /foo /bar a b c; 23 | #X obj 69 433 o.compose 123 31 binhex b#2F626C6F6F203A205B312C20322C2033 24 | b#5D2C0A2F626C6F62203A205B342C2035 b#2C20365D; 25 | #X text 228 473 a bundle sent in to one of the inlets will become a 26 | nested bundle; 27 | #X connect 1 0 0 0; 28 | #X connect 2 0 7 0; 29 | #X connect 3 0 2 0; 30 | #X connect 4 0 2 1; 31 | #X connect 9 0 8 0; 32 | #X connect 10 0 9 0; 33 | -------------------------------------------------------------------------------- /pd/o.print-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 624 93 758 444 10; 2 | #X obj 29 42 o.display 642 131; 3 | #N canvas 750 23 450 300 doc-text 0; 4 | #X obj 36 179 outlet; 5 | #X obj 36 58 loadbang; 6 | #X obj 57 344 o.messageiterate; 7 | #X msg 36 85 doc; 8 | #X obj 36 149 o.route /doc; 9 | #X obj 36 110 o.print; 10 | #X connect 1 0 3 0; 11 | #X connect 3 0 5 0; 12 | #X connect 4 0 0 0; 13 | #X connect 5 0 4 0; 14 | #X restore 29 15 pd doc-text; 15 | #X obj 88 244 o.compose 152 23 binhex b#2F666F6F203A205B312C20322C202262 16 | b#6172225D; 17 | #X obj 88 287 o.print; 18 | #X obj 88 331 o.display 152 27; 19 | #X obj 309 249 o.compose 152 23 binhex b#2F666F6F203A205B312C20322C202262 20 | b#6172225D; 21 | #X obj 309 292 o.print foo; 22 | #X text 261 336 input is passed through to the outlet unchanged; 23 | #X connect 1 0 0 0; 24 | #X connect 2 0 3 0; 25 | #X connect 3 0 4 0; 26 | #X connect 5 0 6 0; 27 | -------------------------------------------------------------------------------- /pd/o.printbytes-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 545 188 764 466 10; 2 | #X obj 29 42 o.display 642 131; 3 | #N canvas 750 23 450 300 doc-text 0; 4 | #X obj 36 179 outlet; 5 | #X obj 36 58 loadbang; 6 | #X obj 57 344 o.messageiterate; 7 | #X msg 36 85 doc; 8 | #X obj 36 149 o.route /doc; 9 | #X obj 36 110 o.printbytes; 10 | #X connect 1 0 3 0; 11 | #X connect 3 0 5 0; 12 | #X connect 4 0 0 0; 13 | #X connect 5 0 4 0; 14 | #X restore 29 15 pd doc-text; 15 | #X obj 73 271 o.printbytes; 16 | #X obj 73 228 o.compose 279 23 binhex b#2F666F6F203A205B31322C2022626172 17 | b#222C2038392E3333332C20222F626172 b#222C2032355D; 18 | #X obj 73 310 o.display 237 27; 19 | #X text 67 368 input is passed through to the outlet; 20 | #X connect 1 0 0 0; 21 | #X connect 2 0 4 0; 22 | #X connect 3 0 2 0; 23 | -------------------------------------------------------------------------------- /pd/o.route-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 368 23 961 587 10; 2 | #X obj 24 35 o.display 858 157; 3 | #N canvas 216 32 450 300 doc-text 0; 4 | #X obj 36 58 loadbang; 5 | #X obj 36 179 outlet; 6 | #X msg 36 85 doc; 7 | #X obj 36 149 o.route /doc; 8 | #X obj 36 110 o.route /foo; 9 | #X connect 0 0 2 0; 10 | #X connect 2 0 4 0; 11 | #X connect 3 0 1 0; 12 | #X connect 4 0 3 0; 13 | #X restore 24 8 pd doc-text; 14 | #X floatatom 62 229 5 0 0 0 - - -, f 5; 15 | #X obj 62 248 o.pack /mysynth/2/gain /mysynth/2/freq 440 /nada rien 16 | ; 17 | #X obj 173 304 o.route /mysynth; 18 | #X obj 56 342 o.display 100 27; 19 | #X obj 266 349 o.display 100 27; 20 | #X obj 173 390 o.route /1 /2, f 54; 21 | #X floatatom 411 229 5 0 0 0 - - -, f 5; 22 | #X obj 411 248 o.pack /mysynth/*/freq /mysynth/*/gain 0.5 /nada rien 23 | ; 24 | #X obj 207 431 o.display 100 27; 25 | #X obj 362 431 o.display 100 27; 26 | #X obj 174 489 o.route /freq /gain; 27 | #X floatatom 174 520 5 0 0 0 - - -, f 5; 28 | #X floatatom 229 520 5 0 0 0 - - -, f 5; 29 | #X obj 333 489 o.route /freq /gain; 30 | #X floatatom 333 520 5 0 0 0 - - -, f 5; 31 | #X floatatom 388 520 5 0 0 0 - - -, f 5; 32 | #X text 288 306 o.route strips off the portion of the address that 33 | matched; 34 | #X text 379 353 unmatched (delegation); 35 | #X connect 1 0 0 0; 36 | #X connect 2 0 3 0; 37 | #X connect 3 0 4 0; 38 | #X connect 4 0 5 0; 39 | #X connect 4 0 7 0; 40 | #X connect 4 1 6 0; 41 | #X connect 7 0 10 0; 42 | #X connect 7 0 12 0; 43 | #X connect 7 1 11 0; 44 | #X connect 7 1 15 0; 45 | #X connect 8 0 9 0; 46 | #X connect 9 0 4 0; 47 | #X connect 12 0 13 0; 48 | #X connect 12 1 14 0; 49 | #X connect 15 0 16 0; 50 | #X connect 15 1 17 0; 51 | -------------------------------------------------------------------------------- /pd/o.schedule-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 201 65 921 687 10; 2 | #X obj 246 224 o.schedule /time/activate; 3 | #X obj 246 306 o.timetag /time/activated; 4 | #X obj 246 338 o.expr /time/diff = /time/activated - /time/activate 5 | ; 6 | #X obj 246 153 o.timetag /time/acquired; 7 | #X msg 154 144 clear; 8 | #X obj 773 258 o.print queue-full; 9 | #X text 441 303 late bundles come out second outlet (from left) \, 10 | here /time/diff tells us how late the bundle is; 11 | #X obj 249 63 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144 12 | -1 -1 6400 1; 13 | #X obj 246 90 o.pack /slider; 14 | #X obj 246 261 o.expr /late = fase; 15 | #X obj 379 261 o.expr /late = true; 16 | #X obj 509 261 o.expr /late = true \, /immediate = false; 17 | #X obj 246 455 o.route /slider; 18 | #X obj 249 487 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144 19 | -1 -1 6400 1; 20 | #X obj 380 379 o.compose 310 88 binhex b#2F736C69646572203A2036342E2C0A2F 21 | b#74696D652F6163717569726564203A20 b#323031342D30372D32395430303A3534 22 | b#3A34362E3937313238335A2C0A2F7469 b#6D652F6163746976617465203A203230 23 | b#31342D30372D32395430303A35343A34 b#362E3937313238335A2C0A2F6C617465 24 | b#203A20747275652C0A2F74696D652F61 b#6374697661746564203A20323031342D 25 | b#30372D32395430303A35343A34362E39 b#37313332315A2C0A2F74696D652F6469 26 | b#6666203A20332E3730303033652D3035 b#; 27 | #X obj 246 184 o.expr /time/activate = /time/acquired + 0.5; 28 | #X connect 0 0 9 0; 29 | #X connect 0 1 10 0; 30 | #X connect 0 2 11 0; 31 | #X connect 0 3 5 0; 32 | #X connect 1 0 2 0; 33 | #X connect 2 0 12 0; 34 | #X connect 2 0 14 1; 35 | #X connect 3 0 15 0; 36 | #X connect 4 0 0 0; 37 | #X connect 7 0 8 0; 38 | #X connect 8 0 3 0; 39 | #X connect 9 0 1 0; 40 | #X connect 10 0 1 0; 41 | #X connect 11 0 1 0; 42 | #X connect 12 0 13 0; 43 | #X connect 15 0 0 0; 44 | -------------------------------------------------------------------------------- /pd/o.select-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 462 226 796 511 10; 2 | #X floatatom 251 185 5 0 0 0 - - -, f 5; 3 | #X msg 309 184 testo; 4 | #X floatatom 375 140 5 0 0 0 - - -, f 5; 5 | #X msg 384 180 /foo/10 \$1; 6 | #X msg 142 144 1 2 3 foo 5 6; 7 | #X msg 476 183 /bar \$1; 8 | #X floatatom 472 156 5 0 0 0 - - -, f 5; 9 | #X floatatom 210 50 5 0 0 0 - - -, f 5; 10 | #X obj 111 262 print; 11 | #X obj 214 31 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 12 | -1; 13 | #X obj 208 82 o.pack /postbar; 14 | #X obj 162 269 o.print pack_monitor; 15 | #X obj 252 232 o.pack /foo; 16 | #X floatatom 546 154 5 0 0 0 - - -, f 5; 17 | #X msg 550 181 /bob \$1; 18 | #X obj 333 270 o.select /foo /bar; 19 | #X obj 448 316 o.print unmatched; 20 | #X obj 222 332 o.compose 100 23 binhex b#2F666F6F2F3130203A2033372E 21 | ; 22 | #X obj 336 335 o.compose 100 23 binhex b#2F626172203A20352E; 23 | #X msg 453 239 set 2 /bob; 24 | #X msg 539 238 set 2 /bar; 25 | #X connect 0 0 12 0; 26 | #X connect 1 0 12 0; 27 | #X connect 2 0 3 0; 28 | #X connect 3 0 15 0; 29 | #X connect 4 0 12 0; 30 | #X connect 5 0 15 0; 31 | #X connect 6 0 5 0; 32 | #X connect 7 0 10 0; 33 | #X connect 9 0 7 0; 34 | #X connect 10 0 12 0; 35 | #X connect 12 0 8 0; 36 | #X connect 12 0 11 0; 37 | #X connect 12 0 15 0; 38 | #X connect 13 0 14 0; 39 | #X connect 14 0 15 0; 40 | #X connect 15 0 17 1; 41 | #X connect 15 1 18 1; 42 | #X connect 15 2 16 0; 43 | #X connect 19 0 15 0; 44 | #X connect 20 0 15 0; 45 | -------------------------------------------------------------------------------- /pd/o.timetag-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 618 212 450 300 10; 2 | #X floatatom 118 72 5 0 0 0 - - -; 3 | #X obj 118 116 o.pack /foo; 4 | #X obj 118 165 o.timetag /timetag; 5 | #X obj 118 203 o.print; 6 | #X connect 0 0 1 0; 7 | #X connect 1 0 2 0; 8 | #X connect 2 0 3 0; 9 | -------------------------------------------------------------------------------- /pd/o.union-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 859 292 450 300 10; 2 | #X floatatom 87 15 5 0 0 0 - - -; 3 | #X floatatom 177 15 5 0 0 0 - - -; 4 | #X floatatom 266 16 5 0 0 0 - - -; 5 | #X obj 88 44 o.pack /foo; 6 | #X obj 178 44 o.pack /foo /bar; 7 | #X obj 99 181 o.print; 8 | #X obj 88 114 o.union; 9 | #X connect 0 0 3 0; 10 | #X connect 1 0 4 0; 11 | #X connect 2 0 4 1; 12 | #X connect 3 0 6 0; 13 | #X connect 4 0 6 1; 14 | #X connect 6 0 5 0; 15 | -------------------------------------------------------------------------------- /pd/o.var-help.pd: -------------------------------------------------------------------------------- 1 | #N canvas 738 376 762 300 10; 2 | #X obj 351 109 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 3 | -1 -1; 4 | #X floatatom 411 97 5 0 0 0 - - -; 5 | #X floatatom 268 96 5 0 0 0 - - -; 6 | #X msg 197 137 /fooM \$1; 7 | #X floatatom 216 91 5 0 0 0 - - -; 8 | #X obj 262 137 o.pack /foo0; 9 | #X obj 352 186 o.var; 10 | #X obj 352 208 o.print; 11 | #X obj 405 138 o.pack /foo1; 12 | #X connect 0 0 6 0; 13 | #X connect 1 0 8 0; 14 | #X connect 2 0 5 0; 15 | #X connect 3 0 6 0; 16 | #X connect 4 0 3 0; 17 | #X connect 5 0 6 0; 18 | #X connect 6 0 7 0; 19 | #X connect 8 0 6 1; 20 | -------------------------------------------------------------------------------- /pd/odot-object-list.pd: -------------------------------------------------------------------------------- 1 | #N canvas 40 22 781 792 10; 2 | #X obj 112 95 o.atomize; 3 | #X obj 112 63 o.append; 4 | #X obj 112 278 o.difference; 5 | #X obj 112 219 o.cond; 6 | #X obj 549 523 o.expr; 7 | #X obj 112 157 o.change; 8 | #X obj 112 305 o.explode; 9 | #X obj 112 337 o.flatten; 10 | #X obj 112 369 o.if /foo == 1; 11 | #X obj 112 401 o.intersection; 12 | #X obj 111 432 o.mappatch; 13 | #X obj 111 507 o.menu; 14 | #X obj 547 579 o.message 100 23 binhex b#0A; 15 | #X obj 333 57 o.pack /foo; 16 | #X obj 548 552 o.pak /foo; 17 | #X obj 333 125 o.prepend; 18 | #X obj 333 159 o.print; 19 | #X obj 333 193 o.printbytes; 20 | #X obj 333 227 o.route /foo; 21 | #X obj 333 261 o.schedule /timetag; 22 | #X obj 333 295 o.select; 23 | #X obj 581 300 o.table; 24 | #X obj 333 363 o.timetag; 25 | #X obj 333 397 o.union; 26 | #X obj 333 465 o.var; 27 | #X obj 333 431 o.unless /foo > 0; 28 | #X obj 333 499 o.when /foo < 0; 29 | #X text 69 20 list of odot objects; 30 | #X obj 112 463 o.messageiterate; 31 | #X obj 111 556 o.compose 100 23 binhex b#; 32 | #X obj 115 618 o.expr.codebox 100 36 binhex b#; 33 | #X obj 116 691 o.display 100 27; 34 | #X text 544 499 deprecated:; 35 | #X text 124 532 o.compose; 36 | #X text 124 597 o.expr.codebox; 37 | #X text 131 668 o.display; 38 | #X text 127 489 o.menu; 39 | #X obj 112 126 o.bundle; 40 | #X obj 112 247 o.context; 41 | #X obj 111 186 o.collect; 42 | #X text 583 270 dev:; 43 | -------------------------------------------------------------------------------- /release-excludes.txt: -------------------------------------------------------------------------------- 1 | */.git/* 2 | */.gitignore 3 | */src/* 4 | */make-release.sh 5 | */dev-internal/* 6 | */testing/* 7 | */release-excludes.txt 8 | -------------------------------------------------------------------------------- /src/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | $(PRODUCT_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundlePackageType 16 | iLaX 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1.0 21 | CSResourcesFileMapped 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/Makefile: -------------------------------------------------------------------------------- 1 | BUILDTARGETS = mac all 2 | OTHERTARGETS = clean install archive win win64 3 | 4 | UNAME = $(shell uname) 5 | 6 | ifeq ($(UNAME), Darwin) 7 | MAKEFILE = Makefile.mac.mk 8 | else 9 | MAKEFILE = Makefile.win.mk 10 | endif 11 | 12 | $(BUILDTARGETS): 13 | @$(MAKE) -f $(MAKEFILE) 14 | 15 | $(OTHERTARGETS): 16 | @$(MAKE) -f $(MAKEFILE) $@ 17 | 18 | .PHONY: $(BUILDTARGETS) $(CLEANTARGETS) 19 | -------------------------------------------------------------------------------- /src/Makefile.mac.mk: -------------------------------------------------------------------------------- 1 | all: $(CURRENT_VERSION_FILE) 2 | xcodebuild -target "Build all" -project odot.xcodeproj -configuration Release 3 | 4 | max-all: $(CURRENT_VERSION_FILE) 5 | xcodebuild -target "Build all Max" -project odot.xcodeproj -configuration Release 6 | 7 | max-dev: $(CURRENT_VERSION_FILE) 8 | xcodebuild -target "Build all Max Unstable" -project odot.xcodeproj -configuration Release 9 | 10 | max-deprecated: $(CURRENT_VERSION_FILE) 11 | xcodebuild -target "Build all Max Deprecated" -project odot.xcodeproj -configuration Release 12 | 13 | pd-all: $(CURRENT_VERSION_FILE) 14 | xcodebuild -target "Build all PD" -project odot.xcodeproj -configuration Release 15 | 16 | pd-dev: $(CURRENT_VERSION_FILE) 17 | xcodebuild -target "Build all PD Unstable" -project odot.xcodeproj -configuration Release 18 | 19 | pd-deprecated: $(CURRENT_VERSION_FILE) 20 | xcodebuild -target "Build all PD Deprecated" -project odot.xcodeproj -configuration Release 21 | 22 | .PHONY: clean 23 | clean: 24 | rm -rf build ../externals ../dev/externals ../deprecated/externals 25 | rm -rf ../pd/*.pd_darwin ../pd/dev/*.pd_darwin ../pd/deprecated/*.pd_darwin 26 | rm -f $(CURRENT_VERSION_FILE) 27 | 28 | $(CURRENT_VERSION_FILE): 29 | sh odot_current_version.sh 30 | # echo "#define ODOT_VERSION \""`git describe --tags --long`"\"" > $(CURRENT_VERSION_FILE) 31 | # echo "#define ODOT_COMPILE_DATE \""`date`"\"" >> $(CURRENT_VERSION_FILE) 32 | -------------------------------------------------------------------------------- /src/Makefile.win.mk: -------------------------------------------------------------------------------- 1 | EXTERNALS_BASENAMES = o.append \ 2 | o.atomize \ 3 | o.change \ 4 | o.collect \ 5 | o.cond \ 6 | o.compose \ 7 | o.dict \ 8 | o.difference \ 9 | o.display \ 10 | o.downcast \ 11 | o.explode \ 12 | o.expr.codebox \ 13 | o.flatten \ 14 | o.if \ 15 | o.intersection \ 16 | o.listenumerate \ 17 | o.messageiterate \ 18 | o.pack \ 19 | o.prepend \ 20 | o.print \ 21 | o.printbytes \ 22 | o.route \ 23 | o.schedule \ 24 | o.select \ 25 | o.timetag \ 26 | o.union \ 27 | o.var 28 | 29 | DEPRECATED_BASENAMES = o.edge~ \ 30 | o.expr \ 31 | o.message \ 32 | o.pak \ 33 | o.unless \ 34 | o.when 35 | 36 | DEV_BASENAMES = \ 37 | o.context \ 38 | o.gui.attach \ 39 | o.mappatch \ 40 | o.schedule~ \ 41 | o.slip.decode \ 42 | o.slip.encode \ 43 | o.snapshot~ \ 44 | o.table \ 45 | o.timetag.join~ \ 46 | o.timetag.split~ \ 47 | o.timetag~ \ 48 | o.validate 49 | 50 | EXTERNALS_MXE64 = $(foreach f, $(EXTERNALS_BASENAMES), $(f).mxe64) 51 | DEPRECATED_MXE64 = $(foreach f, $(DEPRECATED_BASENAMES), $(f).mxe64) 52 | DEV_MXE64 = $(foreach f, $(DEV_BASENAMES), $(f).mxe64) 53 | 54 | ALL_OBJECTS_BASENAMES = $(EXTERNALS_BASENAMES) $(DEPRECATED_BASENAMES) $(DEV_BASENAMES) 55 | # ALL_OBJECTS_CFILES = $(foreach f, $(ALL_OBJECTS_BASENAMES), $(f)/$(f).c) 56 | ALL_OBJECTS_MXE64 = $(EXTERNALS_MXE64) $(DEPRECATED_MXE64) $(DEV_MXE64) 57 | 58 | VPATH = $(ALL_OBJECTS_BASENAMES) 59 | 60 | C74SUPPORT = ../../max-sdk-base/c74support 61 | MAX_INCLUDES = $(C74SUPPORT)/max-includes 62 | MSP_INCLUDES = $(C74SUPPORT)/msp-includes 63 | 64 | PLATFORM = Windows 65 | 66 | win64: EXT = .mxe64 67 | win64: CC = /mingw64/bin/x86_64-w64-mingw32-gcc 68 | win64: LD = $(CC) 69 | win64: LIBS = -L../../libomax -lomax -L$(MAX_INCLUDES) -L$(MSP_INCLUDES) -lx64/MaxAPI -lx64/MaxAudio -L../../libo -lo -lws2_32 $(C74SUPPORT)/max-includes/x64/MaxAPI.lib 70 | 71 | INCLUDES = -I$(MAX_INCLUDES) -I$(MSP_INCLUDES) -I../../libo -I../../libomax -Iinclude 72 | CFLAGS += -DWIN_VERSION -DWIN_EXT_VERSION -U__STRICT_ANSI__ -U__ANSI_SOURCE -std=c99 -O3 -DNO_TRANSLATION_SUPPORT -DWIN32_LEAN_AND_MEAN 73 | LDFLAGS = -shared -static -static-libgcc 74 | 75 | CURRENT_VERSION_FILE = include/odot_current_version.h 76 | 77 | # clean-obj: 78 | # rm -f *.o 79 | 80 | win64: $(ALL_OBJECTS_MXE64) 81 | $(MAKE) install 82 | 83 | commonsyms.o: 84 | $(CC) $(CFLAGS) $(INCLUDES) -c -o commonsyms.o $(MAX_INCLUDES)/common/commonsyms.c 85 | 86 | pqops.o: 87 | $(CC) $(CFLAGS) $(INCLUDES) -Io.schedule -c -o pqops.o o.schedule/pqops.c 88 | 89 | %.mxe64: %.c commonsyms.o pqops.o $(CURRENT_VERSION_FILE) 90 | $(CC) $(CFLAGS) $(INCLUDES) -c -o $*.o $< 91 | $(LD) $(LDFLAGS) -o $*$(EXT) $*.o commonsyms.o pqops.o $(LIBS) 92 | 93 | .PHONY: install 94 | install: 95 | [ ! -d "../externals" ] && mkdir ../externals; mv $(EXTERNALS_MXE64) ../externals 96 | [ ! -d "../deprecated/externals" ] && mkdir ../deprecated/externals; mv $(DEPRECATED_MXE64) ../deprecated/externals 97 | [ ! -d "../dev/externals" ] && mkdir ../dev/externals; mv $(DEV_MXE64) ../dev/externals 98 | 99 | .PHONY: clean 100 | clean: 101 | rm -rf *.mxe64 *.o 102 | rm -rf ../externals ../deprecated/externals ../dev/externals $(CURRENT_VERSION_FILE) 103 | 104 | $(CURRENT_VERSION_FILE): 105 | echo "#define ODOT_VERSION \""`git describe --tags --long`"\"" > $(CURRENT_VERSION_FILE) 106 | echo "#define ODOT_COMPILE_DATE \""`date`"\"" >> $(CURRENT_VERSION_FILE) 107 | -------------------------------------------------------------------------------- /src/Max-config.xcconfig: -------------------------------------------------------------------------------- 1 | // 2 | // Max-config.xcconfig 3 | // odot 4 | // 5 | // Created by John MacCallum on 6/22/14. 6 | // Copyright (c) 2014 edu.berkeley.cnmat. All rights reserved. 7 | // 8 | 9 | DSTROOT = $(SRCROOT)/.. 10 | INSTALL_PATH = externals 11 | DEPLOYMENT_POSTPROCESSING = YES 12 | DEPLOYMENT_LOCATION = YES 13 | 14 | -------------------------------------------------------------------------------- /src/Max-deprecated.xcconfig: -------------------------------------------------------------------------------- 1 | // 2 | // Max-config.xcconfig 3 | // odot 4 | // 5 | // Created by John MacCallum on 6/22/14. 6 | // Copyright (c) 2014 edu.berkeley.cnmat. All rights reserved. 7 | // 8 | 9 | DSTROOT = $(SRCROOT)/.. 10 | INSTALL_PATH = deprecated/externals 11 | DEPLOYMENT_POSTPROCESSING = YES 12 | DEPLOYMENT_LOCATION = YES 13 | OTHER_CFLAGS=-DODOT_DEPRECATED -g -DNO_TRANSLATION_SUPPORT 14 | -------------------------------------------------------------------------------- /src/Max-unstable.xcconfig: -------------------------------------------------------------------------------- 1 | // 2 | // Max-config.xcconfig 3 | // odot 4 | // 5 | // Created by John MacCallum on 6/22/14. 6 | // Copyright (c) 2014 edu.berkeley.cnmat. All rights reserved. 7 | // 8 | 9 | DSTROOT = $(SRCROOT)/.. 10 | INSTALL_PATH = dev/externals 11 | DEPLOYMENT_POSTPROCESSING = YES 12 | DEPLOYMENT_LOCATION = YES 13 | OTHER_CFLAGS=-DODOT_UNSTABLE -g -DNO_TRANSLATION_SUPPORT 14 | -------------------------------------------------------------------------------- /src/PD-config.xcconfig: -------------------------------------------------------------------------------- 1 | // 2 | // Config.xcconfig 3 | // odot 4 | // 5 | // Created by John MacCallum on 6/22/14. 6 | // Copyright (c) 2014 edu.berkeley.cnmat. All rights reserved. 7 | // 8 | 9 | DSTROOT = $(SRCROOT)/../pd 10 | INSTALL_PATH = / 11 | DEPLOYMENT_POSTPROCESSING = YES 12 | DEPLOYMENT_LOCATION = YES 13 | -------------------------------------------------------------------------------- /src/PD-deprecated.xcconfig: -------------------------------------------------------------------------------- 1 | // 2 | // Config.xcconfig 3 | // odot 4 | // 5 | // Created by John MacCallum on 6/22/14. 6 | // Copyright (c) 2014 edu.berkeley.cnmat. All rights reserved. 7 | // 8 | 9 | DSTROOT = $(SRCROOT)/../pd 10 | INSTALL_PATH = deprecated 11 | DEPLOYMENT_POSTPROCESSING = YES 12 | DEPLOYMENT_LOCATION = YES 13 | -------------------------------------------------------------------------------- /src/PD-unstable.xcconfig: -------------------------------------------------------------------------------- 1 | // 2 | // Config.xcconfig 3 | // odot 4 | // 5 | // Created by John MacCallum on 6/22/14. 6 | // Copyright (c) 2014 edu.berkeley.cnmat. All rights reserved. 7 | // 8 | 9 | DSTROOT = $(SRCROOT)/../pd 10 | INSTALL_PATH = dev 11 | DEPLOYMENT_POSTPROCESSING = YES 12 | DEPLOYMENT_LOCATION = YES 13 | -------------------------------------------------------------------------------- /src/README.md: -------------------------------------------------------------------------------- 1 | # Odot for Max / MSP on Mac OS X and Windows, and PD on Mac OS X, 2 | Windows, and Linux 3 | 4 | ## Prerequisites 5 | 6 | The odot objects rely on two libraries, `libo`, and `libomax / libopd`, 7 | as well as the Max and / or PD SDKs. 8 | 9 | * Max / MSP SDK (only necessary if building externals for Max): 10 | [https://github.com/cycling74/max-sdk-base](https://github.com/cycling74/max-sdk-base) 11 | * PD source (only necessary if building externals for PD): 12 | [https://github.com/pure-data/pure-data](https://github.com/pure-data/pure-data) 13 | * libo: [https://github.com/CNMAT/libo](https://github.com/CNMAT/libo) 14 | * libomax: [https://github.com/CNMAT/libomax](https://github.com/CNMAT/libomax) 15 | 16 | Please see the instructions in the readme for building `libo` and `libomax`. 17 | 18 | The dependencies should all be placed in the same folder as CNMAT-odot: 19 | 20 | ``` 21 | $ ls 22 | CNMAT-odot libo libomax max-sdk pure-data 23 | ``` 24 | 25 | ## Odot for Max / MSP 26 | 27 | ### Mac OS X 28 | 29 | ``` 30 | $ cd 31 | $ make 32 | ``` 33 | 34 | Alternatively, the objects can be made in Xcode using by opening 35 | `odot.xcodeproj`. 36 | 37 | ### Windows 10 38 | 39 | The Windows 10 build is done using MinGW under MSYS2. Make sure 40 | you have installed the 64-bit GCC toolchain 41 | (`pacman -S mingw-w64-x86_64-toolchain`). 42 | (If you have already successfully built `libo` and `libomax`, 43 | you're good to go.) 44 | 45 | ``` 46 | $ cd 47 | $ make win64 48 | ``` 49 | 50 | Note that 32-bit builds on Windows are not supported. 51 | 52 | ## Odot for PD 53 | 54 | ### Mac OS X 55 | 56 | ``` 57 | $ cd 58 | $ make 59 | ``` 60 | 61 | ### Windows 10 62 | 63 | The Windows 10 build is done using MinGW under MSYS2. Make sure 64 | you have installed the 64-bit GCC toolchain 65 | (`pacman -S mingw-w64-x86_64-toolchain`). 66 | (If you have already successfully built `libo` and `libomax`, 67 | you're good to go.) 68 | 69 | ``` 70 | $ cd 71 | $ ./copy-src-files.sh 72 | $ make 73 | ``` 74 | 75 | ### Linux 76 | 77 | ``` 78 | $ cd 79 | $ ./copy-src-files.sh 80 | $ make 81 | ``` 82 | -------------------------------------------------------------------------------- /src/include/odot.c: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #include "m_pd.h" 5 | 6 | static t_class *odot_class; 7 | 8 | static void *odot_new(void) 9 | { 10 | t_object *x = (t_object *)pd_new(odot_class); 11 | 12 | return (x); 13 | } 14 | 15 | int setup_o0x2eappend(void); 16 | int setup_o0x2eatomize(void); 17 | int setup_o0x2echange(void); 18 | int setup_o0x2ecollect(void); 19 | int setup_o0x2econd(void); 20 | int setup_o0x2econtext(void); 21 | int setup_o0x2edifference(void); 22 | int setup_o0x2edowncast(void); 23 | int setup_o0x2eexplode(void); 24 | int setup_o0x2eexpr(void); 25 | int setup_o0x2eexpr0x2ecodebox(void); 26 | int setup_o0x2eflatten(void); 27 | int setup_o0x2eif(void); 28 | int setup_o0x2eintersection(void); 29 | int setup_o0x2emessageiterate(void); 30 | int setup_o0x2elistenumerate(void); 31 | int setup_o0x2emappatch(void); 32 | int setup_o0x2emessage(void); 33 | int setup_o0x2epack(void); 34 | int setup_o0x2epak(void); 35 | int setup_o0x2eprepend(void); 36 | int setup_o0x2eprint(void); 37 | int setup_o0x2eprintbytes(void); 38 | int setup_o0x2eroute(void); 39 | int setup_o0x2eschedule(void); 40 | int setup_o0x2eselect(void); 41 | //int setup_o0x2eslip.decode(void); 42 | //int setup_o0x2eslip.encode(void); 43 | int setup_o0x2eslip0x2edecode(void); 44 | int setup_o0x2eslip0x2eencode(void); 45 | int setup_o0x2etable(void); 46 | int setup_o0x2etimetag(void); 47 | int setup_o0x2eunion(void); 48 | int setup_o0x2eunless(void); 49 | int setup_o0x2evalidate(void); 50 | int setup_o0x2evar(void); 51 | int setup_o0x2ewhen(void); 52 | 53 | /* ------------------------ setup routine ------------------------- */ 54 | 55 | void odot_setup(void) 56 | { 57 | odot_class = class_new(gensym("odot"), odot_new, 0, 58 | sizeof(t_object), CLASS_NOINLET, 0); 59 | 60 | setup_o0x2eappend(); 61 | setup_o0x2eatomize(); 62 | setup_o0x2echange(); 63 | setup_o0x2ecollect(); 64 | setup_o0x2econd(); 65 | setup_o0x2econtext(); 66 | setup_o0x2edifference(); 67 | setup_o0x2edowncast(); 68 | setup_o0x2eexplode(); 69 | setup_o0x2eexpr(); 70 | setup_o0x2eexpr0x2ecodebox(); 71 | setup_o0x2eflatten(); 72 | setup_o0x2eif(); 73 | setup_o0x2eintersection(); 74 | setup_o0x2emessageiterate(); 75 | setup_o0x2elistenumerate(); 76 | setup_o0x2emappatch(); 77 | setup_o0x2emessage(); 78 | setup_o0x2epack(); 79 | setup_o0x2epak(); 80 | setup_o0x2eprepend(); 81 | setup_o0x2eprint(); 82 | setup_o0x2eprintbytes(); 83 | setup_o0x2eroute(); 84 | //setup_o0x2eschedule(); 85 | setup_o0x2eselect(); 86 | setup_o0x2eslip0x2edecode(); 87 | setup_o0x2eslip0x2eencode(); 88 | setup_o0x2etable(); 89 | setup_o0x2etimetag(); 90 | setup_o0x2eunion(); 91 | setup_o0x2eunless(); 92 | setup_o0x2evalidate(); 93 | setup_o0x2evar(); 94 | setup_o0x2ewhen(); 95 | 96 | post("odot library loaded! (c)2014 cnmat, uc berkeley"); 97 | } 98 | -------------------------------------------------------------------------------- /src/include/odot_version.h: -------------------------------------------------------------------------------- 1 | #ifndef __ODOT_VERSION_H__ 2 | #define __ODOT_VERSION_H__ 3 | 4 | #ifdef OMAX_PD_VERSION 5 | #include "m_pd.h" 6 | #else 7 | #include "ext.h" 8 | #endif 9 | 10 | #include "odot_current_version.h" 11 | #include "report_compiler.h" 12 | //#define ODOT_VERSION "1.2.11" 13 | //#define ODOT_RELEASE_DATE "[2012-12-21 Fri]" 14 | #define ODOT_COPYRIGHT_YEARS "2008-21" 15 | #define ODOT_AUTHORS "John MacCallum, Adrian Freed, Rama Gottfried, Ilya Rostovtsev" 16 | #define ODOT_COPYRIGHT_STRING "Regents of the University of California. All rights reserved." 17 | 18 | void __odot_version(void) 19 | { 20 | post("odot version %s (compiled %s)", ODOT_VERSION, ODOT_COMPILE_DATE); 21 | post("by %s\n", ODOT_AUTHORS); 22 | 23 | #ifdef OMAX_PD_VERSION 24 | post("alpha pd version"); 25 | #endif 26 | post("Copyright (c) %s %s", ODOT_COPYRIGHT_YEARS, ODOT_COPYRIGHT_STRING); 27 | } 28 | 29 | void odot_version(void *x) 30 | { 31 | if(!x){ 32 | // called from main()--post only once 33 | if(!(gensym("odot_version_has_been_posted")->s_thing)){ 34 | __odot_version(); 35 | gensym("odot_version_has_been_posted")->s_thing = (t_object *)1; 36 | } 37 | }else{ 38 | // called in response to the version message 39 | __odot_version(); 40 | post_compiler(); 41 | } 42 | #ifdef ODOT_DEPRECATED 43 | if(x){ 44 | object_error((t_object *)x, "warning: %s is no longer supported and may be removed from the release at any time", OMAX_DOC_NAME); 45 | }else{ 46 | //error("warning: %s is no longer supported and may be removed from the release at any time", OMAX_DOC_NAME); 47 | } 48 | #endif 49 | } 50 | #define ODOT_PRINT_VERSION odot_version(NULL); 51 | 52 | #endif 53 | -------------------------------------------------------------------------------- /src/include/report_compiler.h: -------------------------------------------------------------------------------- 1 | #ifndef __REPORT_COMPILER_H__ 2 | #define __REPORT_COMPILER_H__ 3 | 4 | #ifdef __clang__ 5 | 6 | #define CNMAT_HAVE_COMPILER 1 7 | #define CNMAT_COMPILER "clang (llvm)" 8 | #define CNMAT_COMPILER_MAJOR __clang_major__ 9 | #define CNMAT_COMPILER_MINOR __clang_minor__ 10 | #define CNMAT_COMPILER_PATCHLEVEL __clang_patchlevel__ 11 | 12 | #elif defined __GNUC__ 13 | 14 | #define CNMAT_HAVE_COMPILER 1 15 | #define CNMAT_COMPILER "gcc" 16 | #define CNMAT_COMPILER_MAJOR __GNUC__ 17 | #define CNMAT_COMPILER_MINOR __GNUC_MINOR__ 18 | #define CNMAT_COMPILER_PATCHLEVEL __GNUC_PATCHLEVEL__ 19 | 20 | #else 21 | 22 | #define CNMAT_COMPILER "unknown compiler" 23 | #define CNMAT_COMPILER_MAJOR 24 | #define CNMAT_COMPILER_MINOR 25 | #define CNMAT_COMPILER_PATCHLEVEL 26 | 27 | #endif 28 | 29 | void post_compiler(void) 30 | { 31 | #ifdef CNMAT_HAVE_COMPILER 32 | post("Compiled on %s at %s with %s version %d.%d.%d", __DATE__, __TIME__, CNMAT_COMPILER, CNMAT_COMPILER_MAJOR, CNMAT_COMPILER_MINOR, CNMAT_COMPILER_PATCHLEVEL); 33 | #else 34 | post("Compiled by something other than clang or gcc"); 35 | #endif 36 | } 37 | 38 | #endif 39 | -------------------------------------------------------------------------------- /src/o.O/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNMAT/CNMAT-odot/ac753e280dcdc44b0e1aace9bc73714a025f0f35/src/o.O/.DS_Store -------------------------------------------------------------------------------- /src/o.append/o.append.c: -------------------------------------------------------------------------------- 1 | /* 2 | Written by John MacCallum, The Center for New Music and Audio Technologies, 3 | University of California, Berkeley. Copyright (c) 2013, The Regents of 4 | the University of California (Regents). 5 | Permission to use, copy, modify, distribute, and distribute modified versions 6 | of this software and its documentation without fee and without a signed 7 | licensing agreement, is hereby granted, provided that the above copyright 8 | notice, this paragraph and the following two paragraphs appear in all copies, 9 | modifications, and distributions. 10 | 11 | IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, 12 | SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING 13 | OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS 14 | BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 15 | 16 | REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 17 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18 | PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED 19 | HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE 20 | MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 21 | 22 | */ 23 | 24 | #define APPEND 25 | #ifdef APPEND 26 | #define OMAX_DOC_NAME "o.append" 27 | #define OMAX_DOC_SHORT_DESC "Append an OSC address to every OSC address in a bundle" 28 | #define OMAX_DOC_LONG_DESC "o.append takes an OSC address as an argument and appends it to every address in the bundle." 29 | #define OMAX_DOC_INLETS_DESC (char *[]){"OSC packet"} 30 | #define OMAX_DOC_OUTLETS_DESC (char *[]){"OSC packet with argument appended"} 31 | #define OMAX_DOC_SEEALSO (char *[]){"o.prepend", "prepend", "append"} 32 | #endif 33 | #include "../o.prepend/o.prepend.c" 34 | -------------------------------------------------------------------------------- /src/o.atomize/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops -DSPEW 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.atomize/o.atomize.c: -------------------------------------------------------------------------------- 1 | #define ATOMIZE 2 | #ifdef ATOMIZE 3 | #define OMAX_DOC_NAME "o.atomize" 4 | #define OMAX_DOC_SHORT_DESC "Dispatch OSC messages according to an address hierarchy and convert them to Max messages." 5 | #define OMAX_DOC_SEEALSO (char *[]){"o.route", "o.select", "route"} 6 | #define OMAX_DOC_LONG_DESC "o.atomize does pattern matching on addresses contained in OSC packets. All messages in a bundle with addresses that match an address specified as an argument to o.atomize are bundled together and sent out the corresponding outlet with their addresses kept in tact and as Max messages. With no arguments, o.atomize simply iterates over the messages in a bundle sending them out as Max messages." 7 | #endif 8 | #include "../o.route/o.route.c" 9 | -------------------------------------------------------------------------------- /src/o.bundle/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | o.bundle 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | edu.cnmat.berkeley.o.bundle 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundlePackageType 16 | iLaX 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1.0 21 | CSResourcesFileMapped 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/o.change/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.change/o.change.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/o.change/o.change.xcodeproj/project.xcworkspace/xcuserdata/john.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNMAT/CNMAT-odot/ac753e280dcdc44b0e1aace9bc73714a025f0f35/src/o.change/o.change.xcodeproj/project.xcworkspace/xcuserdata/john.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /src/o.change/o.change.xcodeproj/xcuserdata/john.xcuserdatad/xcschemes/o.change.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 14 | 20 | 21 | 22 | 23 | 24 | 29 | 30 | 31 | 32 | 38 | 39 | 40 | 41 | 46 | 47 | 49 | 50 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /src/o.change/o.change.xcodeproj/xcuserdata/john.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | o.change.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 8D01CCC60486CAD60068D4B7 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/o.collect/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.compose/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | 8 | -------------------------------------------------------------------------------- /src/o.cond/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops -DOIF 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.cond/o.cond.c: -------------------------------------------------------------------------------- 1 | #define OCOND 2 | #if defined (OCOND) 3 | 4 | #define OMAX_DOC_NAME "o.cond" 5 | 6 | #define OMAX_DOC_SHORT_DESC "Route an OSC packet out an outlet based on the results of an expression" 7 | #define OMAX_DOC_LONG_DESC "o.cond creates one outlet for each expression separated by a comma. The bundle will come out the outlet that corresponds to the first expression that evaluates to true or non-zero." 8 | #define OMAX_DOC_INLETS_DESC (char *[]){"OSC packet containing addresses that the expression will be applied to"} 9 | #define OMAX_DOC_SEEALSO (char *[]){"o.expr.codebox", "o.if", "o.when", "o.unless", "o.callpatch", "expr", "jit.expr"} 10 | #endif 11 | 12 | #include "../o.expr/o.expr.c" 13 | -------------------------------------------------------------------------------- /src/o.cond/o.cond.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/o.cond/o.cond.xcodeproj/project.xcworkspace/xcuserdata/john.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNMAT/CNMAT-odot/ac753e280dcdc44b0e1aace9bc73714a025f0f35/src/o.cond/o.cond.xcodeproj/project.xcworkspace/xcuserdata/john.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /src/o.cond/o.cond.xcodeproj/xcuserdata/john.xcuserdatad/xcschemes/o.if.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 14 | 20 | 21 | 22 | 23 | 24 | 29 | 30 | 31 | 32 | 40 | 41 | 42 | 43 | 49 | 50 | 52 | 53 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /src/o.cond/o.cond.xcodeproj/xcuserdata/john.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | o.if.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 8D01CCC60486CAD60068D4B7 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/o.dict/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.difference/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.difference/o.difference.c: -------------------------------------------------------------------------------- 1 | /* 2 | Written by John MacCallum, The Center for New Music and Audio Technologies, 3 | University of California, Berkeley. Copyright (c) 2011, The Regents of 4 | the University of California (Regents). 5 | Permission to use, copy, modify, distribute, and distribute modified versions 6 | of this software and its documentation without fee and without a signed 7 | licensing agreement, is hereby granted, provided that the above copyright 8 | notice, this paragraph and the following two paragraphs appear in all copies, 9 | modifications, and distributions. 10 | 11 | IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, 12 | SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING 13 | OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS 14 | BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 15 | 16 | REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 17 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18 | PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED 19 | HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE 20 | MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 21 | 22 | 23 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 24 | NAME: o.difference 25 | DESCRIPTION: Get the difference (addresses not in common) between two OSC bundles 26 | AUTHORS: John MacCallum 27 | COPYRIGHT_YEARS: 2011 28 | SVN_REVISION: $LastChangedRevision: 587 $ 29 | VERSION 0.0: First try 30 | VERSION 1.0: using libo 31 | VERSION 2.0: refactored out of o.var 32 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 33 | */ 34 | 35 | #define ODOT_DIFFERENCE 36 | #if defined ODOT_DIFFERENCE 37 | #define OMAX_DOC_NAME "o.difference" 38 | #define OMAX_DOC_SHORT_DESC "Output a bundle containing the difference between two bundles" 39 | #define OMAX_DOC_LONG_DESC "o.difference takes two bundles and forms a new bundle that contains the messages with addresses that are not common to both bundles." 40 | #define OMAX_DOC_INLETS_DESC (char *[]){"OSC packet", "OSC packet"} 41 | #define OMAX_DOC_OUTLETS_DESC (char *[]){"OSC Packet containing the difference of the two packets"} 42 | #define OMAX_DOC_SEEALSO (char *[]){"o.union", "o.intersection"} 43 | #endif 44 | 45 | #include "../o.var/o.var.c" 46 | -------------------------------------------------------------------------------- /src/o.difference/o.difference.xcodeproj/john.pbxuser: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | 089C1669FE841209C02AAC07 /* Project object */ = { 4 | activeBuildConfigurationName = Deployment; 5 | activeTarget = 8D01CCC60486CAD60068D4B7 /* o.var */; 6 | addToTargets = ( 7 | 8D01CCC60486CAD60068D4B7 /* o.var */, 8 | ); 9 | codeSenseManager = 5258CB51131C8E6E00E29B7C /* Code sense */; 10 | perUserDictionary = { 11 | PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { 12 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 13 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; 14 | PBXFileTableDataSourceColumnWidthsKey = ( 15 | 20, 16 | 341, 17 | 20, 18 | 48, 19 | 43, 20 | 43, 21 | 20, 22 | ); 23 | PBXFileTableDataSourceColumnsKey = ( 24 | PBXFileDataSource_FiletypeID, 25 | PBXFileDataSource_Filename_ColumnID, 26 | PBXFileDataSource_Built_ColumnID, 27 | PBXFileDataSource_ObjectSize_ColumnID, 28 | PBXFileDataSource_Errors_ColumnID, 29 | PBXFileDataSource_Warnings_ColumnID, 30 | PBXFileDataSource_Target_ColumnID, 31 | ); 32 | }; 33 | PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { 34 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 35 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; 36 | PBXFileTableDataSourceColumnWidthsKey = ( 37 | 20, 38 | 316, 39 | 60, 40 | 20, 41 | 48, 42 | 43, 43 | 43, 44 | ); 45 | PBXFileTableDataSourceColumnsKey = ( 46 | PBXFileDataSource_FiletypeID, 47 | PBXFileDataSource_Filename_ColumnID, 48 | PBXTargetDataSource_PrimaryAttribute, 49 | PBXFileDataSource_Built_ColumnID, 50 | PBXFileDataSource_ObjectSize_ColumnID, 51 | PBXFileDataSource_Errors_ColumnID, 52 | PBXFileDataSource_Warnings_ColumnID, 53 | ); 54 | }; 55 | PBXPerProjectTemplateStateSaveDate = 335983008; 56 | PBXWorkspaceStateSaveDate = 335983008; 57 | }; 58 | sourceControlManager = 5258CB50131C8E6E00E29B7C /* Source Control */; 59 | userBuildSettings = { 60 | }; 61 | }; 62 | 5249DFB112E7C17300B3ABA5 /* o.var.c */ = { 63 | uiCtxt = { 64 | sepNavIntBoundsRect = "{{0, 0}, {565, 8229}}"; 65 | sepNavSelRange = "{0, 0}"; 66 | sepNavVisRange = "{0, 428}"; 67 | sepNavWindowFrame = "{{15, 40}, {1665, 987}}"; 68 | }; 69 | }; 70 | 5258CB50131C8E6E00E29B7C /* Source Control */ = { 71 | isa = PBXSourceControlManager; 72 | fallbackIsa = XCSourceControlManager; 73 | isSCMEnabled = 0; 74 | scmConfiguration = { 75 | repositoryNamesForRoots = { 76 | "" = ""; 77 | }; 78 | }; 79 | }; 80 | 5258CB51131C8E6E00E29B7C /* Code sense */ = { 81 | isa = PBXCodeSenseManager; 82 | indexTemplatePath = ""; 83 | }; 84 | 8D01CCC60486CAD60068D4B7 /* o.var */ = { 85 | activeExec = 0; 86 | }; 87 | } 88 | -------------------------------------------------------------------------------- /src/o.difference/o.difference.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/o.difference/o.difference.xcodeproj/project.xcworkspace/xcuserdata/john.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNMAT/CNMAT-odot/ac753e280dcdc44b0e1aace9bc73714a025f0f35/src/o.difference/o.difference.xcodeproj/project.xcworkspace/xcuserdata/john.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /src/o.difference/o.difference.xcodeproj/xcuserdata/john.xcuserdatad/xcschemes/o.var.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 14 | 20 | 21 | 22 | 23 | 24 | 29 | 30 | 31 | 32 | 38 | 39 | 40 | 41 | 46 | 47 | 49 | 50 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /src/o.difference/o.difference.xcodeproj/xcuserdata/john.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | o.var.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 8D01CCC60486CAD60068D4B7 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/o.display/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | 8 | -------------------------------------------------------------------------------- /src/o.explode/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../makefile.per-object 2 | -------------------------------------------------------------------------------- /src/o.expr.codebox.set/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.expr.codebox/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.expr/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.flatten/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.if/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops -DOIF 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.if/o.if.c: -------------------------------------------------------------------------------- 1 | #define OIF 2 | #if defined (OIF) 3 | 4 | #define OMAX_DOC_NAME "o.if" 5 | 6 | #define OMAX_DOC_SHORT_DESC "Route an OSC packet based on the results of an expression" 7 | #define OMAX_DOC_LONG_DESC "o.if routs the incoming bundle out the left outlet if the result of the expression is true or non-zero, and out the right outlet otherwise." 8 | #define OMAX_DOC_INLETS_DESC (char *[]){"OSC packet containing addresses that the expression will be applied to."} 9 | #define OMAX_DOC_OUTLETS_DESC (char *[]){"Input OSC FullPacket if the expression returns true or non-zero", "Input OSC FullPacket if the expression returns false or zero"} 10 | #define OMAX_DOC_SEEALSO (char *[]){"o.expr.codebox", "o.cond", "o.when", "o.unless", "expr", "jit.expr"} 11 | #endif 12 | 13 | #include "../o.expr/o.expr.c" 14 | -------------------------------------------------------------------------------- /src/o.intersection/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.intersection/o.intersection.c: -------------------------------------------------------------------------------- 1 | /* 2 | Written by John MacCallum, The Center for New Music and Audio Technologies, 3 | University of California, Berkeley. Copyright (c) 2011, The Regents of 4 | the University of California (Regents). 5 | Permission to use, copy, modify, distribute, and distribute modified versions 6 | of this software and its documentation without fee and without a signed 7 | licensing agreement, is hereby granted, provided that the above copyright 8 | notice, this paragraph and the following two paragraphs appear in all copies, 9 | modifications, and distributions. 10 | 11 | IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, 12 | SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING 13 | OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS 14 | BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 15 | 16 | REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 17 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18 | PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED 19 | HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE 20 | MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 21 | 22 | 23 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 24 | NAME: o.intersection 25 | DESCRIPTION: Get the intersection (addresses in common) between two OSC bundles 26 | AUTHORS: John MacCallum 27 | COPYRIGHT_YEARS: 2011 28 | SVN_REVISION: $LastChangedRevision: 587 $ 29 | VERSION 0.0: First try 30 | VERSION 1.0: using libo 31 | VERSION 2.0: refactored out of o.var 32 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 33 | */ 34 | 35 | #define ODOT_INTERSECTION 36 | #if defined ODOT_INTERSECTION 37 | #define OMAX_DOC_NAME "o.intersection" 38 | #define OMAX_DOC_SHORT_DESC "Output a bundle containing the intersection of messages between two bundles" 39 | #define OMAX_DOC_LONG_DESC "o.intersection takes two bundles and forms a new bundle that contains the OSC messages from the bundle received in the left inlet whose addresses are also present in the bundle received in the right inlet." 40 | #define OMAX_DOC_INLETS_DESC (char *[]){"OSC packet", "OSC packet"} 41 | #define OMAX_DOC_OUTLETS_DESC (char *[]){"OSC Packet containing the intersection of the two packets"} 42 | #define OMAX_DOC_SEEALSO (char *[]){"o.difference", "o.union"} 43 | #endif 44 | 45 | #include "../o.var/o.var.c" 46 | -------------------------------------------------------------------------------- /src/o.intersection/o.intersection.xcodeproj/john.pbxuser: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | 089C1669FE841209C02AAC07 /* Project object */ = { 4 | activeBuildConfigurationName = Deployment; 5 | activeTarget = 8D01CCC60486CAD60068D4B7 /* o.var */; 6 | addToTargets = ( 7 | 8D01CCC60486CAD60068D4B7 /* o.var */, 8 | ); 9 | codeSenseManager = 5258CB51131C8E6E00E29B7C /* Code sense */; 10 | perUserDictionary = { 11 | PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { 12 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 13 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; 14 | PBXFileTableDataSourceColumnWidthsKey = ( 15 | 20, 16 | 341, 17 | 20, 18 | 48, 19 | 43, 20 | 43, 21 | 20, 22 | ); 23 | PBXFileTableDataSourceColumnsKey = ( 24 | PBXFileDataSource_FiletypeID, 25 | PBXFileDataSource_Filename_ColumnID, 26 | PBXFileDataSource_Built_ColumnID, 27 | PBXFileDataSource_ObjectSize_ColumnID, 28 | PBXFileDataSource_Errors_ColumnID, 29 | PBXFileDataSource_Warnings_ColumnID, 30 | PBXFileDataSource_Target_ColumnID, 31 | ); 32 | }; 33 | PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { 34 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 35 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; 36 | PBXFileTableDataSourceColumnWidthsKey = ( 37 | 20, 38 | 316, 39 | 60, 40 | 20, 41 | 48, 42 | 43, 43 | 43, 44 | ); 45 | PBXFileTableDataSourceColumnsKey = ( 46 | PBXFileDataSource_FiletypeID, 47 | PBXFileDataSource_Filename_ColumnID, 48 | PBXTargetDataSource_PrimaryAttribute, 49 | PBXFileDataSource_Built_ColumnID, 50 | PBXFileDataSource_ObjectSize_ColumnID, 51 | PBXFileDataSource_Errors_ColumnID, 52 | PBXFileDataSource_Warnings_ColumnID, 53 | ); 54 | }; 55 | PBXPerProjectTemplateStateSaveDate = 335984082; 56 | PBXWorkspaceStateSaveDate = 335984082; 57 | }; 58 | sourceControlManager = 5258CB50131C8E6E00E29B7C /* Source Control */; 59 | userBuildSettings = { 60 | }; 61 | }; 62 | 5249DFB112E7C17300B3ABA5 /* o.var.c */ = { 63 | uiCtxt = { 64 | sepNavIntBoundsRect = "{{0, 0}, {565, 8229}}"; 65 | sepNavSelRange = "{0, 0}"; 66 | sepNavVisRange = "{0, 428}"; 67 | sepNavWindowFrame = "{{15, 40}, {1665, 987}}"; 68 | }; 69 | }; 70 | 5258CB50131C8E6E00E29B7C /* Source Control */ = { 71 | isa = PBXSourceControlManager; 72 | fallbackIsa = XCSourceControlManager; 73 | isSCMEnabled = 0; 74 | scmConfiguration = { 75 | repositoryNamesForRoots = { 76 | "" = ""; 77 | }; 78 | }; 79 | }; 80 | 5258CB51131C8E6E00E29B7C /* Code sense */ = { 81 | isa = PBXCodeSenseManager; 82 | indexTemplatePath = ""; 83 | }; 84 | 8D01CCC60486CAD60068D4B7 /* o.var */ = { 85 | activeExec = 0; 86 | }; 87 | } 88 | -------------------------------------------------------------------------------- /src/o.intersection/o.intersection.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/o.intersection/o.intersection.xcodeproj/project.xcworkspace/xcuserdata/john.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNMAT/CNMAT-odot/ac753e280dcdc44b0e1aace9bc73714a025f0f35/src/o.intersection/o.intersection.xcodeproj/project.xcworkspace/xcuserdata/john.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /src/o.intersection/o.intersection.xcodeproj/xcuserdata/john.xcuserdatad/xcschemes/o.var.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 14 | 20 | 21 | 22 | 23 | 24 | 29 | 30 | 31 | 32 | 38 | 39 | 40 | 41 | 46 | 47 | 49 | 50 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /src/o.intersection/o.intersection.xcodeproj/xcuserdata/john.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | o.var.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 8D01CCC60486CAD60068D4B7 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/o.listenumerate/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../makefile.per-object 2 | -------------------------------------------------------------------------------- /src/o.mappatch/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.message/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | 8 | -------------------------------------------------------------------------------- /src/o.pack/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.pak/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops -DBILD 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.pak/o.pak.c: -------------------------------------------------------------------------------- 1 | #define PAK 2 | #ifdef PAK 3 | #define OMAX_DOC_NAME "o.pak" 4 | #define OMAX_DOC_SHORT_DESC "Bind data to addresses" 5 | #define OMAX_DOC_LONG_DESC "o.pak takes a OSC addresses as arguments and creates an inlet for each one. Anything sent into an inlet is bound to the corresponding address and the OSC packet is output with all other addresses bound to their most recent values." 6 | #define OMAX_DOC_OUTLETS_DESC (char *[]){"OSC FullPacket"} 7 | #define OMAX_DOC_SEEALSO (char *[]){"o.pack", "pack", "pak"} 8 | #endif 9 | 10 | #include "../o.pack/o.pack.c" 11 | -------------------------------------------------------------------------------- /src/o.pak/o.pak.xcodeproj/john.pbxuser: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | 089C1669FE841209C02AAC07 /* Project object */ = { 4 | activeBuildConfigurationName = Development; 5 | activeTarget = 8D01CCC60486CAD60068D4B7 /* o.bild */; 6 | addToTargets = ( 7 | 8D01CCC60486CAD60068D4B7 /* o.bild */, 8 | ); 9 | codeSenseManager = 5211307811A4BCE100B71D00 /* Code sense */; 10 | perUserDictionary = { 11 | PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = { 12 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 13 | PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID; 14 | PBXFileTableDataSourceColumnWidthsKey = ( 15 | 22, 16 | 300, 17 | 229, 18 | ); 19 | PBXFileTableDataSourceColumnsKey = ( 20 | PBXExecutablesDataSource_ActiveFlagID, 21 | PBXExecutablesDataSource_NameID, 22 | PBXExecutablesDataSource_CommentsID, 23 | ); 24 | }; 25 | PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { 26 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 27 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; 28 | PBXFileTableDataSourceColumnWidthsKey = ( 29 | 20, 30 | 341, 31 | 20, 32 | 48, 33 | 43, 34 | 43, 35 | 20, 36 | ); 37 | PBXFileTableDataSourceColumnsKey = ( 38 | PBXFileDataSource_FiletypeID, 39 | PBXFileDataSource_Filename_ColumnID, 40 | PBXFileDataSource_Built_ColumnID, 41 | PBXFileDataSource_ObjectSize_ColumnID, 42 | PBXFileDataSource_Errors_ColumnID, 43 | PBXFileDataSource_Warnings_ColumnID, 44 | PBXFileDataSource_Target_ColumnID, 45 | ); 46 | }; 47 | PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { 48 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 49 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; 50 | PBXFileTableDataSourceColumnWidthsKey = ( 51 | 20, 52 | 316, 53 | 60, 54 | 20, 55 | 48, 56 | 43, 57 | 43, 58 | ); 59 | PBXFileTableDataSourceColumnsKey = ( 60 | PBXFileDataSource_FiletypeID, 61 | PBXFileDataSource_Filename_ColumnID, 62 | PBXTargetDataSource_PrimaryAttribute, 63 | PBXFileDataSource_Built_ColumnID, 64 | PBXFileDataSource_ObjectSize_ColumnID, 65 | PBXFileDataSource_Errors_ColumnID, 66 | PBXFileDataSource_Warnings_ColumnID, 67 | ); 68 | }; 69 | PBXPerProjectTemplateStateSaveDate = 335145063; 70 | PBXWorkspaceStateSaveDate = 335145063; 71 | }; 72 | sourceControlManager = 5211307711A4BCE100B71D00 /* Source Control */; 73 | userBuildSettings = { 74 | }; 75 | }; 76 | 5211307711A4BCE100B71D00 /* Source Control */ = { 77 | isa = PBXSourceControlManager; 78 | fallbackIsa = XCSourceControlManager; 79 | isSCMEnabled = 0; 80 | scmConfiguration = { 81 | repositoryNamesForRoots = { 82 | "" = ""; 83 | }; 84 | }; 85 | }; 86 | 5211307811A4BCE100B71D00 /* Code sense */ = { 87 | isa = PBXCodeSenseManager; 88 | indexTemplatePath = ""; 89 | }; 90 | 8D01CCC60486CAD60068D4B7 /* o.bild */ = { 91 | activeExec = 0; 92 | }; 93 | } 94 | -------------------------------------------------------------------------------- /src/o.pak/o.pak.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/o.pak/o.pak.xcodeproj/project.xcworkspace/xcuserdata/john.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNMAT/CNMAT-odot/ac753e280dcdc44b0e1aace9bc73714a025f0f35/src/o.pak/o.pak.xcodeproj/project.xcworkspace/xcuserdata/john.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /src/o.pak/o.pak.xcodeproj/xcuserdata/john.xcuserdatad/xcschemes/o.build.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 14 | 20 | 21 | 22 | 23 | 24 | 29 | 30 | 31 | 32 | 38 | 39 | 40 | 41 | 46 | 47 | 49 | 50 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /src/o.pak/o.pak.xcodeproj/xcuserdata/john.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | o.build.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 8D01CCC60486CAD60068D4B7 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/o.prepend/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.prepend/o.prepend.help.pat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNMAT/CNMAT-odot/ac753e280dcdc44b0e1aace9bc73714a025f0f35/src/o.prepend/o.prepend.help.pat -------------------------------------------------------------------------------- /src/o.print/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.printbytes/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.route/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.route/o.route.help.pat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNMAT/CNMAT-odot/ac753e280dcdc44b0e1aace9bc73714a025f0f35/src/o.route/o.route.help.pat -------------------------------------------------------------------------------- /src/o.schedule/pqops.h: -------------------------------------------------------------------------------- 1 | /* File: pqops.h 2 | * Desc: header file for heap manipulation functions 3 | * Author: Sriranga Veeraraghavan 4 | * Revision: $Id: pqops.h 434 2005-06-16 23:24:22Z ranga $ 5 | */ 6 | 7 | #ifndef pqops_h 8 | #define pqops_h 9 | 10 | /* define some constants, */ 11 | 12 | #define MSGSIZE 128 /* max size of a debug message */ 13 | #define FAILED -1 /* define -1 to indicate failure of some operations */ 14 | #define EMPTY 1 /* define 1 to indicate that the heap is empty */ 15 | 16 | /* just in case NULL is not defined */ 17 | 18 | #ifndef NULL 19 | #define NULL 0 20 | #endif 21 | 22 | /* define some macros */ 23 | 24 | #define FREE(x) free(x) ; x = NULL /* core if free'ed pointer is used */ 25 | #define LEFT(x) (2*x) /* left child of a node */ 26 | #define RIGHT(x) ((2*x)+1) /* right child of a node */ 27 | #define PARENT(x) (x/2) /* parent of a node */ 28 | 29 | typedef unsigned long long int priority; 30 | 31 | /* define a structure representing an individual node in the heap, and 32 | * make it a valid type for convenience */ 33 | 34 | /* create a global node tmp, for swaping purposes */ 35 | 36 | #include "osc_timetag.h" 37 | 38 | typedef struct _node 39 | { 40 | int sentinel; 41 | unsigned int id; 42 | unsigned int length; 43 | t_osc_timetag timestamp; 44 | } node; 45 | 46 | 47 | /* for convience in function declarations, typedef a pointer to a node 48 | * as its own type, node_ptr */ 49 | 50 | typedef node * node_ptr; 51 | 52 | /* define a structure representing the heap, and make it a valid type 53 | * for convenience */ 54 | 55 | typedef struct binary_heap { 56 | int heap_size; 57 | int max_elems; 58 | node_ptr elements; 59 | } binary_heap ; 60 | 61 | 62 | /* function prototypes for functions which operate on a binary heap */ 63 | 64 | extern void heapify(binary_heap *a,int i); 65 | extern node_ptr heap_max(binary_heap *a); 66 | extern node heap_extract_max(binary_heap *a); 67 | extern int heap_insert(binary_heap *a,node key); 68 | extern void heap_delete(binary_heap *a,int i); 69 | extern void heap_increase_key(binary_heap *a,int i,priority p); 70 | extern void heap_initialize(binary_heap *a,int nodes); 71 | extern void heap_finalize(binary_heap *a); 72 | 73 | /* function prototypes for functions which operate on a node */ 74 | 75 | extern int node_find(binary_heap a,unsigned int id); 76 | 77 | /* function prototypes for helper functions */ 78 | 79 | extern int compare_priority(node i, node j); 80 | extern void print_error(char *msg); 81 | 82 | #endif 83 | -------------------------------------------------------------------------------- /src/o.select/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops -DSELECT 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.select/o.select.c: -------------------------------------------------------------------------------- 1 | #define SELECT 2 | #ifdef SELECT 3 | #define OMAX_DOC_NAME "o.select" 4 | #define OMAX_DOC_SHORT_DESC "Dispatch OSC messages according to an address hierarchy preserving the address" 5 | #define OMAX_DOC_LONG_DESC "o.select does pattern matching on addresses contained in OSC packets. All messages in a bundle with addresses that match an address specified as an argument to o.select are bundled together and sent out the corresponding outlet with their addresses kept intact." 6 | #define OMAX_DOC_SEEALSO (char *[]){"o.route", "o.atomize", "route", "routepass"} 7 | #endif 8 | #include "../o.route/o.route.c" 9 | -------------------------------------------------------------------------------- /src/o.slip.decode/o.slip.decode.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNMAT/CNMAT-odot/ac753e280dcdc44b0e1aace9bc73714a025f0f35/src/o.slip.decode/o.slip.decode.c -------------------------------------------------------------------------------- /src/o.slip.encode/o.slip.encode.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNMAT/CNMAT-odot/ac753e280dcdc44b0e1aace9bc73714a025f0f35/src/o.slip.encode/o.slip.encode.c -------------------------------------------------------------------------------- /src/o.table/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../../../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.timetag/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../makefile.per-object 2 | -------------------------------------------------------------------------------- /src/o.udp.receive/o.udp.receive.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNMAT/CNMAT-odot/ac753e280dcdc44b0e1aace9bc73714a025f0f35/src/o.udp.receive/o.udp.receive.c -------------------------------------------------------------------------------- /src/o.udp.send/o.udp.send.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNMAT/CNMAT-odot/ac753e280dcdc44b0e1aace9bc73714a025f0f35/src/o.udp.send/o.udp.send.c -------------------------------------------------------------------------------- /src/o.uniform/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../makefile.per-object 2 | -------------------------------------------------------------------------------- /src/o.union/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.union/o.union.c: -------------------------------------------------------------------------------- 1 | /* 2 | Written by John MacCallum, The Center for New Music and Audio Technologies, 3 | University of California, Berkeley. Copyright (c) 2011, The Regents of 4 | the University of California (Regents). 5 | Permission to use, copy, modify, distribute, and distribute modified versions 6 | of this software and its documentation without fee and without a signed 7 | licensing agreement, is hereby granted, provided that the above copyright 8 | notice, this paragraph and the following two paragraphs appear in all copies, 9 | modifications, and distributions. 10 | 11 | IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, 12 | SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING 13 | OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS 14 | BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 15 | 16 | REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 17 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18 | PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED 19 | HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE 20 | MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 21 | 22 | 23 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 24 | NAME: o.union 25 | DESCRIPTION: Get the union (all addresses in both bundles excluding duplicates) between two OSC bundles 26 | AUTHORS: John MacCallum 27 | COPYRIGHT_YEARS: 2011 28 | SVN_REVISION: $LastChangedRevision: 587 $ 29 | VERSION 0.0: First try 30 | VERSION 1.0: using libo 31 | VERSION 2.0: refactored out of o.var 32 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 33 | */ 34 | 35 | #define ODOT_UNION 36 | #ifdef ODOT_UNION 37 | #define OMAX_DOC_NAME "o.union" 38 | #define OMAX_DOC_SHORT_DESC "Output a bundle containing the union of all messages between two bundles" 39 | #define OMAX_DOC_LONG_DESC "o.union takes a bundle in the left and right inlets and takes the union of their addresses and outputs the result. Messages with duplicate addresses are discarded with the most recent message (the one that came in the left inlet) taking precedence." 40 | #define OMAX_DOC_INLETS_DESC (char *[]){"OSC packet", "OSC packet"} 41 | #define OMAX_DOC_OUTLETS_DESC (char *[]){"OSC Packet containing the union of the two packets"} 42 | #define OMAX_DOC_SEEALSO (char *[]){"o.difference", "o.intersection"} 43 | #endif 44 | 45 | #include "../o.var/o.var.c" 46 | -------------------------------------------------------------------------------- /src/o.union/o.union.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/o.union/o.union.xcodeproj/project.xcworkspace/xcuserdata/john.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNMAT/CNMAT-odot/ac753e280dcdc44b0e1aace9bc73714a025f0f35/src/o.union/o.union.xcodeproj/project.xcworkspace/xcuserdata/john.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /src/o.union/o.union.xcodeproj/xcuserdata/john.xcuserdatad/xcschemes/o.var.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 14 | 20 | 21 | 22 | 23 | 24 | 29 | 30 | 31 | 32 | 38 | 39 | 40 | 41 | 46 | 47 | 49 | 50 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /src/o.union/o.union.xcodeproj/xcuserdata/john.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | o.var.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 8D01CCC60486CAD60068D4B7 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/o.unless/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops -DOIF 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.unless/o.unless.c: -------------------------------------------------------------------------------- 1 | #define OUNLESS 2 | #if defined (OUNLESS) 3 | #define OMAX_DOC_NAME "o.unless" 4 | #define OMAX_DOC_SHORT_DESC "Passes the bundle through if the result of the expression is false or zero" 5 | #define OMAX_DOC_LONG_DESC "o.unless behaves like o.if with only the right-most outlet (i.e. the \"else\" outlet)." 6 | #define OMAX_DOC_INLETS_DESC (char *[]){"OSC packet containing addresses that the expression will be applied to"} 7 | #define OMAX_DOC_OUTLETS_DESC (char *[]){"Input OSC packet if the expression returns false or zero"} 8 | #define OMAX_DOC_SEEALSO (char *[]){"o.if", "o.cond", "o.when", "o.expr.codebox", "expr", "jit.expr"} 9 | #endif 10 | 11 | #include "../o.expr/o.expr.c" 12 | -------------------------------------------------------------------------------- /src/o.var/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.when/Makefile: -------------------------------------------------------------------------------- 1 | win: CFLAGS += -O3 -funroll-loops -DOIF 2 | win: INCLUDES += -I../libo -I../libomax 3 | win: LIBDIRS += -L../libo -L../libomax 4 | win: LIBS += -lomax -lo 5 | 6 | include ../makefile.per-object 7 | -------------------------------------------------------------------------------- /src/o.when/o.when.c: -------------------------------------------------------------------------------- 1 | #define OWHEN 2 | #if defined (OWHEN) 3 | #define OMAX_DOC_NAME "o.when" 4 | #define OMAX_DOC_SHORT_DESC "Passes the bundle through if the result of the expression is true or non-zero" 5 | #define OMAX_DOC_LONG_DESC "o.when behaves like o.if with only the left-most outlet (i.e. the \"then\" outlet)" 6 | #define OMAX_DOC_INLETS_DESC (char *[]){"OSC packet containing addresses that the expression will be applied to"} 7 | #define OMAX_DOC_OUTLETS_DESC (char *[]){"Input OSC packet if the expression returns true or non-zero"} 8 | #define OMAX_DOC_SEEALSO (char *[]){"o.if", "o.cond", "o.unless", "o.expr.codebox", "expr", "jit.expr"} 9 | #endif 10 | 11 | #include "../o.expr/o.expr.c" 12 | -------------------------------------------------------------------------------- /src/odot.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/odot.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/odot.xcodeproj/project.xcworkspace/xcshareddata/odot.xcscmblueprint: -------------------------------------------------------------------------------- 1 | { 2 | "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "F288EB3F860EB37FE32803469C923EC7E08714D7", 3 | "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : { 4 | 5 | }, 6 | "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : { 7 | "BFE38AA7F3B3EE5D839CDF960E9B1411A92C41B2" : 0, 8 | "73CD3912FF7E5D839C8BDA43B346354BE088DDE8" : 0, 9 | "43DDD4A1012A81E5C2F5DA96FCA0DABF5263B8FC" : 0, 10 | "B26B9CAFBF9E1C2E2CA45220D163A2372E2095E0" : 0, 11 | "F288EB3F860EB37FE32803469C923EC7E08714D7" : 0 12 | }, 13 | "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "16143F64-14C0-4BB9-AF05-5475F3AC108A", 14 | "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { 15 | "BFE38AA7F3B3EE5D839CDF960E9B1411A92C41B2" : "libomax\/", 16 | "73CD3912FF7E5D839C8BDA43B346354BE088DDE8" : "libo\/", 17 | "43DDD4A1012A81E5C2F5DA96FCA0DABF5263B8FC" : "max6-sdk\/", 18 | "B26B9CAFBF9E1C2E2CA45220D163A2372E2095E0" : "", 19 | "F288EB3F860EB37FE32803469C923EC7E08714D7" : "CNMAT-odot\/" 20 | }, 21 | "DVTSourceControlWorkspaceBlueprintNameKey" : "odot", 22 | "DVTSourceControlWorkspaceBlueprintVersion" : 204, 23 | "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "src\/odot.xcodeproj", 24 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [ 25 | { 26 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/Cycling74\/max6-sdk.git", 27 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 28 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "43DDD4A1012A81E5C2F5DA96FCA0DABF5263B8FC" 29 | }, 30 | { 31 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/CNMAT\/libo.git", 32 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 33 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "73CD3912FF7E5D839C8BDA43B346354BE088DDE8" 34 | }, 35 | { 36 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/CNMAT\/CNMAT.git", 37 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 38 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "B26B9CAFBF9E1C2E2CA45220D163A2372E2095E0" 39 | }, 40 | { 41 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/CNMAT\/libomax.git", 42 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 43 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "BFE38AA7F3B3EE5D839CDF960E9B1411A92C41B2" 44 | }, 45 | { 46 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/CNMAT\/CNMAT-odot.git", 47 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 48 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "F288EB3F860EB37FE32803469C923EC7E08714D7" 49 | } 50 | ] 51 | } -------------------------------------------------------------------------------- /src/odot_current_version.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | if [ "$1" = "clean" ]; then 3 | exit 0 4 | fi 5 | echo "#define ODOT_VERSION \""`git describe --tags --long`"\"" > include/odot_current_version.h 6 | echo "#define ODOT_COMPILE_DATE \""`date`"\"" >> include/odot_current_version.h 7 | -------------------------------------------------------------------------------- /src/package.pl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | use strict; 3 | use warnings; 4 | use File::Copy; 5 | 6 | #my $platform = shift or die "you must specify an argument (mac or win)"; 7 | my $platform = $^O; 8 | 9 | my $objpath = "./build/objects"; 10 | my @patches = ("help", "abstractions", "demos", "overview"); 11 | 12 | my $version = 0.0; 13 | 14 | open odot_version, "odot_version.h" or die "couldn't find odot_version.h!"; 15 | 16 | while(){ 17 | if(/\#define\s+ODOT_VERSION\s+\"(.*)\"/){ 18 | $version = $1; 19 | last; 20 | } 21 | } 22 | 23 | my $dirname = "odot-$platform-$version"; 24 | 25 | my $version_file; 26 | open($version_file, ">latest-$platform-version") or die("can't open file: $version_file"); 27 | print $version_file "VERSION: $version\n"; 28 | print $version_file "PLATFORM: $platform\n"; 29 | print $version_file "FILENAME: $dirname.tgz\n"; 30 | close($version_file); 31 | 32 | if((@ARGV) > 0){ 33 | if($ARGV[0] eq "clean"){ 34 | system("rm", "-rf", $dirname); 35 | system("rm", "-rf", $dirname . ".tgz"); 36 | exit; 37 | } 38 | } 39 | 40 | if(-d $dirname){ 41 | system("rm", "-rf", $dirname); 42 | } 43 | 44 | mkdir($dirname); 45 | system("cp", "-r", "$objpath", "$dirname/"); 46 | foreach my $p (@patches){ 47 | system("cp", "-r", "patches/$p", "$dirname/"); 48 | } 49 | 50 | system("cp", "README_ODOT.txt", "$dirname/"); 51 | 52 | if((@ARGV) > 0){ 53 | if($ARGV[0] eq "archive"){ 54 | system("tar", "--exclude=.svn", "-z", "-c", "-v", "-f", "$dirname.tgz", $dirname); 55 | }elsif($ARGV[0] eq "install"){ 56 | unless(-d "$ARGV[1]/odot"){ 57 | system("mkdir", "$ARGV[1]/odot"); 58 | } 59 | system("(cd $dirname; tar --exclude='.svn' -c -f - *) | (cd $ARGV[1]/odot; tar xfp -)"); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/pd-build/cnmat-meta.pd: -------------------------------------------------------------------------------- 1 | #N canvas 15 49 200 200 10; 2 | #N canvas 490 133 420 300 META 0; 3 | #X text 10 25 AUTHOR John MacCallum \, Adrian Freed \, Rama Gottfried 4 | ; 5 | #X text 10 10 VERSION odot 1.3-124-g5057d51 (pd alpha version); 6 | #X text 11 41 NAME CNMAT / odot library; 7 | #X restore 10 10 pd META; 8 | -------------------------------------------------------------------------------- /src/pd-build/copy-src-files.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # move all odot files into one place? 3 | 4 | COBJECT_LIST=(o.compose o.display o.append o.atomize o.bundle o.change o.collect o.cond o.context o.dict o.difference o.downcast o.explode o.expr o.expr.codebox o.flatten o.if o.intersection o.messageiterate o.listenumerate o.mappatch o.message o.pack o.pak o.prepend o.print o.printbytes o.route o.schedule o.select o.slip.decode o.slip.encode o.table o.timetag o.union o.unless o.validate o.var o.when) 5 | 6 | for f in ${COBJECT_LIST[*]} 7 | do 8 | cp ../$f/*.c . 9 | cp ../$f/*.h . 2> /dev/null 10 | done 11 | 12 | cp ../include/odot.c . 13 | cp ../include/opd_textbox.[ch] . 14 | --------------------------------------------------------------------------------