Add printing of negative numbers.

This commit is contained in:
Lawrence Kesteloot 2018-08-05 16:53:15 -07:00
parent 84d9a7ce82
commit 5569b9f58c
3 changed files with 18 additions and 4 deletions

2
main.c
View File

@ -262,7 +262,7 @@ static void list_statement() {
print_newline();
while ((next_line = get_next_line(line)) != 0) {
print_int(get_line_number(line));
print_uint(get_line_number(line));
print_char(' ');
print_detokenized(line + 4);

View File

@ -223,11 +223,12 @@ void print(uint8_t *s) {
/**
* Print an unsigned integer.
*/
void print_int(uint16_t i) {
void print_uint(uint16_t i) {
// Is this the best way to do this? I've seen it done backwards, where
// digits are added to a buffer least significant digit first, then reversed,
// but this seems faster.
char printed = 0;
if (i >= 10000) {
int16_t r = i / 10000;
print_char('0' + r);
@ -254,6 +255,18 @@ void print_int(uint16_t i) {
print_char('0' + i);
}
/**
* Print a signed integer.
*/
void print_int(int16_t i) {
if ((i & 0x8000) != 0) {
print_char('-');
i = -i;
}
print_uint((uint16_t) i);
}
/**
* Print an error message, optionally with a line number if it's
* not INVALID_LINE_NUMBER.
@ -264,7 +277,7 @@ static void generic_error_message(uint8_t *message, uint16_t line_number) {
if (line_number != INVALID_LINE_NUMBER) {
print(" IN ");
print_int(line_number);
print_uint(line_number);
}
}

View File

@ -34,7 +34,8 @@ void home(void);
void print(uint8_t *s);
void print_char(uint8_t c);
void print_int(uint16_t i);
void print_uint(uint16_t i);
void print_int(int16_t i);
void print_newline(void);
void for_statement(uint16_t line_number, uint16_t var_address, int16_t end_value, int16_t step,