require 'redcarpet'
# TODO:
-# * Copy auxiliary files over
# * Add page attachment mechanism
# * Add edit shortcut
# * Add save shortcut
# * Add a move/rename method
# * Add git revisioning for pages
-SITE_TITLE = "awiki"
+SITE_TITLE = "Michael D. Lowis"
SERVER_PORT = (ARGV[0] || 8080)
HTML_DIR = "./html/"
PAGES_DIR = "./pages/"
EDIT_TEMPLATE = "config/editor.html.erb"
PLANTUML_JAR = "config/plantuml.jar"
PLANTUML_CMD = "java -jar #{PLANTUML_JAR} -tsvg -pipe"
+EDIT_SCRIPT = <<-eos
+ <script>
+ (() => {
+ const keys = { "e": () => { window.location = window.location + "?edit=true" } };
+ document.onkeydown = (ev) => (!!keys[ev.key] ? (keys[ev.key])(ev) : true);
+ })();
+ </script>
+eos
class Page
def initialize(src)
html = File.read(htmlfile)
end
gensitemap()
- html.sub("<!--EDIT-->",
- "<a class='navLink shrink' href='#{path}?edit=true'>[edit]</a>")
+ html = html.sub("<!--EDIT-->",
+ "<a class='navLink shrink' href='#{path}?edit=true'>[edit]</a>")
+ html.sub("<!--EDIT_SCRIPT-->", EDIT_SCRIPT)
end
def do_post(req, res, path)
</style>
</head>
<body>
- <div class="header">
- <hr/>
- <div class="box">
- <a class="headerLink grow" href="./index.html">
- <%= @site_title %>
- </a>
- <a class="navLink shrink" href='./index.html'>home</a>
- <a class="navLink shrink" href='./sitemap.html'>sitemap</a>
- <!--EDIT-->
- </div>
- <hr/>
+ <div class="header">
+ <hr/>
+ <div class="box">
+ <a class="headerLink grow" href="/index.html">
+ <%= @site_title %>
+ </a>
+ <a class="navLink shrink" href='/index.html'>home</a>
+ <a class="navLink shrink" href='/projects.html'>projects</a>
+ <a class="navLink shrink" href='/notes.html'>notes</a>
+ <a class="navLink shrink" href='/sitemap.html'>sitemap</a>
+ <!--EDIT-->
</div>
+ <hr/>
+ </div>
- <article>
- <%= @article %>
- </article>
+ <article>
+ <%= @article %>
+ </article>
- <div class="footer">
- <hr style="margin-top: 2em"/>
- <div style="text-align: center">
- <%= @gendate %>
- </div>
+ <div class="footer">
+ <hr style="margin-top: 2em"/>
+ <div style="text-align: center">
+ <%= @gendate %>
</div>
+ </div>
+ <!--EDIT_SCRIPT-->
</body>
</html>
--- /dev/null
+# C Programming Guidelines
+This is a suggested set of guidelines to follow when writing C code. It is based on my own experience as well as the influential "The Power of 10: Rules for Developing Safety-Critical Code".
+
+1. All control flow constructs must have braces
+2. Braces of control flow constructs go on their own lines
+3. [^1] Avoid complex flow constructs, such as goto, setjmp/longjmp, and recursion.
+4. [^1] All loops must have fixed bounds to avoid runaway code.
+5. [^1] Avoid heap memory allocation after initialization.
+6. Minimize cyclomatic complexity and length of function bodies.
+7. Utilize design by contract on all public APIs and internal functions that are mission critical
+8. Restrict the scope of data to the smallest possible.
+9. Do not utilize function-scoped static variables.
+10. Check the return value of all non-void functions, or cast to void to indicate the return value is unused.
+11. Use the preprocessor sparingly.
+12. Limit pointer use to a single dereference, and do not use function pointers.
+13. Compile with all possible warnings active and warnings treated as errors.
+14. Use a single return statement per function.
+
+[^1]: http://web.eecs.umich.edu/~imarkov/10rules.pdf
-# Welcome!
-Awiki is a tiny ruby script that implements a minimal wiki engine. The script is used for authoring the site and results in static HTML files that can then be published to your favorite hosting platform.
+# About Me
+I am an Embedded Software Engineer, currently employed at Gentex Corporation in Zeeland, MI. I have a keen interest in the concepts of [Software Craftsmanship](https://en.wikipedia.org/wiki/Software_craftsmanship), software minimalism, and clean software design. This site is meant to showcase some of my own thoughts and projects regarding those concepts.
-## Features
-* Markdown syntax
-* PlantUML diagram generation
-* Sitemap generation
-* Browser-based page editor
+## Work Experience
-## Getting Started
-To start a new wiki run the following commands:
+### [Gentex Corporation](https://www.gentex.com), Zeeland MI (Sep 2010 - Present)
+* **Lead Software Engineer (Sep 2019 - Present)**
+* **Software Engineer (Sep 2010 - Sep 2019)**
-````
-git clone git://git.mdlowis.com/projs/awiki.git
-cd awiki
-./awiki.rb 8080
-````
+### [Vanillaware](http://www.vanillaware.com/), Grand Rapids MI (Jan 2007 - June 2010)
+* **Software Engineer**
+* **Intern**
-This will run a local web server on port 8080. Navigate to http://localhost:8080 to see the home page. Every page will have an **[edit]** link or a **[save]** link in the upper right corner. These links are only available when served via the **awiki.rb** script. The raw generated HTML files will not have these links and can be published to any web server of your choosing.
+## Education
+### [Grand Valley State University](https://www.gvsu.edu/) (Graduated 2009)
+* **Bachelor of Science, Computer Science**
--- /dev/null
+# Cube Algorithms
+
+## Orient Corners
+
+* R U R' U R U2 R' (U2)
+
+## Position Corners:
+
+* R U' L U2 R' U R U2 (L' R' U)
+
+## Orient Edges:
+
+* M' U(2) M'
+* M U M' (flip all except two B edges)
+
+## Finish L+R:
+
+* U' M U2 M
+* M2 U M U2 M'
+* U2 M' U2 M' U M2
+
+## Position M Edges:
+
+* U2 M U2
+* U2 M2 U2
+* E2 M E2 (???)
--- /dev/null
+# FPGA Development
+
+## Free Books
+* [Quick Start Guide to VHDL](https://link.springer.com/book/10.1007/978-3-030-04516-6)
+* [Introduction to Logic Circuits & Logic Design with VHDL](https://link.springer.com/book/10.1007/978-3-030-12489-2)
--- /dev/null
+# Open Source Programs
+
+* [Pick](https://github.com/mptre/pick) - Fuzzy picker, inspiration for the fuzzy picker in tide
+* [Nushell](https://www.nushell.sh/book/en/table_of_contents.html) - interesting new command shell with piping of data and metadata
--- /dev/null
+# Notes
+
+## Writing
+* [Article Ideas](notes/article_ideas.html)
+
+## General Programming
+* [C Programming Rules](c_style.html)
+
+## Programming Language Design
+* [SCLPL Design Notes](sclpl.html)
+* [ZINC Abstract Machine](zam.html)
+* [Oberon 07](oberon07.html)
+
+## Miscellaneous
+* [Cube Algorithms](misc/cube_alogrithms.html)
+* [Recipes](recipes.html)
+* [FPGA Development](misc/fpga_dev.html)
+* [Open Source Programs](misc/open_source.html)
\ No newline at end of file
--- /dev/null
+# Article Ideas
+* Critique of the [suckless](https://suckless.org) approach
+* Interesting C techniques or hacks
+ * reference counting
+ * intrusive data structures
+ * analysis of various open source tools
+
--- /dev/null
+# Oberon 07
+
+## Declarations and scope rules
+
+* Every identifier occurring in a program must be introduced by a declaration, unless it is a predefined
+identifier.
+* No identifier may denote more than one object within a given scope.
+* The scope extends textually from the point of the declaration to the end of the block
+ (procedure or module) to which the declaration belongs and hence to which the object is local.
+
+In its declaration, an identifier in the module's scope may be followed by an export mark (*) to
+indicate that it be exported from its declaring module. In this case, the identifier may be used in
+other modules, if they import the declaring module. The identifier is then prefixed by the identifier
+designating its module (see Ch. 11). The prefix and the identifier are separated by a period and
+together are called a qualified identifier.
\ No newline at end of file
--- /dev/null
+# Projects
+
+## Active Projects
+Projects being actively used and/or updated.
+
+* [tide](https://git.mdlowis.com/?p=projs/tide.git;a=summary) -
+ A minimal graphical text editor inspired by [Acme](http://doc.cat-v.org/plan_9/4th_edition/papers/acme/)
+* [awiki](https://git.mdlowis.com/?p=projs/awiki.git;a=summary) -
+ A minimal personal wiki engine for authoring static websites.
+* [alib](https://git.mdlowis.com/?p=projs/abt.git;a=summary) -
+ A collection of [header-only](https://en.wikipedia.org/wiki/Header-only) libraries for C
+* [atf](https://git.mdlowis.com/?p=projs/atf.git;a=summary) -
+ A minimal unit testing framework for C distributed as a header-only library.
+
+## Dormant Projects
+Projects that are "finished" but no longer used or updated (for now). From time to time these projects may be revived or their ideas will feed into new projects.
+
+* [abt](https://git.mdlowis.com/?p=projs/abt.git;a=summary) -
+ A simple [Scons](https://scons.org/)/[RScons](https://github.com/holtrop/rscons) inspired build system written in Bash.
+* [onward](https://git.mdlowis.com/?p=projs/onward.git;a=summary) -
+ Forth-like language implemented in C99
+* [opts](https://git.mdlowis.com/?p=projs/opts.git;a=summary) -
+ Minimal command-line option parser library for C
+* [libcds](https://git.mdlowis.com/?p=projs/libcds.git;a=summary) -
+ A collection of common data structures and algorithms implemented in C99.
+
+## Prototypes and Half-Baked Ideas
+These might do something useful. They might also make your computer explode.
+
+* [acc](https://git.mdlowis.com/?p=proto/acc.git;a=summary) -
+ A shell script wrapper around the system C compiler
+* [albase](https://git.mdlowis.com/?p=proto/albase.git;a=summary) -
+ Experimental Linux distro with a focus on simplicity and efficiency.
+* [gir](https://git.mdlowis.com/?p=proto/gir.git;a=summary) -
+ Experimental programming language
+* [iwe](https://git.mdlowis.com/?p=proto/iwe.git;a=summary) -
+ Integrated work environment - custom forks of [suckless](https://suckless.org)
+ tools for personal use
+* [journal](https://git.mdlowis.com/?p=proto/journal.git;a=summary) -
+ Minimal single-page web app implementing a journal
+* [jstoys](https://git.mdlowis.com/?p=proto/jstoys.git;a=summary) -
+ Collection of minimal web games/demos written from scratch
+* [kanban](https://git.mdlowis.com/?p=proto/kanban.git;a=summary) -
+ Minimal single-page web app implementing a [Kanban board](https://en.wikipedia.org/wiki/Kanban_board)
+* [libbk](https://git.mdlowis.com/?p=proto/libbk.git;a=summary) -
+ Library implementing a collection of memory management strategies
+* [lisp](https://git.mdlowis.com/?p=proto/lisp.git;a=summary) -
+ Parser for a lisp language
+* [pick](https://git.mdlowis.com/?p=proto/pick.git;a=summary) -
+ Terminal based fuzzy picker
+* [sclpl-rb](https://git.mdlowis.com/?p=proto/sclpl-rb.git;a=summary) -
+ Compiler for an experimental language written in Ruby
+* [sclpl](https://git.mdlowis.com/?p=proto/sclpl.git;a=summary) -
+ Compiler for an experimental language written in C
+
+
+## Archived Projects
+No longer developed but still contain useful bits of code.
+
+* [acc](https://git.mdlowis.com/?p=archive/acc.git;a=summary) -
+ Aardvark chat client - terminal based [xmpp](https://en.wikipedia.org/wiki/XMPP) chat client
+* [afm](https://git.mdlowis.com/?p=archive/afm.git;a=summary) -
+ Aardvark file manager - A terminal based file manager
+* [atc](https://git.mdlowis.com/?p=archive/atc.git;a=summary) -
+ Algebraic type generator for C
+* [bci](https://git.mdlowis.com/?p=archive/bci.git;a=summary) -
+ A distributed [continuous integration](https://en.wikipedia.org/wiki/Continuous_integration) script written in the bash scripting language.
+* [bitbucket](https://git.mdlowis.com/?p=archive/bitbucket.git;a=summary) -
+ Random collection of scripts, code, and notes.
+* [bshuffle](https://git.mdlowis.com/?p=archive/bshuffle.git;a=summary) -
+ QT based application for shuffling a list of items into equal sized groups.
+* [build-system](https://git.mdlowis.com/?p=archive/build-system.git;a=summary) -
+ Build scripts based on RScons for a variety of different projects.
+* [carl](https://git.mdlowis.com/?p=archive/carl.git;a=summary) -
+ C advanced runtime library
+* [cork](https://git.mdlowis.com/?p=archive/cork.git;a=summary) -
+ Memory leak detector for C++
+* [dlang-scm](https://git.mdlowis.com/?p=archive/dlang-scm.git;a=summary) -
+ Experimental programming language implemented in scheme.
+* [dlang](https://git.mdlowis.com/?p=archive/dlang.git;a=summary) -
+ Experimental programming language
+* [gapbuf](https://git.mdlowis.com/?p=archive/gapbuf.git;a=summary) -
+ Simple [gap buffer](https://en.wikipedia.org/wiki/Gap_buffer) implemented in C
+* [gc_obj](https://git.mdlowis.com/?p=archive/gc_obj.git;a=summary) -
+ Reference counted smart pointer implementation.
+* [parse-utils](https://git.mdlowis.com/?p=archive/parse-utils.git;a=summary) -
+ C++ library for building recursive descent parsers.
+* [tide-hl](https://git.mdlowis.com/?p=archive/tide-hl.git;a=summary) -
+ Syntax highlighting engine for tide
+* [tide-ocaml](https://git.mdlowis.com/?p=archive/tide-ocaml.git;a=summary) -
+ Minimal text editor inspired by Acme written in OCaml
+* [vim_config](https://git.mdlowis.com/?p=archive/vim_config.git;a=summary) -
+ Custom vim configuration files
--- /dev/null
+# Recipes
+
+* [Banana Brown Sugar Pancakes](recipes/banana_pancakes.html)
+* [Plain Old Pancakes](recipes/pancakes.html)
+* [Teriyaki Sauce](recipes/teriyaki_sauce.html)
+* [Zucchini Cookies](recipes/zucchini_cookies.html)
+* [Zucchini Cookies With Oats](recipes/zucchini_cookies_with_oats.html)
--- /dev/null
+# Banana Brown Sugar Pancakes
+
+Makes 10 Pancakes
+
+## Ingredients
+
+* 1 cup flour
+* 1/2 cup brown sugar
+* 1/2 teaspoon baking soda (or 2 teaspoons baking powder)
+* 1 egg
+* 1 banana
+* 2 tablespoons of vegetable oil
+* 1 cup milk
+
+## Directions
+
+Mix it all and cook it all.
\ No newline at end of file
--- /dev/null
+# Plain Old Pancakes
+
+## Ingredients
+
+* 1 cup all-purpose flour, (spooned and leveled)
+* 2 tablespoons sugar
+* 2 teaspoons baking powder or 1/2 teaspoon baking soda
+* 1 cup milk
+* 1 large egg
+* 1 tablespoon vegetable oil
+
+## Directions
+
+Mix it all and cook it all.
\ No newline at end of file
--- /dev/null
+# Teriyaki Sauce
+## Ingredients
+
+* 1/2 cup water
+* 1 1/2 Tbsp cornstarch
+* 1/2 cup low-sodium soy sauce
+* 3 Tbsp packed light-brown sugar
+* 3 Tbsp honey
+* 3 cloves garlic, minced (1 Tbsp)
+* 1 Tbsp minced ginger
+* 1 Tbsp rice vinegar
+
+## Directions
+
+1. Whisk together corn starch and 1/8 cup (2 tbsp) of water and set aside.
+2. Whisk together 3/8 cup (1/4 cup and 2 tbsp) water, and everything else in a sauce pan
+3. Bring to light boil over medium high heat
+4. Whisk in corn starch mix
+5. Reduce heat and boil for 1 minute stirring constantly
--- /dev/null
+# Zucchini Cookies
+
+Makes 96 cookies. Takes 45 minutes.
+
+## Ingredients
+
+* 1 cup butter, softened (room temperature)
+* 2 cups granulated sugar
+* 2 eggs, beaten
+* 4 cups all-purpose flour
+* 2 teaspoons baking soda
+* 2 teaspoons ground cinnamon
+* 1 teaspoon salt
+* 2 small zucchini, grated (approximately 2 cups of grated zucchini)
+* 2 cups semi-sweet chocolate chips
+* 1 1/2-2 cups walnuts, chopped (optional)
+
+## Directions
+
+1. First you will want to preheat your oven to 350 degrees F.
+2. Spray cookie sheets with cooking spray or line with Parchment paper.
+3. Next you want to cream your butter and sugar together in a large mixing bowl until light and fluffy.
+4. Then you want to add the egg, flour, baking soda, cinnamon, and salt into the butter mixture, gradually; mix well.
+5. Stir in the zucchini.
+6. Fold in your walnuts (optional., and chocolate chips.
+7. Drop by teaspoonfuls with two (2. inches between each cookie-- onto the cookie sheets.
+8. Bake for 15 to 20 minutes, or until golden.
+9. Do not over-bake, or you will not enjoy your cookies.
+10. Let stand to cool for 2 to 3 minutes, then remove and place on wire racks to allow to cook completely.
--- /dev/null
+# Zucchini Cookies With Oats
+
+## Ingredients
+
+* 1 1/2 cups all-purpose flour
+* 1 teaspoon ground cinnamon
+* 1/2 teaspoon baking soda
+* 1/2 cup (1 stick) butter, softened
+* 3/4 cup granulated sugar
+* 1 large egg
+* 3/4 teaspoon vanilla extract
+* 1 1/2 cups shredded zucchini
+* 1 cup quick oats
+* 1 cup chopped nuts (optional)
+* 1 2/3 cups chocolate chips
+
+## Directions
+
+1. preheat oven to 350° F. Lightly grease baking sheets.
+2. combine flour, cinnamon and baking soda in small bowl.
+3. Beat butter and sugar in large mixer bowl until well combined.
+4. Add egg and vanilla extract, beat well.
+5. Add zucchini; gradually beat in flour mixture.
+6. Stir in oats, nuts and morsels.
+7. Drop by rounded teaspoon 2 inches apart onto prepared baking sheets.
+8. Bake for 9 to 11 minutes or until light golden brown around edges.
+9. Cool on baking sheets for 2 minutes; remove to wire rack to cool completely. Store in tightly covered container at room temperature.
--- /dev/null
+# SCLPL Design Notes
+
+Language Requirements:
+
+* [Eager Evaluation](https://en.wikipedia.org/wiki/Eager_evaluation)
+* [Single Assignment](https://en.wikipedia.org/wiki/Assignment_\(computer_science\)#Single_assignment)
+* [Dynamic Typing](https://en.wikipedia.org/wiki/Type_system#DYNAMIC)
+* [Immuatable Data Structures](https://en.wikipedia.org/wiki/Immutable_object)
+* [Functional Programming](https://en.wikipedia.org/wiki/Functional_programming)
+* [Garbage Collection](https://en.wikipedia.org/wiki/Garbage_collection_\(computer_science\))
+* [Tail Call Optimization](https://en.wikipedia.org/wiki/Tail_call)
+* Compiled to native binaries
+ * no virtual machine, C as target language
+* First class parallelism/concurrency
+* First class support for testing
+
+## General Info
+* [Erlang](http://erlang.org/doc/getting_started/intro.html)
+ * [wikipedia](https://en.wikipedia.org/wiki/Erlang_\(programming_language\))
+ * Error handling
+ * Actor model, message passing
+ * Stack growing/recursion story
+* [Go Stack Handling](https://blog.cloudflare.com/how-stacks-are-handled-in-go/)
+* Apple Docs/Source
+ * [Apple Source Repo](https://opensource.apple.com/source/)
+ * [Apple Libc](https://github.com/Apple-FOSS-Mirror/Libc)
+
+## Concurrency/Parallelism
+* Processes
+* Threads
+* Tasks (coroutines)
+* [Communicating Sequential Processes](https://en.wikipedia.org/wiki/Communicating_sequential_processes)
+* [Actor Model](https://en.wikipedia.org/wiki/Actor_model)
+
+## Investigations
+* makecontext/setcontext based coroutines
+* raw assembly coroutines based on fcontext_t
+ * [makecontext/swapcontext on OSX](https://stackoverflow.com/questions/40299849/context-switching-is-makecontext-and-swapcontext-working-here-osx)
+ * [fcontext](https://github.com/DaoWen/fcontext)
+* CSP versus Actor model
+
+## Language Design
+
+### Atomic Types
+* Fixnums
+* Flonums
+* Strings
+* Symbols
+
+### Aggregate Types
+* Lists
+* Vectors
+* Maps
+* Records/Tuples?
+
+### Other Types
+* Ports
+* Procedures/Closures/Functions
# Style
-Simple showcase of styling and features available.
+
+http://google.com
# Heading 1
## Heading 2
---
-[A link](https://www.example.com)
-
-https://www.example.com
+[A link](http://google.com)
**Bold Text**
*Italicized Text*
-_underlined text_
-
~~The world is flat.~~
-"highlighted text"
-
-"quoted text"
-
> This is a blockquote
-Here is some `code` inline.
+`here is some code`
This is
a code block
dummy paragraph
-## Table Example
-
-<br/><table>
+<table>
<tr>
<th>This</th>
<th>is</th>
- <th>a</th>
- <th>table</th>
</tr>
<tr>
- <td>This</td>
- <td>is</td>
<td>a</td>
<td>table</td>
</tr>
</table>
-## Lorem Ipsum
+# Lorem Ipsum
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras eleifend purus non tempor finibus. Donec non turpis id magna egestas laoreet vel et erat. Mauris pulvinar fringilla nunc, quis sollicitudin arcu euismod ut. Phasellus eget gravida eros. Aenean aliquam purus vel semper facilisis. Nulla iaculis nec odio eget posuere. Nunc non justo sed justo ultrices ultrices. Maecenas ut aliquet tortor. Proin eu lectus a velit vestibulum posuere. Vivamus efficitur pulvinar volutpat. Vestibulum iaculis, lorem eget ultricies egestas, velit mi facilisis erat, ut congue sem orci eu metus. Nulla risus massa, suscipit id placerat at, molestie ac nulla. Nunc suscipit augue a risus porttitor egestas. In congue pretium faucibus. Sed porttitor, sapien ac consequat finibus, magna ante aliquet ipsum, quis luctus sem eros eget magna. Cras vitae ligula massa.
## UML Diagrams
@startuml
-actor Foo
-actor Bar
-Foo -> Bar : This is a label
+actor Foo1
+boundary Foo2
+control Foo3
+entity Foo4
+database Foo5
+collections Foo6
+Foo1 -> Foo2 : To boundary
+Foo1 -> Foo3 : To control
+Foo1 -> Foo4 : To entity
+Foo1 -> Foo5 : To database
+Foo1 -> Foo6 : To collections
@enduml
-## Flexbox Example
+@startuml
+User -> (Start)
+User --> (Use the application) : A small label
+:Main Admin: ---> (Use the application) : This is\nyet another\nlabel
+@enduml
-<br/>
<div class="box">
- <div class="grow">ONE</div>
- <div class="grow">TWO</div>
- <div class="grow">THREE</div>
- <div class="grow">FOUR</div>
- <div class="grow">FIVE</div>
- <div class="grow">SIX</div>
- <div class="grow">SEVEN</div>
- <div class="grow">EIGHT</div>
- <div class="grow">NINE</div>
- <div class="grow">TEN</div>
- <div class="grow">ELEVEN</div>
- <div class="grow">TWELVE</div>
-</div>
-
-## Footnotes
-
-This references a footnote here [^1] and here[^2];
-
-here are the references:
-[^1]: Some reference...
-[^2]: Some other reference...
+ <div class="item">ONE</div>
+ <div class="item">TWO</div>
+ <div class="item">THREE</div>
+ <div class="item">FOUR</div>
+ <div class="item">FIVE</div>
+ <div class="item">SIX</div>
+ <div class="item">SEVEN</div>
+ <div class="item">EIGHT</div>
+ <div class="item">NINE</div>
+ <div class="item">TEN</div>
+ <div class="item">ELEVEN</div>
+ <div class="item">TWELVE</div>
+</div>
\ No newline at end of file
--- /dev/null
+# ZINC Abstract Machine
+
+## Registers
+* **accum** - accumulator register
+
+## Instruction Set
+* **const8(int8)** - Put int8 constant into the accumulator
+* **const16(int16)** - Put int16 constant into the accumulator
+* **const32(int32)** - Put int32 constant into the accumulator
+* **const64(int64)** - Put int64 constant into the accumulator
+* **atom(n)** - Pointer to a 0 sized block tagged *n* in the accumulator
+* **get_global(int32)** - Load global into the accumulator
+* **set_global(int32)** - Save the accumulator to the designated global
+
+## Function Handling
+* **push, pushmark** - Push the accumulator (resp. a mark) on the argument stack
+* **apply, appterm** - Call (resp. jump to) the closure contained in the accumulator
+* **return** - If there is a mark on top of the argument stack, pop it and return to the caller; otherwise, jump to the closure contained in the accumulator
+* **grab** - Popone value on the argument stack and put it in the environment; if the top of stack is a mark, build a closure and return it to the caller
+* **cur(ofs)** - Build the closure of ofs with the current environment, and put it in the accumulator
+
+## Environment Handling
+* **access(ofs)** - Fetch the nth slot in the environment, and put it in the accumulator
+* **let** - Put the value of the accumulator in front of the environment
+* **endlet(n)** - Throw away the first n local variables from the environment
+* **dummies(n)** - Put n dummy closures in front of the environment
+* **update(n)** - Physically update the nth slot of the environment with the value of the accumulator
+* **letrec1(ofs)** - Same as Dummies(1); Closure(ofs); Update(0) (A very frequent sequence, corresponding to `let rec f = function ... in ...`
+
+## Building and Destructuring Blocks
+
+## Integers
+
+## Floating Point Numbers
+
+## Strings
+
+## Predicates
+
+## Branches and Conditional Branches