/* */
/* */
/* */
-/* (C) 2000 Ullrich von Bassewitz */
+/* (C) 2000-2001 Ullrich von Bassewitz */
/* Wacholderweg 14 */
/* D-70597 Stuttgart */
/* EMail: uz@musoftware.de */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
-#include <ctype.h>
#include <errno.h>
/* common */
#include "abend.h"
+#include "chartype.h"
#include "cmdline.h"
#include "fname.h"
+#include "print.h"
#include "target.h"
#include "tgttrans.h"
#include "version.h"
#include "incpath.h"
#include "input.h"
#include "macrotab.h"
-#include "optimize.h"
#include "scanner.h"
#include "segname.h"
"Long options:\n"
" --ansi\t\tStrict ANSI mode\n"
" --bss-name seg\tSet the name of the BSS segment\n"
+ " --check-stack\t\tGenerate stack overflow checks\n"
" --code-name seg\tSet the name of the CODE segment\n"
+ " --codesize x\tAccept larger code by factor x\n"
" --cpu type\t\tSet cpu type\n"
" --data-name seg\tSet the name of the DATA segment\n"
" --debug\t\tDebug mode\n"
const char* P = Def;
/* The symbol must start with a character or underline */
- if (Def [0] != '_' && !isalpha (Def [0])) {
+ if (Def [0] != '_' && !IsAlpha (Def [0])) {
InvDef (Def);
}
/* Check the symbol name */
- while (isalnum (*P) || *P == '_') {
+ while (IsAlNum (*P) || *P == '_') {
++P;
}
*/
char* Q;
unsigned Len = strlen (Def)+1;
- char* S = xmalloc (Len);
+ char* S = (char*) xmalloc (Len);
memcpy (S, Def, Len);
Q = S + (P - Def);
*Q++ = '\0';
+static void OptCheckStack (const char* Opt, const char* Arg)
+/* Handle the --check-stack option */
+{
+ CheckStack = 1;
+}
+
+
+
static void OptCodeName (const char* Opt, const char* Arg)
/* Handle the --code-name option */
{
+static void OptCodeSize (const char* Opt, const char* Arg)
+/* Handle the --codesize option */
+{
+ /* Numeric argument expected */
+ if (sscanf (Arg, "%u", &CodeSizeFactor) != 1 ||
+ CodeSizeFactor < 100 ||
+ CodeSizeFactor > 1000) {
+ AbEnd ("Argument for %s is invalid", Opt);
+ }
+}
+
+
+
static void OptCreateDep (const char* Opt, const char* Arg)
/* Handle the --create-dep option */
{
static void OptVerbose (const char* Opt, const char* Arg)
/* Increase verbosity */
{
- ++Verbose;
+ ++Verbosity;
}
{
/* Program long options */
static const LongOpt OptTab[] = {
- { "--add-source", 0, OptAddSource },
- { "--ansi", 0, OptAnsi },
- { "--bss-name", 1, OptBssName },
- { "--code-name", 1, OptCodeName },
- { "--create-dep", 0, OptCreateDep },
- { "--cpu", 1, OptCPU },
- { "--data-name", 1, OptDataName },
- { "--debug", 0, OptDebug },
- { "--debug-info", 0, OptDebugInfo },
- { "--help", 0, OptHelp },
+ { "--add-source", 0, OptAddSource },
+ { "--ansi", 0, OptAnsi },
+ { "--bss-name", 1, OptBssName },
+ { "--check-stack", 0, OptCheckStack },
+ { "--code-name", 1, OptCodeName },
+ { "--codesize", 1, OptCodeSize },
+ { "--create-dep", 0, OptCreateDep },
+ { "--cpu", 1, OptCPU },
+ { "--data-name", 1, OptDataName },
+ { "--debug", 0, OptDebug },
+ { "--debug-info", 0, OptDebugInfo },
+ { "--help", 0, OptHelp },
{ "--include-dir", 1, OptIncludeDir },
{ "--rodata-name", 1, OptRodataName },
- { "--signed-chars", 0, OptSignedChars },
- { "--static-locals", 0, OptStaticLocals },
- { "--target", 1, OptTarget },
- { "--verbose", 0, OptVerbose },
- { "--version", 0, OptVersion },
+ { "--signed-chars", 0, OptSignedChars },
+ { "--static-locals", 0, OptStaticLocals },
+ { "--target", 1, OptTarget },
+ { "--verbose", 0, OptVerbose },
+ { "--version", 0, OptVersion },
};
int I;
const char* InputFile = 0;
/* Initialize the cmdline module */
- InitCmdLine (argc, argv, "cc65");
+ InitCmdLine (&argc, &argv, "cc65");
/* Initialize the default segment names */
InitSegNames ();
/* Parse the command line */
I = 1;
- while (I < argc) {
+ while (I < (int)ArgCount) {
const char* P;
/* Get the argument */
- const char* Arg = argv [I];
+ const char* Arg = ArgVec[I];
/* Check for an option */
if (Arg [0] == '-') {
P = Arg + 2;
while (*P) {
switch (*P++) {
- case 'f':
- sscanf (P, "%lx", (long*) &OptDisable);
+ case 'f':
+ sscanf (P, "%lx", (long*) &OptDisable);
break;
case 'i':
FavourSize = 0;
+ CodeSizeFactor = 200;
break;
case 'r':
EnableRegVars = 1;
OutputFile = MakeFilename (InputFile, ".s");
}
+
+
+
/* Go! */
Compile ();
FILE* F;
- /* Optimize the output if requested */
- if (Optimize) {
- OptDoOpt ();
- }
+#if 0
+ /* Optimize the output if requested */
+ if (Optimize) {
+ OptDoOpt ();
+ }
+#endif
/* Open the file */
F = fopen (OutputFile, "w");