zig bindings: namespace File data types and Io data/functions
This commit is contained in:
parent
49213353fc
commit
23378edfec
370
src/orca.zig
370
src/orca.zig
|
@ -1797,24 +1797,127 @@ pub const Canvas = extern struct {
|
||||||
//------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
const File = extern struct {
|
const File = extern struct {
|
||||||
|
const OpenFlags = packed struct(u16) {
|
||||||
|
none: bool,
|
||||||
|
append: bool,
|
||||||
|
truncate: bool,
|
||||||
|
create: bool,
|
||||||
|
|
||||||
|
symlink: bool,
|
||||||
|
no_follow: bool,
|
||||||
|
restrict: bool,
|
||||||
|
};
|
||||||
|
|
||||||
|
const AccessFlags = packed struct(u16) {
|
||||||
|
none: bool,
|
||||||
|
read: bool,
|
||||||
|
write: bool,
|
||||||
|
};
|
||||||
|
|
||||||
|
const Whence = enum(c_uint) {
|
||||||
|
Set,
|
||||||
|
End,
|
||||||
|
Current,
|
||||||
|
};
|
||||||
|
|
||||||
|
const Type = enum(c_uint) {
|
||||||
|
Unknown,
|
||||||
|
Regular,
|
||||||
|
Directory,
|
||||||
|
Symlink,
|
||||||
|
Block,
|
||||||
|
Character,
|
||||||
|
Fifo,
|
||||||
|
Socket,
|
||||||
|
};
|
||||||
|
|
||||||
|
const Perm = packed struct(u16) {
|
||||||
|
other_exec: bool,
|
||||||
|
other_write: bool,
|
||||||
|
other_read: bool,
|
||||||
|
group_exec: bool,
|
||||||
|
group_write: bool,
|
||||||
|
group_read: bool,
|
||||||
|
owner_exec: bool,
|
||||||
|
owner_write: bool,
|
||||||
|
owner_read: bool,
|
||||||
|
sticky_bit: bool,
|
||||||
|
set_gid: bool,
|
||||||
|
set_uid: bool,
|
||||||
|
};
|
||||||
|
|
||||||
|
const DateStamp = extern struct {
|
||||||
|
seconds: i64, // seconds relative to NTP epoch.
|
||||||
|
fraction: u64, // fraction of seconds elapsed since the time specified by seconds.
|
||||||
|
};
|
||||||
|
|
||||||
|
const Status = extern struct {
|
||||||
|
uid: u64,
|
||||||
|
type: Type,
|
||||||
|
perm: Perm,
|
||||||
|
size: u64,
|
||||||
|
|
||||||
|
creation_date: DateStamp,
|
||||||
|
access_date: DateStamp,
|
||||||
|
modification_date: DateStamp,
|
||||||
|
};
|
||||||
|
|
||||||
|
const DialogKind = enum(c_uint) {
|
||||||
|
Save,
|
||||||
|
Open,
|
||||||
|
};
|
||||||
|
|
||||||
|
const DialogFlags = packed struct(u32) {
|
||||||
|
files: bool,
|
||||||
|
directories: bool,
|
||||||
|
multiple: bool,
|
||||||
|
create_directories: bool,
|
||||||
|
};
|
||||||
|
|
||||||
|
const DialogDesc = extern struct {
|
||||||
|
kind: DialogKind,
|
||||||
|
flags: DialogFlags,
|
||||||
|
title: Str8,
|
||||||
|
ok_label: Str8,
|
||||||
|
start_at: File,
|
||||||
|
start_path: Str8,
|
||||||
|
filters: Str8List,
|
||||||
|
};
|
||||||
|
|
||||||
|
const DialogButton = enum(c_uint) {
|
||||||
|
Cancel,
|
||||||
|
Ok,
|
||||||
|
};
|
||||||
|
|
||||||
|
const OpenWithDialogElt = extern struct {
|
||||||
|
list_elt: ListElt,
|
||||||
|
file: File,
|
||||||
|
};
|
||||||
|
|
||||||
|
const OpenWithDialogResult = extern struct {
|
||||||
|
button: DialogButton,
|
||||||
|
file: File,
|
||||||
|
selection: List,
|
||||||
|
};
|
||||||
|
|
||||||
h: u64,
|
h: u64,
|
||||||
|
|
||||||
extern fn oc_file_nil() File;
|
extern fn oc_file_nil() File;
|
||||||
extern fn oc_file_is_nil(file: File) bool;
|
extern fn oc_file_is_nil(file: File) bool;
|
||||||
extern fn oc_file_open(path: Str8, rights: FileAccessFlags, flags: FileOpenFlags) File;
|
extern fn oc_file_open(path: Str8, rights: AccessFlags, flags: OpenFlags) File;
|
||||||
extern fn oc_file_open_at(dir: File, path: Str8, rights: FileAccessFlags, flags: FileOpenFlags) File;
|
extern fn oc_file_open_at(dir: File, path: Str8, rights: AccessFlags, flags: OpenFlags) File;
|
||||||
extern fn oc_file_close(file: File) void;
|
extern fn oc_file_close(file: File) void;
|
||||||
extern fn oc_file_last_error(file: File) IoError;
|
extern fn oc_file_last_error(file: File) io.Error;
|
||||||
extern fn oc_file_pos(file: File) i64;
|
extern fn oc_file_pos(file: File) i64;
|
||||||
extern fn oc_file_seek(file: File, offset: i64, whence: FileWhence) i64;
|
extern fn oc_file_seek(file: File, offset: i64, whence: Whence) i64;
|
||||||
extern fn oc_file_write(file: File, size: u64, buffer: ?[*]u8) u64;
|
extern fn oc_file_write(file: File, size: u64, buffer: ?[*]u8) u64;
|
||||||
extern fn oc_file_read(file: File, size: u64, buffer: ?[*]u8) u64;
|
extern fn oc_file_read(file: File, size: u64, buffer: ?[*]u8) u64;
|
||||||
|
|
||||||
extern fn oc_file_get_status(file: File) FileStatus;
|
extern fn oc_file_get_status(file: File) Status;
|
||||||
extern fn oc_file_size(file: File) u64;
|
extern fn oc_file_size(file: File) u64;
|
||||||
|
|
||||||
extern fn oc_file_open_with_request(path: Str8, rights: FileAccessFlags, flags: FileOpenFlags) File;
|
extern fn oc_file_open_with_request(path: Str8, rights: AccessFlags, flags: OpenFlags) File;
|
||||||
extern fn oc_file_open_with_dialog(arena: *Arena, rights: FileAccessFlags, flags: FileOpenFlags, desc: *FileDialogDesc) FileOpenWithDialogResult;
|
extern fn oc_file_open_with_dialog(arena: *Arena, rights: AccessFlags, flags: OpenFlags, desc: *DialogDesc) OpenWithDialogResult;
|
||||||
|
|
||||||
pub const nil = oc_file_nil;
|
pub const nil = oc_file_nil;
|
||||||
pub const isNil = oc_file_is_nil;
|
pub const isNil = oc_file_is_nil;
|
||||||
|
@ -1834,185 +1937,84 @@ const File = extern struct {
|
||||||
pub const openWithDialog = oc_file_open_with_dialog;
|
pub const openWithDialog = oc_file_open_with_dialog;
|
||||||
};
|
};
|
||||||
|
|
||||||
const FileOpenFlags = packed struct(u16) {
|
//------------------------------------------------------------------------------------------
|
||||||
none: bool,
|
// [FILE IO] low-level io queue api
|
||||||
append: bool,
|
//------------------------------------------------------------------------------------------
|
||||||
truncate: bool,
|
|
||||||
create: bool,
|
|
||||||
|
|
||||||
symlink: bool,
|
const io = struct {
|
||||||
no_follow: bool,
|
const ReqId = u16;
|
||||||
restrict: bool,
|
const Op = u32;
|
||||||
};
|
|
||||||
|
|
||||||
const FileAccessFlags = packed struct(u16) {
|
const OpEnum = enum(c_uint) {
|
||||||
none: bool,
|
OpenAt = 0,
|
||||||
read: bool,
|
Close,
|
||||||
write: bool,
|
FStat,
|
||||||
};
|
Seek,
|
||||||
|
Read,
|
||||||
|
Write,
|
||||||
|
Error,
|
||||||
|
};
|
||||||
|
|
||||||
const FileWhence = enum(c_uint) {
|
const Req = extern struct {
|
||||||
Set,
|
id: ReqId,
|
||||||
End,
|
op: Op,
|
||||||
Current,
|
|
||||||
};
|
|
||||||
|
|
||||||
const IoReqId = u16;
|
|
||||||
const IoOp = u32;
|
|
||||||
|
|
||||||
const IoOpEnum = enum(c_uint) {
|
|
||||||
OpenAt = 0,
|
|
||||||
Close,
|
|
||||||
FStat,
|
|
||||||
Seek,
|
|
||||||
Read,
|
|
||||||
Write,
|
|
||||||
Error,
|
|
||||||
};
|
|
||||||
|
|
||||||
const IoReq = extern struct {
|
|
||||||
id: IoReqId,
|
|
||||||
op: IoOp,
|
|
||||||
handle: File,
|
|
||||||
|
|
||||||
offset: i64,
|
|
||||||
size: u64,
|
|
||||||
|
|
||||||
buffer: extern union {
|
|
||||||
data: ?[*]u8,
|
|
||||||
unused: u64, // This is a horrible hack to get the same layout on wasm and on host
|
|
||||||
},
|
|
||||||
|
|
||||||
type: extern union {
|
|
||||||
open: extern struct {
|
|
||||||
rights: FileAccessFlags,
|
|
||||||
flags: FileOpenFlags,
|
|
||||||
},
|
|
||||||
whence: FileWhence,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const IoError = enum(i32) {
|
|
||||||
Ok = 0,
|
|
||||||
Unknown,
|
|
||||||
Op, // unsupported operation
|
|
||||||
Handle, // invalid handle
|
|
||||||
Prev, // previously had a fatal error (last error stored on handle)
|
|
||||||
Arg, // invalid argument or argument combination
|
|
||||||
Perm, // access denied
|
|
||||||
Space, // no space left
|
|
||||||
NoEntry, // file or directory does not exist
|
|
||||||
Exists, // file already exists
|
|
||||||
NotDir, // path element is not a directory
|
|
||||||
Dir, // attempted to write directory
|
|
||||||
MaxFiles, // max open files reached
|
|
||||||
MaxLinks, // too many symbolic links in path
|
|
||||||
PathLength, // path too long
|
|
||||||
FileSize, // file too big
|
|
||||||
Overflow, // offset too big
|
|
||||||
NotReady, // no data ready to be read/written
|
|
||||||
Mem, // failed to allocate memory
|
|
||||||
Interrupt, // operation interrupted by a signal
|
|
||||||
Physical, // physical IO error
|
|
||||||
NoDevice, // device not found
|
|
||||||
Walkout, // attempted to walk out of root directory
|
|
||||||
};
|
|
||||||
|
|
||||||
const IoCmp = extern struct {
|
|
||||||
id: IoReqId,
|
|
||||||
err: IoError,
|
|
||||||
data: extern union {
|
|
||||||
result: i64,
|
|
||||||
size: u64,
|
|
||||||
offset: i64,
|
|
||||||
handle: File,
|
handle: File,
|
||||||
},
|
|
||||||
|
offset: i64,
|
||||||
|
size: u64,
|
||||||
|
|
||||||
|
buffer: extern union {
|
||||||
|
data: ?[*]u8,
|
||||||
|
unused: u64, // This is a horrible hack to get the same layout on wasm and on host
|
||||||
|
},
|
||||||
|
|
||||||
|
type: extern union {
|
||||||
|
open: extern struct {
|
||||||
|
rights: File.AccessFlags,
|
||||||
|
flags: File.OpenFlags,
|
||||||
|
},
|
||||||
|
whence: File.Whence,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const Error = enum(i32) {
|
||||||
|
Ok = 0,
|
||||||
|
Unknown,
|
||||||
|
Op, // unsupported operation
|
||||||
|
Handle, // invalid handle
|
||||||
|
Prev, // previously had a fatal error (last error stored on handle)
|
||||||
|
Arg, // invalid argument or argument combination
|
||||||
|
Perm, // access denied
|
||||||
|
Space, // no space left
|
||||||
|
NoEntry, // file or directory does not exist
|
||||||
|
Exists, // file already exists
|
||||||
|
NotDir, // path element is not a directory
|
||||||
|
Dir, // attempted to write directory
|
||||||
|
MaxFiles, // max open files reached
|
||||||
|
MaxLinks, // too many symbolic links in path
|
||||||
|
PathLength, // path too long
|
||||||
|
FileSize, // file too big
|
||||||
|
Overflow, // offset too big
|
||||||
|
NotReady, // no data ready to be read/written
|
||||||
|
Mem, // failed to allocate memory
|
||||||
|
Interrupt, // operation interrupted by a signal
|
||||||
|
Physical, // physical IO error
|
||||||
|
NoDevice, // device not found
|
||||||
|
Walkout, // attempted to walk out of root directory
|
||||||
|
};
|
||||||
|
|
||||||
|
const Cmp = extern struct {
|
||||||
|
id: ReqId,
|
||||||
|
err: Error,
|
||||||
|
data: extern union {
|
||||||
|
result: i64,
|
||||||
|
size: u64,
|
||||||
|
offset: i64,
|
||||||
|
handle: File,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
extern fn oc_io_wait_single_req(req: *Req) Cmp;
|
||||||
|
|
||||||
|
pub const waitSingleReq = oc_io_wait_single_req;
|
||||||
};
|
};
|
||||||
|
|
||||||
const FileType = enum(c_uint) {
|
|
||||||
Unknown,
|
|
||||||
Regular,
|
|
||||||
Directory,
|
|
||||||
Symlink,
|
|
||||||
Block,
|
|
||||||
Character,
|
|
||||||
Fifo,
|
|
||||||
Socket,
|
|
||||||
};
|
|
||||||
|
|
||||||
const FilePerm = packed struct(u16) {
|
|
||||||
other_exec: bool,
|
|
||||||
other_write: bool,
|
|
||||||
other_read: bool,
|
|
||||||
group_exec: bool,
|
|
||||||
group_write: bool,
|
|
||||||
group_read: bool,
|
|
||||||
owner_exec: bool,
|
|
||||||
owner_write: bool,
|
|
||||||
owner_read: bool,
|
|
||||||
sticky_bit: bool,
|
|
||||||
set_gid: bool,
|
|
||||||
set_uid: bool,
|
|
||||||
};
|
|
||||||
|
|
||||||
const DateStamp = extern struct {
|
|
||||||
seconds: i64, // seconds relative to NTP epoch.
|
|
||||||
fraction: u64, // fraction of seconds elapsed since the time specified by seconds.
|
|
||||||
};
|
|
||||||
|
|
||||||
const FileStatus = extern struct {
|
|
||||||
uid: u64,
|
|
||||||
type: FileType,
|
|
||||||
perm: FilePerm,
|
|
||||||
size: u64,
|
|
||||||
|
|
||||||
creation_date: DateStamp,
|
|
||||||
access_date: DateStamp,
|
|
||||||
modification_date: DateStamp,
|
|
||||||
};
|
|
||||||
|
|
||||||
const FileDialogKind = enum(c_uint) {
|
|
||||||
Save,
|
|
||||||
Open,
|
|
||||||
};
|
|
||||||
|
|
||||||
const FileDialogFlags = packed struct(u32) {
|
|
||||||
files: bool,
|
|
||||||
directories: bool,
|
|
||||||
multiple: bool,
|
|
||||||
create_directories: bool,
|
|
||||||
};
|
|
||||||
|
|
||||||
const FileDialogDesc = extern struct {
|
|
||||||
kind: FileDialogKind,
|
|
||||||
flags: FileDialogFlags,
|
|
||||||
title: Str8,
|
|
||||||
ok_label: Str8,
|
|
||||||
start_at: File,
|
|
||||||
start_path: Str8,
|
|
||||||
filters: Str8List,
|
|
||||||
};
|
|
||||||
|
|
||||||
const FileDialogButton = enum(c_uint) {
|
|
||||||
Cancel,
|
|
||||||
Ok,
|
|
||||||
};
|
|
||||||
|
|
||||||
const FileOpenWithDialogElt = extern struct {
|
|
||||||
list_elt: ListElt,
|
|
||||||
file: File,
|
|
||||||
};
|
|
||||||
|
|
||||||
const FileOpenWithDialogResult = extern struct {
|
|
||||||
button: FileDialogButton,
|
|
||||||
file: File,
|
|
||||||
selection: List,
|
|
||||||
};
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------
|
|
||||||
// [FILE IO] complete io queue api
|
|
||||||
//------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
extern fn oc_io_wait_single_req(req: *IoReq) IoCmp;
|
|
||||||
|
|
||||||
pub const ioWaitSingleReq = oc_io_wait_single_req;
|
|
||||||
|
|
Loading…
Reference in New Issue