title: 编译logisim
使用logisim的过程中发现,修改器件的Label时编辑框中文字变成太小,根本看不清。下载源代码后经一番研究,发现编辑框的EmptyBorder设置是(10,10,10,10),占得空间太多,给文字留下的空间太少,所以显示的文字根本看不清,需要将空白边框设置为(1,1,1,1),因此需要重新编译源代码。
一、jdk-1.5.0
logisim软件是基于jdk-1.5.0开发的,因此需要使用该版本jdk进行编译。
1. 下载
下载链接jdk-1.5.0
选择下载文件jdk1.5.0_22.bin下载,然后将其改成可执行文件:
chmod a+x jdk1.5.0_22.bin
运行之,将得到一个目录jdk1.5.0_22,将该目录复制到/usr/lib/jvm
sudo cp jdk1.5.0_22/ /usr/lib/jvm/
2. 改名
创建一个与apt安装的包类似的名称
cd /usr/lib/jvm
sudo ln -s java-1.5.0-oracle-amd64 jdk1.5.0_22
3. 创建替代
sudo update-alternative --install /usr/bin/java java /usr/lib/jvm/java-1.5.0-oracle-amd64/bin/java --slave /usr/share/man/man1/java.1.gz java.1.gz /usr/lib/jvm/java-1.5.0-oracle-amd64/man/man1/java.1
sudo update-alternative --install /usr/bin/javac javac /usr/lib/jvm/java-1.5.0-oracle-amd64/bin/javac --slave /usr/share/man/man1/javac.1.gz javac.1.gz /usr/lib/jvm/java-1.5.0-oracle-amd64/man/man1/javac.1
sudo update-alternative --install /usr/bin/jar jar /usr/lib/jvm/java-1.5.0-oracle-amd64/bin/jar --slave /usr/share/man/man1/jar.1.gz jar.1.gz /usr/lib/jvm/java-1.5.0-oracle-amd64/man/man1/jar.1
4.配置替代
利用下面命令将jdk配置为jdk-1.5.0版本。
sudo update-alternatives --config java
sudo update-alternatives --config javac
sudo update-alternatives --config jar
二、logisim
1. 下载源代码
下载链接:logisim
2. 解压
unzip circuit-code-r256-trunk.zip
将得到同名的circuit-code-r256-trunk目录。
3. 创建编译目录
在解压得到的目录中创建build目录。
mkdir circuit-code-r256-trunk/build
4. 修改源程序
(1)bash脚本
# src_patch.sh,与circuit-code-r256-trunk在同一级目录
#python脚本中"i is 1"是语法错误,必须改成"i == 1"
sed -i -e "s/i is 1/i == 1/g" scripts/create-jar.py
grep "i == 1" scripts/create-jar.py
# 将输入框的EmptyBorder从10改成1,就能给文字显示腾出空间了
find . -name "*.java" -exec sed -i -e "s/10, 10, 10, 10/1, 1, 1, 1/g" {} \;
find . -name "*.java" -exec grep "EmptyBorder" {} \;
# 这个文件有UTF8的BOM头,需要删除,办法是将第1行开头两个字符"/*"替换成"\n/*",
# 即在最前面加一换行符,然后删除第1行。
sed -i -e "1s/\/\*/\n\/\*/g" ./src/com/cburch/draw/shapes/CurveUtil.java
sed -i 1d ./src/com/cburch/draw/shapes/CurveUtil.java
hexdump -C ./src/com/cburch/draw/shapes/CurveUtil.java | head -n 3
(2)执行脚本
$ cd build
$ bash ../src_patch.sh
5. 编译
cd build
python3 ../scripts/create-jar.py
在build目录得到一个编译好了的jar,临时文件已经被删除。
6. 测试
- 在jdk1.5.0环境下
- 新编译的logisim在编辑框获得输入焦点时英文字符串的显示是正常了,不再小得看不清了。
- 但中文字符串显示不出来,每个汉字只给了一个虚框。
- 将locale切换到en_US.UTF-8环境,然后再编译生成一个版本,然后运行,发现情况一样,也是显示不出汉字;将locale切换到zh_CN.UTF-8环境,情况一样。
- apt安装的logisim能看到汉字,但就是编辑框获得输入焦点时文字显示不正常,字太小,根本看不清。
- 切换到openJDK的default-jdk环境
- 两个新编译的应用程序都能显示汉字了,但编辑框获得输入焦点时字符串显示不正常,小得看不清。
- apt安装的logisim也然。
三、更换jdk
给人的感觉是不同的JDK,显示效果有差别。到oracle网站下载了jdk-18_linux-x64_bin.deb,安装之:
dpkg -i jkd-18_linux-x64_bin.deb
用命令update-alternate --config java
发现没有加入到alternate系统中。检查安装包列表,安装在/usr/lib/jvm/jdk_18中了,为该版本建立alternate档案,并切换到该版本。
- 运行apt安装的logisim软件,编辑框编辑文字时依旧小得看不清
- 运行自己编译的logisim_en(在en_US.UTF-8 locale下编译),编辑框编辑文字时显示正常了
- 运行logisim_zh(在zh_CN.UTF-8 locale下编译),编辑框编辑文字时显示也正常了。
结论
- 在使用了oracle-jdk后,对编辑框空白边框宽度的更改是成功的,有效的。
- 说明default-jdk与oracle-jdk在细节上还是有差异的。
四、其它版本的logisim
访问了debian的package网站,发现建议删除logisim包了,因为原创作者已经在2014年就声明停止维护该软件了,建议使用其它的fork包。在giuhub上还真是找到了很多这样的xxxlogisim或logisimxxx,很多也是昙花一现,很多年未再更新。其中一个logisim-evolution,现在还在更新之中,下载后使用了一下,发现添加了很多74系列的器件。器件外观也有变化,更美观了,但有的封装所占空间比较大,好在下拉菜单里可以选择传统的外观,比较紧凑。还是很好用的,也没有出现属性编辑框获得焦点后文字小得看不清楚的问题了。下载了源代码,在src目录搜索了一下"10, 10, 10, 10",发现还有几项,但字符串输入肯定没问题了,原始版本的bug这么多年迭代了,应该早解决了。