typedef'd boolean to make source more readable. added "--test" option

(unused atm). no change in functionality.


git-svn-id: https://svn.code.sf.net/p/acme-crossass/code-0/trunk@130 4df02467-bbd4-4a76-a152-e7ce94205b78
This commit is contained in:
marcobaye 2020-05-01 21:01:23 +00:00
parent bf074b830d
commit 7286e00855
11 changed files with 33 additions and 24 deletions

View File

@ -65,6 +65,7 @@ static const char arg_vicelabels[] = "VICE labels filename";
#define OPTION_FULLSTOP "fullstop" #define OPTION_FULLSTOP "fullstop"
#define OPTION_IGNORE_ZEROES "ignore-zeroes" #define OPTION_IGNORE_ZEROES "ignore-zeroes"
#define OPTION_STRICT_SEGMENTS "strict-segments" #define OPTION_STRICT_SEGMENTS "strict-segments"
#define OPTION_TEST "test"
// options for "-W" // options for "-W"
#define OPTIONWNO_LABEL_INDENT "no-label-indent" #define OPTIONWNO_LABEL_INDENT "no-label-indent"
#define OPTIONWNO_OLD_FOR "no-old-for" #define OPTIONWNO_OLD_FOR "no-old-for"
@ -146,6 +147,7 @@ static void show_help_and_exit(void)
" --" OPTION_MSVC " output errors in MS VS format\n" " --" OPTION_MSVC " output errors in MS VS format\n"
" --" OPTION_COLOR " uses ANSI color codes for error output\n" " --" OPTION_COLOR " uses ANSI color codes for error output\n"
" --" OPTION_FULLSTOP " use '.' as pseudo opcode prefix\n" " --" OPTION_FULLSTOP " use '.' as pseudo opcode prefix\n"
" --" OPTION_TEST " enable experimental features\n"
PLATFORM_OPTION_HELP PLATFORM_OPTION_HELP
" -V, --" OPTION_VERSION " show version and exit\n"); " -V, --" OPTION_VERSION " show version and exit\n");
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
@ -480,6 +482,8 @@ static const char *long_option(const char *string)
config.honor_leading_zeroes = FALSE; config.honor_leading_zeroes = FALSE;
else if (strcmp(string, OPTION_STRICT_SEGMENTS) == 0) else if (strcmp(string, OPTION_STRICT_SEGMENTS) == 0)
config.segment_warning_is_error = TRUE; config.segment_warning_is_error = TRUE;
else if (strcmp(string, OPTION_TEST) == 0)
config.test_new_features = TRUE;
PLATFORM_LONGOPTION_CODE PLATFORM_LONGOPTION_CODE
else if (strcmp(string, OPTION_COLOR) == 0) else if (strcmp(string, OPTION_COLOR) == 0)
config.format_color = TRUE; config.format_color = TRUE;

View File

