summaryrefslogtreecommitdiff
path: root/usr/src/cmd/format/io.h
blob: e20c719c023aeb5621013ed3c0cf4224390b92ec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*
 * 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, ...);
void	nolog_print(char *format, ...);
void	log_print(char *format, ...);
void	err_print(char *format, ...);
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 */