[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[UNIKRAFT PATCH 1/5] include: Provide ANSI control sequence helper



Provide ANSI control sequence helper macros with <uk/plat/console.h>. Those
helpers and definitions can be used by console programs and ANSI console
drivers (e.g., VGA).

Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx>
---
 include/uk/plat/console.h | 65 +++++++++++++++++++++++++++++++++++++--
 1 file changed, 63 insertions(+), 2 deletions(-)

diff --git a/include/uk/plat/console.h b/include/uk/plat/console.h
index 8c496ec4..514e88d6 100644
--- a/include/uk/plat/console.h
+++ b/include/uk/plat/console.h
@@ -29,17 +29,78 @@
  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
- *
- * THIS HEADER MAY NOT BE EXTRACTED OR MODIFIED IN ANY WAY.
  */
 
 #ifndef __UKPLAT_CONSOLE_H__
 #define __UKPLAT_CONSOLE_H__
 
+#include <uk/essentials.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
 
+/**
+ * ANSI control sequence helpers
+ */
+#define __UK_ANSI_INTRO                        "\033["
+#define __UK_ANSI_CMD0(cmd)            __UK_ANSI_INTRO cmd
+#define __UK_ANSI_CMD1(cmd, arg)       __UK_ANSI_INTRO arg cmd
+#define __UK_ANSI_CMD2(cmd, arg0, arg1)        __UK_ANSI_INTRO arg0 ";" arg1 
cmd
+#define UK_ANSI_CLEARLINE              __UK_ANSI_CMD0("K")
+#define UK_ANSI_CLEARSCREEN            __UK_ANSI_CMD1("J", "2")
+#define UK_ANSI_HOME                   __UK_ANSI_CMD0("H")
+#define UK_ANSI_UP(n)                  __UK_ANSI_CMD1("A", STRINGIFY(n))
+#define UK_ANSI_DOWN(n)                        __UK_ANSI_CMD1("B", 
STRINGIFY(n))
+#define UK_ANSI_RIGHT(n)               __UK_ANSI_CMD1("C"; STRINGIFY(n))
+#define UK_ANSI_LEFT(n)                        __UK_ANSI_CMD1("D", 
STRINGIFY(n))
+#define UK_ANSI_POS(l, c)              __UK_ANSI_CMD2("H", STRINGIFY(l), \
+                                                      STRINGIFY(c))
+
+#define __UK_ANSI_MOD1(m)              __UK_ANSI_CMD1("m", m)
+#define __UK_ANSI_MOD2(m0, m1)         __UK_ANSI_CMD2("m", m0, m1)
+#define UK_ANSI_MOD_RESET              __UK_ANSI_MOD1("0")
+#define UK_ANSI_MOD_BOLD               __UK_ANSI_MOD1("1")
+#define UK_ANSI_MOD_UNDERSCORE         __UK_ANSI_MOD1("4")
+#define UK_ANSI_MOD_BLINK              __UK_ANSI_MOD1("5")
+#define UK_ANSI_MOD_INVERT             __UK_ANSI_MOD1("7")
+#define UK_ANSI_MOD_HIDE               __UK_ANSI_MOD1("8")
+
+#define __UK_ANSI_MOD_COLOR_FG0                "30"
+#define __UK_ANSI_MOD_COLOR_FG1                "31"
+#define __UK_ANSI_MOD_COLOR_FG2                "32"
+#define __UK_ANSI_MOD_COLOR_FG3                "33"
+#define __UK_ANSI_MOD_COLOR_FG4                "34"
+#define __UK_ANSI_MOD_COLOR_FG5                "35"
+#define __UK_ANSI_MOD_COLOR_FG6                "36"
+#define __UK_ANSI_MOD_COLOR_FG7                "37"
+#define __UK_ANSI_MOD_COLOR_BG0                "40"
+#define __UK_ANSI_MOD_COLOR_BG1                "41"
+#define __UK_ANSI_MOD_COLOR_BG2                "42"
+#define __UK_ANSI_MOD_COLOR_BG3                "43"
+#define __UK_ANSI_MOD_COLOR_BG4                "44"
+#define __UK_ANSI_MOD_COLOR_BG5                "45"
+#define __UK_ANSI_MOD_COLOR_BG6                "46"
+#define __UK_ANSI_MOD_COLOR_BG7                "47"
+
+#define UK_ANSI_MOD_COLOR(fg, bg)      __UK_ANSI_MOD2( \
+                                        UK_CONCAT(__UK_ANSI_MOD_COLOR_FG, fg),\
+                                        UK_CONCAT(__UK_ANSI_MOD_COLOR_BG, bg))
+#define UK_ANSI_MOD_COLORFG(fg)                __UK_ANSI_MOD1( \
+                                        UK_CONCAT(__UK_ANSI_MOD_COLOR_FG, fg))
+#define UK_ANSI_MOD_COLORBG(bg)                __UK_ANSI_MOD1( \
+                                        UK_CONCAT(__UK_ANSI_MOD_COLOR_BG, bg))
+
+#define UK_ANSI_COLOR_BLACK            0
+#define UK_ANSI_COLOR_RED              1
+#define UK_ANSI_COLOR_GREEN            2
+#define UK_ANSI_COLOR_YELLOW           3
+#define UK_ANSI_COLOR_BLUE             4
+#define UK_ANSI_COLOR_MAGENTA          5
+#define UK_ANSI_COLOR_CYAN             6
+#define UK_ANSI_COLOR_WHITE            7
+
+
 /**
  * Outputs a string to kernel console
  * Note that printing does not stop on null termination
-- 
2.20.1




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.