@ -609,7 +609,7 @@ static int expect_operand_or_monadic_operator(void)
{ {
struct operator *operator; struct operator *operator;
int ugly_length_kluge; int ugly_length_kluge;
int perform_negation; // actually bool boolean perform_negation;
SKIPSPACE(); SKIPSPACE();
switch (GotByte) { switch (GotByte) {

View File

@ -23,9 +23,9 @@ enum expression_type {
struct expression { struct expression {
//enum expression_type type; //enum expression_type type;
struct number number; struct number number;
int is_empty; // actually bool: nothing parsed (first character was a delimiter) FIXME - make into its own result type! boolean is_empty; // nothing parsed (first character was a delimiter) FIXME - make into its own result type!
int open_parentheses; // number of parentheses still open int open_parentheses; // number of parentheses still open
int is_parenthesized; // actually bool: whole expression was in parentheses (indicating indirect addressing) boolean is_parenthesized; // whole expression was in parentheses (indicating indirect addressing)
}; };

View File

@ -7,7 +7,15 @@
#define config_H #define config_H
// make sure the enum below works with strange compilers, too:
#ifdef FALSE
#undef FALSE
#endif
#ifdef TRUE
#undef TRUE
#endif
// types // types
typedef enum { FALSE = 0, TRUE } boolean; // yes, I could include <stdbool.h>, but this source should work with ancient compilers as well...
typedef unsigned int scope_t; typedef unsigned int scope_t;
typedef signed long intval_t; // at least 32 bits typedef signed long intval_t; // at least 32 bits
typedef unsigned long uintval_t; // just for logical shift right typedef unsigned long uintval_t; // just for logical shift right
@ -37,11 +45,6 @@ struct number { // either int or float
#ifndef NULL #ifndef NULL
#define NULL ((void *) 0) #define NULL ((void *) 0)
#endif #endif
// Boolean values
#ifndef FALSE
#define FALSE 0
#define TRUE (!FALSE)
#endif
#endif #endif

View File

@ -59,7 +59,7 @@ void flow_forloop(struct for_loop *loop)
loop_counter.val.intval = loop->counter.first; loop_counter.val.intval = loop->counter.first;
loop_counter.addr_refs = loop->counter.addr_refs; loop_counter.addr_refs = loop->counter.addr_refs;
symbol_set_value(loop->symbol, &loop_counter, TRUE); symbol_set_value(loop->symbol, &loop_counter, TRUE);
if (loop->old_algo) { if (loop->use_old_algo) {
// old algo for old syntax: // old algo for old syntax:
// if count == 0, skip loop // if count == 0, skip loop
if (loop->counter.last) { if (loop->counter.last) {

View File

@ -1,5 +1,5 @@
// ACME - a crossassembler for producing 6502/65c02/65816/65ce02 code. // ACME - a crossassembler for producing 6502/65c02/65816/65ce02 code.
// Copyright (C) 1998-2016 Marco Baye // Copyright (C) 1998-2020 Marco Baye
// Have a look at "acme.c" for further info // Have a look at "acme.c" for further info
// //
// flow control stuff (loops, conditional assembly etc.) // flow control stuff (loops, conditional assembly etc.)
@ -19,7 +19,7 @@ struct block {
// struct to pass "!for" loop stuff from pseudoopcodes.c to flow.c // struct to pass "!for" loop stuff from pseudoopcodes.c to flow.c
struct for_loop { struct for_loop {
struct symbol *symbol; struct symbol *symbol;
int old_algo; // actually bool boolean use_old_algo;
struct { struct {
intval_t first, intval_t first,
last, last,
@ -32,7 +32,7 @@ struct for_loop {
// structs to pass "!do" loop stuff from pseudoopcodes.c to flow.c // structs to pass "!do" loop stuff from pseudoopcodes.c to flow.c
struct loop_condition { struct loop_condition {
int line; // original line number int line; // original line number
int is_until; // actually bool (0 for WHILE, 1 for UNTIL) boolean is_until; // so FALSE means WHILE, TRUE means UNTIL)
char *body; // pointer to actual expression char *body; // pointer to actual expression
}; };
struct do_loop { struct do_loop {

View File

@ -133,6 +133,7 @@ void config_default(struct config *conf)
conf->msg_stream = stderr; // set to stdout by --use-stdout conf->msg_stream = stderr; // set to stdout by --use-stdout
conf->honor_leading_zeroes = TRUE; // disabled by --ignore-zeroes conf->honor_leading_zeroes = TRUE; // disabled by --ignore-zeroes
conf->segment_warning_is_error = FALSE; // enabled by --strict-segments TODO - toggle default? conf->segment_warning_is_error = FALSE; // enabled by --strict-segments TODO - toggle default?
conf->test_new_features = FALSE; // enabled by --test
} }
// memory allocation stuff // memory allocation stuff

View File

@ -67,15 +67,16 @@ extern int pass_real_errors; // Errors yet
struct config { struct config {
char pseudoop_prefix; // '!' or '.' char pseudoop_prefix; // '!' or '.'
int process_verbosity; // level of additional output int process_verbosity; // level of additional output
int warn_on_indented_labels; // actually bool: warn if indented label is encountered boolean warn_on_indented_labels; // warn if indented label is encountered
int warn_on_old_for; // actually bool: warn if "!for" with old syntax is found boolean warn_on_old_for; // warn if "!for" with old syntax is found
int warn_on_type_mismatch; // actually bool: use type-checking system boolean warn_on_type_mismatch; // use type-checking system
signed long max_errors; // errors before giving up signed long max_errors; // errors before giving up
int format_msvc; // actually bool, enabled by --msvc boolean format_msvc; // enabled by --msvc
int format_color; // actually bool, enabled by --color boolean format_color; // enabled by --color
FILE *msg_stream; // defaults to stderr, changed to stdout by --use-stdout FILE *msg_stream; // defaults to stderr, changed to stdout by --use-stdout
int honor_leading_zeroes; // actually bool, TRUE, disabled by --ignore-zeroes boolean honor_leading_zeroes; // TRUE, disabled by --ignore-zeroes
int segment_warning_is_error; // actually bool, FALSE, enabled by --strict-segments boolean segment_warning_is_error; // FALSE, enabled by --strict-segments
boolean test_new_features; // FALSE, enabled by --test
}; };
extern struct config config; extern struct config config;

View File

@ -43,7 +43,7 @@ struct output {
intval_t write_idx; // index of next write intval_t write_idx; // index of next write
intval_t lowest_written; // smallest address used intval_t lowest_written; // smallest address used
intval_t highest_written; // largest address used intval_t highest_written; // largest address used
int initvalue_set; // actually bool boolean initvalue_set;
struct { struct {
intval_t start; // start of current segment (or NO_SEGMENT_START) intval_t start; // start of current segment (or NO_SEGMENT_START)
intval_t max; // highest address segment may use intval_t max; // highest address segment may use

View File

@ -66,7 +66,7 @@ void notreallypo_setpc(void)
read memory limit read memory limit
} else if (strcmp(GlobalDynaBuf->buffer, "name") == 0) { } else if (strcmp(GlobalDynaBuf->buffer, "name") == 0) {
skip '=' skip '='
read segment name */ read segment name (quoted string!) */
} else { } else {
Throw_error("Unknown \"* =\" segment modifier."); Throw_error("Unknown \"* =\" segment modifier.");
return; return;
@ -893,7 +893,7 @@ static enum eos po_for(void) // now GotByte = illegal char
ALU_defined_int(&intresult); // read first argument ALU_defined_int(&intresult); // read first argument
loop.counter.addr_refs = intresult.addr_refs; loop.counter.addr_refs = intresult.addr_refs;
if (Input_accept_comma()) { if (Input_accept_comma()) {
loop.old_algo = FALSE; // new format - yay! loop.use_old_algo = FALSE; // new format - yay!
if (!config.warn_on_old_for) if (!config.warn_on_old_for)
Throw_first_pass_warning("Found new \"!for\" syntax."); Throw_first_pass_warning("Found new \"!for\" syntax.");
loop.counter.first = intresult.val.intval; // use first argument loop.counter.first = intresult.val.intval; // use first argument
@ -906,7 +906,7 @@ static enum eos po_for(void) // now GotByte = illegal char
} }
loop.counter.increment = (loop.counter.last < loop.counter.first) ? -1 : 1; loop.counter.increment = (loop.counter.last < loop.counter.first) ? -1 : 1;
} else { } else {
loop.old_algo = TRUE; // old format - booo! loop.use_old_algo = TRUE; // old format - booo!
if (config.warn_on_old_for) if (config.warn_on_old_for)
Throw_first_pass_warning("Found old \"!for\" syntax."); Throw_first_pass_warning("Found old \"!for\" syntax.");
if (intresult.val.intval < 0) if (intresult.val.intval < 0)

View File

@ -9,7 +9,7 @@
#define RELEASE "0.96.5" // update before release FIXME #define RELEASE "0.96.5" // update before release FIXME
#define CODENAME "Fenchurch" // update before release #define CODENAME "Fenchurch" // update before release
#define CHANGE_DATE "28 Apr" // update before release FIXME #define CHANGE_DATE "1 May" // update before release FIXME
#define CHANGE_YEAR "2020" // update before release #define CHANGE_YEAR "2020" // update before release
//#define HOME_PAGE "http://home.pages.de/~mac_bacon/smorbrod/acme/" //#define HOME_PAGE "http://home.pages.de/~mac_bacon/smorbrod/acme/"
#define HOME_PAGE "http://sourceforge.net/p/acme-crossass/" // FIXME #define HOME_PAGE "http://sourceforge.net/p/acme-crossass/" // FIXME