summaryrefslogtreecommitdiff
path: root/lib/uefi.c3l/extension
diff options
context:
space:
mode:
Diffstat (limited to 'lib/uefi.c3l/extension')
-rw-r--r--lib/uefi.c3l/extension/console.c318
-rw-r--r--lib/uefi.c3l/extension/file.c322
2 files changed, 40 insertions, 0 deletions
diff --git a/lib/uefi.c3l/extension/console.c3 b/lib/uefi.c3l/extension/console.c3
new file mode 100644
index 0000000..07f2c14
--- /dev/null
+++ b/lib/uefi.c3l/extension/console.c3
@@ -0,0 +1,18 @@
+module uefi::protocol::console;
+
+macro SimpleTextOutputProtocol.clear_screen(&self) => self._clear_screen(self);
+macro SimpleTextOutputProtocol.@output_string(&self, #string) {
+ $switch ($Typeof(#string)):
+ $case EfiString:
+ return self._output_string(self, #string);
+ $case WString:
+ return self._output_string(self, (EfiString)#string);
+ $case String:
+ return self._output_string(self, (EfiString)&&$$wstr16(#string));
+ $default:
+ $echo($Typeof(#string));
+ $error("Unknown string type for @output_string");
+ $endswitch
+}
+
+macro SimpleTextInputProtocol.read_key(&self, EfiInputKey* key) => self._read_key(self, key);
diff --git a/lib/uefi.c3l/extension/file.c3 b/lib/uefi.c3l/extension/file.c3
new file mode 100644
index 0000000..1e40e83
--- /dev/null
+++ b/lib/uefi.c3l/extension/file.c3
@@ -0,0 +1,22 @@
+module uefi::protocol::file;
+
+macro FileProtocol.open(&self, FileProtocol** newHandle, WChar* fileName, FileOpenMode openMode, ulong attributes)
+ => self._open(self, newHandle, fileName, openMode, attributes);
+
+macro FileProtocol.close(&self) => self._close(self);
+macro FileProtocol.delete(&self) => self._delete(self);
+macro FileProtocol.read(&self, usz* bufSize, void* buf) => self._read(self, bufSize, buf);
+macro FileProtocol.write(&self, usz* bufSize, void* buf) => self._write(self, bufSize, buf);
+macro FileProtocol.get_position(&self, ulong* pos) => self._get_position(self, pos);
+macro FileProtocol.set_position(&self, ulong pos) => self._set_position(self, pos);
+macro FileProtocol.get_info(&self, EfiGuid* infoType, usz* bufSize, void* buf) => self._get_info(self, infoType, bufSize, buf);
+macro FileProtocol.set_info(&self, EfiGuid* infoType, usz bufSize, void* buf) => self._set_info(self, infoType, bufSize, buf);
+macro FileProtocol.flush(&self) => self._flush(self);
+
+macro FileSystemProtocol.open_volume(&self, FileProtocol** fileProt) => self._open_volume(self, fileProt);
+
+constdef FileOpenMode : inline ulong {
+ CREATE = 0,
+ READ = 1,
+ WRITE = 2,
+}