Edit

IABSD.fr/src/bin/ksh/lex.h

Branch :

  • Show log

    Commit

  • Author : jca
    Date : 2018-01-15 14:58:05
    Hash : 3dc0c5b1
    Message : Stop pretending we support building ksh without EDIT/HISTORY support ok anton@

  • bin/ksh/lex.h
  • /*	$OpenBSD: lex.h,v 1.21 2018/01/15 14:58:05 jca Exp $	*/
    
    /*
     * Source input, lexer and parser
     */
    
    /* $From: lex.h,v 1.4 1994/05/31 13:34:34 michael Exp $ */
    
    #define	IDENT	64
    
    typedef struct source Source;
    struct source {
    	const char *str;	/* input pointer */
    	int	type;		/* input type */
    	const char *start;	/* start of current buffer */
    	union {
    		char **strv;	/* string [] */
    		struct shf *shf; /* shell file */
    		struct tbl *tblp; /* alias (SALIAS) */
    		char *freeme;	/* also for SREREAD */
    	} u;
    	char	ugbuf[2];	/* buffer for ungetsc() (SREREAD) and
    				 * alias (SALIAS) */
    	int	line;		/* line number */
    	int	cmd_offset;	/* line number - command number */
    	int	errline;	/* line the error occurred on (0 if not set) */
    	const char *file;	/* input file name */
    	int	flags;		/* SF_* */
    	Area	*areap;
    	XString	xs;		/* input buffer */
    	Source *next;		/* stacked source */
    };
    
    /* Source.type values */
    #define	SEOF		0	/* input EOF */
    #define	SFILE		1	/* file input */
    #define SSTDIN		2	/* read stdin */
    #define	SSTRING		3	/* string */
    #define	SWSTR		4	/* string without \n */
    #define	SWORDS		5	/* string[] */
    #define	SWORDSEP	6	/* string[] separator */
    #define	SALIAS		7	/* alias expansion */
    #define SREREAD		8	/* read ahead to be re-scanned */
    
    /* Source.flags values */
    #define SF_ECHO		BIT(0)	/* echo input to shlout */
    #define SF_ALIAS	BIT(1)	/* faking space at end of alias */
    #define SF_ALIASEND	BIT(2)	/* faking space at end of alias */
    #define SF_TTY		BIT(3)	/* type == SSTDIN & it is a tty */
    
    typedef union {
    	int	i;
    	char   *cp;
    	char  **wp;
    	struct op *o;
    	struct ioword *iop;
    } YYSTYPE;
    
    /* If something is added here, add it to tokentab[] in syn.c as well */
    #define	LWORD	256
    #define	LOGAND	257		/* && */
    #define	LOGOR	258		/* || */
    #define	BREAK	259		/* ;; */
    #define	IF	260
    #define	THEN	261
    #define	ELSE	262
    #define	ELIF	263
    #define	FI	264
    #define	CASE	265
    #define	ESAC	266
    #define	FOR	267
    #define SELECT	268
    #define	WHILE	269
    #define	UNTIL	270
    #define	DO	271
    #define	DONE	272
    #define	IN	273
    #define	FUNCTION 274
    #define	TIME	275
    #define	REDIR	276
    #define MDPAREN	277		/* (( )) */
    #define BANG	278		/* ! */
    #define DBRACKET 279		/* [[ .. ]] */
    #define COPROC	280		/* |& */
    #define	YYERRCODE 300
    
    /* flags to yylex */
    #define	CONTIN	BIT(0)		/* skip new lines to complete command */
    #define	ONEWORD	BIT(1)		/* single word for substitute() */
    #define	ALIAS	BIT(2)		/* recognize alias */
    #define	KEYWORD	BIT(3)		/* recognize keywords */
    #define LETEXPR	BIT(4)		/* get expression inside (( )) */
    #define VARASN	BIT(5)		/* check for var=word */
    #define ARRAYVAR BIT(6)		/* parse x[1 & 2] as one word */
    #define ESACONLY BIT(7)		/* only accept esac keyword */
    #define CMDWORD BIT(8)		/* parsing simple command (alias related) */
    #define HEREDELIM BIT(9)	/* parsing <<,<<- delimiter */
    #define HEREDOC BIT(10)		/* parsing heredoc */
    #define UNESCAPE BIT(11)	/* remove backslashes */
    
    #define	HERES	10		/* max << in line */
    
    extern Source  *source;		/* yyparse/yylex source */
    extern YYSTYPE	yylval;		/* result from yylex */
    extern struct ioword *heres[HERES], **herep;
    extern char	ident[IDENT+1];
    
    #define HISTORYSIZE	500	/* size of saved history */
    
    extern char   **history;	/* saved commands */
    extern char   **histptr;	/* last history item */
    extern uint32_t	histsize;	/* history size */
    
    int	yylex(int);
    void	yyerror(const char *, ...)
    	    __attribute__((__noreturn__, __format__ (printf, 1, 2)));
    Source * pushs(int, Area *);
    void	set_prompt(int);
    void	pprompt(const char *, int);