diff options
Diffstat (limited to 'misc/pascal/pascal/perr.c')
-rw-r--r-- | misc/pascal/pascal/perr.c | 381 |
1 files changed, 191 insertions, 190 deletions
diff --git a/misc/pascal/pascal/perr.c b/misc/pascal/pascal/perr.c index b09afd675..3737b2588 100644 --- a/misc/pascal/pascal/perr.c +++ b/misc/pascal/pascal/perr.c @@ -1,190 +1,191 @@ -/**********************************************************************
- * perr.c
- * Error Handlers
- *
- * Copyright (C) 2008 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * 3. Neither the name NuttX nor the names of its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- **********************************************************************/
-
-/**********************************************************************
- * Included Files
- **********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-#include "config.h"
-#include "keywords.h"
-#include "pasdefs.h"
-#include "pedefs.h"
-
-#include "pas.h"
-#include "ptkn.h"
-#include "perr.h"
-#if CONFIG_DEBUG
-# include "ptbl.h"
-#endif
-
-/**********************************************************************
- * Definitions
- **********************************************************************/
-
-#if CONFIG_DEBUG
-#define DUMPTABLES dumpTables()
-#else
-#define DUMPTABLES
-#endif
-
-/**********************************************************************
- * Private Variables
- **********************************************************************/
-
-static const char fmtErrNoToken[] =
- "Line %d:%04ld Error %02x Token %02x\n";
-static const char fmtErrWithToken[] =
- "Line %d:%04ld Error %02x Token %02x (%s)\n";
-static const char fmtErrAbort[] =
- "Fatal Error %d -- Compilation aborted\n";
-
-/**********************************************************************
- * Private Function Prototypes
- **********************************************************************/
-
-static void printError(uint16 errcode);
-
-/***********************************************************************/
-
-void errmsg(char *fmt, ...)
-{
- char buffer[1024];
- va_list ap;
-
- /* Get the full string */
-
- va_start(ap, fmt);
- (void)vsprintf(buffer, fmt, ap);
-
- /* Then output the string to stderr, the err file, and the list file */
-
- fputs(buffer, stderr);
- fputs(buffer, errFile);
- fputs(buffer, lstFile);
-
- va_end(ap);
-}
-
-/***********************************************************************/
-
-void warn(uint16 errcode)
-{
- TRACE(lstFile,"[warn:%04x]", errcode);
-
- /* Write error record to the error and list files */
-
- printError(errcode);
-
- /* Increment the count of warning */
-
- warn_count++;
-} /* end warn */
-
-/***********************************************************************/
-
-void error(uint16 errcode)
-{
- TRACE(lstFile,"[error:%04x]", errcode);
-
-#if CONFIG_DEBUG
- fatal(errcode);
-#else
- /* Write error record to the error and list files */
-
- printError(errcode);
-
- /* Check if err_count has been execeeded the max allowable */
-
- if ((++err_count) > MAX_ERRORS)
- {
- fatal(eCOUNT);
- }
-#endif
-
-} /* end error */
-
-/***********************************************************************/
-
-void fatal(uint16 errcode)
-{
- TRACE(lstFile,"[fatal:%04x]", errcode);
-
- /* Write error record to the error and list files */
-
- printError( errcode );
-
- /* Dump the tables (if CONFIG_DEBUG) */
-
- DUMPTABLES;
-
- /* And say goodbye */
-
- printf(fmtErrAbort, errcode);
- fprintf(lstFile, fmtErrAbort, errcode);
-
- exit(1);
-
-} /* end fatal */
-
-/***********************************************************************/
-
-static void printError(uint16 errcode)
-{
- /* Write error record to the error and list files */
-
- if ((tkn_strt) && (tkn_strt < stringSP))
- {
- fprintf (errFile, fmtErrWithToken,
- FP->include, FP->line, errcode, token, tkn_strt);
- fprintf (lstFile, fmtErrWithToken,
- FP->include, FP->line, errcode, token, tkn_strt);
- stringSP = tkn_strt; /* Clean up string stack */
- } /* end if */
- else
- {
- fprintf (errFile, fmtErrNoToken,
- FP->include, FP->line, errcode, token);
- fprintf (lstFile, fmtErrNoToken,
- FP->include, FP->line, errcode, token);
- } /* end else */
-} /* end printError */
-
-/***********************************************************************/
-
+/********************************************************************** + * perr.c + * Error Handlers + * + * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + **********************************************************************/ + +/********************************************************************** + * Included Files + **********************************************************************/ + +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <stdarg.h> + +#include "config.h" +#include "keywords.h" +#include "pasdefs.h" +#include "pedefs.h" + +#include "pas.h" +#include "ptkn.h" +#include "perr.h" +#if CONFIG_DEBUG +# include "ptbl.h" +#endif + +/********************************************************************** + * Pre-processor Definitions + **********************************************************************/ + +#if CONFIG_DEBUG +#define DUMPTABLES dumpTables() +#else +#define DUMPTABLES +#endif + +/********************************************************************** + * Private Variables + **********************************************************************/ + +static const char fmtErrNoToken[] = + "Line %d:%04ld Error %02x Token %02x\n"; +static const char fmtErrWithToken[] = + "Line %d:%04ld Error %02x Token %02x (%s)\n"; +static const char fmtErrAbort[] = + "Fatal Error %d -- Compilation aborted\n"; + +/********************************************************************** + * Private Function Prototypes + **********************************************************************/ + +static void printError(uint16_t errcode); + +/***********************************************************************/ + +void errmsg(char *fmt, ...) +{ + char buffer[1024]; + va_list ap; + + /* Get the full string */ + + va_start(ap, fmt); + (void)vsprintf(buffer, fmt, ap); + + /* Then output the string to stderr, the err file, and the list file */ + + fputs(buffer, stderr); + fputs(buffer, errFile); + fputs(buffer, lstFile); + + va_end(ap); +} + +/***********************************************************************/ + +void warn(uint16_t errcode) +{ + TRACE(lstFile,"[warn:%04x]", errcode); + + /* Write error record to the error and list files */ + + printError(errcode); + + /* Increment the count of warning */ + + warn_count++; +} /* end warn */ + +/***********************************************************************/ + +void error(uint16_t errcode) +{ + TRACE(lstFile,"[error:%04x]", errcode); + +#if CONFIG_DEBUG + fatal(errcode); +#else + /* Write error record to the error and list files */ + + printError(errcode); + + /* Check if err_count has been execeeded the max allowable */ + + if ((++err_count) > MAX_ERRORS) + { + fatal(eCOUNT); + } +#endif + +} /* end error */ + +/***********************************************************************/ + +void fatal(uint16_t errcode) +{ + TRACE(lstFile,"[fatal:%04x]", errcode); + + /* Write error record to the error and list files */ + + printError( errcode ); + + /* Dump the tables (if CONFIG_DEBUG) */ + + DUMPTABLES; + + /* And say goodbye */ + + printf(fmtErrAbort, errcode); + fprintf(lstFile, fmtErrAbort, errcode); + + exit(1); + +} /* end fatal */ + +/***********************************************************************/ + +static void printError(uint16_t errcode) +{ + /* Write error record to the error and list files */ + + if ((tkn_strt) && (tkn_strt < stringSP)) + { + fprintf (errFile, fmtErrWithToken, + FP->include, FP->line, errcode, token, tkn_strt); + fprintf (lstFile, fmtErrWithToken, + FP->include, FP->line, errcode, token, tkn_strt); + stringSP = tkn_strt; /* Clean up string stack */ + } /* end if */ + else + { + fprintf (errFile, fmtErrNoToken, + FP->include, FP->line, errcode, token); + fprintf (lstFile, fmtErrNoToken, + FP->include, FP->line, errcode, token); + } /* end else */ +} /* end printError */ + +/***********************************************************************/ + |