]> Shamusworld >> Repos - rmac/blobdiff - rmac.c
Fixed subtle bug in section marking code.
[rmac] / rmac.c
diff --git a/rmac.c b/rmac.c
index 56ff27f014c685f6bb1a4d82d8ec10ce5013786a..8dde4c6d9a34925a534de81a25cd2c7fb8b8b8b4 100644 (file)
--- a/rmac.c
+++ b/rmac.c
@@ -37,7 +37,6 @@ int rgpu, rdsp;                                               // Assembling Jaguar GPU or DSP code
 int list_fd;                                           // File to write listing to
 int regbank;                                           // RISC register bank
 int segpadsize;                                                // Segment padding size
-int in_main;                                           // In main memory flag for GPUMAIN
 int endian;                                                    // Host processor endianess
 char * objfname;                                       // Object filename pointer
 char * firstfname;                                     // First source filename
@@ -301,6 +300,7 @@ int rmac_qsort(char * base, int n, int size, int (*compar)())
 }
 
 
+#if 0
 //
 // Allocate memory; Panic and Quit if we Run Out
 //
@@ -338,6 +338,7 @@ char * amem(LONG amount)
 
        return p;
 }
+#endif
 
 
 //
@@ -560,20 +561,19 @@ int process(int argc, char ** argv)
        orgwarning = 0;                                 // No ORG warning issued
        a_amount = 0;
        segpadsize = 2;                                 // Initialise segment padding size
-       in_main = 0;
 
        // Initialise modules
-       init_sym();                                             // Symbol table
+       InitSymbolTable();                              // Symbol table
        init_token();                                   // Tokenizer
        init_procln();                                  // Line processor
        init_expr();                                    // Expression analyzer
        init_sect();                                    // Section manager / code generator
        init_mark();                                    // Mark tape-recorder
-       init_macro();                                   // Macro processor
+       InitMacro();                                    // Macro processor
        init_list();                                    // Listing generator
 
        // Process command line arguments and assemble source files
-       for(argno = 0; argno < argc; ++argno)
+       for(argno=0; argno<argc; ++argno)
        {
                if (*argv[argno] == '-')
                {
@@ -601,7 +601,7 @@ int process(int argc, char ** argv)
 
                                if (sy == NULL)
                                {
-                                       sy = newsym(argv[argno] + 2, LABEL, 0);
+                                       sy = NewSymbol(argv[argno] + 2, LABEL, 0);
                                        sy->svalue = 0;
                                }
 
@@ -628,7 +628,7 @@ int process(int argc, char ** argv)
                                        break;
                                default:
                                        printf("-f: unknown object format specified\n");
-                                       ++errcnt;
+                                       errcnt++;
                                        return errcnt;
                                }
                                break;
@@ -645,7 +645,7 @@ int process(int argc, char ** argv)
                                list_fname = argv[argno] + 2;
                                listing = 1;
                                list_flag = 1;
-                               ++lnsave;
+                               lnsave++;
                                break;
                        case 'o':                                       // Direct object file output
                        case 'O':
@@ -656,7 +656,7 @@ int process(int argc, char ** argv)
                                        if (++argno >= argc)
                                        {
                                                printf("Missing argument to -o");
-                                               ++errcnt;
+                                               errcnt++;
                                                return errcnt;
                                        }
                                        objfname = argv[argno];
@@ -713,20 +713,20 @@ int process(int argc, char ** argv)
                                        firstfname = defname;
 
                                include(0, "(stdin)");
-                               assemble();
+                               Assemble();
                                break;
                        case 'h':                                       // Display command line usage
                        case 'H':
                        case '?':
                                display_version();
                                display_help();
-                               ++errcnt;
+                               errcnt++;
                                break;
                        default:
                                display_version();
                                printf("Unknown switch: %s\n\n", argv[argno]);
                                display_help();
-                               ++errcnt;
+                               errcnt++;
                                break;
                        }
                }
@@ -743,12 +743,12 @@ int process(int argc, char ** argv)
                        if (fd < 0)
                        {
                                printf("Cannot open: %s\n", fnbuf);
-                               ++errcnt;
+                               errcnt++;
                                continue;
                        }
 
                        include(fd, fnbuf);
-                       assemble();
+                       Assemble();
                }
        }
 
@@ -793,8 +793,8 @@ int process(int argc, char ** argv)
        //       (`lo68' format, extended (postfix) format....)
        // (2)   generate the output file image and symbol table;
        // (3)   generate relocation information from left-over fixups.
-       fixups();                                                // Do all fixups
-       stopmark();                                              // Stop mark tape-recorder
+       ResolveAllFixups();                                             // Do all fixups
+       stopmark();                                                             // Stop mark tape-recorder
 
        if (errcnt == 0)
        {
@@ -853,27 +853,19 @@ int get_endianess(void)
 //
 int main(int argc, char ** argv)
 {
-       int status;
-       int i;
-
        perm_verb_flag = 0;                             // Clobber "permanent" verbose flag
        cmdlnexec = argv[0];                    // Obtain executable name
 
        endian = get_endianess();               // Get processor endianess
 
-       for(i=0; i<MAXFWDJUMPS; i++)
-               fwdjump[i] = 0;
-
-       // Full command line passed
+       // If commands were passed in, process them
        if (argc > 1)
        {
-               status = process(argc - 1, argv + 1);              
-       }
-       else
-       {
-               display_version();
-               display_help();
+               return process(argc - 1, argv + 1);              
        }
 
-       return status;
+       display_version();
+       display_help();
+
+       return 0;
 }