作者: 一了 <[email protected]> 日期: 1999-11-15 北京左家庄, 2026-10-10 抄录 一九九九年冬天,我写了一个给别人装程序的程序。装的不是 Windows,是我自己写的那些小程序。 那几年把软件交出去,是拿软盘拷的。一张拷,拷完还得教人家:盘插进去、建目录、把文件拖进去。拷十个人就要教十遍,我实在烦了,就想着写个东西,让它自己解包、自己建目录。于是有了 BUILD,有了 INSTALL,中间再夹一个 COMPRESS。 三个程序都是 C 写的,用 Borland 编。有一条死规矩:非 COMPACT 模式不可。文件缓冲一次要 32K,一口气开两个就是 64K,small 模式的堆里塞不下,large 模式的指针又嫌大,只有 compact 刚刚好。BUILD 把要发的文件一个一个读进来,数一遍每个字节出现多少回,建一棵 Huffman 树,把树写进归档,再一位一位往外吐。INSTALL 反过来,先把树读出来,再一位一位把文件吐回硬盘。 (吐槽:为了省那么点空间,Huffman 的代码我前后写了三遍,Huffman1、Huffman2、Huffman3,压一遍、解一遍,第三遍是重写的。前两遍舍不得删,就那么并排摆着,权当日记。) 最得意的还是防盗版那一段。拿 INT 21h 的 6900h 取当前盘的卷序列号,BUILD 的时候写进归档头,前头再压四个字节 Zwd 加个空格;INSTALL 装的时候再取一次比对,对不上就打一行 Invalid Copy Software. 退出。这样一来,我编的包只认我这台机器。后来自己换了个硬盘,自己编的程序反倒自己装不上,只好回去把那一行改掉——防盗版防到了自己头上。 这几个文件加起来两千多行,压缩、解压、建树、位运算,写得不算好看,倒是能跑。它后来也没怎么出去见过人,一直躺在软盘里。今天翻出来,就当把那年的冬天也翻出来了。