これ、8bitコンピュータ時代のクロスアセンブラが出力していたIntel Hexaフォーマットのダンプリスト(EPROMライター向けの出力フォーマットらしい)を、BASICのPOKE文に展開して出力するという、20〜30年前の仕様のテキスト変換を行うために作ったものです。
CotEditorでオープン中のIntel Hexaのテキストの変換対象行を選択しておいた状態で実行すると、変換したリストを新規書類に出力します。
汎用性は一切ないのですが、実際にさまざまな本を作る際に、こうした「ちょっとしたツール」を作るのと作らないのとでは生産性が段違いです。
ただ、元データと最終成果物を示すと途中のロジックをプログラム側で考えて出力してくれるといいのに、とは思います。
AppleScript名:Intel Hexa to BASIC.scpt |
— – Created by: Takaaki Naganoya – Created on: 2023/01/09 — – Copyright © 2023 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" use scripting additions use framework "Foundation" tell application "CotEditor" tell front document set aaSel to paragraphs of contents of selection end tell end tell set sNum to 100 set allText to "" repeat with i in aaSel set tmpL to "" set j to contents of i set {addrStr, hexList} to procOneLine(j) of me set aStr to retOnLineBasicPoke(addrStr, hexList) of me set allText to allText & ((sNum as string) & " ") & aStr & return set sNum to sNum + 1 end repeat tell application "CotEditor" set newDoc to make new document tell newDoc set contents of it to allText end tell end tell on retOnLineBasicPoke(addrStr, aList) set aStr to "POKE #0, &" & addrStr & ", " repeat with i in aList set j to contents of i set aStr to aStr & "&" & j & ", " end repeat return text 1 thru -3 of aStr end retOnLineBasicPoke on procOneLine(a) set fChar to first character of a if fChar is not equal to ":" then error set byteC to text 2 thru 3 of a set byteNum to retIntFromHexString(byteC) of me set addrStr to text 4 thru 7 of a set hList to {} repeat with i from 10 to (10 + (2 * (byteNum – 1))) by 2 set tmpStr to text i thru (i + 1) of a set the end of hList to tmpStr end repeat return {addrStr, hList} end procOneLine on retIntFromHexString(aHex as string) set {aRes, hexRes} to (current application’s NSScanner’s scannerWithString:aHex)’s scanHexInt:(reference) if aRes = false then return "" –エラーの場合 else return hexRes end if end retIntFromHexString |
More from my site
(Visited 40 times, 1 visits today)