root/usr/src/cmd/format/io.h
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef _IO_H
#define _IO_H

#ifdef  __cplusplus
extern "C" {
#endif


/*
 * Bounds structure for integer and disk input.
 */
struct bounds {
        diskaddr_t      lower;
        diskaddr_t      upper;
};

/*
 * List of strings with arbitrary matching values
 */
typedef struct slist {
        char    *str;
        char    *help;
        int     value;
} slist_t;

/*
 * Input structure for current partition information
 */
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;

/*
 * Input parameter can be any one of these types.
 */
typedef union input_param {
        struct slist    *io_slist;
        char            **io_charlist;
        struct bounds   io_bounds;
} u_ioparam_t;

/*
 * These declarations define the legal input types.
 */
#define FIO_BN          0               /* block number */
#define FIO_INT         1               /* integer input */
#define FIO_CSTR        2               /* closed string - exact match */
#define FIO_MSTR        3               /* matched string, with abbreviations */
#define FIO_OSTR        4               /* open string - anything's legal */
#define FIO_BLNK        5               /* blank line */
#define FIO_SLIST       6               /* one string out of a list, abbr. */
#define FIO_CYL         7               /* nblocks, on cylinder boundary */
#define FIO_OPINT       8               /* optional integer input */
#define FIO_ECYL        9               /* allows end cylinder input */
#define FIO_INT64       10              /* Input for EFI partitions */
#define FIO_EFI         11              /* Input EFI part size  */

/*
 * Miscellaneous definitions.
 */
#define TOKEN_SIZE      36                      /* max length of a token */
typedef char TOKEN[TOKEN_SIZE+1];               /* token type */
#define DATA_INPUT      0                       /* 2 modes of input */
#define CMD_INPUT       1
#define WILD_STRING     "$"                     /* wildcard character */
#define COMMENT_CHAR    '#'                     /* comment character */


/*
 *      Prototypes for ANSI C
 */
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);

/*
 * Most recent token type
 */
extern  int     last_token_type;

#ifdef  __cplusplus
}
#endif

#endif  /* _IO_H */