// RMAC.C - Main Application Code
// Copyright (C) 199x Landon Dyer, 2011 Reboot and Friends
// RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986
-// Source Utilised with the Kind Permission of Landon Dyer
+// Source utilised with the kind permission of Landon Dyer
//
#include "rmac.h"
int glob_flag; // Assume undefined symbols are global
int lsym_flag; // Include local symbols in object file
int sbra_flag; // Warn about possible short branches
+int prg_flag; // !=0, produce .PRG executable (2=symbols)
int legacy_flag; // Do stuff like insert code in RISC assembler
int obj_format; // Object format flag
int debug; // [1..9] Enable debugging levels
" -dsymbol[=value] Define symbol\n"
" -e[errorfile] Send error messages to file, not stdout\n"
" -f[format] Output object file format\n"
+ " a: ALCYON (use this for ST)\n"
" b: BSD (use this for Jaguar)\n"
" -i[path] Directory to search for include files\n"
" -l[filename] Create an output listing file\n"
" -n Don't do things behind your back in RISC assembler\n"
" -o file Output file name\n"
+ " -p[n] Create an ST .prg (1=normal, 2=w/symbols)\n"
+ " Forces -fa\n"
" -r[size] Pad segments to boundary size specified\n"
" w: word (2 bytes, default alignment)\n"
" l: long (4 bytes)\n"
switch (argv[argno][2])
{
case EOS:
+ case 'a': // -fa = Alcyon [the default]
+ case 'A':
+ obj_format = ALCYON;
+ break;
case 'b': // -fb = BSD (Jaguar Recommended)
case 'B':
obj_format = BSD;
errcnt++;
return errcnt;
}
+
objfname = argv[argno];
}
+ break;
+ case 'p': /* -p: generate ".PRG" executable output */
+ case 'P':
+ /*
+ * -p .PRG generation w/o symbols
+ * -ps .PRG generation with symbols
+ */
+ switch (argv[argno][2])
+ {
+ case EOS:
+ prg_flag = 1;
+ break;
+
+ case 's':
+ case 'S':
+ prg_flag = 2;
+ break;
+
+ default:
+ printf("-p: syntax error\n");
+ ++errcnt;
+ return errcnt;
+ }
+ // Enforce Alcyon object format - kind of silly
+ // to ask for .prg output without it!
+ obj_format = ALCYON;
break;
case 'r': // Pad seg to requested boundary size
case 'R':
firstfname = defname;
strcpy(fnbuf, firstfname);
- //fext(fnbuf, prg_flag ? ".prg" : ".o", 1);
+ fext(fnbuf, (prg_flag ? ".prg" : ".o"), 1);
fext(fnbuf, ".o", 1);
objfname = fnbuf;
}
if (verb_flag)
{
- s = "object";
+ s = (prg_flag ? "executable" : "object");
printf("[Writing %s file: %s]\n", s, objfname);
}