リメイクするために、昔書いたBASICのコードを見ているのですが
今ではとても信じられないコーディングスタイルです。
本当に最初は、M-BASICというやつで書いてました。
初代のLINEを作ったのは、1993年のことらしいです。
BASICには「行番号」という概念があって、プログラムの実行先を
ジャンプさせるのに、この行番号を指定するわけですね。
例えば、if文で条件分岐したいとき、
真なら300行へ、偽なら500行へ、とやるわけです。
ところが行番号って、途中にプログラムを追加すると変わります。
そうすると、ジャンプ先も変わってしまうので、プログラムに
追加があるたびにrename(だったと思う)というコマンドを入力して、
行番号の整合性を取らないといけないのです。
やがて時代は変わり、1997年、Windowsで動くF-BASICというのに
乗り換えたのですが、F-BASICは行番号の概念がないので
M-BASICのコードをそのまま持ってきても、動きませんでした。
ジャンプ先を指定するためには、ラベルを定義して、
そのラベル名で指定しないといけません。
で、普通ラベル名には、意味のある英単語を使って書きます。
例えば、フレームを描くサブルーチンを作る場合は、
「*DRAWFRAME」みたいな、分かりやすい名前を付けてあげます。
ところが当時の私は、行番号のしきたりをそのまま守りたいがために
ラベル名に、旧行番号を使っていたのです。
「goto *1960」のような具合に。
そこだけ見たら、何をするための goto なのか全く意味不明です。
でもこの点については、当時の自分でもいくつかは改善をしていて、
意味のある名前でラベルを付けていたところも、若干ありました。
驚くべきところは他にもあります。
まず、1行に複数の命令を書くのは、普通はやらないんですが、
当時は行数を節約したくて、ぎゅうぎゅうに詰めて書いてます。
それから、BASICは全てグローバル変数なんですけども、
変数名が極端に短くて、すごいです。
普通は、名前がバッティングしないように工夫するんですが
その工夫が、微塵も見られません(笑)。
特に、データを継続的に使うと思われる配列の名前は、こんな感じで
dim D$(N),M$(7,4),MR(7),SC(N),SP(N),AC(N),WO(N),ST(N),DA$(N),SKL(6)
dim DA(N),AVG(N),CL(N),TI$(N),TI(N),NAM$(N),SK$(6),TW(N)
dim X(N),T(N),G(N),LOS(5)
AVG は、何となくアベレージだということは分かりますが、
その他の配列は、用途不明です。
これを作っていた当時は、短い名前でも用途をちゃんと理解しながら
作っていたんでしょうね。今では本当に信じられません。
それから、突然意味不明の式が出てきます。
K$=K$+chr$(asc(mid$(D$,J,1))-((J*17*((I mod 7)+1) mod (7+int(I/13)))+15))
関数を多彩に駆使してますが、
一体何がしたかったんですかねぇ・・・
中には、なるほどと思えるのもあって、
for I=1 to L-1:J=I+1+(I and 1)
J = 3, 3, 5, 5, 7, 7, ... という数列を作りたかったようです。
こんな感じなので、解読するには時間がかかりそうです(笑)
でも、リメイクに必要なところだけを解読して、
1から作ってしまう方が早そうですね。こうなるともはや。
[3]そーれー
忘れられない一年ですよ。
来年もよろしくお願いいたします。
どうぞよいお年を
[2]Nontan
2009年がらむてがさんにとって素晴らしい一年となりますように
[1]くろ
年末年始は冷えるらしいので、暖かくしてお出かけくださいね!
新年もよろしくお願いします