10 poin oleh GN⁺ 21 hari lalu | 1 komentar | Bagikan ke WhatsApp
  • Port open-source yang memodernkan framework UI teks Borland era 90-an menjadi lintas platform + Unicode
  • Saat membuat aplikasi terminal, tidak perlu menangani kompatibilitas terminal - berjalan dengan kode yang sama di Linux, Windows, dan DOS
  • Widget TUI seperti jendela overlap yang bisa diubah ukurannya, menu pull-down, dialog, tombol, scrollbar, kotak input, checkbox, radio button sudah tertanam, jadi bisa langsung dipakai tanpa perlu implementasi sendiri
  • Dukungan penuh Unicode UTF-8 — tetap mempertahankan API lama berbasis char, tetapi tetap bisa menangani karakter lebar penuh CJK, karakter gabungan, hingga emoji, dan cukup dengan satu baris moveStr() penanganan scrolling dan pemotongan multibyte dilakukan otomatis
  • Memanfaatkan dukungan UTF-8 setlocale dari Microsoft RTL sehingga kode seperti std::ifstream f("コンピュータ.txt") dapat berjalan apa adanya di Windows
  • Dukungan true color 24-bit — diperluas dari 16 warna lama ke RGB, xterm-256, hingga warna bawaan terminal, dan jika terminal tidak mendukung maka otomatis dikuantisasi ke warna terdekat
  • Mendukung seluruh input/output modern seperti mouse wheel, tombol tengah, triple click, ukuran layar hingga 32767 baris/kolom, dan event resize jendela
  • Integrasi clipboard sistem sudah bawaan: Windows/macOS langsung berfungsi, dan di lingkungan remote SSH pun copy/paste bisa dilakukan lewat X11 forwarding atau escape code OSC 52
  • Kode sumber Turbo Vision dari era Borland C++ lama bisa dibangun apa adanya dengan modifikasi minimal
  • Mendukung sistem build CMake, instalasi selesai hanya dengan satu baris ./vcpkg install tvision via vcpkg, dan jika menambahkan add_subdirectory sebagai submodul CMake maka dependensi otomatis terhubung
  • C++14 atau lebih baru, memerlukan libncursesw / lisensi MIT

