「偽アセンブラー;不良社員の必需品」(1993/09/09)
読者の方が何やら面白いものを作ったそうなので私も真似して作ってみました。
使い方他は下を読んでもらうとして、このソースはどのコンパイラーでも
コンパイルできるでしょう。ごく標準的な関数しか使ってませんし。
でもさすがに私1分では出来なかったぞ。10分位かな。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
似せアセンブラー
実はアセンブラー風書き込み作成プログラム
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
<作り>
行の最初から';'までを飛ばし';'の後を書き込み文章として出力する。
このため本当に通常のアセンブラープログラムを作りつつ書き込み作成も
できる。(別にアセンブラーに限らず何にでも応用可能。)
';;'と書くとその行は改行のみになる。
;の無い行は無視される。
行の最後に'.'を書くと改行を消す。(継続行)
<起動法>
MAS 元ファイル名 [出力ファイル名]
出力ファイル名を省略するとMAS.OBJになる。
できるだけらしく見せるためにメッセージはすべて英語です。
<お詫び>
もっと高機能にも出来るけど、できるだけ短くするために思いっきり
シンプルにしました。
(X68用だと自作ライブラリを使ってもっと高機能に出来るんだけど・・・)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
MAS.C
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
#include <stdio.h>
#define prints(s) fputs(s,stdout)
main(int argc,char *argv[])
{
int i,c;
FILE *fp,*fp2;
char line[1024];
prints("Multi Assembler v1.00 Copyright 1993 by AIG-SOFT¥n");
if (argc<2) {
prints("MAS source [object]¥n");
exit(1);
}
if ((fp=fopen(argv[1],"rt"))==NULL) {
prints("Source file not found.¥n");
exit(2);
}
if ((fp2=fopen(argc==2? "MAS.OBJ":argv[2],"wt"))==NULL) {
fclose(fp);
prints("Object file not make.¥n");
exit(3);
}
while (fgets(line,1024,fp)!=NULL) {
i=0;
while (c=line[i++],c!=';'&&c!='¥n'&&c!=0);
if (c==';') {
if (line[i]==';') fputc('¥n',fp2);
else {
c=strlen(line)-2;
if (line[c]=='.') line[c]=0;
fputs(&line[i],fp2);
}
}
}
fputc(0x1a,fp2);
fcloseall();
exit(0);
}
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
しかしこういうものを考えるところなんざあ、さすが、
だてに私より長く某SK社員はやってないねえ。
そういえばなぜ「Multi Assembler」なのかというと、本当は「Message Assember」に
しようと思ったんだけど、それだとばればれだから同じ「M」から始まるもので
それらしいものを選んだというわけです。でもなんとなく感じが出てるでしょ。