#ifndef _IO_H
#define _IO_H
#ifdef __cplusplus
extern "C" {
#endif
struct bounds {
diskaddr_t lower;
diskaddr_t upper;
};
typedef struct slist {
char *str;
char *help;
int value;
} slist_t;
typedef struct partition_defaults {
uint_t start_cyl;
uint_t deflt_size;
} part_deflt_t;
typedef struct efi_defaults {
uint64_t start_sector;
uint64_t end_sector;
} efi_deflt_t;
typedef union input_param {
struct slist *io_slist;
char **io_charlist;
struct bounds io_bounds;
} u_ioparam_t;
#define FIO_BN 0
#define FIO_INT 1
#define FIO_CSTR 2
#define FIO_MSTR 3
#define FIO_OSTR 4
#define FIO_BLNK 5
#define FIO_SLIST 6
#define FIO_CYL 7
#define FIO_OPINT 8
#define FIO_ECYL 9
#define FIO_INT64 10
#define FIO_EFI 11
#define TOKEN_SIZE 36
typedef char TOKEN[TOKEN_SIZE+1];
#define DATA_INPUT 0
#define CMD_INPUT 1
#define WILD_STRING "$"
#define COMMENT_CHAR '#'
char *gettoken(char *inbuf);
void clean_token(char *cleantoken, char *token);
int geti(char *str, int *iptr, int *wild);
uint64_t input(int, char *, int, u_ioparam_t *, int *, int);
int find_value(slist_t *slist, char *match_str, int *match_value);
char *find_string(slist_t *slist, int match_value);
void fmt_print(char *format, ...) __PRINTFLIKE(1);
void nolog_print(char *format, ...) __PRINTFLIKE(1);
void log_print(char *format, ...) __PRINTFLIKE(1);
void err_print(char *format, ...) __PRINTFLIKE(1);
void print_buf(char *buf, int nbytes);
void pr_diskline(struct disk_info *disk, int num);
void pr_dblock(void (*func)(char *, ...), diskaddr_t bn);
int sup_gettoken(char *buf);
void sup_pushtoken(char *token_buf, int token_type);
void get_inputline(char *, int);
int istokenpresent(void);
int execute_shell(char *, size_t);
void print_efi_string(char *vendor, char *product, char *revision,
uint64_t capacity);
extern int last_token_type;
#ifdef __cplusplus
}
#endif
#endif