当前位置:网站首页>编译logisim

编译logisim

2022-07-06 16:06:00 zhenggennj

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下编译),编辑框编辑文字时显示也正常了。

结论

  1. 在使用了oracle-jdk后,对编辑框空白边框宽度的更改是成功的,有效的。
  2. 说明default-jdk与oracle-jdk在细节上还是有差异的。

四、其它版本的logisim

访问了debian的package网站,发现建议删除logisim包了,因为原创作者已经在2014年就声明停止维护该软件了,建议使用其它的fork包。在giuhub上还真是找到了很多这样的xxxlogisim或logisimxxx,很多也是昙花一现,很多年未再更新。其中一个logisim-evolution,现在还在更新之中,下载后使用了一下,发现添加了很多74系列的器件。器件外观也有变化,更美观了,但有的封装所占空间比较大,好在下拉菜单里可以选择传统的外观,比较紧凑。还是很好用的,也没有出现属性编辑框获得焦点后文字小得看不清楚的问题了。下载了源代码,在src目录搜索了一下"10, 10, 10, 10",发现还有几项,但字符串输入肯定没问题了,原始版本的bug这么多年迭代了,应该早解决了。

原网站

版权声明
本文为[zhenggennj]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/zhenggennj/p/16451171.html