#ifndef KIfile
#define KIfile
#include <k/type.h>
#include <k/io.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef enum kfcond {
kfcond_ok = 0,
kfcond_fail = 1,
// an unspecified error occurred
kfcond_bad_domain,
// the values passed to the function are not within
// that function's domain and are invalid
kfcond_overstep,
// kfstep() was only able to move part of the
// distance requested
kfcond_bad_index,
// the requested index is past the end of the file
kfcond_notfound,
// the specified object could not be found
kfcond_unauth,
// you do not have permission to open this object
kfcond_mem,
// there is not enough memory to complete the
// requested operation
} kfcond;
typedef enum kfile_kind {
kfile_closed,
// the file object does not refer to an open file
kfile_open,
// the file object refers to an open file
} kfile_kind;
enum kfopen {
/* file open modes */
kf_read = 1 << 9, kf_write = 1 << 10,
kf_ascii = 1 << 11, kf_new = 1 << 12,
kf_create = 1 << 13, kf_load = 1 << 14,
kf_top = 1 << 15, kf_end = 1 << 16,
kf_wipe = 1 << 17, kf_map = 1 << 18,
/* file permission flags */
kf_ur = 4 << 6, kf_uw = 2 << 6, kf_ux = 1 << 6,
kf_gr = 4 << 3, kf_gw = 2 << 3, kf_gx = 1 << 3,
kf_or = 4 << 0, kf_ow = 2 << 0, kf_ox = 1 << 0,
}
typedef struct kfile {
enum kfile_kind kind;
enum kfopen mode;
kiochan chan;
u8* content;
} kfile;
enum kfset_mode {
kfset_none, // do not move
kfset_top, // move to x bytes from the start of the file
kfset_end, // move to x bytes from the end of the file
}
enum kfplace {
kfplace_none,
kfplace_conf,
kfplace_home,
kfplace_desk,
kfplace_dl,
kfplace_img,
kfplace_vid,
kfplace_msc,
kfplace_doc,
kfplace_dat,
kfplace_share,
kfplace_share_global,
kfplace_cache,
}
kfile kfplace(enum kfplace location, const char* file, enum kfopen mode);
kfile kfopen (const char* file, enum kfopen mode);
kfile kfopens(const ksraw file, enum kfopen mode);
kfcond kfset (struct kfile file, enum kfset_mode mode, sz position);
kfcond kfstep(struct kfile file, offset position);
kfcond kfshred(struct kfile file, sz count);
#ifdef __cplusplus
}
#endif
#endif