home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / program / compiler / nasm20b / nasm_src / errorasm.c < prev    next >
C/C++ Source or Header  |  1993-01-19  |  4KB  |  138 lines

  1. /* ---------------------------------------------------------------------- */
  2. /*                   Copyright (C) 1991 by Natürlich!                     */
  3. /*                      This file is copyrighted!                         */
  4. /*                Refer to the documentation for details.                 */
  5. /* ---------------------------------------------------------------------- */
  6. #include <stdio.h>
  7. #include "defines.h"
  8. #include "nasm.h"
  9. #include "y_tab.h"
  10. #include "buffer.h"
  11. #include "ops.h"
  12.  
  13. extern char huge     *yylval;       /* ho ho */
  14. extern buffer huge   *bp;
  15. extern _ops          ops[];
  16. extern char          buf[];
  17.  
  18.  
  19. void h_print()
  20. {
  21.    buffer huge *p = bp;
  22.    int         flag = 0;
  23.  
  24.    if( ! p)
  25.       return;
  26.    while( p->before)
  27.       p = p->before;
  28.    do
  29.       if( (p->type & 0xF) <= BUF_MACRO)     /* MACRO or FILE */
  30.       {
  31.          if( flag++)
  32.             putc( ',', ESTREAM);
  33.          fprintf( ESTREAM, "%s[%d]",  p->name, p->line);
  34.       }
  35.    while( p = p->next);
  36.  
  37.    if( flag)
  38.    {
  39.       putc(':', ESTREAM);
  40.       putc(' ', ESTREAM);
  41.    }
  42. }
  43.  
  44.  
  45. char *cnv ( no)
  46. {
  47.    switch( no)
  48.    {
  49.       case 0          : return("EOF");
  50.       case T_EOL      : return( "End of line");
  51.       case T_NUMBER   : sprintf( buf, "$%lX", yylval); break;
  52.       case T_STRING   : sprintf( buf, "\"%s\"", yylval + 2); break;
  53.       case T_FILE     :
  54.       case T_IDENT    :
  55.       case T_LABEL    : return( yylval);
  56.       case T_CHAR     : sprintf( buf, "'%c", (unsigned char) yylval); break;
  57.       case T_INSTR    : return( get_mnemo( (unsigned int) yylval));
  58.       case T_EXPR     : return( "<expression>");
  59.       case T_DOTEQ    : return( ".=");
  60.       case T_IF       : return( ".IF");
  61.       case T_ELSE     : return( ".ELSE" );
  62.       case T_ENDIF    : return( ".ENDIF");
  63.       case T_ORG      : return( ".ORG");
  64.       case T_DS       : return( ".DS"   );
  65.       case T_WORD     : return( ".WORD");
  66.       case T_BYTE     : return( ".BYTE");
  67.       case T_SBYTE    : return( ".SBYTE");
  68.       case T_OPT      : return( ".OPT");
  69.       case T_MACRO    : return( ".MACRO");
  70.       case T_ENDM     : return( ".ENDM");
  71.       case T_END      : return( ".END");
  72.       case T_NUM      : return( "NUM");
  73.       case T_ACCU     : return( "A");
  74.       case T_AND      : return( ".AND");
  75.       case T_OR       : return( ".OR");
  76.       case T_NEQ      : return( "<>");
  77.       case T_GEQ      : return( ">=");
  78.       case T_LEQ      : return( "<=");
  79.       case T_NOT      : return( ".NOT");
  80.       case T_DEF      : return( ".DEF");
  81.       case T_NO       : return( "NO");
  82.       case T_OBJ      : return( "OBJ");
  83.       case T_MLIST    : return( "MLIST");
  84.       case T_CLIST    : return( "CLIST");
  85.       case T_EJECT    : return( "EJECT");
  86.       case T_XREF     : return( "XREF");
  87.       case T_ERR      : return( "ERR");
  88.       case T_PAGE     : return( ".PAGE");
  89.       case T_ERROR    : return( ".ERROR");
  90.       case T_TITLE    : return( ".TITLE");
  91.       case T_DBYTE    : return( ".DBYTE");
  92.       case T_TAB      : return( ".TAB");
  93.       case T_FLOAT    : return( ".FLOAT");
  94.       case T_CBYTE    : return( ".CBYTE");
  95.       case T_LOCAL    : return( ".LOCAL");
  96.       case T_UNDEF    : return( ".UNDEF");
  97.       case T_SET      : return( ".SET");
  98.       case T_REF      : return( ".REF");
  99.       case T_LIST     : return( ".LIST");
  100.       case T_PARA     : return( "macro parameter");
  101.       case T_MPARA    : sprintf( buf, "%%%ld", yylval);   break;
  102.       case T_MSPARA   : sprintf( buf, "%%$%ld", yylval);  break;
  103.       case T_MLPARA   : sprintf( buf, "%%(%s)", yylval);  break;
  104.       case T_MLSPARA  : sprintf( buf, "%%$(%s)", yylval); break;
  105.       case T_INCLUDE  : return( ".INCLUDE");
  106.       default         :
  107.          switch( no)
  108.          {
  109.             case ' '  : return( "[SPACE]");
  110.             case '\t' : return( "[TAB]");
  111.             case '\n' : return( "[LF]");
  112.             case '\r' : return( "[CR]");
  113.             case '\f' : return( "[FF]");
  114.             default   :
  115.                if( no >= ' ' && no <= 126)
  116.                   sprintf( buf, "'%c'", no);
  117.                else
  118.                   sprintf( buf, "#$%04X", no);
  119.          }
  120.    }
  121.    return( buf);
  122. }
  123.  
  124. void nterror( err, tok)
  125. char   *err;
  126. {
  127.    nserror( err, cnv( tok));
  128. }
  129.  
  130. void nberror( err, line)
  131. char        *err;
  132. unsigned    line;
  133. {
  134.    sprintf( buf, "%s, Fwd ref (probably) in line %u", err, line);
  135.    nerror( buf);
  136. }
  137. void finalshit() {}
  138.