summaryrefslogtreecommitdiff
path: root/public.asm
diff options
context:
space:
mode:
Diffstat (limited to 'public.asm')
-rw-r--r--public.asm59
1 files changed, 59 insertions, 0 deletions
diff --git a/public.asm b/public.asm
new file mode 100644
index 0000000..0a90fe8
--- /dev/null
+++ b/public.asm
@@ -0,0 +1,59 @@
+;; The MIT License (MIT)
+;;
+;; Copyright (c) 2013-2014 Olivier Gayot
+;;
+;; Permission is hereby granted, free of charge, to any person obtaining a copy
+;; of this software and associated documentation files (the "Software"), to deal
+;; in the Software without restriction, including without limitation the rights
+;; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+;; copies of the Software, and to permit persons to whom the Software is
+;; furnished to do so, subject to the following conditions:
+;;
+;; The above copyright notice and this permission notice shall be included in
+;; all copies or substantial portions of the Software.
+;;
+;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+;; THE SOFTWARE.
+
+;; initializes the list stored at address $rdi with default values
+global list_init:function
+
+;; dynamically allocate a new list and return its address via $rax. If
+;; the dynamic allocation unlikely fails, $rax will contain a null pointer
+global list_new_raw:function
+
+;; same as list_new_raw, unless the list is initialized with default values
+global list_new:function
+
+;; remove every element of the list pointed to by $rip.
+;; the elements are freed using free() from the libc
+global list_clear:function
+
+;; create a new element (using dynamic allocation) at the end of the list
+;; stored at address $rdi. the created element will contain the value of $rsi
+;; if, unlikely, the allocation fails, $rax will contain -1.
+;; otherwise (on success), $rax will be set to 0
+global list_append:function
+
+;; for every element in the list stored at address $rdi, call the function
+;; pointed to by $rsi with the value of the current element.
+global list_apply:function
+
+;; here is the definition of a list (aka a prehead)
+struc list_t
+ .first: resq 1
+ .size: resd 1
+endstruc
+
+;; the elements which are linked together
+struc elem_t
+ .next: resq 1
+ .value: resq 1
+endstruc
+
+; vim:ft=nasm