1700436850
1700436851
预处理器有很多优点。首先,在实现一种语言时,不会受到现有语法的限制,可以使用完全不同的风格,如各种Troff预处理器。其次,内存很小时,根本没办法在已经很大的程序中加入更多功能,Troff的情况尤其如此。最后,因为预处理器有输出,所以可以在继续传递之前对其进行操作,执行其他类型的数据处理。在文档编制套件中,我经常使用sed脚本等预处理器来修正字符集和间距。克里斯 · 范·维克(Chris Van Wyk)和我写了一些程序,通过修改Troff的输出,在页面传送到设备驱动程序之前,对它进行纵向对齐处理。这些功能无法整合到单一程序,在管道流水线中处理时,就很容易在前面或后面或中间添加新的环节。
1700436852
1700436853
4.与设备无关的Troff
1700436854
1700436855
1700436856
1700436857
1700436858
1700436859
乔·奥桑纳于1977年去世,享年48岁。他的部分遗产是Troff源代码。那近万行难以捉摸的C语言代码,是乔从原本的汇编语言形式手工翻译出来的——缺乏注释,几十个双字母名称的全局变量,以及(见前文关于内存的讨论)各种小技巧,把尽可能多的信息塞进不够多的内存。乔认为,这样做绝对有必要,因为得把Troff的所有功能打包到65 KB中,那是当时我们使用的PDP-11/45上用户程序可用的最大内存。
1700436860
1700436861
我一年多都没去动这些代码,但终于鼓足勇气开始摆弄它。慢慢地、小心翼翼地,我开始了升级。除了缺乏注释和文档,最大的问题是,它极大地依赖于Graphic Systems CAT照排机,而这种机型业已过时。
1700436862
1700436863
最后,我设法找到了所有依赖CAT特殊功能的代码,并换成由字符集、字号、字体和分辨率等排版器特性表驱动的通用代码。我发明了一种排版机描述语言,这样Troff就可以根据特定排版机的能力来产生输出。驱动程序将该输出转换为特定设备所需的输入。这就产生了所谓的与设备无关的版本,我称其为Ditroff[10]。它还使其他文档编制预处理器,特别是Pic,能够利用新排版设备的更高分辨率来绘制线条和图形。
1700436864
1700436865
其中一种设备是摩根泰勒(Mergenthaler)出品的新型排版机Linotron 202。从指标上看,似乎正可取代CAT照排机。它速度快,分辨率高,通过绘图的方式在屏幕上显示字符。它的处理器是Computer Automation出品的标准微型计算机“Naked Mini”。Naked Mini由一个简单的程序控制,类似于我为其他排版机编写的程序。这套设备主要的缺点是价格高昂,在1979年售价5万美元。鉴于我们用旧排版机打出了赫赫战绩,管理层几乎没有经过任何讨论就批准购买新设备。
1700436866
1700436867
Linotron 202一到手,我们就发现它的硬件出乎意料地不可靠;更糟糕的是它的软件。在之后几个月中,摩根泰勒的维修人员几乎每天都要过来,肯·汤普森和乔·康登(图5-8)还开展了对硬件进行逆向工程的壮举。
1700436868
1700436869
1700436870
1700436871
1700436872
图5-8 乔·康登,约1981年(杰勒德·霍尔兹曼供图)
1700436873
1700436874
乔本来是物理学家,但随着兴趣转移,他成了出色的电子电路设计师。他为中心编写了许多用于硬件实验的电路设计工具,并与肯一起设计了Belle国际象棋计算机。他的硬件专业知识对摸透Linotron 202至关重要。
1700436875
1700436876
肯首先为机器上运行的二进制程序编写了反汇编器。(他在某个晚上用几个小时就完成这项工作,而我则回家吃饭,然后回来工作整晚。)
1700436877
1700436878
通过拆解摩根泰勒程序,肯和乔对排版机本身的工作方式有了切身体会。经过几个星期紧张的逆向工程,他们弄清了摩根泰勒的专有字符编码,并编写了新代码,这样我们就可以创造自己的字符,例如,图5-9所示最上端的贝尔系统标志、用于输出棋局和棋盘图的国际象棋字体,以及有多种用途的彼得面容(图5-10)。
1700436879
1700436880
1700436881
1700436882
1700436883
图5-9 记录了与Linotron 202斗智斗勇过程的贝尔实验室备忘录,未正式发布
1700436884
1700436885
1700436886
1700436887
1700436888
图5-10 彼得脸视力表(杰勒德·霍尔兹曼供图)
1700436889
1700436890
肯为摩根泰勒控制器写了B语言解释器,我们则编写B程序来驱动它。有份技术备忘录详细讲述了这个故事。可能出于避免透露摩根泰勒知识产权的考虑,贝尔实验室管理层封存了这份备忘录,但它最终在2013年被公布。图5-9展示的是第一页的部分内容,80-1271-x等不完整的内部备忘录编号表明从未分配过正式编号。
1700436891
1700436892
当202终于运行起来时,其高分辨率使它有可能实现有趣的图效果,包括半色调图像和线图,如图5-9中展示的数字排版机工作流程图。对于后者,我创造了一种名为Pic的语言,可以用文字来描述组织结构图或网络数据包图这样的图形。当然,它的语法部分采用Yacc,词法部分采用Lex。图5-11所示为Pic输入和输出的一个简单例子。
1700436893
1700436894
1700436895
1700436896
1700436897
图5-11 Pic绘图语言(输入和输出)
1700436898
1700436899
5.图书出版
[
上一页 ]
[ :1.70043685e+09 ]
[
下一页 ]