#define SUBSYSTEM APPLICATION_EXEC "_dsl_file: "

enum file_codes {								/* File operation return codes */
	DSL_FILE_OK = 0,
	DSL_FILE_ERROR = -1
};

#if ! defined(PROG_DISABLE_FILEIO)
void dsl_file_data_str(struct dsl_var *, struct dsl_var *, unsigned int, struct dsl_ctx *);

static void dsl_file_data_str_op(char *, struct dsl_var *, struct dsl_ctx *, char *);

static void dsl_file_data_chunk_get_size(struct dsl_var *, struct dsl_var *, struct dsl_ctx *);
static void dsl_file_data_chunk_set_size(struct dsl_var *, struct dsl_num *, struct dsl_ctx *);

static void dsl_file_data_read(D_HANDLE, struct dsl_var *, struct dsl_var *, struct dsl_ctx *);

static void dsl_file_data_write(D_HANDLE, struct dsl_var *, struct dsl_var *, struct dsl_ctx *);
static void dsl_file_data_write_number(D_HANDLE, struct dsl_var *, size_t, struct dsl_ctx *);
static void dsl_file_data_write_string(D_HANDLE, struct dsl_var *, size_t, struct dsl_ctx *);
static void dsl_file_data_write_pointer(D_HANDLE, struct dsl_var *, struct dsl_var *, size_t, struct dsl_ctx *);
static void dsl_file_data_write_handle(D_HANDLE, struct dsl_var *, size_t, struct dsl_ctx *);
static void dsl_file_data_write_color(D_HANDLE, struct dsl_var *, size_t, struct dsl_ctx *);
static void dsl_file_data_write_image(D_HANDLE, struct dsl_var *, size_t, struct dsl_ctx *);
static void dsl_file_data_write_point(D_HANDLE, struct dsl_var *, size_t, struct dsl_ctx *);
static int dsl_file_data_write_op(D_HANDLE, void *, size_t, struct dsl_ctx *);

static void dsl_file_data_seek_pos(D_HANDLE, struct dsl_num *, struct dsl_ctx *);
static void dsl_file_data_seek_cur(D_HANDLE, struct dsl_num *, struct dsl_ctx *);

static void dsl_file_data_tell(D_HANDLE, struct dsl_var *, struct dsl_var *, struct dsl_ctx *);
static void dsl_file_data_getname(D_HANDLE, struct dsl_var *, struct dsl_var *, struct dsl_ctx *);
static void dsl_file_data_getsize(D_HANDLE, struct dsl_var *, struct dsl_var *, struct dsl_ctx *);
static void dsl_file_data_getacre(D_HANDLE, struct dsl_var *, struct dsl_var *, struct dsl_ctx *);
static void dsl_file_data_getaddr(D_HANDLE, struct dsl_var *, struct dsl_var *, struct dsl_ctx *);
static void dsl_file_data_close(D_HANDLE, struct dsl_var *, struct dsl_var *, struct dsl_ctx *);
static void dsl_file_data_exists(char *, struct dsl_var *, struct dsl_ctx *);
static void dsl_file_data_delete(D_HANDLE, struct dsl_var *, struct dsl_var *, struct dsl_ctx *);

static int dsl_file_data_op(struct dsl_var *);
static void dsl_file_data_rt(struct dsl_ctx *, int);
static void dsl_file_data_nt(struct dsl_var *, struct dsl_num *, struct dsl_ctx *);
static void dsl_file_data_st(char *, size_t, struct dsl_var *, unsigned int, char *, size_t);

/* dsl.c */
struct dsl_str *dsl_get_rc_var(void);

/* dsl_variable.c */
int dsl_var_get_number(struct dsl_var *, struct dsl_num *, struct dsl_ctx *);
int dsl_var_get_string(struct dsl_var *, struct dsl_str *);
int dsl_var_get_handle(struct dsl_var *, struct dsl_hnd *);
int dsl_var_get_color(struct dsl_var *, struct dsl_clr *);
int dsl_var_get_image(struct dsl_var *, struct dsl_img *);
int dsl_var_get_point(struct dsl_var *, struct dsl_pnt *);
#endif
