[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 2576] from OSASK BOARD



このメールは、OSASK伝言板に書き込まれた内容です。
この書き込みに返事を書く場合は、下のURLから書き込みを行なって下さい。


http://www.imasy.or.jp/~mone/osask/index.cgi?REFER=3c07c0de_88d1

From: Gaku
Message-ID: 3c07c0de_88d1
Date: 2001/12/01 02:24
Subject: はじめまして。

はじめて書き込みさせていただきます。

WWW 上では Gaku と名乗っています。

/////
夏ごろかもう少し前くらいに OSASK の存在を発見し、
それ以来時々ページを見に来て ML のアーカイブをまばらにですが追いかけています。

さて、応援できることは何か無いか?
と考えていました。
あくまで応援です。現時点ではあまりのめり込めそうに無いので。

ML を見ていたら何やら以下のような文が見当たりました。
> ASKAは負の数が扱えない

ちょっと ASKA のソースを覗いてみる気になりました。
・・・。
ちょっとばかり難しかったです。

/////
と、それで終わってしまっては申し訳無いので結果報告です。

あくまで、ちょっとばかり覗いて、ちょっと難しいと思った結果ですので、
あんまり参考にならないかもしれません。その場合は捨て置きください。
また、バグチェックなどは一切していません。
いじったところが他に悪影響を及ぼすかどうかもチェックしていません。

試してみたのはごく簡単に、
http://www.wizard.elec.waseda.ac.jp/~shoe16/osask/
で落とさせて貰った aska10b18.lzh で、
sample.ask 34行目
	EAX=a;
とある行を
	EAX&=8;
または
	EAX&=-8;
または
	EAX&=0-8;
として入力したときの出力の比較です。

以下のように出力させるようにできました。
アセンブラは昔かじった記憶がかすんでいるため正しいかどうか良く分かりません。
が、多分それほど違わないだろうと思われました。
EAX&=8;   のとき	and	EAX,8
EAX&=-8;  のとき	and	EAX,-8
EAX&=0-8; のとき	and	EAX,0-8

/////
# aska のエラーコードがノンゼロで止まってくれない。
void main ( ... ) { ... } となっています。
int  main ( ... ) { ... } として、usage(); の時は return 0; とし、また、
parser.Compile(string(argv[1])); ともう1つの関数の戻り値を返すようにします。

# EAX&=0-8; は受けつけるのに
# EAX&=-8;  は受けつけない。
parser.cpp 594行目
from	  case TK_SIZEOF: case TK_AND: case TK_DAND: case TK_NUM:
to	  case TK_SIZEOF: case TK_AND: case TK_DAND: case TK_NUM: case TK_MINUS:

# basic_string から const char* を取り出すのに
# c_str() を使っていないところがあった。
module.cpp 21行目
from	lpFP = fopen(FileName, "rb");
to	lpFP = fopen(FileName.c_str(), "rb");
textmodule.cpp 22行目
from	fp = fopen(FileName, "rt");
to	fp = fopen(FileName.c_str(), "rt");
textmodule.cpp 33行目
from	fp = fopen(FileName, "wt");
to	fp = fopen(FileName.c_str(), "wt");
textmodule.cpp 38行目
from	for(LineData itr = TextData.begin(); itr != TextData.end(); itr++) fputs(*itr, fp);
to	for(LineData itr = TextData.begin(); itr != TextData.end(); itr++) fputs((*itr).c_str(), fp);

/////
# ついで
parser.cpp 1019行目
	if(GetParameter(param) != 0);	// skipline
	// なぜ何もしていないのか理解できず。多分ダミーの読み込み?

/////
まったくもってムダな作業っぽいですが・・。
まぁ応援しているやつが、また一人確認できた程度にお受け取りください。

それでは、また。