1
0
mirror of https://github.com/cc65/cc65.git synced 2024-06-26 05:29:30 +00:00

New --label-break option

git-svn-id: svn://svn.cc65.org/cc65/trunk@3699 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz 2006-01-27 19:36:33 +00:00
parent ceffc4e090
commit 7086da868b
6 changed files with 43 additions and 7 deletions

View File

@ -6,7 +6,7 @@
/* */
/* */
/* */
/* (C) 2000-2005 Ullrich von Bassewitz */
/* (C) 2000-2006 Ullrich von Bassewitz */
/* Römerstrasse 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
@ -69,6 +69,7 @@ unsigned Comments = 0; /* Add which comments to the output? */
/* Page formatting */
unsigned PageLength = 0; /* Length of a listing page */
unsigned LBreak = 7; /* Linefeed if labels exceed this limit */
unsigned MIndent = 9; /* Mnemonic indent */
unsigned AIndent = 17; /* Argument indent */
unsigned CIndent = 49; /* Comment indent */

View File

@ -6,7 +6,7 @@
/* */
/* */
/* */
/* (C) 2000-2005 Ullrich von Bassewitz */
/* (C) 2000-2006 Ullrich von Bassewitz */
/* Römerstrasse 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
@ -74,6 +74,7 @@ extern unsigned Comments; /* Add which comments to the output? */
#define MIN_PAGE_LEN 32
#define MAX_PAGE_LEN 127
extern unsigned PageLength; /* Length of a listing page */
extern unsigned LBreak; /* Linefeed if labels exceed this limit */
extern unsigned MIndent; /* Mnemonic indent */
extern unsigned AIndent; /* Argument indent */
extern unsigned CIndent; /* Comment indent */

View File

@ -35,6 +35,7 @@
#include <stdio.h>
#include <string.h>
#include <limits.h>
#if defined(_MSC_VER)
/* Microsoft compiler */
# include <io.h>
@ -86,6 +87,7 @@ static void GlobalSection (void)
{ "INPUTNAME", INFOTOK_INPUTNAME },
{ "INPUTOFFS", INFOTOK_INPUTOFFS },
{ "INPUTSIZE", INFOTOK_INPUTSIZE },
{ "LABELBREAK", INFOTOK_LABELBREAK },
{ "OUTPUTNAME", INFOTOK_OUTPUTNAME },
{ "PAGELENGTH", INFOTOK_PAGELENGTH },
{ "STARTADDR", INFOTOK_STARTADDR },
@ -160,6 +162,14 @@ static void GlobalSection (void)
InfoNextTok ();
break;
case INFOTOK_LABELBREAK:
InfoNextTok ();
InfoAssureInt ();
InfoRangeCheck (0, UCHAR_MAX);
LBreak = (unsigned char) InfoIVal;
InfoNextTok ();
break;
case INFOTOK_OUTPUTNAME:
InfoNextTok ();
InfoAssureStr ();

View File

@ -6,7 +6,7 @@
/* */
/* */
/* */
/* (C) 1998-2005 Ullrich von Bassewitz */
/* (C) 1998-2006 Ullrich von Bassewitz */
/* Römerstrasse 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
@ -37,6 +37,7 @@
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <limits.h>
#include <time.h>
/* common */
@ -88,6 +89,7 @@ static void Usage (void)
" --help\t\tHelp (this text)\n"
" --hexoffs\t\tUse hexadecimal label offsets\n"
" --info name\t\tSpecify an info file\n"
" --label-break n\tAdd newline if label exceeds length n\n"
" --pagelength n\tSet the page length for the listing\n"
" --start-addr addr\tSet the start/load address\n"
" --verbose\t\tIncrease verbosity\n"
@ -198,6 +200,24 @@ static void OptInfo (const char* Opt attribute ((unused)), const char* Arg)
static void OptLabelBreak (const char* Opt, const char* Arg)
/* Handle the --label-break option */
{
/* Convert the argument to a number */
unsigned long Val = CvtNumber (Opt, Arg);
/* Check for a valid range */
if (Val >= UCHAR_MAX) {
Error ("Argument for %s out of valid range (%d)",
Opt, UCHAR_MAX);
}
/* Use the value */
LBreak = (unsigned char) Val;
}
static void OptPageLength (const char* Opt attribute ((unused)), const char* Arg)
/* Handle the --pagelength option */
{
@ -392,6 +412,7 @@ int main (int argc, char* argv [])
{ "--help", 0, OptHelp },
{ "--hexoffs", 0, OptHexOffs },
{ "--info", 1, OptInfo },
{ "--label-break", 1, OptLabelBreak },
{ "--pagelength", 1, OptPageLength },
{ "--start-addr", 1, OptStartAddr },
{ "--verbose", 0, OptVerbose },

View File

@ -6,7 +6,7 @@
/* */
/* */
/* */
/* (C) 2000-2005 Ullrich von Bassewitz */
/* (C) 2000-2006 Ullrich von Bassewitz */
/* Römerstrasse 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
@ -166,8 +166,10 @@ void DefLabel (const char* Name)
/* Define a label with the given name */
{
Output ("%s:", Name);
/* Don't start a new line if the label is fully in the left column */
if (Col > MIndent) {
/* If the label is longer than the configured maximum, or if it runs into
* the opcode column, start a new line.
*/
if (Col > LBreak+2 || Col > MIndent) {
LineFeed ();
}
}

View File

@ -6,7 +6,7 @@
/* */
/* */
/* */
/* (C) 2000-2005 Ullrich von Bassewitz */
/* (C) 2000-2006 Ullrich von Bassewitz */
/* Römerstrasse 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
@ -73,6 +73,7 @@ typedef enum token_t {
INFOTOK_INPUTNAME,
INFOTOK_INPUTOFFS,
INFOTOK_INPUTSIZE,
INFOTOK_LABELBREAK,
INFOTOK_OUTPUTNAME,
INFOTOK_PAGELENGTH,
INFOTOK_STARTADDR,