From 389f084bc1cd30b98d196fe57d083c8f6637e6d6 Mon Sep 17 00:00:00 2001 From: ggn Date: Tue, 10 Nov 2015 22:46:53 +0200 Subject: [PATCH] New keyword ^^ABSCOUNT counts bytes defined in current .abs section. --- expr.c | 7 ++++++- kwtab | 2 +- token.c | 5 +++++ token.h | 1 + 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/expr.c b/expr.c index d1b9ac2..0ecaa45 100644 --- a/expr.c +++ b/expr.c @@ -34,7 +34,8 @@ char itokcl[] = { ')', ']', '}', 0, // CPAR CR_DEFINED, CR_REFERENCED, // SUNARY (special unary) CR_STREQ, CR_MACDEF, - CR_DATE, CR_TIME, 0, + CR_DATE, CR_TIME, + CR_ABSCOUNT, 0, '!', '~', UNMINUS, 0, // UNARY '*', '/', '%', 0, // MULT '+', '-', 0, // ADD @@ -149,6 +150,10 @@ int expr1(void) { switch ((int)*tok++) { + case CR_ABSCOUNT: + *evalTokenBuffer++ = CONST; + *evalTokenBuffer++ = (LONG)sect[ABS].sloc; + break; case CR_TIME: *evalTokenBuffer++ = CONST; *evalTokenBuffer++ = dos_time(); diff --git a/kwtab b/kwtab index 750c603..70c33d2 100644 --- a/kwtab +++ b/kwtab @@ -71,6 +71,6 @@ streq 118 macdef 119 time 120 date 121 - +abscount 122 diff --git a/token.c b/token.c index c78d97a..84faa8f 100644 --- a/token.c +++ b/token.c @@ -554,6 +554,9 @@ DEBUG printf("ExM: SYMBOL=\"%s\"", d); case DOTL: d = ".l"; break; + case CR_ABSCOUNT: + d = "^^abscount"; + break; case CR_DATE: d = "^^date"; break; @@ -1641,6 +1644,8 @@ void DumpTokenBuffer(void) printf("[DOTI]"); else if (*t == ENDEXPR) printf("[ENDEXPR]"); + else if (*t == CR_ABSCOUNT) + printf("[CR_ABSCOUNT]"); else if (*t == CR_DEFINED) printf("[CR_DEFINED]"); else if (*t == CR_REFERENCED) diff --git a/token.h b/token.h index 3d3ea22..c44989c 100644 --- a/token.h +++ b/token.h @@ -62,6 +62,7 @@ #define CR_MACDEF 'w' // ^^macdef - is macro defined? #define CR_TIME 'x' // ^^time - DOS format time #define CR_DATE 'y' // ^^date - DOS format date +#define CR_ABSCOUNT 'z' // ^^abscount - count the number of bytes defined in curent .abs section // Character Attributes #define ILLEG 0 // Illegal character (unused) -- 2.37.2