Dependencies:   mbed

Committer:
ms523
Date:
Tue Feb 09 15:05:33 2010 +0000
Revision:
0:bd5143ec272b

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ms523 0:bd5143ec272b 1 /* mbed ANSI/VT100 Terminal Library
ms523 0:bd5143ec272b 2 * Copyright (c) 2007-2009 sford
ms523 0:bd5143ec272b 3 * Released under the MIT License: http://mbed.org/license/mit
ms523 0:bd5143ec272b 4 */
ms523 0:bd5143ec272b 5
ms523 0:bd5143ec272b 6 #include "Terminal.h"
ms523 0:bd5143ec272b 7 #include "mbed.h"
ms523 0:bd5143ec272b 8
ms523 0:bd5143ec272b 9 #define ASCII_BLOCK 219
ms523 0:bd5143ec272b 10 #define ASCII_BORDER_H 205
ms523 0:bd5143ec272b 11 #define ASCII_BORDER_V 186
ms523 0:bd5143ec272b 12 #define ASCII_BORDER_TL 201
ms523 0:bd5143ec272b 13 #define ASCII_BORDER_TR 187
ms523 0:bd5143ec272b 14 #define ASCII_BORDER_BL 200
ms523 0:bd5143ec272b 15 #define ASCII_BORDER_BR 188
ms523 0:bd5143ec272b 16 #define WIDTH 30
ms523 0:bd5143ec272b 17
ms523 0:bd5143ec272b 18 Terminal::Terminal(PinName tx, PinName rx) : Serial(tx, rx) {}
ms523 0:bd5143ec272b 19
ms523 0:bd5143ec272b 20 void Terminal::cls() {
ms523 0:bd5143ec272b 21 this->printf("\033[2J");
ms523 0:bd5143ec272b 22 }
ms523 0:bd5143ec272b 23
ms523 0:bd5143ec272b 24 void Terminal::locate(int column, int row) {
ms523 0:bd5143ec272b 25 // Cursor Home <ESC>[{ROW};{COLUMN}H
ms523 0:bd5143ec272b 26 this->printf("\033[%d;%dH", row + 1, column + 1);
ms523 0:bd5143ec272b 27 }
ms523 0:bd5143ec272b 28
ms523 0:bd5143ec272b 29 static int rgb888tobgr111(int colour) {
ms523 0:bd5143ec272b 30 int r = (colour >> 23) & 1;
ms523 0:bd5143ec272b 31 int g = (colour >> 15) & 1;
ms523 0:bd5143ec272b 32 int b = (colour >> 7) & 1;
ms523 0:bd5143ec272b 33 return (b << 2) | (g << 1) | (r << 0);
ms523 0:bd5143ec272b 34 }
ms523 0:bd5143ec272b 35
ms523 0:bd5143ec272b 36 void Terminal::foreground(int colour) {
ms523 0:bd5143ec272b 37 // Set Attribute Mode <ESC>[{n}m
ms523 0:bd5143ec272b 38 // Foreground Colours : 30 + bgr
ms523 0:bd5143ec272b 39 int c = 30 + rgb888tobgr111(colour);
ms523 0:bd5143ec272b 40 this->printf("\033[%dm", c);
ms523 0:bd5143ec272b 41 }
ms523 0:bd5143ec272b 42
ms523 0:bd5143ec272b 43 void Terminal::background(int colour) {
ms523 0:bd5143ec272b 44 // Set Attribute Mode <ESC>[{n}m
ms523 0:bd5143ec272b 45 // Background Colours : 40 + bgr
ms523 0:bd5143ec272b 46 int c = 40 + rgb888tobgr111(colour);
ms523 0:bd5143ec272b 47 this->printf("\033[%dm", c);
ms523 0:bd5143ec272b 48 }
ms523 0:bd5143ec272b 49
ms523 0:bd5143ec272b 50 void Terminal::box(int x, int y, int w, int h) {
ms523 0:bd5143ec272b 51 // corners
ms523 0:bd5143ec272b 52 locate(x, y);
ms523 0:bd5143ec272b 53 putc(ASCII_BORDER_TL);
ms523 0:bd5143ec272b 54 locate(x + w - 1, y);
ms523 0:bd5143ec272b 55 putc(ASCII_BORDER_TR);
ms523 0:bd5143ec272b 56 locate(x, y + h - 1);
ms523 0:bd5143ec272b 57 putc(ASCII_BORDER_BL);
ms523 0:bd5143ec272b 58 locate(x + w - 1, y + h - 1);
ms523 0:bd5143ec272b 59 putc(ASCII_BORDER_BR);
ms523 0:bd5143ec272b 60
ms523 0:bd5143ec272b 61 // top
ms523 0:bd5143ec272b 62 locate(x + 1, y);
ms523 0:bd5143ec272b 63 for(int i=0; i<(w-2); i++){
ms523 0:bd5143ec272b 64 putc(ASCII_BORDER_H);
ms523 0:bd5143ec272b 65 }
ms523 0:bd5143ec272b 66
ms523 0:bd5143ec272b 67 // bottom
ms523 0:bd5143ec272b 68 locate(x + 1, y + h - 1);
ms523 0:bd5143ec272b 69 for(int i=0; i<(w-2); i++){
ms523 0:bd5143ec272b 70 putc(ASCII_BORDER_H);
ms523 0:bd5143ec272b 71 }
ms523 0:bd5143ec272b 72
ms523 0:bd5143ec272b 73 // left
ms523 0:bd5143ec272b 74 locate(x, y + 1);
ms523 0:bd5143ec272b 75 for(int i=1; i<(h-1); i++){
ms523 0:bd5143ec272b 76 putc(ASCII_BORDER_V);
ms523 0:bd5143ec272b 77 printf("\n");
ms523 0:bd5143ec272b 78 putc(0x08);
ms523 0:bd5143ec272b 79 }
ms523 0:bd5143ec272b 80
ms523 0:bd5143ec272b 81 // right
ms523 0:bd5143ec272b 82 locate(x + w - 1, y + 1);
ms523 0:bd5143ec272b 83 for(int i=1; i<(h-1); i++){
ms523 0:bd5143ec272b 84 putc(ASCII_BORDER_V);
ms523 0:bd5143ec272b 85 printf("\n");
ms523 0:bd5143ec272b 86 putc(0x08);
ms523 0:bd5143ec272b 87 }
ms523 0:bd5143ec272b 88 }
ms523 0:bd5143ec272b 89
ms523 0:bd5143ec272b 90