diff options
Diffstat (limited to 'lib/uefi.c3l/extension')
| -rw-r--r-- | lib/uefi.c3l/extension/console.c3 | 18 | ||||
| -rw-r--r-- | lib/uefi.c3l/extension/file.c3 | 22 |
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, +} |
