X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=listing.c;h=bbe24054af5b85904a82177e4b902a754f6a6c90;hp=f9064cd228bd34635335da864913088dc6aa4315;hb=5f23454f7155f0c77ea1bede3f9e60b39da99fa8;hpb=d95ee7f628ceac9af515079fb6797476557a23d2 diff --git a/listing.c b/listing.c index f9064cd..bbe2405 100644 --- 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 @@ -14,28 +14,28 @@ // 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;