Diego Cavalcanti
/
JOGO_CORRIDA
projeto de corrida
TermControl.h@0:476c153c1126, 2016-12-10 (annotated)
- Committer:
- diegocavalcanti
- Date:
- Sat Dec 10 13:43:20 2016 +0000
- Revision:
- 0:476c153c1126
projeto
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
diegocavalcanti | 0:476c153c1126 | 1 | #ifndef TERMCONTROL_H |
diegocavalcanti | 0:476c153c1126 | 2 | #define TERMCONTROL_H |
diegocavalcanti | 0:476c153c1126 | 3 | #include "mbed.h" |
diegocavalcanti | 0:476c153c1126 | 4 | #include <string> |
diegocavalcanti | 0:476c153c1126 | 5 | //0x1B is escape |
diegocavalcanti | 0:476c153c1126 | 6 | //#define FLASH_STRING const char * const |
diegocavalcanti | 0:476c153c1126 | 7 | |
diegocavalcanti | 0:476c153c1126 | 8 | /** A simple class for sending VT100 terminal escape codes for handling things such as moving the cursor and clearing the screen |
diegocavalcanti | 0:476c153c1126 | 9 | */ |
diegocavalcanti | 0:476c153c1126 | 10 | class TermControl |
diegocavalcanti | 0:476c153c1126 | 11 | { |
diegocavalcanti | 0:476c153c1126 | 12 | public: |
diegocavalcanti | 0:476c153c1126 | 13 | TermControl() |
diegocavalcanti | 0:476c153c1126 | 14 | { |
diegocavalcanti | 0:476c153c1126 | 15 | |
diegocavalcanti | 0:476c153c1126 | 16 | } |
diegocavalcanti | 0:476c153c1126 | 17 | /** @Param term The stream to send the escape codes to |
diegocavalcanti | 0:476c153c1126 | 18 | */ |
diegocavalcanti | 0:476c153c1126 | 19 | TermControl(Stream* term) |
diegocavalcanti | 0:476c153c1126 | 20 | { |
diegocavalcanti | 0:476c153c1126 | 21 | Term=term; |
diegocavalcanti | 0:476c153c1126 | 22 | } |
diegocavalcanti | 0:476c153c1126 | 23 | void SetTerminal(Stream* term) |
diegocavalcanti | 0:476c153c1126 | 24 | { |
diegocavalcanti | 0:476c153c1126 | 25 | Term=term; |
diegocavalcanti | 0:476c153c1126 | 26 | } |
diegocavalcanti | 0:476c153c1126 | 27 | Stream* GetTerminal() |
diegocavalcanti | 0:476c153c1126 | 28 | { |
diegocavalcanti | 0:476c153c1126 | 29 | return Term; |
diegocavalcanti | 0:476c153c1126 | 30 | } |
diegocavalcanti | 0:476c153c1126 | 31 | //terminal control |
diegocavalcanti | 0:476c153c1126 | 32 | /** Resets the terminal to defaults |
diegocavalcanti | 0:476c153c1126 | 33 | */ |
diegocavalcanti | 0:476c153c1126 | 34 | void Reset() |
diegocavalcanti | 0:476c153c1126 | 35 | { |
diegocavalcanti | 0:476c153c1126 | 36 | Print("\x1Bc"); |
diegocavalcanti | 0:476c153c1126 | 37 | } |
diegocavalcanti | 0:476c153c1126 | 38 | /** Clears the screen |
diegocavalcanti | 0:476c153c1126 | 39 | */ |
diegocavalcanti | 0:476c153c1126 | 40 | void Clear() |
diegocavalcanti | 0:476c153c1126 | 41 | { |
diegocavalcanti | 0:476c153c1126 | 42 | Term->printf("\x1B[2J"); |
diegocavalcanti | 0:476c153c1126 | 43 | } |
diegocavalcanti | 0:476c153c1126 | 44 | /** Prints the specified string at coordinates x,y |
diegocavalcanti | 0:476c153c1126 | 45 | * The cursor position is not changed |
diegocavalcanti | 0:476c153c1126 | 46 | * |
diegocavalcanti | 0:476c153c1126 | 47 | * @param x The X coordinate, or column |
diegocavalcanti | 0:476c153c1126 | 48 | * @param y The Y coordinate, or row |
diegocavalcanti | 0:476c153c1126 | 49 | * @param s The string to print |
diegocavalcanti | 0:476c153c1126 | 50 | */ |
diegocavalcanti | 0:476c153c1126 | 51 | void PrintAt(int x, int y, string s) |
diegocavalcanti | 0:476c153c1126 | 52 | { |
diegocavalcanti | 0:476c153c1126 | 53 | SaveCursor(); |
diegocavalcanti | 0:476c153c1126 | 54 | ResetCursor(); |
diegocavalcanti | 0:476c153c1126 | 55 | SetCursor(x,y); |
diegocavalcanti | 0:476c153c1126 | 56 | Print(s); |
diegocavalcanti | 0:476c153c1126 | 57 | RestoreCursor(); |
diegocavalcanti | 0:476c153c1126 | 58 | } |
diegocavalcanti | 0:476c153c1126 | 59 | //todo void PrintfAt(int x, int y, string f, ...); |
diegocavalcanti | 0:476c153c1126 | 60 | /** Get a character from the terminal stream |
diegocavalcanti | 0:476c153c1126 | 61 | */ |
diegocavalcanti | 0:476c153c1126 | 62 | char GetChar() |
diegocavalcanti | 0:476c153c1126 | 63 | { |
diegocavalcanti | 0:476c153c1126 | 64 | return Term->getc(); |
diegocavalcanti | 0:476c153c1126 | 65 | } |
diegocavalcanti | 0:476c153c1126 | 66 | /** Sets the cursor's position to x,y |
diegocavalcanti | 0:476c153c1126 | 67 | */ |
diegocavalcanti | 0:476c153c1126 | 68 | void SetCursor(int x, int y) |
diegocavalcanti | 0:476c153c1126 | 69 | { |
diegocavalcanti | 0:476c153c1126 | 70 | Term->printf("\x1B[%i;%iH",y,x); |
diegocavalcanti | 0:476c153c1126 | 71 | } |
diegocavalcanti | 0:476c153c1126 | 72 | /** Resets the cursor to (0,0), the top left hand corner of the screen |
diegocavalcanti | 0:476c153c1126 | 73 | */ |
diegocavalcanti | 0:476c153c1126 | 74 | void ResetCursor() |
diegocavalcanti | 0:476c153c1126 | 75 | { |
diegocavalcanti | 0:476c153c1126 | 76 | Term->printf("\x1B[H"); |
diegocavalcanti | 0:476c153c1126 | 77 | } |
diegocavalcanti | 0:476c153c1126 | 78 | /** Saves the cursor on the display-side. It can only remember one cursor position at a time. |
diegocavalcanti | 0:476c153c1126 | 79 | * ie, this can't be nested |
diegocavalcanti | 0:476c153c1126 | 80 | */ |
diegocavalcanti | 0:476c153c1126 | 81 | void SaveCursor() |
diegocavalcanti | 0:476c153c1126 | 82 | { |
diegocavalcanti | 0:476c153c1126 | 83 | Term->printf("\x1B[s"); |
diegocavalcanti | 0:476c153c1126 | 84 | } |
diegocavalcanti | 0:476c153c1126 | 85 | /** Restores the cursor on the display-side. It can only remember and store one cursor position at a time. |
diegocavalcanti | 0:476c153c1126 | 86 | * ie, this can't be nested |
diegocavalcanti | 0:476c153c1126 | 87 | */ |
diegocavalcanti | 0:476c153c1126 | 88 | void RestoreCursor() |
diegocavalcanti | 0:476c153c1126 | 89 | { |
diegocavalcanti | 0:476c153c1126 | 90 | Term->printf("\x1B[u"); |
diegocavalcanti | 0:476c153c1126 | 91 | } |
diegocavalcanti | 0:476c153c1126 | 92 | /** Enables a scrolling "window" at the specified beginning and ending rows |
diegocavalcanti | 0:476c153c1126 | 93 | * @param begin The beginning row |
diegocavalcanti | 0:476c153c1126 | 94 | * @param end The ending row |
diegocavalcanti | 0:476c153c1126 | 95 | */ |
diegocavalcanti | 0:476c153c1126 | 96 | void EnableScrolling(int begin, int end) //begin and end are row numbers |
diegocavalcanti | 0:476c153c1126 | 97 | { |
diegocavalcanti | 0:476c153c1126 | 98 | Term->printf("\x1B[%i;%ir",begin,end); |
diegocavalcanti | 0:476c153c1126 | 99 | } |
diegocavalcanti | 0:476c153c1126 | 100 | /** Scrolls down the scrolling "window" by 1 line. Note, EnableScrolling is required before this can be called |
diegocavalcanti | 0:476c153c1126 | 101 | */ |
diegocavalcanti | 0:476c153c1126 | 102 | void ScrollDown() |
diegocavalcanti | 0:476c153c1126 | 103 | { |
diegocavalcanti | 0:476c153c1126 | 104 | Term->printf("\x1BD"); |
diegocavalcanti | 0:476c153c1126 | 105 | } |
diegocavalcanti | 0:476c153c1126 | 106 | /** Scrolls up the scrolling "window" by 1 line. Note, EnableScrolling is required before this can be called |
diegocavalcanti | 0:476c153c1126 | 107 | */ |
diegocavalcanti | 0:476c153c1126 | 108 | void ScrollUp() |
diegocavalcanti | 0:476c153c1126 | 109 | { |
diegocavalcanti | 0:476c153c1126 | 110 | Term->printf("\x1BM"); |
diegocavalcanti | 0:476c153c1126 | 111 | } |
diegocavalcanti | 0:476c153c1126 | 112 | /** Erases the current line the cursor is on. |
diegocavalcanti | 0:476c153c1126 | 113 | */ |
diegocavalcanti | 0:476c153c1126 | 114 | void EraseLine() |
diegocavalcanti | 0:476c153c1126 | 115 | { |
diegocavalcanti | 0:476c153c1126 | 116 | Term->printf("\x1B[2K"); |
diegocavalcanti | 0:476c153c1126 | 117 | } |
diegocavalcanti | 0:476c153c1126 | 118 | /** Prints the specified string to the string at the current cursor position |
diegocavalcanti | 0:476c153c1126 | 119 | */ |
diegocavalcanti | 0:476c153c1126 | 120 | void Print(string s) |
diegocavalcanti | 0:476c153c1126 | 121 | { |
diegocavalcanti | 0:476c153c1126 | 122 | Term->puts(s.c_str()); |
diegocavalcanti | 0:476c153c1126 | 123 | } |
diegocavalcanti | 0:476c153c1126 | 124 | |
diegocavalcanti | 0:476c153c1126 | 125 | |
diegocavalcanti | 0:476c153c1126 | 126 | private: |
diegocavalcanti | 0:476c153c1126 | 127 | Stream *Term; |
diegocavalcanti | 0:476c153c1126 | 128 | }; |
diegocavalcanti | 0:476c153c1126 | 129 | |
diegocavalcanti | 0:476c153c1126 | 130 | |
diegocavalcanti | 0:476c153c1126 | 131 | |
diegocavalcanti | 0:476c153c1126 | 132 | |
diegocavalcanti | 0:476c153c1126 | 133 | #endif |