25 {
"source", no_argument, NULL,
's' },
26 {
"label", no_argument, NULL,
'l' },
27 {
"labelonly", no_argument, NULL,
'L' },
28 {
"assembledetail", no_argument, NULL,
'a' },
29 {
"assembledetailonly", no_argument, NULL,
'A' },
30 {
"assembleout", optional_argument, NULL,
'o' },
31 {
"assembleoutonly", optional_argument, NULL,
'O' },
32 {
"trace", no_argument, NULL,
't' },
33 {
"tracearithmetic", no_argument, NULL,
't' },
34 {
"tracelogical", no_argument, NULL,
'T' },
35 {
"dump", no_argument, NULL,
'd' },
36 {
"monitor", no_argument, NULL,
'm' },
37 {
"memorysize", required_argument, NULL,
'M' },
38 {
"clocks", required_argument, NULL,
'C' },
39 {
"version", no_argument, NULL,
'v' },
40 {
"help", no_argument, NULL,
'h' },
48 { 126,
"no source file" },
49 { 127,
"invalid option" },
59 const char *default_name =
"a.o";
61 (name == NULL || !name[0]) ? default_name : name,
74 int main(
int argc,
char *argv[])
84 const char *cmdversion =
"casl2 of YACASL2 version %s\n";
86 "Usage: %s [-slLaAtTdmvh] [-oO[<OBJECTFILE>]] [-M <MEMORYSIZE>] [-C <CLOCKS>] FILE1[ FILE2 ...]\n";
95 while((opt = getopt_long(argc, argv,
"tTdslLmao::O::AM:C:vh",
longopts, NULL)) != -1) {
135 memsize = atoi(optarg);
138 clocks = atoi(optarg);
141 fprintf(stdout, cmdversion, version);
144 fprintf(stdout, usage, argv[0]);
147 fprintf(stderr, usage, argv[0]);
154 if(argv[optind] == NULL) {
160 reset(memsize, clocks);
161 asfilecnt = argc - optind;
162 asfile =
calloc_chk(asfilecnt,
sizeof(
char *),
"asfile");
163 for(
int i = 0; i < asfilecnt; i++) {
164 asfile[i] = argv[optind + i];
171 if(objfile != NULL) {
ASMODE asmode
アセンブルモード: src, label, onlylabel, asdetail, onlyassemble
void outassemble(const char *file)
ファイルにアセンブル結果を書き込む
void addcerrlist_assemble()
アセンブルエラーをエラーリストに追加する
bool assemble(int filec, char *filev[], WORD adr)
指定された1つまたは複数のファイルを2回アセンブル
int main(int argc, char *argv[])
casl2コマンドのメイン
void addcerrlist_casl2()
CASL IIのエラーをエラーリストに追加
CERR cerr_casl2[]
casl2のエラー定義
static struct option longopts[]
casl2コマンドのオプション
char * objfile_name(const char *str)
アセンブル結果を書き込むファイルの名前
void addcerrlist(int cerrc, CERR cerrv[])
エラーリストを作成・追加する
void freecerr()
エラーリストと現在のエラーを解放する
void cerr_init()
エラーを初期化する
void setcerr(int num, const char *str)
現在のエラーを設定する
void exec()
COMET II仮想マシンを実行する
#define FREE(ptr)
メモリを解放するマクロ
char * strdup_chk(const char *s, const char *tag)
malloc_chkを実行してメモリを確保し、コピーした文字列を返す
void * calloc_chk(size_t nmemb, size_t size, const char *tag)
領域の数とサイズを指定してメモリーを確保するcallocを実行する
#define ARRAYSIZE(array)
配列のサイズを返すマクロ
void addcerrlist_exec()
実行エラーをエラーリストに追加する
void reset(int memsize, int clocks)
bool create_cmdtable(CMDTAB_HASH hash)
命令ハッシュ表を作成する
void free_cmdtable(CMDTAB_HASH hash)
EXECMODE execmode
実行モード: trace, logical, dump, monitor, step