Kho tháng 5/2009

Thứ hai, 01 Tháng sáu năm 2009 06:14:51 ICT

stepping aside


Tác giả: pclouds | Liên kết tĩnh

Thứ sáu, 29 Tháng năm năm 2009 19:47:29 ICT

Cross built gtk+. Finished a task that should have been done 5 months ago. Heh Windows gaim-ers, want to type Vietnamese? ;)


Tác giả: pclouds | Liên kết tĩnh

Thứ sáu, 29 Tháng năm năm 2009 11:00:31 ICT

If I die tomorrow, I'll be alright because I believe, that after we're gone, everything is gone. (Sorry Dream Theater, can't help)


Tác giả: pclouds | Liên kết tĩnh

Thứ năm, 28 Tháng năm năm 2009 18:21:16 ICT

busy cross-compiling... once for all.. gaahhh..


Tác giả: pclouds | Liên kết tĩnh

Thứ ba, 26 Tháng năm năm 2009 19:02:01 ICT

Chẹp, cụ Hải mò ra mình trên Facebook. Chết, chết. Trốn!


Tác giả: pclouds | Liên kết tĩnh

Thứ năm, 21 Tháng năm năm 2009 19:44:52 ICT

56 lines to "scratch my itch" and other ~1000 lines just to prepare for that


Tác giả: pclouds | Liên kết tĩnh

Thứ năm, 21 Tháng năm năm 2009 18:16:01 ICT

should be getting back to chandai soon, oyyy


Tác giả: pclouds | Liên kết tĩnh

Thứ tư, 20 Tháng năm năm 2009 13:09:58 ICT

need some air, getting crazy with these stupid TR/FMT stuff


Tác giả: pclouds | Liên kết tĩnh

Thứ ba, 19 Tháng năm năm 2009 06:11:34 ICT

Thơ thẩn: thân ta lạnh nhưng hồn ta ấm. Thực tế: hai tay tê cứng nhưng lưng chảy mồ hôi.


Tác giả: pclouds | Liên kết tĩnh

Thứ hai, 18 Tháng năm năm 2009 12:24:42 ICT

dayjob has been up to speed again (read: overloaded), given the number of mails I've sent out today.


Tác giả: pclouds | Liên kết tĩnh

Thứ hai, 18 Tháng năm năm 2009 06:01:37 ICT

thở như cái ống khói


Tác giả: pclouds | Liên kết tĩnh

Chủ nhật, 17 Tháng năm năm 2009 06:36:44 ICT

Too lazy to go out biking


Tác giả: pclouds | Liên kết tĩnh

Thứ sáu, 15 Tháng năm năm 2009 07:27:31 ICT

C-u M-x occur, you get occurences within context! # suprises me everyday.


Tác giả: pclouds | Liên kết tĩnh

Chủ nhật, 10 Tháng năm năm 2009 21:40:28 EST

Cygwin và Busybox-w32

Cái sự busybox cho Windows cuối cùng dẫn đến một câu hỏi là: liệu có thể sử dụng rxvt trên Windows (vốn là ứng dụng Cygwin) làm terminal emulator cho busybox (cụ thể là ash và vi) hay không? Để trả lời, cần phải hiểu về cái gọi là tty trên Linux/Unix.

Một mặt, emulator chỉ đơn giản làm nhiệm vụ thông dịch ANSI escape sequence (còn có nhiều tên khác như VT100, VT102... nói chung cũng khác nhau chút đỉnh). Escape sequence là cách để ứng dụng "ra lệnh" cho terminal làm cái gì đó, ví dụ như xoá ô này, chuyển con trỏ đến chỗ này, đổi màu chỗ kia... nói chung là điều khiển phần hiển thị. Phần này cứ ghi thẳng ra stdout là xong.

Mặt khác, ứng dụng còn được quyền điều khiển đầu vào của terminal. Một ví dụ cụ thể là chuyển chế độ nhập của terminal từ dòng sang kí tự. Bình thường, terminal sẽ chờ đến khi nhấn Enter mới chuyển nguyên một hàng cho ứng dụng. Ứng dụng kiểu như shell hoặc vi, sẽ đòi hỏi nhận từng kí tự một, nên phải "ra lệnh" cho terminal. Phần lệnh này không thông qua stdout mà qua hai hàm tcgetattr()tcsetattr(). Đây là chỗ đau đầu vì Windows hoàn toàn không có hai hàm này. Cygwin tự giả lập lại hai hàm này.

Vậy ta đã đến rất rất gần, chỉ cần điều chỉnh đầu vào của terminal, là có thể sử dụng rxvt cho busybox-w32. Tuy gần mà xa, vì tcgetattr()tcsetattr() không xài được nếu không liên kết đến cygwin1.dll. Mà liên kết đến cygwin1.dll là điều không thể.

Xét ở góc độ hệ điều hành, cả cygwin1.dll và msvcrt.dll (hay tính luôn libc nếu thích) cung cấp C API cho ứng dụng, bao gồm các tiện ích khác nhau như file stream, hay file handle table... Đây là những thứ mà hệ điều hành, bất kể Windows hay Linux, không thèm quan tâm. Ở đây chỉ nói file handle table. msvcrt.dll quản lý file handle table theo cách riêng. Mà *@&@#(!!)&! M$ ỷ thế người một nhà, Windows API mà còn có "ưu ái" cho msvcrt.dll, trong STARTUPINFO struct. cygwin1.dll quản lý file handle table cũng kiểu riêng. Thành ra không thể nào một ứng dụng cùng lúc sử dụng cả msvcrt.dll và cygwin1.dll. Làm thế, biết sử dụng open() của cygwin, hay open() của msvcrt?

Rồi, thành ra không thể nào gắn với cygwin1.dll được. Vậy mần sao xài tc[gs]etattr()? Cygwin mô phỏng môi trường Unix, ở đó có những tương tác liên tiến trình, không thể lưu độc lập trong từng ứng dụng được. Ví dụ như tty là "của chung" (ít nhất trên Linux, chỉ có cỡ mấy chục tty trong /dev thôi). Vậy nên phải có một vùng nhớ chung để chia sẻ thông tin dạng này.

Sau một hồi mò vọc mà nguồn Cygwin, cuối cùng cũng tìm ra. Nó được gọi là shared_info trong Cygwin, một vùng nhớ động nằm ở \NameBasedObjects\cygwin1S5\shared.5 (không hoàn toàn đúng như thế, tuỳ phiên bản cygwin). Ở đấy có struct termios, thông tin tty, được thao tác bằng tc[sg]etattr(). Vậy, mò vô đấy, sửa, thế là có thể "liên lạc" được với rxvt.

Cái "phát kiến" này có thể được phát triển thêm thành một thư viện để nói chuyện với ứng dụng Cygwin từ những ứng dụng "phi Cygwin", với điều kiện đừng ai méc Cygwin developer. Chúng nó biết chúng nó quýnh chết!

Nói đi nói lại dài dòng. Túm lại là vi chạy trên Windows! Ờ cần thêm rxvt.exe và cygwin1.dll nữa. Tức! Cái busybox.exe có cỡ 300kb. Cộng luôn rxvt.exe cũng chưa đến 500kb. Thế mà thằng cygwin1.dll một mình nó hết gần 2.5mb. Chỉ muốn nhét thẳng rxvt vô busybox, làm terminal riêng cho busybox. Để vi chạy trên cmd.exe thì đường còn xa.

TB. Nhờ WinObj phát hiện ra thêm tty_list::mutex.0. Vậy là có thể truy cập tty an toàn được rồi. Trời, sao mình lại quay lại thọc ngoáy Windows internal rồi?


Cập nhật 3 lần. Lần cuối: Tue Aug 08 11:22:15+0011 2017

Tác giả: pclouds | Liên kết tĩnh

Thứ bảy, 09 Tháng năm năm 2009 18:21:03 ICT

# shape theming. That may solve Dia's ugly problem. Thinking..


Tác giả: pclouds | Liên kết tĩnh

Thứ bảy, 09 Tháng năm năm 2009 14:04:00 ICT

pushed out cygwin tty support for busybox-w32, but the size of cygwin1.dll makes me want to embed rxvt to busybox-w32 too.


Tác giả: pclouds | Liên kết tĩnh

Thứ bảy, 09 Tháng năm năm 2009 10:11:56 ICT

one step closer to make busybox vi work on Windows


Tác giả: pclouds | Liên kết tĩnh

Thứ sáu, 08 Tháng năm năm 2009 19:04:02 ICT

got access to cygwin termios data from non-cygwin app, time to have some fun


Tác giả: pclouds | Liên kết tĩnh

Thứ hai, 04 Tháng năm năm 2009 13:28:30 ICT

http://ur1.ca/3y0p # for # Now I need another laptop to ssh to my little # to type on it lolz


Tác giả: pclouds | Liên kết tĩnh

Chủ nhật, 03 Tháng năm năm 2009 19:56:50 ICT

Dear Erik, in which stage am I now, infant?


Tác giả: pclouds | Liên kết tĩnh

Thứ bảy, 02 Tháng năm năm 2009 16:36:47 ICT

what the heck, # even has uptime?


Tác giả: pclouds | Liên kết tĩnh

Thứ bảy, 02 Tháng năm năm 2009 14:50:02 ICT

took me a while to figure out where xterm was, so stock n810 is not completely useless as I thought


Tác giả: pclouds | Liên kết tĩnh

Thứ bảy, 02 Tháng năm năm 2009 12:36:46 ICT

got N810, more gadget in pocket, should drop something off, cellphone is always 1st candidate


Tác giả: pclouds | Liên kết tĩnh

Thứ sáu, 01 Tháng năm năm 2009 07:01:58 ICT

running out of space. need a larger portable music player


Tác giả: pclouds | Liên kết tĩnh