Skip to content

Commit 4b386cc

Browse files
authored
Merge pull request #21 from zao/fix-font-reading
Read font info files incrementally
2 parents 0669d70 + 8fd365f commit 4b386cc

1 file changed

Lines changed: 17 additions & 23 deletions

File tree

engine/render/r_font.cpp

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,22 @@
66

77
#include "r_local.h"
88

9+
#include <fstream>
10+
#include <string>
11+
912
// =======
1013
// Classes
1114
// =======
1215

1316
// Glyph parameters
1417
struct f_glyph_s {
15-
double tcLeft;
16-
double tcRight;
17-
double tcTop;
18-
double tcBottom;
19-
int width;
20-
int spLeft;
21-
int spRight;
18+
double tcLeft = 0.0;
19+
double tcRight = 0.0;
20+
double tcTop = 0.0;
21+
double tcBottom = 0.0;
22+
int width = 0;
23+
int spLeft = 0;
24+
int spRight = 0;
2225
};
2326

2427
// Font height info
@@ -45,27 +48,20 @@ r_font_c::r_font_c(r_renderer_c* renderer, const char* fontName)
4548
// Open info file
4649
char tgfName[260];
4750
sprintf_s(tgfName, 260, "%s.tgf", fileNameBase);
48-
fileInputStream_c tgf;
49-
if (tgf.FileOpen(tgfName, false)) {
51+
std::ifstream tgf(tgfName);
52+
if (!tgf) {
5053
renderer->sys->con->Warning("font \"%s\" not found", fontName);
5154
return;
5255
}
5356

54-
// Read contents of info file
55-
size_t tgfLen = tgf.GetLen();
56-
char* tgfDat = AllocStringLen(tgfLen);
57-
tgf.Read(tgfDat, tgfLen);
58-
tgf.FileClose();
59-
6057
maxHeight = 0;
6158
f_fontHeight_s* fh = NULL;
6259

6360
// Parse info file
64-
char* tk_context;
65-
char* sub = strtok_s(tgfDat, "\n", &tk_context);
66-
do {
61+
std::string sub;
62+
while (std::getline(tgf, sub)) {
6763
int h, x, y, w, sl, sr;
68-
if (sscanf_s(sub, "HEIGHT %u;", &h) == 1) {
64+
if (sscanf_s(sub.c_str(), "HEIGHT %u;", &h) == 1) {
6965
// New height
7066
fh = new f_fontHeight_s;
7167
fontHeights[numFontHeight++] = fh;
@@ -77,7 +73,7 @@ r_font_c::r_font_c(r_renderer_c* renderer, const char* fontName)
7773
maxHeight = h;
7874
}
7975
fh->numGlyph = 0;
80-
} else if (fh && sscanf_s(sub, "GLYPH %u %u %u %d %d;", &x, &y, &w, &sl, &sr) == 5) {
76+
} else if (fh && sscanf_s(sub.c_str(), "GLYPH %u %u %u %d %d;", &x, &y, &w, &sl, &sr) == 5) {
8177
// Add glyph
8278
if (fh->numGlyph >= 128) continue;
8379
f_glyph_s* glyph = &fh->glyphs[fh->numGlyph++];
@@ -89,9 +85,7 @@ r_font_c::r_font_c(r_renderer_c* renderer, const char* fontName)
8985
glyph->spLeft = sl;
9086
glyph->spRight = sr;
9187
}
92-
} while (sub = strtok_s(NULL, "\n", &tk_context));
93-
94-
FreeString(tgfDat);
88+
}
9589

9690
// Generate mapping of text height to font height
9791
fontHeightMap = new int[maxHeight + 1];

0 commit comments

Comments
 (0)