弐条海月の とはずがたり

そこはかとなく書き綴るブログなるもの

HSP用モジュール「kurage_mod」にバグ…

Windowsで動作するインタプリタ型プログラム言語「HSP(Hot Soup Processor)」で、仕事に役立つアプリケーションを開発しております。仕事の合間に取り組んでいるので遅々として進まなかったりするのだけれど、文字処理に特化した自作モジュール「kurage_mod」に助けられております。今回は「kurage_mod」の拡張をしている際に見つけたバグ…いわゆる実に情けない凡ミスのお話。

「kurage_mod」の凡ミス…それは昨日の日記でも紹介した、特定の日付から○日後を求める命令「K_WHAT_DAY」の中にありました。年月日を求める際に、閏年の処理が正しく行われていないことが分かったのです。

閏年の処理は前回の閏年である2008年の少し前に自分で書いたサブルーチンから持ってきてモジュールに組み込んだ覚えがあったのだけれど…モジュール内「K_WHAT_DAY」のソースを見ると驚くべきバグがあったのです(笑)。

閏年を求めるソースはこんな感じです。

//閏年のCHECK-------------------

	//変数aに閏年かどうか調べたい西暦を代入しておく

	repeat 15		//このくらいリピートしておけば良いかと(笑)
		b=2004+(4*cnt)	//ここで4年ごとの閏年を生成
		if a=b : URU_FLAG=1 : else : URU_FLAG=0	//変数aと4年ごとの閏年が等しければ1に
		await
	loop
return

西暦を入れた変数が閏年ならばURU_FLAGには1が入り、そうでないならば0が入る仕組み…のつもりだったのが、上記のソースでは例え閏年だったとしても、リピートの途中でフラグが0に戻ってしまうんです(爆)。

これを見つけた時は我ながら笑ってしまいました。このせいで開発中の新しい命令の完成が遅れておりましたが、以下のソースに書き直すことで正しく動作するのを確認できました。

//閏年のCHECK-------------------

	//変数aに閏年かどうか調べたい西暦を代入しておく

	repeat 15
		b=2004+(4*cnt)	//ここで4年ごとの閏年を生成
		if a=b : URU_DOSHI=1 : break	//閏年だったらフラグを立ててループを抜ける
		await
	loop

	if URU_DOSHI=1 : return : else : URU_DOSHI=0 : return	//重要(笑)

こんな感じです(笑)。

それと、ここ数日は「kurage_mod」に新しい命令を追加するべく開発中です。これが完成すれば、しばらくやめいていた「kurage_mod」の公開を再開する予定です。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

固定ページ

最近の投稿

カテゴリー





カレンダー

2012年1月
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

過去の日記はこちら

キーワードで検索