【ITニュース解説】Mi propio procesador de textos en ZX Sinclair BASIC
2025年09月17日に「Dev.to」が公開したITニュース「Mi propio procesador de textos en ZX Sinclair BASIC」について初心者にもわかりやすく解説しています。
ITニュース概要
昔のPCでテキストエディタを自作した筆者は、プリンター出力時、画面と異なる桁数で文字が途中で切れる問題に直面した。これを解決するため、単語の途中で改行されないよう自動調整するプログラムをBASICで実装。この工夫により、当時の限られた環境で文章をきれいに印刷できるようになった。
ITニュース解説
昔のコンピューター環境は、今私たちが使っているものとは大きく異なっていた。最新のスマートフォンやパソコンのように、最初から高機能なアプリケーションが多数インストールされているわけではない。その代わりに、多くのユーザーは「BASIC」というシンプルなプログラミング言語を使い、自分でプログラムを記述してやりたいことを実現していた。これは、現在のシステムエンジニアが課題を解決するためにプログラムを書くのと本質的には同じ行為だ。
今回の話は、筆者が若い頃、ZX Spectrum 128kというパソコンで過ごした経験から始まる。筆者はゲームなどを作っていたが、やがて自分の書いた文章を紙に印刷したいという要望を持つようになった。そこで手に入れたのが、ドット(点)の集まりで文字を印刷する「ドットマトリックスプリンター」だ。このプリンターは、当時の多くのプリンターと同じく、文字を80桁の幅で印刷する能力を持っていた。パソコンとプリンターはRS232Cという規格のシリアルポートを通じて接続され、lprintという簡単な命令をBASICプログラムの中で使うことで、画面に表示されている文字列を紙に送り出すことができた。
しかし、ここで一つ大きな問題に直面する。ZX Spectrumの画面は、当時一般的なテレビの制約から、たった32桁の幅しか表示できなかったのだ。一方、プリンターは80桁で印刷しようとする。この桁数の不一致が、印刷結果に不具合をもたらした。具体的には、パソコンの画面上で32桁に収まっていたテキストをそのまま80桁のプリンターで印刷すると、単語が途中で切れてしまうという問題だ。例えば、「information」という一つの単語が、80桁の途中で改行され、「infor」と次の行の「mation」のように分かれて印刷されてしまう。これでは文章が非常に読みにくく、時には意味を誤解してしまう恐れもあった。現代のシステム開発においても、異なるシステム間でデータをやり取りする際に、フォーマットや桁数の違いによって情報が正しく伝わらないといった同様の問題は頻繁に発生する。
この問題を解決するために、筆者は「ワードラップ」という考え方を導入する必要性を感じた。ワードラップとは、行の終わりに単語が来て、その単語が行の幅に収まりきらない場合に、単語全体を次の行に送って改行する機能のことである。この機能がなければ、文字がバラバラになり、読者にストレスを与えてしまう。ワードラップを実現するには、プログラムが「どこで改行するか」を賢く判断する「アルゴリズム」を設計する必要があった。アルゴリズムとは、ある問題を解決するための手順や計算方法を明確に定義したもので、システムエンジニアが日々の仕事で最も重要視する概念の一つだ。
ワードラップを実現するための具体的なアルゴリズムは、次のような考え方に基づいていた。まず、印刷したい文章全体を一つの長い文字列として用意する。次に、その文字列を、一文字ずつ操作しやすいように文字のリスト(配列)に変換する。そして、このリストを先頭から順に走査していく。現在の文字が、指定された桁数(ここではプリンターの80桁)の終わりに近づいてきたら、その位置が単語の途中なのか、それとも単語の区切り(スペースなど)なのかを確認する。もし単語の途中であれば、無理にそこで改行せず、手前の単語の区切りまで遡って、その位置で改行する。改行は、コンピュータに改行を指示する特別な記号である「改行コード」(当時のBASICではchr$(13))を文字列の適切な位置に挿入することで行う。改行コードを挿入したら、次の行の処理を開始するために、現在の位置を指定された桁数分だけ先に進める。この一連の処理を文章の最後まで繰り返すことで、単語が途中で切れることなく、美しい形で文章を整形できるようになる。
このワードラップのロジックは、Pythonのような現代のプログラミング言語でも、そして当時のSinclair BASICでも同様に実装できる。Pythonの例では、文字列を文字のリストに変換し、ループ処理の中で適切な位置を探して改行コード\nを挿入する。Sinclair BASICのコードでも、let COL = 80でプリンターの桁数を設定し、t$(i) = chr$(13)という命令を使って文字列内の指定された位置に改行コードを書き込んでいる。こうした地道な処理を組み合わせることで、最終的にきれいに整形された文章をプリンターで出力することが可能になったのだ。
このプログラムによって、筆者は自分の作成したテキストを、単語の途切れなく80桁できれいに印刷できるようになった。これは、当時の筆者にとって非常に実用的な成果だった。ただし、一つ重要な点があった。それは、画面上では32桁で表示され、印刷では80桁で整形されるため、画面で見たものがそのまま印刷されるわけではないということだ。このような状態を「WYSIWYG(ウィジウィグ:What You See Is What You Get、見たままが得られる)」ではないと表現する。現代のワードプロセッサーでは当たり前の機能だが、当時の限られたコンピューターの性能では、画面表示と印刷結果を完全に一致させるのは非常に困難だったのだ。この筆者の経験は、システムエンジニアを目指す上で大切な教訓を与えてくれる。それは、限られた資源や技術的な制約の中で、目の前の問題をどう解決し、どうすればユーザーにとって価値あるものを提供できるかを考える思考プロセスである。完璧なシステムを一度に作るのは難しいが、問題を特定し、解決策を考案し、それを実現するアルゴリズムを設計し、実装していくという一連のステップこそが、エンジニアリングの基礎となるのだ。現代のソフトウェアが当たり前のように提供している文字の位置揃え(アラインメント)や複雑なレイアウト機能も、かつては誰かが同様の思考と努力を経て実現してきたものである。