懷舊一下 jmcce 1.5 - Linux

Queena avatar
By Queena
at 2014-12-30T10:26

Table of Contents

懷舊一下 ...

jmcce 是一套中文終端機, linux 誕生之後的幾年, 在中文還要修修補補才能使用的年代
, 有好幾套中文終端機, bcs16 ( http://goo.gl/Xspja1 ), chdrv, jmce, zhcon ...
現在己經不太流行了。
ref:http://goo.gl/XiEKt3 (
http://www.linux.org.tw/CLDP/OLD/Chinese-HOWTO-4.html )

若你也經歷過那時期, 應該聽過 jmcce, 我使用過的 linux 中文終端機有 yact,
chdrv, jmce。注意 jmce 和 jmcce 是不同的。 jmcce 則是我最後用過的中文終端機,
也是我覺得最好用的一個。最後一版應該是 jmcce 1.4, 那標題的 jmcce 1.5 是那裡來
的, 當然是我自己修改的 XD

根據這篇:http://goo.gl/gxeq8n (
http://lists.linux.org.tw/pipermail/cle-devel/2002-May/002331.html ) jmcce
1.4 大約是在 2001 左右出現的, 那時候我還向開發者回報一些問題, 很快就得到修正的
版本, 那時候的我還無法參與修改; 十年後 - 2012 年, 我把 jmcce 1.4 rc2 重新修改
, 原有的 autobuild tool script 已經過時, 無法在新版本的 autotool 使用, 這東西
實在煩人, 我只略懂, 不想花時間在上面, 我改為人工手寫 makefile, 至少可以
compile 了, 當然也很容易 cross compile。印象中 jmcce 有 1.4 正式版本, 不過我只
找到 rc2 的版本, 我是從這版本改起。

jmcce 有些程式碼似乎是從 yact 來的, 我看了一下 yact source code, 裡頭有些
code 很雷同, yact 很偉大阿!

對於 opensource 的開發方式並不陌生, 不過我從來沒想過我也可以參與 opensource 開
發。jmcce 成為我的第一次, 儘管她有點過時了, 不過讓死掉的專案復活, 爽度暴增。

為什麼挑上 jmcce? 繪圖模式下的終端機有, fbterm ( http://goo.gl/hfDfM ) ...
fbcon 是由 linux kernel module 提供的, 相容性最好, 不過我不知道能不能顯示多國
語言。

而因為我只喜歡在需要的時候才進入繪圖模式, 使用 svgalib 撰寫的 jmcce 符合這原則
, 不過畢竟是古老的系統, 在 utf8 當道的現今, 她還是只能使用 big5。而使用 linux
framebuffer 的終端機並不受我青睞, 但在非 x86 環境下, 就只能使用 linux
framebuffer。

fbterm 似乎很先進, 有很多功能。jmcce 要做到 fbterm 還有很多程式碼要寫, 但是
jmcce 有著另外的優勢, 就是很多輸入法, 這就是 fbterm 沒有的了。fbterm 有用到
libx86, 這是幹嘛用的? 很神奇, 下一篇再講。

有一個 v86d 就是用 libx86 寫的。我的 fb 測試需要用到它。

NAME
v86d - daemon to run x86 code in an emulated environment

SYNOPSIS
v86d

DESCRIPTION
v86d provides a backend for kernel drivers that need to execute x86 BIOS
code. The
code is executed in a controlled environment and the results are passed back
to the
kernel via the netlink interface.

v86d should NOT be run by the user, the kernel will call it, when it is
needed.

AUTHOR
v86d is written by Michal Januszewski.

This manual page was written by Evgeni Golov , for the Debian
project (but may be used by others).


module uvesafb.ko 會需要 v86d, 真奇怪, kernel module 竟然需要 user mode
daemon??

linux fb test:

測試 fb 是否有驅動起來
fbset -s
open /dev/fb0: No such file or directory


沒看到這字串就是有啟動 framebuffer, 這時可以看看解析度是多少。

在我的 eeepc 901 上測試 linux fb 時, 需要移除 i915 module, 並且安裝 v86d, 再
modprobe uvesafb, 然後使用 fbset 設定解析度為 640X480X256 color (jmcce 在這模
式下才有最正常的畫面)。i915 gpu module 除了補強 x driver 外, 似乎還有著
framebuffer 的功能。

fbset -xres 640 -yres 480 -vxres 640 -vyres 480 -depth 8


也可以單純改顏色為 8bit, jmcce 畫面只會佔用 640x480
fbset -depth 8


若是直接使用 grub vga=769 這參數, 似乎無法使用 fbset 改變解析度。

提供另外的 fb command 作為參考。

hwinfo --framebuffer | grep Mode


linux svgalib test:

在 debian 關閉 linux framebuffer module 才能正常 (使用 uvesafb 則可以執行)。不
保證能在 debian 以外的環境能正常執行。測試時最好不要開啟 framebuffer, 我是把
framebuffer module 刪除。不過在載入 uvesafb 時, svgalib 版本還是可以執行, 但是
顏色有點問題。有問題就別掙扎了, 改用 fb 模式會愉快些, 這不是容易搞定的問題。

我打算用 c++ compiler, 就算不用 c++ 物件導向的功能, 也可以享受 c++ 標準程式庫
帶來的便利性, 是的, jmcce 1.5 已經是 c++ 程式了, .c 結尾的程式名稱其實是 c++
程式, 我懶得改了。爽快的使用 c++ 帶來的語言特性吧!

會重新開發這個程式只是想懷舊一下 svgalib ( http://goo.gl/HjHxtX ) 程式, 意外發
現還看得懂 jmcce 的程式碼, 就順手改了起來, 原本以為只要花點時間改 makefile 會
動就好, 沒想到到會動花了我 3 天時間, 更糟糕的是, 我還愈做愈有興趣 xD。看到
jmcce 成功秀出中文時, 那時的興奮之情到現在都還無法忘記。

20121009 ~ 20121030 這段期間我總共修改了:

build system: manual makefile
pseudo-terminal - use openpty()
remove old chewing chinese input method
add libchewing ( http://goo.gl/tXU0Px ) support
compile by g++4
remove asm function (asm_routine.S)
limit support utf8 chinese
compile linux fb without svgalib
use svgalib gl_xxx function, implement scroll function, display speed faster
than vga_xxx, resolution fixed to 640x480x256 (vga_xxx is 640x480x16)

其實只要修改幾個地方就可以復活, 不過我加入 gl_xxx 系列的繪圖函式, 修改了捲動部
份, 花了一點時間, 原本的 vga_xxx 沒有繼續修正, 不過也不需要了, gl_xxx 快很多。
而組合語言的部份我拿掉了, 這會和 1.9.x 的 svgalib 相衝。

libchewing 已經改為使用 utf8 編碼, 我還特地將 utf8 -> big5, 有些字無法轉換成
big5, 有點蠢阿!

目前能使用 big5 和有限的 utf8 中文編碼, 有限度的支援中文 utf8, 為什麼有限度,
因為我是將 utf8 編碼轉成 big5 在 jmcce 上畫出, 一定會有 utf8 無法轉成 big5 的
中文字, 要整個改版實在困難, 先將就著用吧!按下 ctrl+alt+8 直接切換 big5/utf8,
痛快。

我想如果沒支援 linux framebuffer 和 utf8, 這個中文終端機大概沒人會想用, 畢竟
x 環境和早期相比, 已經進步不少, 沒必要使用 console 中文終端機了。其實我自己也
不想用; 現在頂多拿來上 ptt bbs, 已經勉強可以用酷音輸入; 在 keymap 的這邊似乎還
有點問題, 先到這邊就好了, 我花了很多時間在找資料, 不過這部份資料實在不好找, 期
待有強者改善這部份。暫時就這樣, 在改下去可能會是無底洞。

key function:
ctrl+alt+3 注音
ctrl+alt+7 酷音
ctrl+alt+8 utf8/big5 toggle

這只是個開始, 離能用還遠得很, 我也不見得會繼續完善她, 我的重心還是擺在 simple
os 開發, 希望有其他朋友能一起參與 jmcce。









原本的 svgalib vga_xx function, 捲動速度實在很慢。 解析度: 640x480x16 color。


改用 svgalib gl_xx function, 捲動速度快了不少, 還我本速。 解析度: 640x480x256
color。

捲動處理:
console.c
scroll_down
scroll_up

酷音輸入法 api 使用方式:

探索新酷音輸入法:使用libchewing ( http://goo.gl/dIS6pQ )
libchewing/test/gen_keystroke.c


todo list:

use linux framebuffer more mode, ex: 640X480X24bit color, 1024X768X32bit
color
fixed linux keymap
real utf8 support
freetype2 supoort
tune libchew input method


我希望能完成上述功能, 不過再來的進度不會這麼快, 慢慢來吧!

source code:
https://github.com/descent/jmcce ( http://goo.gl/6kJo4J )

apt-get install libchewing3-dev libsvga1-dev
cd jmcce/src
make vgatest
make
./jmcce


depend library:
libchewing
svgalib
ncurses

有興趣的朋友自己玩玩看, 有編譯上的問題可以問我。執行 jmcce 前可先執行
vgatest, 看看能否正常顯示 640X480X256 的模式。

lfb branch 有個只 support fb 的版本, 不使用 svgalib。

要是你看到 "descent modify jmcce 1.4 rc2" 覺得很不爽, grep VERSION_STRING 改成
你喜歡的字串。

#define VERSION_STRING "descent modify jmcce 1.4 rc2 80x24"


// 本文使用 Blog2BBS 自動將Blog文章轉成縮址的BBS純文字 http://goo.gl/TZ4E17 //
blog 版本
http://descent-incoming.blogspot.tw/2012/11/jmcce-15-0.html

--
Tags: Linux

All Comments

Iris avatar
By Iris
at 2015-01-04T01:21
哇賽~中文的終端機有opensource的喔!我還以為沒有耶 XDD
Ursula avatar
By Ursula
at 2015-01-07T02:41
超棒的~大推
Emma avatar
By Emma
at 2015-01-10T13:17
我目前在debian用jfbterm作為中文的終端機, 還算OK
Brianna avatar
By Brianna
at 2015-01-13T21:28
zhcon/jmcce 還是只有簡中可用
繁中就是在 utf8/big5 切換,不是顯示有問題就是輸入
Zanna avatar
By Zanna
at 2015-01-14T04:13
後存檔會跑掉 (比如用 nano 修改,存檔後會跑掉)
Odelette avatar
By Odelette
at 2015-01-16T00:15
繁中要 utf8 + 輸入 都沒問題的,還沒有人做出來
Ula avatar
By Ula
at 2015-01-17T14:19
還是有人在用中文終端機, 我還以為應該沒人要用這個了
Ula avatar
By Ula
at 2015-01-22T14:11
我需要這個東西 這是一個好消息 要來測試看看 感謝你
Joseph avatar
By Joseph
at 2015-01-25T08:31
fbterm + uim-fep 可以中文輸入,只是用 screen 有小問題
Odelette avatar
By Odelette
at 2015-01-25T21:09
好懷念在knoppix下跑jmcce+liu上ptt的日子,介面好像倚天
Annie avatar
By Annie
at 2015-01-28T19:58
之前也有個亂弄的project http://0rz.tw/ntHBl
Gilbert avatar
By Gilbert
at 2015-01-31T02:21
用起來像這樣 http://imgur.com/TMwVkuh
不過code超醜,最近可能會拿ncurse之類的重寫吧

HackingThursday 固定聚會 (2015-01-01)

Victoria avatar
By Victoria
at 2014-12-29T12:13
通告網址: [http://www.hackingthursday.org/][1] * * * * 時間: 每週四晚上 19:30 至 22:00 ( 熱食供應至 20:00 ) * 地點: 伯朗咖啡 ( 建國店 ) * 地址: 台北市大安區建國南路一段 166 號 2 樓 * 鄰 ...

binary library dependancy

Yedda avatar
By Yedda
at 2014-12-28T17:13
我手上有一個ELF binary (我沒有source可以重編) 他header裡面有要求glibcandgt;2.15,但我機器上只有glibc2.2 有什麼麼辦法便它接受我現在的系統嗎? (看了一下它應該沒有用到新的lib裡的東西,只是編的時候剛好用了新的lib) 我直接把檔案裡的GLIBC_2.xxx ...

html 的 frameset

Hedy avatar
By Hedy
at 2014-12-27T16:52
※ [本文轉錄自 Python 看板 #1KdaG3ud ] 作者: gn00618777 (非常念舊) 看板: Python 標題: [問題] html 的 frameset 時間: Sat Dec 27 13:30:39 2014 ㄧ個 index.html ,裡面有 frameset tag,分成三 ...

Out of memory (已爬文)

Isabella avatar
By Isabella
at 2014-12-27T11:33
想請問各位前輩 我在Linux(2.6.36) 上寫了一個and#34;收UART資料 存到SDand#34;的程式 在測試的時候發現擺了約1天後 就發生out of memory 死機 (確認沒有我的程式 不會out of mmemory死機) 使用過 mtrace 來抓程式碼memory leak 但 ...

請問xrdp編譯的問題

Daniel avatar
By Daniel
at 2014-12-27T11:12
我是使用kali linux但是想在上面裝xrdp 0.6.1 但編譯的時候出現以下訊息,想請問這要如何解? checking for openssl/rc4.h... yes checking security/pam_appl.h usability... yes checking security/p ...