Nailed it

This commit is contained in:
XANTRONIX Development 2023-09-13 17:35:16 -04:00
parent b98f0041a6
commit 1b8430ae84
2 changed files with 50 additions and 20 deletions

View file

@ -24,6 +24,8 @@ enum zx_basic_token_type {
ZX81_BASIC_TOKEN_QUOTE, ZX81_BASIC_TOKEN_QUOTE,
ZX81_BASIC_TOKEN_SYMBOL, ZX81_BASIC_TOKEN_SYMBOL,
ZX81_BASIC_TOKEN_WORD, ZX81_BASIC_TOKEN_WORD,
ZX81_BASIC_TOKEN_INTEGRAL,
ZX81_BASIC_TOKEN_FLOAT,
}; };
ssize_t zx81_basic_dump(int fd, FILE *stream); ssize_t zx81_basic_dump(int fd, FILE *stream);

View file

@ -28,6 +28,10 @@ static inline enum zx_basic_token_type zx_basic_token_type_get(uint8_t b) {
return ZX81_BASIC_TOKEN_ALNUM; return ZX81_BASIC_TOKEN_ALNUM;
} else if (codepoint == '"') { } else if (codepoint == '"') {
return ZX81_BASIC_TOKEN_QUOTE; return ZX81_BASIC_TOKEN_QUOTE;
} else if (codepoint == '(') {
return ZX81_BASIC_TOKEN_PAREN_OPEN;
} else if (codepoint == ')') {
return ZX81_BASIC_TOKEN_PAREN_CLOSE;
} else { } else {
return ZX81_BASIC_TOKEN_SYMBOL; return ZX81_BASIC_TOKEN_SYMBOL;
} }
@ -43,6 +47,10 @@ static inline enum zx_basic_token_type zx_basic_token_type_get(uint8_t b) {
} else { } else {
return ZX81_BASIC_TOKEN_SYMBOL; return ZX81_BASIC_TOKEN_SYMBOL;
} }
} else if (ZX81_CHAR_TOKEN_INTEGRAL(b)) {
return ZX81_BASIC_TOKEN_INTEGRAL;
} else if (ZX81_CHAR_TOKEN_FLOAT(b)) {
return ZX81_BASIC_TOKEN_FLOAT;
} }
return ZX81_BASIC_TOKEN_UNKNOWN; return ZX81_BASIC_TOKEN_UNKNOWN;
@ -114,22 +122,44 @@ ssize_t zx81_basic_dump(int fd, FILE *stream) {
int space = 0; int space = 0;
if (type == ZX_BASIC_TOKEN_ALNUM) { switch (type) {
if (type_last == ZX_BASIC_TOKEN_WORD) { case ZX81_BASIC_TOKEN_ALNUM:
space = 1; if (type_last == ZX81_BASIC_TOKEN_WORD)
} space = 1;
} else if (type == ZX_BASIC_TOKEN_QUOTE) {
if (type_last == ZX_BASIC_TOKEN_WORD) { break;
space = 1;
} case ZX81_BASIC_TOKEN_QUOTE:
} else if (type == ZX_BASIC_TOKEN_SYMBOL) { if (type_last == ZX81_BASIC_TOKEN_WORD)
space = 0; space = 1;
} else if (type == ZX_BASIC_TOKEN_WORD) {
if (type_last != ZX_BASIC_TOKEN_SYMBOL) { break;
space = 1;
} case ZX81_BASIC_TOKEN_PAREN_OPEN:
} else if (ZX81_CHAR_TOKEN_INTEGRAL(c) || ZX81_CHAR_TOKEN_FLOAT(c)) { if (type_last == ZX81_BASIC_TOKEN_WORD)
i += 5; space = 1;
break;
case ZX81_BASIC_TOKEN_PAREN_CLOSE:
case ZX81_BASIC_TOKEN_SYMBOL:
space = 0;
break;
case ZX81_BASIC_TOKEN_WORD:
if (type_last != ZX81_BASIC_TOKEN_SYMBOL
&& type_last != ZX81_BASIC_TOKEN_PAREN_OPEN)
space = 1;
break;
case ZX81_BASIC_TOKEN_INTEGRAL:
case ZX81_BASIC_TOKEN_FLOAT:
i += 5;
break;
case ZX81_BASIC_TOKEN_UNKNOWN:
continue;
} }
if (space && fputc(' ', stream) < 0) { if (space && fputc(' ', stream) < 0) {
@ -143,10 +173,8 @@ ssize_t zx81_basic_dump(int fd, FILE *stream) {
last = c; last = c;
} }
if (!ZX81_CHAR_NEWLINE(((uint8_t *)buf)[i-1])) { if (fputc('\n', stream) < 0) {
if (fputc('\n', stream) < 0) { goto error_io;
goto error_io;
}
} }
} }