Home | History | Annotate | Download | only in mdb
      1     0   stevel /*
      2     0   stevel  * CDDL HEADER START
      3     0   stevel  *
      4     0   stevel  * The contents of this file are subject to the terms of the
      5  5084  johnlev  * Common Development and Distribution License (the "License").
      6  5084  johnlev  * You may not use this file except in compliance with the License.
      7     0   stevel  *
      8     0   stevel  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9     0   stevel  * or http://www.opensolaris.org/os/licensing.
     10     0   stevel  * See the License for the specific language governing permissions
     11     0   stevel  * and limitations under the License.
     12     0   stevel  *
     13     0   stevel  * When distributing Covered Code, include this CDDL HEADER in each
     14     0   stevel  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15     0   stevel  * If applicable, add the following below this CDDL HEADER, with the
     16     0   stevel  * fields enclosed by brackets "[]" replaced with your own identifying
     17     0   stevel  * information: Portions Copyright [yyyy] [name of copyright owner]
     18     0   stevel  *
     19     0   stevel  * CDDL HEADER END
     20     0   stevel  */
     21     0   stevel /*
     22  6144      rab  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
     23     0   stevel  * Use is subject to license terms.
     24     0   stevel  */
     25     0   stevel 
     26     0   stevel #ifndef	_MDB_IO_H
     27     0   stevel #define	_MDB_IO_H
     28     0   stevel 
     29     0   stevel #pragma ident	"%Z%%M%	%I%	%E% SMI"
     30     0   stevel 
     31     0   stevel #ifdef	__cplusplus
     32     0   stevel extern "C" {
     33     0   stevel #endif
     34     0   stevel 
     35     0   stevel #ifdef _MDB
     36     0   stevel 
     37     0   stevel #include <sys/types.h>
     38     0   stevel #include <setjmp.h>
     39     0   stevel #include <stdarg.h>
     40     0   stevel #include <stdio.h>
     41     0   stevel 
     42     0   stevel typedef struct mdb_iob mdb_iob_t;	/* I/O buffer */
     43     0   stevel typedef struct mdb_io mdb_io_t;		/* I/O implementation */
     44     0   stevel struct mdb_arg;				/* Argument structure */
     45     0   stevel 
     46     0   stevel #define	MDB_IOB_DEFTAB		8	/* Default tabstop */
     47     0   stevel #define	MDB_IOB_DEFMARGIN	16	/* Default margin width */
     48     0   stevel #define	MDB_IOB_DEFROWS		24	/* Default rows */
     49     0   stevel #define	MDB_IOB_DEFCOLS		80	/* Default columns */
     50     0   stevel 
     51     0   stevel #define	MDB_IOB_RDONLY		0x0001	/* Buffer is for reading */
     52     0   stevel #define	MDB_IOB_WRONLY		0x0002	/* Buffer is for writing */
     53     0   stevel #define	MDB_IOB_EOF		0x0004	/* Read buffer has reached EOF */
     54     0   stevel #define	MDB_IOB_ERR		0x0008	/* Underlying i/o error occurred */
     55     0   stevel #define	MDB_IOB_INDENT		0x0010	/* Lines are auto-indented */
     56     0   stevel #define	MDB_IOB_PGENABLE	0x0020	/* Pager enabled */
     57     0   stevel #define	MDB_IOB_PGSINGLE	0x0040	/* Line-at-a-time pager active */
     58     0   stevel #define	MDB_IOB_PGCONT		0x0080	/* Continue paging until next reset */
     59     0   stevel #define	MDB_IOB_AUTOWRAP	0x0100	/* Auto-wrap if next chunk won't fit */
     60     0   stevel #define	MDB_IOB_TTYLIKE		0x0200	/* Input is interactive like a tty */
     61     0   stevel 
     62     0   stevel typedef struct mdb_iob_stack {
     63     0   stevel 	mdb_iob_t *stk_top;		/* Topmost stack element */
     64     0   stevel 	size_t stk_size;		/* Number of stack elements */
     65     0   stevel } mdb_iob_stack_t;
     66     0   stevel 
     67     0   stevel typedef struct mdb_iob_ctx {
     68     0   stevel 	jmp_buf ctx_rpcb;		/* Read-side context label */
     69     0   stevel 	jmp_buf ctx_wpcb;		/* Write-side context label */
     70     0   stevel 	void *ctx_rptr;			/* Read-side client data */
     71     0   stevel 	void *ctx_wptr;			/* Write-side client data */
     72     0   stevel 	void *ctx_data;			/* Pointer to client data */
     73     0   stevel 	mdb_iob_t *ctx_iob;		/* Storage for iob save/restore */
     74     0   stevel } mdb_iob_ctx_t;
     75     0   stevel 
     76     0   stevel #define	MDB_IOB_RDIOB	0		/* Index for pipe's read-side iob */
     77     0   stevel #define	MDB_IOB_WRIOB	1		/* Index for pipe's write-side iob */
     78     0   stevel 
     79     0   stevel typedef void mdb_iobsvc_f(mdb_iob_t *, mdb_iob_t *, mdb_iob_ctx_t *);
     80     0   stevel 
     81     0   stevel #define	MDBIOC		(('m' << 24) | ('d' << 16) | ('b' << 8))
     82     0   stevel 
     83     0   stevel #define	MDB_IOC_CTTY	(MDBIOC | 0x01)	/* Clear child tty settings */
     84     0   stevel #define	MDB_IOC_TSET	(MDBIOC | 0x02)	/* Set terminal type */
     85     0   stevel #define	MDB_IOC_GETFD	(MDBIOC | 0x04) /* Get file descriptor (if any) */
     86     0   stevel 
     87     0   stevel 
     88     0   stevel typedef void mdb_table_print_f(void *);
     89     0   stevel 
     90     0   stevel #define	MDB_TBL_DONE	0
     91     0   stevel #define	MDB_TBL_PRNT	1
     92     0   stevel #define	MDB_TBL_FUNC	2
     93     0   stevel 
     94     0   stevel extern mdb_io_t *mdb_io_hold(mdb_io_t *);
     95     0   stevel extern void mdb_io_rele(mdb_io_t *);
     96     0   stevel extern void mdb_io_destroy(mdb_io_t *);
     97     0   stevel 
     98     0   stevel extern mdb_iob_t *mdb_iob_create(mdb_io_t *, uint_t);
     99     0   stevel extern void mdb_iob_pipe(mdb_iob_t **, mdb_iobsvc_f *, mdb_iobsvc_f *);
    100     0   stevel extern void mdb_iob_destroy(mdb_iob_t *);
    101     0   stevel 
    102     0   stevel extern void mdb_iob_flush(mdb_iob_t *);
    103     0   stevel extern void mdb_iob_nlflush(mdb_iob_t *);
    104     0   stevel extern void mdb_iob_discard(mdb_iob_t *);
    105     0   stevel 
    106     0   stevel extern void mdb_iob_push_io(mdb_iob_t *, mdb_io_t *);
    107     0   stevel extern mdb_io_t *mdb_iob_pop_io(mdb_iob_t *);
    108     0   stevel 
    109     0   stevel extern void mdb_iob_resize(mdb_iob_t *, size_t, size_t);
    110     0   stevel extern void mdb_iob_setpager(mdb_iob_t *, mdb_io_t *);
    111     0   stevel extern void mdb_iob_clearlines(mdb_iob_t *);
    112     0   stevel extern void mdb_iob_tabstop(mdb_iob_t *, size_t);
    113     0   stevel extern void mdb_iob_margin(mdb_iob_t *, size_t);
    114     0   stevel extern void mdb_iob_setbuf(mdb_iob_t *, void *, size_t);
    115     0   stevel 
    116     0   stevel extern void mdb_iob_setflags(mdb_iob_t *, uint_t);
    117     0   stevel extern void mdb_iob_clrflags(mdb_iob_t *, uint_t);
    118     0   stevel extern uint_t mdb_iob_getflags(mdb_iob_t *);
    119     0   stevel 
    120     0   stevel extern void mdb_iob_vprintf(mdb_iob_t *, const char *, va_list);
    121     0   stevel extern void mdb_iob_aprintf(mdb_iob_t *, const char *, const struct mdb_arg *);
    122     0   stevel extern void mdb_iob_printf(mdb_iob_t *, const char *, ...);
    123     0   stevel 
    124     0   stevel extern size_t mdb_iob_vsnprintf(char *, size_t, const char *, va_list);
    125     0   stevel extern size_t mdb_iob_asnprintf(char *, size_t, const char *,
    126     0   stevel     const struct mdb_arg *);
    127     0   stevel extern size_t mdb_iob_snprintf(char *, size_t, const char *, ...);
    128     0   stevel 
    129     0   stevel extern void mdb_iob_nputs(mdb_iob_t *, const char *, size_t);
    130     0   stevel extern void mdb_iob_puts(mdb_iob_t *, const char *);
    131     0   stevel extern void mdb_iob_putc(mdb_iob_t *, int);
    132     0   stevel 
    133     0   stevel extern void mdb_iob_fill(mdb_iob_t *, int, size_t);
    134     0   stevel extern void mdb_iob_ws(mdb_iob_t *, size_t);
    135     0   stevel extern void mdb_iob_tab(mdb_iob_t *);
    136     0   stevel extern void mdb_iob_nl(mdb_iob_t *);
    137     0   stevel 
    138     0   stevel extern ssize_t mdb_iob_ngets(mdb_iob_t *, char *, size_t);
    139     0   stevel extern int mdb_iob_getc(mdb_iob_t *);
    140     0   stevel extern int mdb_iob_ungetc(mdb_iob_t *, int);
    141     0   stevel extern int mdb_iob_eof(mdb_iob_t *);
    142     0   stevel extern int mdb_iob_err(mdb_iob_t *);
    143     0   stevel 
    144     0   stevel extern ssize_t mdb_iob_read(mdb_iob_t *, void *, size_t);
    145     0   stevel extern ssize_t mdb_iob_write(mdb_iob_t *, const void *, size_t);
    146     0   stevel extern int mdb_iob_ctl(mdb_iob_t *, int, void *);
    147     0   stevel extern const char *mdb_iob_name(mdb_iob_t *);
    148     0   stevel extern size_t mdb_iob_lineno(mdb_iob_t *);
    149     0   stevel extern size_t mdb_iob_gettabstop(mdb_iob_t *);
    150     0   stevel extern size_t mdb_iob_getmargin(mdb_iob_t *);
    151     0   stevel 
    152     0   stevel extern void mdb_iob_stack_create(mdb_iob_stack_t *);
    153     0   stevel extern void mdb_iob_stack_destroy(mdb_iob_stack_t *);
    154     0   stevel extern void mdb_iob_stack_push(mdb_iob_stack_t *, mdb_iob_t *, size_t);
    155     0   stevel extern mdb_iob_t *mdb_iob_stack_pop(mdb_iob_stack_t *);
    156     0   stevel extern size_t mdb_iob_stack_size(mdb_iob_stack_t *);
    157     0   stevel 
    158     0   stevel extern const char *mdb_iob_format2str(const char *);
    159     0   stevel 
    160     0   stevel /*
    161     0   stevel  * Available i/o backend constructors for common MDB code.  These are
    162     0   stevel  * implemented in the corresponding .c files.
    163     0   stevel  */
    164     0   stevel extern mdb_io_t *mdb_logio_create(mdb_io_t *);
    165     0   stevel extern mdb_io_t *mdb_fdio_create_path(const char **, const char *, int, mode_t);
    166     0   stevel extern mdb_io_t *mdb_fdio_create_named(int fd, const char *);
    167     0   stevel extern mdb_io_t *mdb_fdio_create(int);
    168     0   stevel extern mdb_io_t *mdb_strio_create(const char *);
    169     0   stevel extern mdb_io_t *mdb_termio_create(const char *, mdb_io_t *, mdb_io_t *);
    170     0   stevel extern mdb_io_t *mdb_pipeio_create(mdb_iobsvc_f *, mdb_iobsvc_f *);
    171     0   stevel extern mdb_io_t *mdb_nullio_create(void);
    172  5084  johnlev extern mdb_io_t *mdb_memio_create(char *, size_t);
    173     0   stevel 
    174     0   stevel /*
    175     0   stevel  * Functions for testing whether the given iob is of a given backend type:
    176     0   stevel  */
    177     0   stevel extern int mdb_iob_isastr(mdb_iob_t *);
    178     0   stevel extern int mdb_iob_isatty(mdb_iob_t *);
    179     0   stevel extern int mdb_iob_isapipe(mdb_iob_t *);
    180     0   stevel 
    181     0   stevel extern void mdb_table_print(uint_t, const char *, ...);
    182     0   stevel 
    183     0   stevel extern int mdb_setupterm(const char *, mdb_io_t *, int *);
    184     0   stevel 
    185  6144      rab extern int mdb_fdio_fileno(mdb_io_t *);
    186  6144      rab 
    187     0   stevel #endif /* _MDB */
    188     0   stevel 
    189     0   stevel #ifdef	__cplusplus
    190     0   stevel }
    191     0   stevel #endif
    192     0   stevel 
    193     0   stevel #endif	/* _MDB_IO_H */
    194