Dependents:
INS_LAB_2_Pot
TextDisplay.cpp@0:990d5eec2ef6, 2015-02-26 (annotated)
- Committer:
- askksa12543
- Date:
- Thu Feb 26 14:52:52 2015 +0000
- Revision:
- 0:990d5eec2ef6
Initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
askksa12543 |
0:990d5eec2ef6
|
1
|
/* mbed TextDisplay Display Library Base Class
|
askksa12543 |
0:990d5eec2ef6
|
2
|
* Copyright (c) 2007-2009 sford
|
askksa12543 |
0:990d5eec2ef6
|
3
|
* Released under the MIT License: http://mbed.org/license/mit
|
askksa12543 |
0:990d5eec2ef6
|
4
|
*/
|
askksa12543 |
0:990d5eec2ef6
|
5
|
|
askksa12543 |
0:990d5eec2ef6
|
6
|
#include "TextDisplay.h"
|
askksa12543 |
0:990d5eec2ef6
|
7
|
|
askksa12543 |
0:990d5eec2ef6
|
8
|
TextDisplay::TextDisplay(const char *name) : Stream(name){
|
askksa12543 |
0:990d5eec2ef6
|
9
|
_row = 0;
|
askksa12543 |
0:990d5eec2ef6
|
10
|
_column = 0;
|
askksa12543 |
0:990d5eec2ef6
|
11
|
if (name == NULL) {
|
askksa12543 |
0:990d5eec2ef6
|
12
|
_path = NULL;
|
askksa12543 |
0:990d5eec2ef6
|
13
|
} else {
|
askksa12543 |
0:990d5eec2ef6
|
14
|
_path = new char[strlen(name) + 2];
|
askksa12543 |
0:990d5eec2ef6
|
15
|
sprintf(_path, "/%s", name);
|
askksa12543 |
0:990d5eec2ef6
|
16
|
}
|
askksa12543 |
0:990d5eec2ef6
|
17
|
}
|
askksa12543 |
0:990d5eec2ef6
|
18
|
|
askksa12543 |
0:990d5eec2ef6
|
19
|
int TextDisplay::_putc(int value) {
|
askksa12543 |
0:990d5eec2ef6
|
20
|
if(value == '\n') {
|
askksa12543 |
0:990d5eec2ef6
|
21
|
_column = 0;
|
askksa12543 |
0:990d5eec2ef6
|
22
|
_row++;
|
askksa12543 |
0:990d5eec2ef6
|
23
|
if(_row >= rows()) {
|
askksa12543 |
0:990d5eec2ef6
|
24
|
_row = 0;
|
askksa12543 |
0:990d5eec2ef6
|
25
|
}
|
askksa12543 |
0:990d5eec2ef6
|
26
|
} else {
|
askksa12543 |
0:990d5eec2ef6
|
27
|
character(_column, _row, value);
|
askksa12543 |
0:990d5eec2ef6
|
28
|
_column++;
|
askksa12543 |
0:990d5eec2ef6
|
29
|
if(_column >= columns()) {
|
askksa12543 |
0:990d5eec2ef6
|
30
|
_column = 0;
|
askksa12543 |
0:990d5eec2ef6
|
31
|
_row++;
|
askksa12543 |
0:990d5eec2ef6
|
32
|
if(_row >= rows()) {
|
askksa12543 |
0:990d5eec2ef6
|
33
|
_row = 0;
|
askksa12543 |
0:990d5eec2ef6
|
34
|
}
|
askksa12543 |
0:990d5eec2ef6
|
35
|
}
|
askksa12543 |
0:990d5eec2ef6
|
36
|
}
|
askksa12543 |
0:990d5eec2ef6
|
37
|
return value;
|
askksa12543 |
0:990d5eec2ef6
|
38
|
}
|
askksa12543 |
0:990d5eec2ef6
|
39
|
|
askksa12543 |
0:990d5eec2ef6
|
40
|
// crude cls implementation, should generally be overwritten in derived class
|
askksa12543 |
0:990d5eec2ef6
|
41
|
void TextDisplay::cls() {
|
askksa12543 |
0:990d5eec2ef6
|
42
|
locate(0, 0);
|
askksa12543 |
0:990d5eec2ef6
|
43
|
for(int i=0; i<columns()*rows(); i++) {
|
askksa12543 |
0:990d5eec2ef6
|
44
|
putc(' ');
|
askksa12543 |
0:990d5eec2ef6
|
45
|
}
|
askksa12543 |
0:990d5eec2ef6
|
46
|
}
|
askksa12543 |
0:990d5eec2ef6
|
47
|
|
askksa12543 |
0:990d5eec2ef6
|
48
|
void TextDisplay::locate(int column, int row) {
|
askksa12543 |
0:990d5eec2ef6
|
49
|
_column = column;
|
askksa12543 |
0:990d5eec2ef6
|
50
|
_row = row;
|
askksa12543 |
0:990d5eec2ef6
|
51
|
}
|
askksa12543 |
0:990d5eec2ef6
|
52
|
|
askksa12543 |
0:990d5eec2ef6
|
53
|
int TextDisplay::_getc() {
|
askksa12543 |
0:990d5eec2ef6
|
54
|
return -1;
|
askksa12543 |
0:990d5eec2ef6
|
55
|
}
|
askksa12543 |
0:990d5eec2ef6
|
56
|
|
askksa12543 |
0:990d5eec2ef6
|
57
|
void TextDisplay::foreground(uint16_t colour) {
|
askksa12543 |
0:990d5eec2ef6
|
58
|
_foreground = colour;
|
askksa12543 |
0:990d5eec2ef6
|
59
|
}
|
askksa12543 |
0:990d5eec2ef6
|
60
|
|
askksa12543 |
0:990d5eec2ef6
|
61
|
void TextDisplay::background(uint16_t colour) {
|
askksa12543 |
0:990d5eec2ef6
|
62
|
_background = colour;
|
askksa12543 |
0:990d5eec2ef6
|
63
|
}
|
askksa12543 |
0:990d5eec2ef6
|
64
|
|
askksa12543 |
0:990d5eec2ef6
|
65
|
bool TextDisplay::claim (FILE *stream) {
|
askksa12543 |
0:990d5eec2ef6
|
66
|
if ( _path == NULL) {
|
askksa12543 |
0:990d5eec2ef6
|
67
|
fprintf(stderr, "claim requires a name to be given in the instantioator of the TextDisplay instance!\r\n");
|
askksa12543 |
0:990d5eec2ef6
|
68
|
return false;
|
askksa12543 |
0:990d5eec2ef6
|
69
|
}
|
askksa12543 |
0:990d5eec2ef6
|
70
|
if (freopen(_path, "w", stream) == NULL) {
|
askksa12543 |
0:990d5eec2ef6
|
71
|
// Failed, should not happen
|
askksa12543 |
0:990d5eec2ef6
|
72
|
return false;
|
askksa12543 |
0:990d5eec2ef6
|
73
|
}
|
askksa12543 |
0:990d5eec2ef6
|
74
|
// make sure we use line buffering
|
askksa12543 |
0:990d5eec2ef6
|
75
|
setvbuf(stdout, NULL, _IOLBF, columns());
|
askksa12543 |
0:990d5eec2ef6
|
76
|
return true;
|
askksa12543 |
0:990d5eec2ef6
|
77
|
}
|