X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=direct.c;h=7673d29c18eb0089d848148b427b0ef5fd1992f0;hp=100db425f7afe7bad4fad3a0e5e64603fcfbb587;hb=75969398d9b8a9f82ea76fc4e4cbfb97b11160a4;hpb=bb94015a443a0aebaa93ee62f9f2738fa3a96784 diff --git a/direct.c b/direct.c index 100db42..7673d29 100644 --- a/direct.c +++ b/direct.c @@ -8,7 +8,7 @@ #include "direct.h" #include "sect.h" -#include "risca.h" +#include "riscasm.h" #include "error.h" #include "token.h" #include "procln.h" @@ -21,65 +21,70 @@ #define DEF_KW #include "kwtab.h" + TOKEN exprbuf[128]; // Expression buffer SYM * symbolPtr[1000000]; // Symbol pointers table +static long unused; // For supressing 'write' warnings + // Directive handler table int (*dirtab[])() = { - d_org, // 0 org - d_even, // 1 even - d_unimpl, // 2 .6502 - d_68000, // 3 .68000 - d_bss, // 4 bss - d_data, // 5 data - d_text, // 6 text - d_abs, // 7 abs - d_comm, // 8 comm - d_init, // 9 init - d_cargs, // 10 cargs - d_goto, // 11 goto - d_dc, // 12 dc - d_ds, // 13 ds - d_undmac, // 14 undefmac - d_gpu, // 15 .gpu - d_dsp, // 16 .dsp - d_dcb, // 17 dcb - d_unimpl, // 18* set - d_unimpl, // 19* reg - d_unimpl, // 20 dump - d_incbin, // 21 .incbin //load - d_unimpl, // 22 disable - d_unimpl, // 23 enable - d_globl, // 24 globl - d_regbank0, // 25 .regbank0 - d_regbank1, // 26 .regbank1 - d_unimpl, // 27 xdef - d_assert, // 28 assert - d_unimpl, // 29* if - d_unimpl, // 30* endif - d_unimpl, // 31* endc - d_unimpl, // 32* iif - d_include, // 33 include - fpop, // 34 end - d_unimpl, // 35* macro - ExitMacro, // 36* exitm - d_unimpl, // 37* endm - d_list, // 38 list - d_nlist, // 39 nlist - d_long, // 40* rept - d_phrase, // 41* endr - d_dphrase, // 42 struct - d_qphrase, // 43 ends - d_title, // 44 title - d_subttl, // 45 subttl - eject, // 46 eject - d_unimpl, // 47 error - d_unimpl, // 48 warn - d_noclear, // 49 .noclear - d_equrundef, // 50 .equrundef/.regundef - d_ccundef, // 51 .ccundef - d_print, // 52 .print - d_cstruct, // 53 .cstruct + d_org, // 0 org + d_even, // 1 even + d_unimpl, // 2 .6502 + d_68000, // 3 .68000 + d_bss, // 4 bss + d_data, // 5 data + d_text, // 6 text + d_abs, // 7 abs + d_comm, // 8 comm + d_init, // 9 init + d_cargs, // 10 cargs + d_goto, // 11 goto + d_dc, // 12 dc + d_ds, // 13 ds + d_undmac, // 14 undefmac + d_gpu, // 15 .gpu + d_dsp, // 16 .dsp + d_dcb, // 17 dcb + d_unimpl, // 18* set + d_unimpl, // 19* reg + d_unimpl, // 20 dump + d_incbin, // 21 .incbin //load + d_unimpl, // 22 disable + d_unimpl, // 23 enable + d_globl, // 24 globl + d_regbank0, // 25 .regbank0 + d_regbank1, // 26 .regbank1 + d_unimpl, // 27 xdef + d_assert, // 28 assert + d_unimpl, // 29* if + d_unimpl, // 30* endif + d_unimpl, // 31* endc + d_unimpl, // 32* iif + d_include, // 33 include + fpop, // 34 end + d_unimpl, // 35* macro + ExitMacro, // 36* exitm + d_unimpl, // 37* endm + d_list, // 38 list + d_nlist, // 39 nlist + d_long, // 40* rept + d_phrase, // 41* endr + d_dphrase, // 42 struct + d_qphrase, // 43 ends + d_title, // 44 title + d_subttl, // 45 subttl + eject, // 46 eject + d_unimpl, // 47 error + d_unimpl, // 48 warn + d_noclear, // 49 .noclear + d_equrundef, // 50 .equrundef/.regundef + d_ccundef, // 51 .ccundef + d_print, // 52 .print + d_cstruct, // 53 .cstruct + d_jpad, // 54 .jpad (deprecated) + d_nojpad, // 55 .nojpad (deprecated) }; @@ -134,7 +139,7 @@ int d_print(void) printf("%s", prntstr); if (list_fd) - write(list_fd, prntstr, (LONG)strlen(prntstr)); + unused = write(list_fd, prntstr, (LONG)strlen(prntstr)); tok += 2; break; @@ -184,7 +189,7 @@ int d_print(void) printf("%s", prntstr); if (list_fd) - write(list_fd, prntstr, (LONG)strlen(prntstr)); + unused = write(list_fd, prntstr, (LONG)strlen(prntstr)); formatting = 0; wordlong = 0; @@ -222,7 +227,8 @@ int d_ccundef(void) if (*tok != SYMBOL) { - error(syntax_error); +// error(syntax_error); + error("syntax error; expected symbol"); return ERROR; } @@ -258,14 +264,15 @@ int d_equrundef(void) while (*tok != EOL) { - // Skip preceeding or seperating commas + // Skip preceeding or seperating commas (if any) if (*tok == ',') tok++; // Check we are dealing with a symbol if (*tok != SYMBOL) { - error(syntax_error); +// error(syntax_error); + error("syntax error; expected symbol"); return ERROR; } @@ -312,35 +319,11 @@ int d_incbin(void) if (*tok != STRING) { - error(syntax_error); +// error(syntax_error); + error("syntax error; string missing"); return ERROR; } -#if 0 - if ((j = open(string[tok[1]], _OPEN_INC)) >= 0) - { - size = lseek(j, 0L, SEEK_END); - chcheck(size); - pos = lseek(j, 0L, SEEK_SET); - - DEBUG - { - printf("INCBIN: File '%s' is %li bytes.\n", string[tok[1]], size); - } - - for(i=0; i