懐かしいので

中学生の頃に書いたコードを晒してみます。よく残ってたなあ……。SAPPとはこんなプリプロセッサだ!

/* PC-98用マウスドライバーのクライアント */

-- common

- MouDrive.ra
.code
#MouseDriver(int M0,int M1,int M2,int M3)
{
	#<SI;
	SI = M0; AX = *2 SI; SI = M1; BX = *2 SI;
	SI = M2; CX = *2 SI; SI = M3; DX = *2 SI;
	int 33h;
	SI = M0; *2 SI = AX; SI = M1; *2 SI = BX;
	SI = M2; *2 SI = CX; SI = M3; *2 SI = DX;
}

#MouseDriverES(int M0,int M1,int M2,int M3,int M4)
{
	#<SI,ES; SI = M4; AX = *2 SI; ES = AX;
	SI = M0; AX = *2 SI; SI = M1; BX = *2 SI;
	SI = M2; CX = *2 SI; SI = M3; DX = *2 SI;
	int 33h;
	SI = M0; *2 SI = AX; SI = M1; *2 SI = BX;
	SI = M2; *2 SI = CX; SI = M3; *2 SI = DX;
}
end

- MouReady.ra
/*
	0 - ドライバが用意されていない
	1 - MS
	2 - NEC
*/
.code
int Mouse_drv = 0;

#MouseReady()
{
	AX = Mouse_drv; return( AX != 0 );
	
	AX = 0; BX = 0; int 33h;
	return( AX == 0 );
	if( BX != 0 ){
		AX = 1;
	}else{
		AX = 2;
	}
	//↑MSドライバはBXに2(ボタン個数)を返す事から推定
	//もしNECドライバが同じ動作をするようになればおしめーだ(~_~)
	Mouse_drv = AX;
}
end

/*############################# 実態 #############################*/
-- common
extern MouseReady();

- MouBtn.ra
.code

#MouseButton()
int B;
{
	MouseReady(); return( AX == 0 );
	B = 0;
	////////マウス
	if( AX == 1 ){
		AX = 3; int 33h;
		if( BX & 1 ){or B, 1;}
		if( BX & 2 ){or B, 2;}
	}else{
		AX = 3; int 33h;
		if( AX != 0 ){or B, 1;}
		if( BX != 0 ){or B, 2;}
	}
	AX = B;
}
end

- MouDis.ra
.code

#MouseDistance(int pX, int pY)
{
	MouseReady(); return( AX == 0 );
	AX = 11; int 33h;
	BX = pX; [BX] = CX;
	BX = pY; [BX] = DX;
}
end

- MouSpeed.ra
.code

#MouseSpeed(int X, int Y)
{
	return( X <- 1 );
	return( Y <- 1 );
	MouseReady(); return( AX == 0 );
	AX = 15; CX = X; DX = Y; int 33h;
}
end

- MouLocat.ra
.code

#MouseLocate(int X, int Y)
{
	MouseReady(); return( AX == 0 );
	AX = 4; CX = X; DX = Y; int 33h;
}
end

なんかえらい筋の悪い気もするが……見逃して。なんせ三日前どころか(ry
SAPPは、たしか後のほうになると、classすら作れるようになっていたと思います。
段々思い出してきた。"-"で始まってる行は、プリプロセッサプリプロセッサが切り分けて、続くファイル名を付けて別々の.objにしてくれるんです確か。当時はスマートリンカなんて無かったので、ライブラリを作るときは余計なコードがリンクされないように様々な工夫を凝らしてました。
……いや、今だってldがCOFFでは--gc-sections動いてくれないってんで.sをセクションで切って.aにするツールなんか作ったりして、同じことやっているわけですがっ。本気で進歩無いな。
私の精神世界は未だこの時代にいる気がします。だから実行ファイル小さくできない言語は敵なんだよな……。