]> git.sur5r.net Git - cc65/blobdiff - src/ca65/options.c
Make much more usage of dynamic strings (StrBufs) instead of char* and
[cc65] / src / ca65 / options.c
index 31e37421e22cfd65d86d3ee6b70e06c22adabb84..02e68f6964f422bc8d717b1edfbf0ecc714dd7cc 100644 (file)
@@ -6,10 +6,10 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 1998-2000 Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@musoftware.de                                            */
+/* (C) 1998-2008, Ullrich von Bassewitz                                      */
+/*                Roemerstrasse 52                                           */
+/*                D-70794 Filderstadt                                        */
+/* EMail:         uz@cc65.org                                                */
 /*                                                                           */
 /*                                                                           */
 /* This software is provided 'as-is', without any expressed or implied       */
@@ -43,6 +43,7 @@
 #include "error.h"
 #include "objfile.h"
 #include "options.h"
+#include "spool.h"
 
 
 
@@ -65,7 +66,7 @@ static unsigned               OptCount = 0;
 
 
 
-static Option* NewOption (unsigned char Type)
+static Option* NewOption (unsigned char Type, unsigned long Val)
 /* Create a new option, insert it into the list and return it */
 {
     Option* Opt;
@@ -76,7 +77,7 @@ static Option* NewOption (unsigned char Type)
     /* Initialize fields */
     Opt->Next  = 0;
     Opt->Type  = Type;
-    Opt->V.Str = 0;
+    Opt->Val   = Val;
 
     /* Insert it into the list */
     if (OptRoot == 0) {
@@ -95,57 +96,50 @@ static Option* NewOption (unsigned char Type)
 
 
 
-void OptStr (unsigned char Type, const char* Text)
+void OptStr (unsigned char Type, const StrBuf* Text)
 /* Add a string option */
 {
-    Option* O;
-
-    /* String must have less than 255 bytes */
-    if (strlen (Text) > 255) {
-       Fatal (FAT_STRING_TOO_LONG);
-    }
-    O        = NewOption (Type);
-    O->V.Str = xstrdup (Text);
+    NewOption (Type, GetStrBufId (Text));
 }
 
 
 
-void OptComment (const char* Comment)
+void OptComment (const StrBuf* Comment)
 /* Add a comment */
 {
-    OptStr (OPT_COMMENT, Comment);
+    NewOption (OPT_COMMENT, GetStrBufId (Comment));
 }
 
 
 
-void OptAuthor (const char* Author)
+void OptAuthor (const StrBuf* Author)
 /* Add an author statement */
 {
-    OptStr (OPT_AUTHOR, Author);
+    NewOption (OPT_AUTHOR, GetStrBufId (Author));
 }
 
 
 
-void OptTranslator (const char* Translator)
+void OptTranslator (const StrBuf* Translator)
 /* Add a translator option */
 {
-    OptStr (OPT_TRANSLATOR, Translator);
+    NewOption (OPT_TRANSLATOR, GetStrBufId (Translator));
 }
 
 
 
-void OptCompiler (const char* Compiler)
+void OptCompiler (const StrBuf* Compiler)
 /* Add a compiler option */
 {
-    OptStr (OPT_COMPILER, Compiler);
+    NewOption (OPT_COMPILER, GetStrBufId (Compiler));
 }
 
 
 
-void OptOS (const char* OS)
+void OptOS (const StrBuf* OS)
 /* Add an operating system option */
 {
-    OptStr (OPT_OS, OS);
+    NewOption (OPT_OS, GetStrBufId (OS));
 }
 
 
@@ -153,8 +147,7 @@ void OptOS (const char* OS)
 void OptDateTime (unsigned long DateTime)
 /* Add a date/time option */
 {
-    Option* O = NewOption (OPT_DATETIME);
-    O->V.Val = DateTime;
+    NewOption (OPT_DATETIME, DateTime);
 }
 
 
@@ -174,24 +167,9 @@ void WriteOptions (void)
     O = OptRoot;
     while (O) {
 
-       /* Write the type of the option */
+       /* Write the type of the option, then the value */
        ObjWrite8 (O->Type);
-
-       /* Write the argument */
-       switch (O->Type & OPT_ARGMASK) {
-
-           case OPT_ARGSTR:
-               ObjWriteStr (O->V.Str);
-               break;
-
-           case OPT_ARGNUM:
-               ObjWrite32 (O->V.Val);
-               break;
-
-           default:
-               Internal ("Invalid option type: $%02X", O->Type & 0xFF);
-
-       }
+        ObjWriteVar (O->Val);
 
        /* Next option */
        O = O->Next;
@@ -204,3 +182,4 @@ void WriteOptions (void)
 
 
 
+