/*
 * $Id: keydefs.h 766 2007-10-23 23:59:00Z hubert@u.washington.edu $
 *
 * ========================================================================
 * Copyright 2006-2007 University of Washington
 * Copyright 2013-2021 Eduardo Chappa
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * ========================================================================
 */

#ifndef PICO_KEYDEFS_INCLUDED
#define PICO_KEYDEFS_INCLUDED

/*
 * Key value definitions for pico/pine
 */


/*
 * Char conversion constants
 * Make these different values than c-client's U8G_ERROR constants, though I don't
 * think that is necessary.
 * These values are not possible as regular UCS-4 values.
 */

#undef CTRL
#define CTRL		0x1000000
#define FUNC		0x2000000

#define KEY_BASE	0x40000000
#define CCONV_NEEDMORE	(KEY_BASE+1)	/* need more octets */
#define CCONV_BADCHAR	(KEY_BASE+2)	/* can tell it's bad conversion */
#define CCONV_EOF	(KEY_BASE+3)

/*
 * defs for keypad and function keys...
 */
#define KEY_UP		(KEY_BASE+0x100)
#define KEY_DOWN	(KEY_BASE+0x101)
#define KEY_RIGHT	(KEY_BASE+0x102)
#define KEY_LEFT	(KEY_BASE+0x103)
#define KEY_PGUP	(KEY_BASE+0x104)
#define KEY_PGDN	(KEY_BASE+0x105)
#define KEY_HOME	(KEY_BASE+0x106)
#define KEY_END		(KEY_BASE+0x107)
#define KEY_DEL		(KEY_BASE+0x108)
#define BADESC		(KEY_BASE+0x109)
#define KEY_MOUSE	(KEY_BASE+0x10a)
#define KEY_SCRLUPL	(KEY_BASE+0x10b)
#define KEY_SCRLDNL	(KEY_BASE+0x10c)
#define KEY_SCRLTO	(KEY_BASE+0x10d)
#define KEY_XTERM_MOUSE	(KEY_BASE+0x10e)
#define KEY_DOUBLE_ESC	(KEY_BASE+0x10f)
#define KEY_SWALLOW_Z	(KEY_BASE+0x110)
#define KEY_SWAL_UP	(KEY_BASE+0x111)	/* These four have to be in the same order */
#define KEY_SWAL_DOWN	(KEY_BASE+0x112)	/* as KEY_UP, KEY_DOWN, ...                */
#define KEY_SWAL_RIGHT	(KEY_BASE+0x113)
#define KEY_SWAL_LEFT	(KEY_BASE+0x114)
#define KEY_KERMIT	(KEY_BASE+0x115)
#define KEY_JUNK	(KEY_BASE+0x116)
#define KEY_RESIZE	(KEY_BASE+0x117)
#define CTRL_KEY_UP	(KEY_BASE+0x118)
#define CTRL_KEY_DOWN	(KEY_BASE+0x119)
#define CTRL_KEY_RIGHT	(KEY_BASE+0x11a)
#define CTRL_KEY_LEFT	(KEY_BASE+0x11b)

/*
 * Don't think we are using the fact that this is zero anywhere,
 * but just in case we'll leave it.
 */
#define NO_OP_COMMAND	0x0	/* no-op for short timeouts      */

#define NO_OP_IDLE	(KEY_BASE+0x120)	/* no-op for >25 second timeouts */
#define READY_TO_READ	(KEY_BASE+0x121)
#define BAIL_OUT	(KEY_BASE+0x122)
#define PANIC_NOW	(KEY_BASE+0x123)
#define READ_INTR	(KEY_BASE+0x124)
#define NODATA		(KEY_BASE+0x125)
#define KEY_UTF8	(KEY_BASE+0x126)
#define KEY_UNKNOWN	(KEY_BASE+0x127)
 
/*
 * defines for function keys
 */
#define F1      (KEY_BASE+FUNC+0)      /* Function key one              */
#define F2      (KEY_BASE+FUNC+1)      /* Function key two              */
#define F3      (KEY_BASE+FUNC+2)      /* Function key three            */
#define F4      (KEY_BASE+FUNC+3)      /* Function key four             */
#define F5      (KEY_BASE+FUNC+4)      /* Function key five             */
#define F6      (KEY_BASE+FUNC+5)      /* Function key six              */
#define F7      (KEY_BASE+FUNC+6)      /* Function key seven            */
#define F8      (KEY_BASE+FUNC+7)      /* Function key eight            */
#define F9      (KEY_BASE+FUNC+8)      /* Function key nine             */
#define F10     (KEY_BASE+FUNC+9)      /* Function key ten              */
#define F11     (KEY_BASE+FUNC+0xa)    /* Function key eleven           */
#define F12     (KEY_BASE+FUNC+0xb)    /* Function key twelve           */

/* 1st tier pine function keys */
#define PF1	F1
#define PF2	F2
#define PF3	F3
#define PF4	F4
#define PF5	F5
#define PF6	F6
#define PF7	F7
#define PF8	F8
#define PF9	F9
#define PF10	F10
#define PF11	F11
#define PF12	F12

#define PF2OPF(x)	(x + 0x10)
#define PF2OOPF(x)	(x + 0x20)
#define PF2OOOPF(x)	(x + 0x30)

/* 2nd tier pine function keys */
#define OPF1	PF2OPF(PF1)
#define OPF2	PF2OPF(PF2)
#define OPF3	PF2OPF(PF3)
#define OPF4	PF2OPF(PF4)
#define OPF5	PF2OPF(PF5)
#define OPF6	PF2OPF(PF6)
#define OPF7	PF2OPF(PF7)
#define OPF8	PF2OPF(PF8)
#define OPF9	PF2OPF(PF9)
#define OPF10	PF2OPF(PF10)
#define OPF11	PF2OPF(PF11)
#define OPF12	PF2OPF(PF12)

/* 3rd tier pine function keys */
#define OOPF1	PF2OOPF(PF1)
#define OOPF2	PF2OOPF(PF2)
#define OOPF3	PF2OOPF(PF3)
#define OOPF4	PF2OOPF(PF4)
#define OOPF5	PF2OOPF(PF5)
#define OOPF6	PF2OOPF(PF6)
#define OOPF7	PF2OOPF(PF7)
#define OOPF8	PF2OOPF(PF8)
#define OOPF9	PF2OOPF(PF9)
#define OOPF10	PF2OOPF(PF10)
#define OOPF11	PF2OOPF(PF11)
#define OOPF12	PF2OOPF(PF12)

/* 4th tier pine function keys */
#define OOOPF1	PF2OOOPF(PF1)
#define OOOPF2	PF2OOOPF(PF2)
#define OOOPF3	PF2OOOPF(PF3)
#define OOOPF4	PF2OOOPF(PF4)
#define OOOPF5	PF2OOOPF(PF5)
#define OOOPF6	PF2OOOPF(PF6)
#define OOOPF7	PF2OOOPF(PF7)
#define OOOPF8	PF2OOOPF(PF8)
#define OOOPF9	PF2OOOPF(PF9)
#define OOOPF10	PF2OOOPF(PF10)
#define OOOPF11	PF2OOOPF(PF11)
#define OOOPF12	PF2OOOPF(PF12)

#endif	/* PICO_KEYDEFS_INCLUDED */
