同時支援新舊版本的 autolisp

emacs org mode 導出原始碼

使用 emacs 的 org mode 可以用源代碼塊 (Structure of Code Blocks ) 導出 Big5 和 Unicode (UTF-8) 二個程式。加上文學編程可以同時編二個程式。再加上可以直接編寫程式的說明文件,所以使用 emacs 的 org-mode 可以一舉三得。

舉例如 autolisp-export-example ,原始碼顯示一次可以導出 org-export-big5.lsporg-export-utf-8.lsp ,其中 org-wxport-big5.lsp 支援 Big-5 碼,而 org-export-utf-8.lsp 支援 UTF-8 碼。我們可以另外寫一個 acaddoc.lsp 來判斷以何時載入適合的程式。例如在程式中判定

(defun load-file-mode ()
  (if (eql "24.1s (LMS Tech)" (getvar "acadver"))
    (load "org-export-utf-8.lsp")
    (load "org-export-big5.lsp"))

其中以 AutoCAD 2022 與 AutoCAD 2017 為例。在 (getvar "acadver") 返回  "24.1s (LMS Tech)" 時是 AutoCAD 2022 的版本,它的 autolisp 支援 UTF-8 版本;如果 (getvar "acadver") 返回 "21.0s (LMS Tech)" 它代表 Autocad 2017 ,其 autolisp 支援 Big-5 碼。如此可以依企業中使用新舊版本的 AutoCAD 時,依狀況載入合適的程式碼。

 

autolisp 青黃交接的時代

 現在的程式交給過去的軟體執行

autolisp 是一個 autocad 長期支援的開發程式,把以前寫過的程式通常可以拿到新版的 autocad 上執行;相對的把現在寫的程式以之前的版本執行應該也沒有什麼問題。但是在 autocad 版本 2020 之後會發現出現一些問題,因為其之後的 autolisp 支援了 Unicode 字碼,而現在的文字編輯器或是 Visual Studio Code 預設的字碼就是 Unicode ,所以也沒有什麼問題。然而在 autocad 2020 之前的 autolisp 只支援 ASCII ,所以用現在的開發工具寫的程式交給以前的版本執行時,會造成亂碼或是無法執行 的問題。

過去的程式交給現在的軟體執行

由於字碼支援了 Unicode 後, (strlen ...) 函數計算字數時,中文字碼計算由每一個中文字 2 字節,改為每一個中文字 1 字節。這造成了有些應用到這個函數的程式獲得的結果與從前的不同。

如何解決 autolisp 中文亂碼的問題

  1. 單一使用支援某一個字碼。設定  lispsys 系統變數為 AutoLISP 原始 (LSP) 檔在儲存並編譯時會使用 ASCII (MBCS) 字元集。)
  2. 使用支援 Unicode 字碼版本的軟體。
  3. 將 autolisp 檔案  .lsp 使用 Big5 字碼用於舊版的 autocad 。例如在程式開頭加上 ;;;; -*- encoding:big5 -*-
    。 

如何解決 strlen 數字數的問題

可以借用 《Autocad/ BricsCAD 的 autolisp 支援了 UTF-8》中提到的 (cs-to-strlen ...)來處理舊的程式,以適應新的變化。

 

各申機械設計工作室; Each Application Mechanical Design Studio 

聯絡方式 

相關資炓

壓力容器設計 各申機械設計工作室

 

精選文章

X2Go 中 Emacs GUI 中的中文輸入

 為何要用 X2Go 連接遠端伺服器? 使用 Debian/Linux 很久了,從接觸 Emacs 作為主要的編輯器之後,它就伴隨著我在工作上解決各稱問題。最近我使用的筆電在過了十年之後到了壽命的終結。而此時剛好接到一個案子要到客戶的公司進行認證會議,急需一個熟悉的作業環境。後來...

熱門文章