1 komentar

 
GN⁺ 21 hari lalu
Pendapat Hacker News
  • Senang sekali melihat repositori ini naik ke front page, dan sekarang saya sedang membuat wrapper sendiri untuk repositori ini
    Saya menjalankan Turbo Vision di macOS di atas .NET, dan rasanya cukup ajaib
    Saya sedang menambahkan API level lebih tinggi, membungkus atau memperbaiki palette API yang sudah cukup kuno, dan juga menambahkan layout
    Masih dikerjakan intensif di repositori privat, dan saya terus mengutak-atiknya sedikit demi sedikit, misalnya hari ini menetapkan palette berdasarkan surface tempat kontrol diletakkan, lalu besok merapikan bagian lain
    Masih ada pekerjaan seperti merapikan layout dan menambahkan kontrol dasar yang menurut standar sekarang terasa kurang
    Saya juga pernah mencoba Terminal.Gui, tapi mungkin karena sedang transisi ke v2, cukup sulit dipakai tanpa bug, dan Claude juga menunjukkan dengan sangat baik hal-hal yang tidak boleh dilakukan saat membuat library TUI tanpa mempertimbangkan terminal sungguhan
    Jadi saya memang sedang berharap ada Turbo Vision versi modern, lalu menemukan repositori ini, dan sangat berterima kasih melihat dukungan Unicode sudah masuk

    • Oxygene adalah bagian dari lini produk Elements milik RemObjects, jadi selain Oxygene yang berakar pada Pascal, Anda bisa mencampur beberapa bahasa populer dan menargetkan Windows, macOS, Linux, Android, dan lainnya
      https://www.remobjects.com/elements/oxygene/
      https://www.remobjects.com/elements/
    • Saya juga pernah mengerjakan port tvision ini, dan setiap kali mencoba framework TUI baru, pada akhirnya saya merasa Turbo Vision tetap lebih baik
      Saya juga sedang membuat wrapper .NET, mungkin progresnya belum sejauh itu, tetapi saya ingin meniru Windows Forms API semirip mungkin sekaligus menambahkan desainer TUI drag-and-drop
      Contohnya ada di sini: https://github.com/brianluft/terminalforms/tree/main/src/TerminalFormsDemo
      Sebagian besar pekerjaan integrasi C++ yang rumit saya tangani di sini: https://github.com/brianluft/terminalforms/tree/main/src/tfcore
      Saya mengekspor fungsi-fungsi C sederhana agar bisa dipanggil lewat P/Invoke, lalu sisi C# bisa lebih fokus pada penataan struktur kelas
      Awalnya saya memaksakan bahwa apa pun yang bisa dilakukan di C++ harus bisa dilakukan juga di C#, tetapi jadinya terlalu rumit, sampai sempat menaruh objek C++ ke dalam buffer C# dengan placement new, nyaris seperti membuat kelas C++ diwarisi dari sisi C#, dan desainnya pun runtuh
      Akhirnya saya beralih ke pendekatan yang lebih langsung, kurang fleksibel tetapi jauh lebih sederhana, dan fleksibilitasnya saya letakkan di sisi C#
      Saya penasaran bagaimana Anda menyusun sistem P/Invoke Anda
    • Menyentuh library TV ini benar-benar menggaruk nostalgia dengan tepat, jadi menyenangkan
      Berkat itu saya jadi tidak sampai melakukan upaya sia-sia seperti membuat aplikasi untuk GEOS atau bergabung dengan tim Hurd beranggotakan satu orang
    • Saya juga ingin mencoba hal yang sama
      Saya sempat memakai Terminal.Gui, tetapi lebih tertarik ke TV sehingga pernah mempertimbangkan membuat wrapper, dan saya benar-benar ingin melihatnya saat sudah dipublikasikan
  • Karier pemrograman saya secara harfiah dimulai dari tempat sampah pada tahun 90-an
    Saya memungut buku Turbo Vision yang dibuang seseorang, lalu langsung jatuh cinta pada TUI kebiruan yang bisa dibuat siapa saja

  • Versi aslinya ada di Turbo Pascal 6, dan port C++ muncul belakangan
    Jadi ini bisa dibilang port modern dari sebuah port
    Borland punya pola serupa pada framework lain; OWL juga awalnya lebih dulu ada di Turbo Pascal for Windows 1.5, dan banyak alat C++ Builder sebenarnya ditulis dengan Delphi
    Object Pascal di Turbo Pascal 5.5, lalu Turbo Vision di versi 6, adalah pengenalan saya ke OOP, dan saya merasa beruntung menapaki jalur itu
    Bahkan di lingkungan seperti MS-DOS pun saya bisa benar-benar belajar keunggulan framework yang dibawa OOP dan Turbo Vision

    • Yang menarik, Free Vision pada satu titik adalah hasil seseorang menerjemahkan secara manual versi C++ yang pernah dirilis ke domain publik kembali ke Object/Free Pascal
    • OWL benar-benar melampaui zamannya
  • Saat Borland merilis Turbo Pascal, Turbo C++, dan TurboVision, rasanya seperti seluruh semesta kemungkinan terbuka lebar
    Performa kompiler juga luar biasa, dan manualnya seperti karya seni; andai saja saya masih menyimpan buku-buku itu
    Ini benar-benar harta budaya

    • Manual-manual itu memang luar biasa
      Pada awal 90-an saya belajar C/C++ hampir sepenuhnya secara otodidak hanya dengan membaca tumpukan buku Borland yang datang bersama Turbo C++, dan sekarang rasanya bahkan sulit membayangkan orang belajar seperti itu hanya dari buku referensi
    • Turbo Vision sudah lama menjadi semacam standar emas bagi saya
      Framework TUI baru selalu terasa seperti ada yang kurang, dan sekarang saya ingin memakainya lagi untuk melihat apakah itu cuma nostalgia atau bukan
      Saya berencana memakainya pada alat berikutnya, dan ingin memberi tepuk tangan besar kepada para pembuatnya
    • Ada masa ketika saya sepenuhnya Borland
      Selain GW-BASIC dan MS-DOS, semuanya Borland: Turbo BASIC, Turbo Pascal, Turbo C++ for MS-DOS and Windows 3.x, Turbo Vision, sampai OWL
      Saya mulai memakai VC++ sekitar versi 5, tetapi MFC selalu terasa terlalu hambar dibandingkan produk-produk Borland
      Bahkan sekarang pun masih jarang ada yang benar-benar menandingi kemampuan RAD C++ Builder, dan .NET juga butuh waktu cukup lama untuk merapikan cerita low-level coding dan AOT ala Delphi
      Menurut saya para pengembang Go, C++, dan Rust seharusnya diberi beberapa salinan Turbo Pascal 7 untuk MS-DOS dan Delphi modern
  • Turbo Vision 2.0 masih cukup praktis sampai sekarang, dan saya benar-benar memakainya untuk pekerjaan prototipe sekitar setahun lalu
    Saya mencoba membuat frontend Turbo Vision untuk debugger LLDB agar berfungsi seperti Turbo Debugger milik Borland, dan sebagian besar berhasil sesuai harapan
    Mengejutkan karena rasanya seperti langsung melanjutkan dari titik saat semuanya berhenti pada 199x, dan saya juga bisa mengompilasi serta menjalankan kode dari 1993 tanpa masalah besar
    Editor internalnya juga punya versi berbasis Scintilla yang lebih baik, jadi ada fitur seperti syntax highlighting, tetapi modifikasi yang ingin saya lakukan tidak berjalan mulus, jadi mungkin saya harus meminta bantuan penulisnya
    Namun, dalam arti dokumentasi sebagai pengetahuan bersama ala masa kini, memang masih kurang, sehingga sulit bertanya ke Stack Overflow atau AI; saya akhirnya harus belajar dari kode contoh dan membaca berulang beberapa buku Turbo Vision seperti cara lama
    Layout manual cukup merepotkan, jadi saya berharap ada auto layout seperti Qt, dan saya juga agak merindukan splitter, meski implementasinya sepertinya tidak sulit
    Hal lain yang mengejutkan adalah TV ternyata cukup kecil dan ringkas. Pada tahun 90-an dulu rasanya sangat besar
    Secara keseluruhan, modernisasinya dilakukan dengan sangat baik, dan saya sangat menyukainya

  • Melihat banyak sekali direktif cmake membuat saya ingin kembali ke masa lalu tanpa alasan yang jelas
    Dulu di Turbo C atau Pascal tinggal tekan F9 lalu langsung jalan
    Di sisi lain, ini juga terasa menunjukkan ketidakmampuan toolchain kita
    Di zaman sekarang seharusnya cukup dengan menunjuk satu kompiler online untuk langsung menjalankannya, atau mengunduh lalu membuka satu folder dan menjalankannya; bukannya berubah jadi semacam ritual

    • Di Unix modern, kompilasi perangkat lunak dulu sempat menjadi masalah yang sudah terpecahkan
      ./configure && make && make install seharusnya tetap menjadi gold standard
  • Ini hanya salah satu dari sekian port/klon Turbo Vision
    Di dunia C++ juga ada ini: https://github.com/kloczek/tvision
    Versi yang masuk ke FreePascal/Lazarus ditulis dalam Pascal, dan ada juga versi Rust yang agak terasa seperti vibe-coded: https://github.com/aovestdipaperino/turbo-vision-4-rust

  • Menjalankannya di terminal memang sedikit menghilangkan sensasi inti dari mouse di layar mode teks aslinya
    Di layar mode teks sungguhan, mouse itu bukan terlihat seperti pointer, melainkan seperti blok kuning yang digerakkan dengan mouse
    Saya penasaran apakah ada yang pernah menjalankannya di mode teks Linux beresolusi tinggi dengan GPM

    • Pada dasarnya itu bukan kuning secara inheren
      Caranya adalah dengan membalik warna sel yang ditimpa, dan karena jendela utama yang memenuhi sebagian besar layar biasanya berwarna biru tua, hasilnya sering tampak seperti blok kuning terang
  • Saya merekomendasikan episode Wookash podcast terbaru tentang Chuck Jazdzewski
    Ia adalah salah satu anggota tim yang membuat Turbo Vision asli, dan banyak cerita tentang ekosistemnya secara keseluruhan juga muncul di sana

  • Saya masih lebih menginginkan Turbo Vision yang asli, yaitu versi Pascal, daripada versi C++
    Versi C++ pada akhirnya terasa lebih seperti hasil pemindahan dari versi Pascal
    Misalnya, di Pascal uses adalah keyword, sedangkan cara meng-include modul dengan #define terasa seperti semacam hack
    Ya, mungkin sekarang itu bukan perbedaan besar

    • Free Vision yang disertakan di Free Pascal pada dasarnya mengisi peran itu
      IDE mode teksnya juga memakai Free Vision
      https://wiki.lazarus.freepascal.org/images/1/19/Userscreen.png
      Hanya saja perbedaan intinya adalah Free Vision dan Turbo Vision memakai tipe object dari era Turbo Pascal 5.5, bukan class seperti di Delphi
      class memudahkan implementasi hal-hal seperti serialisasi otomatis berkat RTTI, sedangkan object tidak punya itu, jadi untuk membedakan tipe yang berbeda saat runtime perlu melakukan serialisasi manual, misalnya dengan mendaftarkan pointer VMT yang berada pada offset tetap di pointer objek
      Free Pascal memang menambahkan beberapa kenyamanan ke object seperti private/protected/public dan property, tetapi Free Vision tidak memakai ekstensi-ekstensi itu karena harus mengimplementasikan API Turbo Vision asli