我希望能够在我的 iPhone 上模拟一个终端,使用我在真正的 DEC 终端上喜欢的原始图形玩 Nethack 之类的游戏。Nethack 允许为 vt 兼容终端选择 DECgraphics 或为代码页 437 支持选择 IBMGraphics。
我知道这些特殊的图形字符是由发送到终端的字符串生成的(vt100.net 有大量的信息,包括终端手册和测试程序)。我可以接收和解释这些字符串,但我需要能够在 UIView 中重现和显示这些字符。
看起来 kCFStringEncodingMacVT100 和 kCFStringEncodingDOSLatinUS 是解开谜题的关键。这是一些部分代码,显示了我试图将“特殊字符”字形放到 UILabel 上:
UInt8 c = some value...
NSStringEncoding stringEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingMacVT100);
NSData *charData = [NSData dataWithBytes:&c length:1];
NSString *charString = [[NSString alloc] initWithData:charData encoding:stringEncoding];
label.font = [UIFont fontWithName:@"Courier New" size:20.f];
label.text = charString;
我尝试了从 0 到 255 的 c 值。我可以显示从空格到 '~' 的字符,使用此代码之间的所有预期内容,但根本没有角或其他行字符。当没有要显示的字符时,charString 为 nil。
现在我很确定 Courier New TTF 有这些字符 - 在我的 Mac 上,我可以玩 Nethack,终端字体设置为 Courier New,我可以设置 DECgraphics 并且显示正常。
所以问题是:
- 上面的代码有什么问题?
- 有哪些免费提供的等宽 Truetype 字体支持 DEC 特殊字符和/或代码页 437?
- 一旦你确定了那些字形,你如何测试一个 TTF?
- 您如何在 UILabel 或类似文件中显示这些字形?
(我不想使用任何可用的图形图块集,我不喜欢它们。我知道至少有两个免费的 Nethacks 可用,但没有一个具有我想要的简单键盘界面,我发现弹出一个窗口因为一切都非常缓慢和令人沮丧。我知道这不是一个容易的项目。而且我可能想有一天去 Angband。)