]> Shamusworld >> Repos - rmac/blobdiff - listing.c
Code cleanup from last patch, also, version bump for same. :-)
[rmac] / listing.c
index f9064cd228bd34635335da864913088dc6aa4315..bbe24054af5b85904a82177e4b902a754f6a6c90 100644 (file)
--- a/listing.c
+++ b/listing.c
@@ -3,7 +3,7 @@
 // LISTING.C - Listing Output
 // Copyright (C) 199x Landon Dyer, 2011-2012 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
 //
 // --------------------------------------------------------------------------
 // 0    0    1    1    2    2    3    3    4    4    5    5    6    6    7    7
 // nnnnn           =vvvvvvvv
 
 #include "listing.h"
-#include "version.h"
-#include "token.h"
+#include "error.h"
 #include "procln.h"
 #include "sect.h"
-#include "error.h"
+#include "token.h"
+#include "version.h"
 
 char * list_fname;                                     // Listing filename
-char subttl[TITLESIZ];                         // Current subtitle
-int listing;                                           // Listing level 
+uint8_t subttl[TITLESIZ];                      // Current subtitle
+int listing;                                           // Listing level
 int pagelen = 61;                                      // Lines on a page
 int nlines;                                                    // #lines on page so far
-LONG lsloc;                                                    // `sloc' at start of line 
+LONG lsloc;                                                    // `sloc' at start of line
 
 // Private
 static int lcursect;                           // `cursect' at start of line
-static int llineno;                                    // `curlineno' at start of line 
-static int pageno;                                     // Current page number 
+static int llineno;                                    // `curlineno' at start of line
+static int pageno;                                     // Current page number
 static int pagewidth;                          // #columns on a page
 static int subflag;                                    // 0, don't do .eject on subttl (set 1)
 static char lnimage[IMAGESIZ];         // Image of output line
 static char title[TITLESIZ];           // Current title
-static char datestr[20];                       // Current date dd-mon-yyyy 
+static char datestr[20];                       // Current date dd-mon-yyyy
 static char timestr[20];                       // Current time hh:mm:ss [am|pm]
 static char buf[IMAGESIZ];                     // Buffer for numbers
 static long unused;                                    // For supressing 'write' warnings
@@ -80,7 +80,7 @@ VALUE dos_date(void)
 }
 
 
-// 
+//
 // Return GEMDOS format time
 //
 VALUE dos_time(void)
@@ -160,7 +160,7 @@ void lnfill(char * dest, int len, char chr)
 }
 
 
-// 
+//
 // Create listing file with the appropriate name
 //
 void list_setup(void)
@@ -176,7 +176,7 @@ void list_setup(void)
        }
 
        list_fname = NULL;
-       
+
        if ((list_fd = open(fnbuf, _OPEN_FLAGS, _PERM_MODE)) < 0)
                cantcreat(fnbuf);
 }
@@ -217,26 +217,29 @@ void ship_ln(const char * ln)
        if (listing <= 0)
                return;
 
-       // Notice bottom of page
-       if (nlines >= pagelen - BOT_MAR)
-               eject();
-
-       // Print title, boilerplate, and subtitle at top of page
-       if (nlines == 0)
+       if (list_pag)
        {
-               pageno++;
-               println("");
-               date_string(datestr, dos_date());
-               time_string(timestr, dos_time());
-               sprintf(buf,
-                       "%-40s%-20s Page %-4d    %s %s        RMAC %01i.%01i.%02i (%s)",
-                       title, curfname, pageno, timestr, datestr, MAJOR, MINOR, PATCH,
-                       PLATFORM);
-               println(buf);
-               sprintf(buf, "%s", subttl);
-               println(buf);
-               println("");
-               nlines = 4;
+               // Notice bottom of page
+               if (nlines >= pagelen - BOT_MAR)
+                       eject();
+
+               // Print title, boilerplate, and subtitle at top of page
+               if (nlines == 0)
+               {
+                       pageno++;
+                       println("");
+                       date_string(datestr, dos_date());
+                       time_string(timestr, dos_time());
+                       sprintf(buf,
+                               "%-40s%-20s Page %-4d    %s %s        RMAC %01i.%01i.%02i (%s)",
+                               title, curfname, pageno, timestr, datestr, MAJOR, MINOR, PATCH,
+                               PLATFORM);
+                       println(buf);
+                       sprintf(buf, "%s", subttl);
+                       println(buf);
+                       println("");
+                       nlines = 4;
+               }
        }
 
        println(ln);
@@ -249,8 +252,6 @@ void ship_ln(const char * ln)
 //
 void InitListing(void)
 {
-       extern VALUE dos_date(), dos_time();
-
        subflag = 0;
        pageno = 0;
        nlines = 0;
@@ -301,11 +302,14 @@ void listeol(void)
        {
                ch = sect[lcursect].sfcode;
 
+               if (lcursect != M6502)
+        {
                for(; ch!=NULL; ch=ch->chnext)
                {
                        if (lsloc >= ch->chloc && lsloc < (ch->chloc + ch->ch_size))
                                break;
                }
+        }
 
                // Fatal: Can't find chunk holding code
                if (ch == NULL)
@@ -331,7 +335,8 @@ nochunk:
                                strncpy(lnimage + LOC_COL, buf, 8);
                        }
 
-                       if (lsloc >= (ch->chloc + ch->ch_size))
+                       if (lcursect != M6502 &&
+                    lsloc >= (ch->chloc + ch->ch_size))
                        {
                                if ((ch = ch->chnext) == NULL)
                                        goto nochunk;
@@ -348,13 +353,13 @@ nochunk:
                                strcpy(buf, "xx");
                                p++;            // Advance anyway
                        }
-                       else 
+                       else
                                sprintf(buf, "%02x", *p++ & 0xff);
 
                        strncpy(lnimage + col, buf, 2);
                }
 
-               // Flush partial line 
+               // Flush partial line
                if (col > DATA_COL)
                {
                        uc_ln(lnimage);
@@ -441,7 +446,7 @@ int d_subttl(void)
 
        tok += 2;
 
-       // Always eject on pages 2+ 
+       // Always eject on pages 2+
        if (ejectok && (subflag || pageno > 1))
                eject();
 
@@ -459,7 +464,7 @@ int d_title(void)
 {
        if (*tok != STRING)
                return error("missing string");
-       
+
 //     strcpy(title, (char*)tok[1]);
        strcpy(title, string[tok[1]]);
        tok += 2;