import System;
import System.IO;
import System.Windows.Forms;

//幅と高さ
var width : int = 200;
var height : int = 200;

//縞の間隔
var interval = 8;

var dlg : SaveFileDialog = new SaveFileDialog();
dlg.Filter = "Bitmap (*.bmp)|*.bmp";
dlg.InitialDirectory = ".";
if(dlg.ShowDialog() == DialogResult.OK)
	MakeBitmap(dlg.FileName);

function MakeBitmap(filename : String) {
	//パラメータの決定
	var Bpr : int = (int((width * 3 - 1) / 96) + 1) * 4;	//1行あたりのバイト数
	var imagesize : int = Bpr * height;				//イメージサイズ
	var filesize : int = 0x3E + imagesize;			//ファイルサイズ
	
	//作成するファイルをオープン
	var ofs : FileStream;
	try {
		ofs = new FileStream(filename, FileMode.Create);
	}
	catch(e) {		//ファイルがオープンできない
		System.Console.Error.WriteLine("error : can't open file.");
		Environment.Exit(1);
	}
	
	var bw : BinaryWriter = new BinaryWriter(ofs);
	
	//ヘッダ部を書く
	bw.Write(short(0x4D42));	//マジックナンバー
	bw.Write(filesize);			//ファイルサイズ
	bw.Write(short(0));			//bfReserved1
	bw.Write(short(0));			//bfReserved2
	bw.Write(int(0x3E));		//ヘッダ部サイズ
	bw.Write(int(0x28));		//infoheaderサイズ
	bw.Write(width);			//幅
	bw.Write(height);			//高さ
	bw.Write(short(1));			//biPlanes
	bw.Write(short(1));			//BitCount
	bw.Write(int(0));			//biCompression
	bw.Write(imagesize);		//biSizeImage
	bw.Write(int(0));			//biXPelsPerMeter
	bw.Write(int(0));			//biYPelsPerMeter
	bw.Write(int(0));			//biClrUsed
	bw.Write(int(0));			//biClrImportant
	//パレットを書く
	bw.Write(int(0));			//黒
	bw.Write(int(0xffffff));	//白
	//画像を書く
	var b : int;				//32ビットごとに書く
	for(var r = 0; r < height; r++) {
		b = 0;
		for(var c = 0; c < width; c++) {
			var itmp = (width * interval + r - c) % interval;
			if(itmp != 0 && itmp != 1)
				b |= 1 << (int(c % 32 / 8) * 8 + (7 - c % 8));
			if(c % 32 == 31) {		//32ビット分埋まったら書く
				bw.Write(b);
				b = 0;
			}
		}
		if(c % 32 > 0)				//32ビット境界までの余った分を書く
			bw.Write(b);
	}
	
	ofs.Close();
}
