forked from MattisLind/papertapetext
-
Notifications
You must be signed in to change notification settings - Fork 0
/
papertape.c
127 lines (119 loc) · 4.81 KB
/
papertape.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
char fontA[] = {0xf0, 0x28, 0x28, 0xf0, 0};
char fontB[] = {0xf8, 0xa8, 0xa8, 0x50, 0};
char fontC[] = {0x70, 0x88, 0x88, 0x88, 0};
char fontD[] = {0xf8, 0x88, 0x88, 0x70, 0};
char fontE[] = {0xf8, 0xa8, 0xa8, 0x88, 0};
char fontF[] = {0xf8, 0x28, 0x28, 0x08, 0};
char fontG[] = {0x70, 0x88, 0xa8, 0xc8, 0};
char fontH[] = {0xf8, 0x20, 0x20, 0xf8, 0};
char fontI[] = {0x88, 0xf8, 0x88, 0};
char fontJ[] = {0x40, 0x80, 0x80, 0x78, 0};
char fontK[] = {0xf8, 0x20, 0x50, 0x88, 0};
char fontL[] = {0xf8, 0x80, 0x80, 0x80, 0};
char fontM[] = {0xf8, 0x10, 0x20, 0x10, 0xf8, 0};
char fontN[] = {0xf8, 0x30, 0x60, 0xf8, 0};
char fontO[] = {0x70, 0x88, 0x88, 0x70, 0};
char fontP[] = {0xf8, 0x28, 0x28, 0x10, 0};
char fontQ[] = {0x70, 0x88, 0xc8, 0x70, 0x80, 0};
char fontR[] = {0xf8, 0x28, 0x68, 0x90, 0};
char fontS[] = {0x90, 0xa8, 0xa8, 0x48, 0};
char fontT[] = {0x08, 0x08, 0xf8, 0x08, 0x08, 0};
char fontU[] = {0x78, 0x80, 0x80, 0x78, 0};
char fontV[] = {0x38, 0x40, 0x80, 0x40, 0x38, 0};
char fontW[] = {0xf8, 0x40, 0x20, 0x40, 0xf8, 0};
char fontY[] = {0x08, 0x10, 0xe0, 0x10, 0x08, 0};
char fontX[] = {0x88, 0x50, 0x20, 0x50, 0x88, 0};
char fontZ[] = {0x88, 0xc8, 0xa8, 0x98, 0x88, 0};
char font1[] = {0x90, 0xf8, 0x80, 0};
char font2[] = {0x90, 0xc8, 0xa8, 0x90, 0};
char font3[] = {0x88, 0x88, 0xa8, 0x50, 0};
char font4[] = {0x38, 0x20, 0xf8, 0x20, 0};
char font5[] = {0xb8, 0xa8, 0xa8, 0x48, 0};
char font6[] = {0x70, 0xa8, 0xa8, 0x48, 0};
char font7[] = {0x18, 0xc8, 0x28, 0x18, 0};
char font8[] = {0x50, 0xa8, 0xa8, 0x50, 0};
char font9[] = {0x10, 0xa8, 0xa8, 0x70, 0};
char font0[] = {0x70, 0xa8, 0x98, 0x70, 0};
char fontExclamationPoint[] = {0xb8, 0x00};
char fontDoubleQuotes[] = {0x18, 0x18, 0};
char fontNumberSign[] = {0x50, 0xf8, 0x50,0xf8, 0x50, 0};
char fontDollarSign[] = {0x90, 0xa8, 0xf8, 0x48, 0};
char fontPercentSign[] = {0x98, 0x58, 0x20, 0xd0, 0xc8, 0};
char fontAmpersand[] = {0xd0, 0xa8, 0x58, 0xa0, 0};
char fontSingleQuote[] = {0x18, 0};
char fontClosingParanthesis[] = {0x88, 0x70, 0};
char fontOpeningParanthesis[] = {0x70, 0x88, 0};
char fontAsterisk[] = {0x50, 0x70, 0x50};
char fontPlusSign[] = {0x20, 0x70, 0x20, 0};
char fontComma[] = {0x80, 0x40, 0};
char fontMinusSign[] = {0x20, 0x20, 0x20, 0};
char fontPeriod[] = {0xc0, 0xc0, 0};
char fontSlash[] = {0x80, 0x40, 0x20, 0x10, 0x08, 0};
char fontColon[] = {0x50, 0};
char fontSemicolon[] = {0x80, 0x50, 0};
char fontLessThanSign[] = {0x20, 0x50, 0x88, 0};
char fontEqualSign[] = {0x50, 0x50, 0x50, 0};
char fontGreaterThanSign[] = {0x88, 0x50, 0x20, 0};
char fontQuestionMark[] = {0x08, 0xa8, 0x38, 0};
char fontAtSymbol[] = {0x70, 0x88, 0xa8, 0xd8, 0};
char fontGraveAccent[] = {0x08, 0x10, 0};
char fontOpeningBrace[] = {0x88, 0xf8, 0x20, 0};
char fontVerticalBar[] = {0xf8, 0};
char fontClosingBrace[] = {0x20, 0xf8, 0x88, 0};
char fontUnderscore[] = {0x80, 0x80, 0x80, 0x80, 0};
char fontCircumflex[] = {0x10, 0x08, 0x10, 0};
char fontClosingBracket[] = {0x88, 0x88, 0xf8, 0};
char fontOpeningBracket[] = {0xf8, 0x88, 0x88, 0};
char fontBackslash[] = {0x08, 0x10, 0x20, 0x40, 0x80, 0};
char fontTilde[] = {0x10, 0x08, 0x10, 0x20, 0x40, 0x20, 0};
char * digits[] = {font0, font1, font2, font3, font4, font5, font6, font7, font8, font9, fontColon,
fontSemicolon, fontLessThanSign, fontEqualSign, fontGreaterThanSign, fontQuestionMark };
char * letters[] = {fontA, fontB, fontC, fontD, fontE, fontF, fontG, fontH ,fontI, fontJ, fontK, fontL, fontM, fontN,
fontO, fontP, fontQ, fontR, fontS, fontT, fontU, fontV, fontW, fontX, fontY, fontZ};
char * markers[] = {fontExclamationPoint, fontDoubleQuotes, fontNumberSign, fontDollarSign, fontPercentSign, fontAmpersand, fontSingleQuote,
fontOpeningParanthesis, fontClosingParanthesis, fontAsterisk, fontPlusSign, fontComma, fontMinusSign, fontPeriod, fontSlash};
char * lowBracketsEtc[] = {fontOpeningBracket, fontBackslash, fontClosingBracket, fontCircumflex, fontUnderscore};
char * highBracesEtc[] = {fontOpeningBrace, fontVerticalBar, fontClosingBrace, fontTilde};
int printPaperTapeChar (int ch, int (*putch)(int)) {
char * font;
int i=0;
if (ch>=0x30 && ch <= 0x3f) {
font = digits[ch-0x30];
}
else if (ch >= 0x41 && ch <= 0x5a) {
font = letters[ch-0x41];
}
else if (ch >= 0x61 && ch <= 0x7a) {
font = letters[ch-0x61];
}
else if (ch == 0x20) { // space need to be handled differently since it all 0 bytes.
for (i=0;i<5;i++) {
(*putch)(0);
}
return 1;
}
else if (ch >= 0x21 && ch <= 0x2f) {
font = markers[ch-0x21];
}
else if (ch == 0x40) {
font = fontAtSymbol;
}
else if (ch == 0x60) {
font = fontGraveAccent;
}
else if (ch >= 0x5b && ch <= 0x5f) {
font = lowBracketsEtc[ch-0x5b];
}
else if (ch >= 0x7b && ch <= 0x7e) {
font = highBracesEtc[ch-0x7b];
}
else {
return 0;
}
while (font[i]!=0) {
(*putch)(font[i]);
i++;
}
(*putch)(0);
return 1;
}