]> Shamusworld >> Repos - rmac/blobdiff - rmac.c
Fixed error reporting wrong file, off-by-one error in file record system.
[rmac] / rmac.c
diff --git a/rmac.c b/rmac.c
index 3cc24f4e3ee74dc80416735311ede284c72cb74d..fa64f777c72f866e5601ab7f305b897b23ea0c7b 100644 (file)
--- a/rmac.c
+++ b/rmac.c
@@ -308,14 +308,16 @@ char * amem(LONG amount)
 {
        char * p;
 
-       if (amount & 1)                                           // Keep word alignment
-               ++amount;
+//     if (amount & 1)                                                         // Keep word alignment
+//             amount++;
+       amount = (amount + 1) & ~(0x01);                        // Keep word alignment
 
+       // Honor *small* request (< 64 bytes)
        if (amount < A_THRESH)
-       {                                  // Honor *small* request
+       {
                if (a_amount < amount)
                {
-                       a_ptr = amem(A_AMOUNT);
+                       a_ptr = amem(A_AMOUNT);                         // Allocate 4K bytes
                        a_amount = A_AMOUNT;
                }
 
@@ -325,11 +327,11 @@ char * amem(LONG amount)
        }
        else
        {
-               amemtot += amount;                                    // Bump total alloc
-               p = (char *)malloc(amount);                           // Get memory from malloc
+               amemtot += amount;                                              // Bump total alloc
+               p = (char *)malloc(amount);                             // Get memory from malloc
 
-               if ((LONG)p == (LONG)NULL)
-                       fatal("memory exhausted");
+               if (p == NULL)
+                       fatal("Memory exhausted!");
 
                memset(p, 0, amount);
        }
@@ -561,13 +563,13 @@ int process(int argc, char ** argv)
        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
@@ -599,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;
                                }
 
@@ -626,7 +628,7 @@ int process(int argc, char ** argv)
                                        break;
                                default:
                                        printf("-f: unknown object format specified\n");
-                                       ++errcnt;
+                                       errcnt++;
                                        return errcnt;
                                }
                                break;
@@ -643,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':
@@ -654,7 +656,7 @@ int process(int argc, char ** argv)
                                        if (++argno >= argc)
                                        {
                                                printf("Missing argument to -o");
-                                               ++errcnt;
+                                               errcnt++;
                                                return errcnt;
                                        }
                                        objfname = argv[argno];
@@ -711,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;
                        }
                }
@@ -741,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();
                }
        }
 
@@ -791,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)
        {