[Libreoffice-commits] core.git: 8 commits - hwpfilter/source rsc/source sc/source soltools/mkdepend

Norbert Thiebaud nthiebaud at gmail.com
Sat Oct 4 06:58:27 PDT 2014


 hwpfilter/source/hwpeq.cxx       |   58 -
 rsc/source/rscpp/cpp.h           |  167 ++--
 rsc/source/rscpp/cpp2.c          |  742 ++++++++++----------
 rsc/source/rscpp/cpp3.c          |  489 ++++++-------
 rsc/source/rscpp/cpp4.c          |  735 ++++++++++----------
 rsc/source/rscpp/cpp5.c          |  562 ++++++++-------
 rsc/source/rscpp/cpp6.c          | 1416 ++++++++++++++++++++-------------------
 sc/source/core/tool/compiler.cxx |    1 
 sc/source/core/tool/interpr3.cxx |    1 
 sc/source/ui/view/output.cxx     |    3 
 soltools/mkdepend/include.c      |   29 
 11 files changed, 2236 insertions(+), 1967 deletions(-)

New commits:
commit 99ae57a92dd4f218efe8dbc04cce519efd9d6d5e
Author: Norbert Thiebaud <nthiebaud at gmail.com>
Date:   Sat Oct 4 00:51:45 2014 -0500

    hwfilter: fix misuse of strncpy
    
    Change-Id: Ia52d6cd32aa3e3838d31ea2a994117e6820a503d

diff --git a/hwpfilter/source/hwpeq.cxx b/hwpfilter/source/hwpeq.cxx
index 41c2f3e..2cc6ec2 100644
--- a/hwpfilter/source/hwpeq.cxx
+++ b/hwpfilter/source/hwpeq.cxx
@@ -404,35 +404,43 @@ static const hwpeq *lookup_eqn(char *str)
 /* 첫자만 대문자이거나 전부 대문자면 소문자로 바꾼다. */
 void make_keyword( char *keyword, const char *token)
 {
-  assert(keyword);
-  char  *ptr;
-  bool result = true;
-  int len = strlen(token);
+    char* ptr;
+    bool result = true;
+    int len = strlen(token);
+    assert(keyword);
 
-  if( 255 < len )
-    strncpy(keyword, token, 255);
-  else
-    strcpy(keyword, token);
+    if( 255 < len )
+    {
+        len = 255;
+    }
+    memcpy(keyword, token, len);
+    keyword[len] = 0;
 
-  if( (token[0] & 0x80) || islower(token[0]) || strlen(token) < 2 )
-    return;
+    if( (token[0] & 0x80) || islower(token[0]) || strlen(token) < 2 )
+        return;
+
+    int capital = isupper(keyword[1]);
+    for( ptr = keyword + 2; *ptr && result; ptr++ )
+    {
+        if( (*ptr & 0x80) ||
+            (!capital && isupper(*ptr)) ||
+            (capital && islower(*ptr)) )
+        {
+            result = false;
+        }
+    }
 
-  int capital = isupper(keyword[1]);
-  for( ptr = keyword + 2; *ptr && result; ptr++ )
-    if( (*ptr & 0x80) ||
-        (!capital && isupper(*ptr)) ||
-        (capital && islower(*ptr)) )
-      result = false;
-
-  if( result ) {
-    ptr = keyword;
-    while( *ptr ) {
-      if( isupper(*ptr) )
-        *ptr = sal::static_int_cast<char>(tolower(*ptr));
-      ptr++;
+    if( result )
+    {
+        ptr = keyword;
+        while( *ptr )
+        {
+            if( isupper(*ptr) )
+                *ptr = sal::static_int_cast<char>(tolower(*ptr));
+            ptr++;
+        }
     }
-  }
-  return;
+    return;
 }
 
 // token reading function
commit cb5eb3e7e79f612f036d5f0dd54f12a907f35ea7
Author: Norbert Thiebaud <nthiebaud at gmail.com>
Date:   Sat Oct 4 00:36:34 2014 -0500

    coverity#706152 Copy into fixed size buffer
    
    Change-Id: Ib347f650d060e7762a367133a1218c2d34c9ce73

diff --git a/rsc/source/rscpp/cpp.h b/rsc/source/rscpp/cpp.h
index 1a9f5c6..e12ec0b 100644
--- a/rsc/source/rscpp/cpp.h
+++ b/rsc/source/rscpp/cpp.h
@@ -293,7 +293,7 @@ void doinclude( void );
 void dodefine( void );
 void doif( int hash );
 int openinclude( char*, int );
-int hasdirectory( char*, char* );
+int hasdirectory( char*, char*, int );
 int openfile( char* );
 
 /* cpp3.c */
diff --git a/rsc/source/rscpp/cpp2.c b/rsc/source/rscpp/cpp2.c
index 4a564da..f082275 100644
--- a/rsc/source/rscpp/cpp2.c
+++ b/rsc/source/rscpp/cpp2.c
@@ -415,6 +415,8 @@ FILE_LOCAL int openinclude(char* filename, int searchlocal)
 {
     char** incptr;
     char tmpname[NFWORK]; /* Filename work area   */
+    int len;
+    int len2;
 
     if (searchlocal)
     {
@@ -427,17 +429,36 @@ FILE_LOCAL int openinclude(char* filename, int searchlocal)
          * source file (as opposed to the current directory). (ARF, SCK).
          */
         if (filename[0] != '/' &&
-            hasdirectory(infile->filename, tmpname))
+            hasdirectory(infile->filename, tmpname, NFWORK))
         {
-            strcat(tmpname, filename);
+            len = strlen(tmpname);
+            len2 = strlen(filename);
+            if(len + len2 < NFWORK)
+            {
+                memcpy(tmpname + len, filename, len2);
+                tmpname[len + len2] = 0;
+            }
+            else
+            {
+                cfatal("Filename work buffer overflow", NULLST);
+            }
         }
         else
         {
-            strcpy(tmpname, filename);
+            len = strlen(filename);
+            if(len < NFWORK)
+            {
+                memcpy(tmpname, filename, len);
+                tmpname[len] = 0;
+            }
+            else
+            {
+                cfatal("Filename work buffer overflow", NULLST);
+            }
         }
 #else
-        if (!hasdirectory(filename, tmpname) &&
-            hasdirectory(infile->filename, tmpname))
+        if (!hasdirectory(filename, tmpname, NFWORK) &&
+            hasdirectory(infile->filename, tmpname, NFWORK))
         {
             strcat(tmpname, filename);
         }
@@ -471,7 +492,7 @@ FILE_LOCAL int openinclude(char* filename, int searchlocal)
             else
                 sprintf(tmpname, "%s\\%s", *incptr, filename);
 #else
-            if (!hasdirectory(filename, tmpname))
+            if (!hasdirectory(filename, tmpname, NFWORK))
                 sprintf(tmpname, "%s%s", *incptr, filename);
 #endif
             if (openfile(tmpname))
@@ -486,7 +507,7 @@ FILE_LOCAL int openinclude(char* filename, int searchlocal)
  * node/device/directory part of the string is copied to result and
  * hasdirectory returns TRUE.  Else, nothing is copied and it returns FALSE.
  */
-FILE_LOCAL int hasdirectory(char* source, char* result)
+FILE_LOCAL int hasdirectory(char* source, char* result, int max)
 {
 #if HOST == SYS_UNIX
     char* tp;
@@ -495,8 +516,16 @@ FILE_LOCAL int hasdirectory(char* source, char* result)
         return (FALSE);
     else
     {
-        strncpy(result, source, tp - source + 1);
-        result[tp - source + 1] = EOS;
+        int len = (int)(tp - source);
+        if(len < max)
+        {
+            memcpy(result, source, len);
+            result[len] = 0;
+        }
+        else
+        {
+            cfatal("Filename work buffer overflow", NULLST);
+        }
         return (TRUE);
     }
 #else
commit 0091f937116550a9f5e30bf200f536701cc0b068
Author: Norbert Thiebaud <nthiebaud at gmail.com>
Date:   Sat Oct 4 00:20:18 2014 -0500

    cosmetic: start bringing rscpp in this century c-wise
    
    Change-Id: I469bc4c518c3ac299a18559cdd3e1b49d34b5ace

diff --git a/rsc/source/rscpp/cpp.h b/rsc/source/rscpp/cpp.h
index 7f45375..1a9f5c6 100644
--- a/rsc/source/rscpp/cpp.h
+++ b/rsc/source/rscpp/cpp.h
@@ -26,10 +26,10 @@
 #endif
 
 /* in cpp1.c: file-pointer auf stdout oder file */
-extern FILE *pCppOut;                                   /* BP */
+extern FILE* pCppOut;                                   /* BP */
 #define PUTCHAR( d )   fprintf( pCppOut, "%c", (d) )    /* BP */
 #if OSL_DEBUG_LEVEL > 1
-extern FILE *pDefOut;                                   /* ER */
+extern FILE* pDefOut;                                   /* ER */
 #ifdef EVALDEFS
 #define NEVALBUF        2048
 #endif
@@ -164,12 +164,13 @@ extern FILE *pDefOut;                                   /* ER */
  * in malloc storage.
  */
 
-typedef struct defbuf {
-        struct defbuf   *link;          /* Next define in chain */
-        char            *repl;          /* -> replacement       */
-        int             hash;           /* Symbol table hash    */
-        int             nargs;          /* For define(args)     */
-        char            name[1];        /* #define name         */
+typedef struct defbuf
+{
+    struct defbuf*  link;           /* Next define in chain */
+    char*           repl;           /* -> replacement       */
+    int             hash;           /* Symbol table hash    */
+    int             nargs;          /* For define(args)     */
+    char            name[1];        /* #define name         */
 } DEFBUF;
 
 /*
@@ -177,22 +178,24 @@ typedef struct defbuf {
  * and macros being expanded.
  */
 
-typedef struct fileinfo {
-        char            *bptr;          /* Buffer pointer       */
-        int             line;           /* for include or macro */
-        FILE            *fp;            /* File if non-null     */
-        struct fileinfo *parent;        /* Link to includer     */
-        char            *filename;      /* File/macro name      */
-        char            *progname;      /* From #line statement */
-        unsigned int    unrecur;        /* For macro recursion  */
-        char            buffer[1];      /* current input line   */
+typedef struct fileinfo
+{
+    char*           bptr;           /* Buffer pointer       */
+    int             line;           /* for include or macro */
+    FILE*           fp;             /* File if non-null     */
+    struct fileinfo* parent;        /* Link to includer     */
+    char*           filename;       /* File/macro name      */
+    char*           progname;       /* From #line statement */
+    unsigned int    unrecur;        /* For macro recursion  */
+    char            buffer[1];      /* current input line   */
 } FILEINFO;
 
 /*
  * The SIZES structure is used to store the values for #if sizeof
  */
 
-typedef struct sizes {
+typedef struct sizes
+{
     short       bits;                   /* If this bit is set,          */
     int         size;                   /* this is the datum size value */
     int         psize;                  /* this is the pointer size     */
@@ -204,8 +207,8 @@ typedef struct sizes {
 /*
  * Error codes.
  */
-#define IO_NORMAL       0
-#define IO_ERROR        1
+#define IO_NORMAL 0
+#define IO_ERROR  1
 
 /*
  * Externs
@@ -221,18 +224,18 @@ extern int      errors;                 /* Error counter                */
 extern int      recursion;              /* Macro depth counter          */
 extern char     ifstack[BLK_NEST];      /* #if information              */
 #define compiling ifstack[0]
-extern char     *ifptr;                 /* -> current ifstack item      */
-extern char     *incdir[NINCLUDE];      /* -i directories               */
-extern char     **incend;               /* -> active end of incdir      */
+extern char*    ifptr;                  /* -> current ifstack item      */
+extern char*    incdir[NINCLUDE];       /* -i directories               */
+extern char**   incend;                 /* -> active end of incdir      */
 extern int      cflag;                  /* -C option (keep comments)    */
 extern int      eflag;                  /* -E option (ignore errors)    */
 extern int      nflag;                  /* -N option (no pre-defines)   */
 extern int      rec_recover;            /* unwind recursive macros      */
-extern char     *preset[];              /* Standard predefined symbols  */
-extern char     *magic[];               /* Magic predefined symbols     */
-extern FILEINFO *infile;                /* Current input file           */
+extern char*    preset[];               /* Standard predefined symbols  */
+extern char*    magic[];                /* Magic predefined symbols     */
+extern FILEINFO* infile;                /* Current input file           */
 extern char     work[NWORK + 1];        /* #define scratch              */
-extern char     *workp;                 /* Free space in work           */
+extern char*    workp;                  /* Free space in work           */
 #if OSL_DEBUG_LEVEL > 1
 extern int      debug;                  /* Debug level                  */
 /* ER dump & evaluate #define's */
@@ -260,12 +263,12 @@ int rscpp_main( int argc, char **argv );
 #endif
 
 
-void InitCpp1(void);
-void InitCpp2(void);
-void InitCpp3(void);
-void InitCpp4(void);
-void InitCpp5(void);
-void InitCpp6(void);
+void InitCpp1( void );
+void InitCpp2( void );
+void InitCpp3( void );
+void InitCpp4( void );
+void InitCpp5( void );
+void InitCpp6( void );
 
 #define HELLO()   fprintf( stderr, "[Hello at %s, %d] ", __FILE__, __LINE__ )
 
@@ -275,8 +278,8 @@ void InitCpp6(void);
 
 /* cpp1.c */
 void output( int c );
-void sharp(void);
-void cppmain(void);
+void sharp( void );
+void cppmain( void );
 #if OSL_DEBUG_LEVEL > 1
 #ifdef EVALDEFS
 int outputEval( int c );
@@ -286,79 +289,79 @@ int outputEval( int c );
 
 /* cpp2.c */
 int control( int counter );
-void doinclude(void);
-void dodefine(void);
+void doinclude( void );
+void dodefine( void );
 void doif( int hash );
-int openinclude( char *, int );
-int hasdirectory(char *, char * );
-int openfile( char * );
+int openinclude( char*, int );
+int hasdirectory( char*, char* );
+int openfile( char* );
 
 /* cpp3.c */
-int openfiles( char *filename );
-void addfile( FILE *fp, char *filename );
-void setincdirs(void);
-int AddInclude( char *pIncStr );
-int getredirection( int argc, char **argv );
-void zap_uc( char *ap );
+int openfiles( char* filename );
+void addfile( FILE* fp, char* filename );
+void setincdirs( void );
+int AddInclude( char* pIncStr );
+int getredirection( int argc, char** argv );
+void zap_uc( char* ap );
 
-void initdefines(void);
-int dooptions( int argc, char *argv[] );
-int readoptions(char* filename, char*** pfargv);
+void initdefines( void );
+int dooptions( int argc, char* argv[] );
+int readoptions( char* filename, char*** pfargv );
 
 /* cpp4.c */
-void dodefines(void);
-void checkparm( int c, DEFBUF *dp );
-int expcollect(void);
-void expstuff( DEFBUF *dp );
+void dodefines( void );
+void checkparm( int c, DEFBUF* dp );
+int expcollect( void );
+void expstuff( DEFBUF* dp );
 
-void stparmscan( int delim);
+void stparmscan( int delim );
 #if OSL_DEBUG_LEVEL > 1
-void dumpparm( char *why );
+void dumpparm( char* why );
 #endif
 
-void doundef(void);
-void textput( char *text );
+void doundef( void );
+void textput( char* text );
 void charput( int c );
-void expand( DEFBUF *tokenp );
+void expand( DEFBUF* tokenp );
 
 /* cpp5.c */
-int eval(void);
-int evallex(int);
-int *evaleval(int *, int, int );
-int evalchar(int);
-int dosizeof(void);
+int eval( void );
+int evallex( int );
+int *evaleval( int*, int, int );
+int evalchar( int );
+int dosizeof( void );
 int evalnum( int c );
 int bittest( int );
 
 /* cpp6.c */
 
-void skipnl(void);
-int skipws(void);
+void skipnl( void );
+int skipws( void );
 void scanid( int c );
 int macroid( int c );
 int catenate(void);
 int scanstring( int c, void (*outfun)( int c ) );
 void scannumber( int c, void (*outfun)( int c ) );
 void save( int c );
-char *savestring( char *text );
-FILEINFO *getfile( int bufsize, char *name);
+char* savestring( char* text );
+FILEINFO* getfile( int bufsize, char* name );
 char *getmem( int size );
-DEFBUF *lookid( int c );
-DEFBUF *defendel( char *name, int delete );
-void dunpdef( char *why );
-void dumpadef( char *why, DEFBUF *dp);
-int get(void);
-int cget(void);
-void unget(void);
-void ungetstring( char *text );
-void cerror( char *format, char *sarg);
-void cwarn( char *format, char *sarg);
-void cfatal( char *format, char *sarg);
-void cierror( char *format, int n);
-void ciwarn( char *format, int n);
+DEFBUF* lookid( int c );
+DEFBUF* defendel( char* name, int delete );
+void dunpdef( char* why );
+void dumpadef( char* why, DEFBUF* dp );
+int get( void );
+int cget( void );
+void unget( void );
+void ungetstring( char* text );
+void cerror( char* format, char* sarg );
+void cwarn( char* format, char* sarg );
+void cfatal( char* format, char* sarg );
+void cierror( char* format, int n );
+void ciwarn( char* format, int n );
 #if OSL_DEBUG_LEVEL > 1
-void dumpdef( char *why );
-void dumpadef( char *why, DEFBUF *dp );
+void dumpdef( char* why );
+void dumpadef( char* why, DEFBUF *dp );
 #endif
 
 #endif // INCLUDED_RSC_SOURCE_RSCPP_CPP_H
diff --git a/rsc/source/rscpp/cpp2.c b/rsc/source/rscpp/cpp2.c
index 71db0c3..4a564da 100644
--- a/rsc/source/rscpp/cpp2.c
+++ b/rsc/source/rscpp/cpp2.c
@@ -53,9 +53,6 @@ void InitCpp2()
 
 }
 
-
-int
-control(int counter)
 /*
  * Process #control lines.  Simple commands are processed inline,
  * while complex commands have their own subroutines.
@@ -64,232 +61,247 @@ control(int counter)
  * #pragma commands.  This prevents these commands from ending up at
  * the end of the previous line if cpp is invoked with the -C option.
  */
+int control(int counter)
 {
-        int            c;
-        char           *tp;
-        int            hash;
-        char           *ep;
+    int c;
+    char* tp;
+    int hash;
+    char* ep;
 
-        c = skipws();
-        if (c == '\n' || c == EOF_CHAR)
-            return (counter + 1);
-        if (!isdigit(c))
-            scanid(c);                  /* Get #word to token[]         */
-        else {
-            unget();                    /* Hack -- allow #123 as a      */
-            strcpy(token, "line");      /* synonym for #line 123        */
-        }
-        hash = (token[1] == EOS) ? L_nogood : (token[0] + (token[2] << 1));
-        switch (hash) {
-        case L_assert:  tp = "assert";          break;
-        case L_define:  tp = "define";          break;
-        case L_elif:    tp = "elif";            break;
-        case L_else:    tp = "else";            break;
-        case L_endif:   tp = "endif";           break;
-        case L_if:      tp = "if";              break;
-        case L_ifdef:   tp = "ifdef";           break;
-        case L_ifndef:  tp = "ifndef";          break;
-        case L_include: tp = "include";         break;
-        case L_line:    tp = "line";            break;
-        case L_pragma:  tp = "pragma";          break;
-        case L_undef:   tp = "undef";           break;
-        case L_error:   tp = "error";           break;
+    c = skipws();
+    if (c == '\n' || c == EOF_CHAR)
+        return (counter + 1);
+    if (!isdigit(c))
+        scanid(c);                  /* Get #word to token[]         */
+    else
+    {
+        unget();                    /* Hack -- allow #123 as a      */
+        strcpy(token, "line");      /* synonym for #line 123        */
+    }
+    hash = (token[1] == EOS) ? L_nogood : (token[0] + (token[2] << 1));
+    switch (hash)
+    {
+    case L_assert:  tp = "assert";          break;
+    case L_define:  tp = "define";          break;
+    case L_elif:    tp = "elif";            break;
+    case L_else:    tp = "else";            break;
+    case L_endif:   tp = "endif";           break;
+    case L_if:      tp = "if";              break;
+    case L_ifdef:   tp = "ifdef";           break;
+    case L_ifndef:  tp = "ifndef";          break;
+    case L_include: tp = "include";         break;
+    case L_line:    tp = "line";            break;
+    case L_pragma:  tp = "pragma";          break;
+    case L_undef:   tp = "undef";           break;
+    case L_error:   tp = "error";           break;
 #if OSL_DEBUG_LEVEL > 1
-        case L_debug:   tp = "debug";           break;
-        case L_nodebug: tp = "nodebug";         break;
+    case L_debug:   tp = "debug";           break;
+    case L_nodebug: tp = "nodebug";         break;
 #endif
-        default:        hash = L_nogood;
+    default:        hash = L_nogood;
         /*fall-through*/
-        case L_nogood:  tp = "";                break;
-        }
-        if (!streq(tp, token))
-            hash = L_nogood;
-        /*
-         * hash is set to a unique value corresponding to the
-         * control keyword (or L_nogood if we think it's nonsense).
-         */
-        if (infile->fp == NULL)
-            cwarn("Control line \"%s\" within macro expansion", token);
-        if (!compiling) {                       /* Not compiling now    */
-            switch (hash) {
-            case L_if:                          /* These can't turn     */
-            case L_ifdef:                       /*  compilation on, but */
-            case L_ifndef:                      /*   we must nest #if's */
-                if (++ifptr >= &ifstack[BLK_NEST])
-                    goto if_nest_err;
-                *ifptr = 0;                     /* !WAS_COMPILING       */
-            case L_line:                        /* Many                 */
+    case L_nogood:  tp = "";                break;
+    }
+    if (!streq(tp, token))
+        hash = L_nogood;
+    /*
+     * hash is set to a unique value corresponding to the
+     * control keyword (or L_nogood if we think it's nonsense).
+     */
+    if (infile->fp == NULL)
+        cwarn("Control line \"%s\" within macro expansion", token);
+    if (!compiling)
+    {                       /* Not compiling now    */
+        switch (hash)
+        {
+        case L_if:                          /* These can't turn     */
+        case L_ifdef:                       /*  compilation on, but */
+        case L_ifndef:                      /*   we must nest #if's */
+            if (++ifptr >= &ifstack[BLK_NEST])
+                goto if_nest_err;
+            *ifptr = 0;                     /* !WAS_COMPILING       */
+        case L_line:                        /* Many                 */
             /*
              * Are pragma's always processed?
              */
-            case L_pragma:                      /*  options             */
-            case L_include:                     /*   are uninteresting  */
-            case L_define:                      /*    if we             */
-            case L_undef:                       /*     aren't           */
-            case L_assert:                      /*      compiling.      */
-            case L_error:                       /* BP 5.3.92, #error */
-dump_line:      skipnl();                       /* Ignore rest of line  */
-                return (counter + 1);
-            }
+        case L_pragma:                      /*  options             */
+        case L_include:                     /*   are uninteresting  */
+        case L_define:                      /*    if we             */
+        case L_undef:                       /*     aren't           */
+        case L_assert:                      /*      compiling.      */
+        case L_error:                       /* BP 5.3.92, #error */
+        dump_line:      skipnl();                       /* Ignore rest of line  */
+            return (counter + 1);
         }
+    }
+    /*
+     * Make sure that #line and #pragma are output on a fresh line.
+     */
+    if (counter > 0 && (hash == L_line || hash == L_pragma))
+    {
+        PUTCHAR('\n');
+        counter--;
+    }
+
+    switch (hash)
+    {
+    case L_line:
         /*
-         * Make sure that #line and #pragma are output on a fresh line.
+         * Parse the line to update the line number and "progname"
+         * field and line number for the next input line.
+         * Set wrongline to force it out later.
          */
-        if (counter > 0 && (hash == L_line || hash == L_pragma)) {
-            PUTCHAR('\n');
-            counter--;
+        c = skipws();
+        workp = work;                       /* Save name in work    */
+        while (c != '\n' && c != EOF_CHAR)
+        {
+            save(c);
+            c = get();
         }
-        switch (hash) {
-        case L_line:
-            /*
-             * Parse the line to update the line number and "progname"
-             * field and line number for the next input line.
-             * Set wrongline to force it out later.
-             */
-            c = skipws();
-            workp = work;                       /* Save name in work    */
-            while (c != '\n' && c != EOF_CHAR) {
-                save(c);
-                c = get();
-            }
-            unget();
-            save(EOS);
-            /*
-             * Split #line argument into <line-number> and <name>
-             * We subtract 1 as we want the number of the next line.
-             */
-            line = atoi(work) - 1;              /* Reset line number    */
-            for (tp = work; isdigit(*tp) || type[(int)*tp] == SPA; tp++)
-                ;                               /* Skip over digits     */
-            if (*tp != EOS) {                   /* Got a filename, so:  */
-                if (*tp == '"' && (ep = strrchr(tp + 1, '"')) != NULL) {
-                    tp++;                       /* Skip over left quote */
-                    *ep = EOS;                  /* And ignore right one */
-                }
-                if (infile->progname != NULL)   /* Give up the old name */
-                    free(infile->progname);     /* if it's allocated.   */
-                infile->progname = savestring(tp);
-            }
-            wrongline = TRUE;                   /* Force output later   */
-            break;
-
-        case L_include:
-            doinclude();
-            break;
-
-        case L_define:
-            dodefine();
-            break;
-
-        case L_undef:
-            doundef();
-            break;
-
-        case L_else:
-            if (ifptr == &ifstack[0])
-                goto nest_err;
-            else if ((*ifptr & ELSE_SEEN) != 0)
-                goto else_seen_err;
-            *ifptr |= ELSE_SEEN;
-            if ((*ifptr & WAS_COMPILING) != 0) {
-                if (compiling || (*ifptr & TRUE_SEEN) != 0)
-                    compiling = FALSE;
-                else {
-                    compiling = TRUE;
-                }
-            }
-            break;
-
-        case L_elif:
-            if (ifptr == &ifstack[0])
-                goto nest_err;
-            else if ((*ifptr & ELSE_SEEN) != 0) {
-else_seen_err:  cerror("#%s may not follow #else", token);
-                goto dump_line;
+        unget();
+        save(EOS);
+        /*
+         * Split #line argument into <line-number> and <name>
+         * We subtract 1 as we want the number of the next line.
+         */
+        line = atoi(work) - 1;              /* Reset line number    */
+        for (tp = work; isdigit(*tp) || type[(int)*tp] == SPA; tp++)
+            ;                               /* Skip over digits     */
+        if (*tp != EOS)                     /* Got a filename, so:  */
+        {
+            if (*tp == '"' && (ep = strrchr(tp + 1, '"')) != NULL)
+            {
+                tp++;                       /* Skip over left quote */
+                *ep = EOS;                  /* And ignore right one */
             }
-            if ((*ifptr & (WAS_COMPILING | TRUE_SEEN)) != WAS_COMPILING) {
-                compiling = FALSE;              /* Done compiling stuff */
-                goto dump_line;                 /* Skip this clause     */
+            if (infile->progname != NULL)   /* Give up the old name */
+                free(infile->progname);     /* if it's allocated.   */
+            infile->progname = savestring(tp);
+        }
+        wrongline = TRUE;                   /* Force output later   */
+        break;
+
+    case L_include:
+        doinclude();
+        break;
+
+    case L_define:
+        dodefine();
+        break;
+
+    case L_undef:
+        doundef();
+        break;
+
+    case L_else:
+        if (ifptr == &ifstack[0])
+            goto nest_err;
+        else if ((*ifptr & ELSE_SEEN) != 0)
+            goto else_seen_err;
+        *ifptr |= ELSE_SEEN;
+        if ((*ifptr & WAS_COMPILING) != 0)
+        {
+            if (compiling || (*ifptr & TRUE_SEEN) != 0)
+                compiling = FALSE;
+            else
+            {
+                compiling = TRUE;
             }
-            doif(L_if);
-            break;
+        }
+        break;
 
-        case L_if:
-        case L_ifdef:
-        case L_ifndef:
-            if (++ifptr >= &ifstack[BLK_NEST])
-if_nest_err:    cfatal("Too many nested #%s statements", token);
-            *ifptr = WAS_COMPILING;
-            doif(hash);
-            break;
-
-        case L_endif:
-            if (ifptr == &ifstack[0]) {
-nest_err:       cerror("#%s must be in an #if", token);
-                goto dump_line;
-            }
-            if (!compiling && (*ifptr & WAS_COMPILING) != 0)
-                wrongline = TRUE;
-            compiling = ((*ifptr & WAS_COMPILING) != 0);
-            --ifptr;
-            break;
-
-        case L_assert:
-            if (eval() == 0)
-                cerror("Preprocessor assertion failure", NULLST);
-            break;
-
-        case L_pragma:
-            /*
-             * #pragma is provided to pass "options" to later
-             * passes of the compiler.  cpp doesn't have any yet.
-             */
-            fprintf( pCppOut, "#pragma ");
-            while ((c = get()) != '\n' && c != EOF_CHAR)
-                cput(c);
-            unget();
-            break;
+    case L_elif:
+        if (ifptr == &ifstack[0])
+            goto nest_err;
+        else if ((*ifptr & ELSE_SEEN) != 0)
+        {
+          else_seen_err:  cerror("#%s may not follow #else", token);
+            goto dump_line;
+        }
+        if ((*ifptr & (WAS_COMPILING | TRUE_SEEN)) != WAS_COMPILING)
+        {
+            compiling = FALSE;              /* Done compiling stuff */
+            goto dump_line;                 /* Skip this clause     */
+        }
+        doif(L_if);
+        break;
+
+    case L_if:
+    case L_ifdef:
+    case L_ifndef:
+        if (++ifptr >= &ifstack[BLK_NEST])
+          if_nest_err:    cfatal("Too many nested #%s statements", token);
+        *ifptr = WAS_COMPILING;
+        doif(hash);
+        break;
+
+    case L_endif:
+        if (ifptr == &ifstack[0])
+        {
+          nest_err:       cerror("#%s must be in an #if", token);
+            goto dump_line;
+        }
+        if (!compiling && (*ifptr & WAS_COMPILING) != 0)
+            wrongline = TRUE;
+        compiling = ((*ifptr & WAS_COMPILING) != 0);
+        --ifptr;
+        break;
+
+    case L_assert:
+        if (eval() == 0)
+            cerror("Preprocessor assertion failure", NULLST);
+        break;
+
+    case L_pragma:
+        /*
+         * #pragma is provided to pass "options" to later
+         * passes of the compiler.  cpp doesn't have any yet.
+         */
+        fprintf( pCppOut, "#pragma ");
+        while ((c = get()) != '\n' && c != EOF_CHAR)
+            cput(c);
+        unget();
+        break;
 
 #if OSL_DEBUG_LEVEL > 1
-        case L_debug:
-            if (debug == 0)
-                dumpdef("debug set on");
-            debug++;
-            break;
-
-        case L_nodebug:
-            debug--;
-            break;
+    case L_debug:
+        if (debug == 0)
+            dumpdef("debug set on");
+        debug++;
+        break;
+
+    case L_nodebug:
+        debug--;
+        break;
 #endif
-        case L_error:                       /* BP 5.3.92, #error */
+    case L_error:                       /* BP 5.3.92, #error */
+        fprintf( pCppOut, "cpp: line %u, Error directive: ", line );
+        while ((c = get()) != '\n' && c != EOF_CHAR)
+            cput(c);
+        fprintf( pCppOut, "\n" );
+        exit( 1 );
+
+    default:
+        /*
+         * Undefined #control keyword.
+         * Note: the correct behavior may be to warn and
+         * pass the line to a subsequent compiler pass.
+         * This would allow #asm or similar extensions.
+         */
+        cerror("Illegal # command \"%s\"", token);
+        break;
+    }
+    if (hash != L_include)
+    {
+        if (skipws() != '\n')
         {
-            fprintf( pCppOut, "cpp: line %u, Error directive: ", line );
-            while ((c = get()) != '\n' && c != EOF_CHAR)
-                cput(c);
-            fprintf( pCppOut, "\n" );
-            exit( 1 );
-        }
-        default:
-            /*
-             * Undefined #control keyword.
-             * Note: the correct behavior may be to warn and
-             * pass the line to a subsequent compiler pass.
-             * This would allow #asm or similar extensions.
-             */
-            cerror("Illegal # command \"%s\"", token);
-            break;
+            cwarn("Unexpected text in #control line ignored", NULLST);
+            skipnl();
         }
-        if (hash != L_include) {
-            if (skipws() != '\n') {
-                cwarn("Unexpected text in #control line ignored", NULLST);
-                skipnl();
-            }
-        }
-        return (counter + 1);
+    }
+    return (counter + 1);
 }
 
-FILE_LOCAL
-void doif(int hash)
 /*
  * Process an #if, #ifdef, or #ifndef.  The latter two are straightforward,
  * while #if needs a subroutine of its own to evaluate the expression.
@@ -298,41 +310,45 @@ void doif(int hash)
  * is always suppressed, so we don't need to evaluate anything.  This
  * suppresses unnecessary warnings.
  */
+FILE_LOCAL void doif(int hash)
 {
-        int            c;
-        int            found;
-
-        if ((c = skipws()) == '\n' || c == EOF_CHAR) {
-            unget();
-            goto badif;
-        }
-        if (hash == L_if) {
-            unget();
-            found = (eval() != 0);      /* Evaluate expr, != 0 is  TRUE */
-            hash = L_ifdef;             /* #if is now like #ifdef       */
-        }
-        else {
-            if (type[c] != LET)         /* Next non-blank isn't letter  */
-                goto badif;             /* ... is an error              */
-            found = (lookid(c) != NULL); /* Look for it in symbol table */
-        }
-        if (found == (hash == L_ifdef)) {
-            compiling = TRUE;
-            *ifptr |= TRUE_SEEN;
-        }
-        else {
-            compiling = FALSE;
-        }
-        return;
-
-badif:  cerror("#if, #ifdef, or #ifndef without an argument", NULLST);
-        skipnl();                               /* Prevent an extra     */
-        unget();                                /* Error message        */
-        return;
+    int c;
+    int found;
+
+    if ((c = skipws()) == '\n' || c == EOF_CHAR)
+    {
+        unget();
+        goto badif;
+    }
+    if (hash == L_if)
+    {
+        unget();
+        found = (eval() != 0);      /* Evaluate expr, != 0 is  TRUE */
+        hash = L_ifdef;             /* #if is now like #ifdef       */
+    }
+    else
+    {
+        if (type[c] != LET)         /* Next non-blank isn't letter  */
+            goto badif;             /* ... is an error              */
+        found = (lookid(c) != NULL); /* Look for it in symbol table */
+    }
+    if (found == (hash == L_ifdef))
+    {
+        compiling = TRUE;
+        *ifptr |= TRUE_SEEN;
+    }
+    else
+    {
+        compiling = FALSE;
+    }
+    return;
+
+  badif:  cerror("#if, #ifdef, or #ifndef without an argument", NULLST);
+    skipnl();                               /* Prevent an extra     */
+    unget();                                /* Error message        */
+    return;
 }
 
-FILE_LOCAL
-void doinclude()
 /*
  * Process the #include control line.
  * There are three variations:
@@ -347,47 +363,46 @@ void doinclude()
  * Note: the November 12 draft forbids '>' in the #include <file> format.
  * This restriction is unnecessary and not implemented.
  */
+FILE_LOCAL void doinclude()
 {
-        int            c;
-        int            delim;
-
-        delim = macroid(skipws());
-        if (delim != '<' && delim != '"')
-            goto incerr;
-        if (delim == '<')
-            delim = '>';
-        workp = work;
-        instring = TRUE;                /* Accept all characters        */
+    int c;
+    int delim;
+
+    delim = macroid(skipws());
+    if (delim != '<' && delim != '"')
+        goto incerr;
+    if (delim == '<')
+        delim = '>';
+    workp = work;
+    instring = TRUE;                /* Accept all characters        */
 #ifdef CONTROL_COMMENTS_NOT_ALLOWED
-        while ((c = get()) != '\n' && c != EOF_CHAR)
-            save(c);                    /* Put it away.                 */
-        unget();                        /* Force nl after includee      */
-        /*
-         * The draft is unclear if the following should be done.
-         */
-        while (--workp >= work && *workp == ' ')
-            ;                           /* Trim blanks from filename    */
-        if (*workp != delim)
-            goto incerr;
+    while ((c = get()) != '\n' && c != EOF_CHAR)
+        save(c);                    /* Put it away.                 */
+    unget();                        /* Force nl after includee      */
+    /*
+     * The draft is unclear if the following should be done.
+     */
+    while (--workp >= work && *workp == ' ')
+        ;                           /* Trim blanks from filename    */
+    if (*workp != delim)
+        goto incerr;
 #else
-        while ((c = get()) != delim && c != EOF_CHAR)
-            save(c);
+    while ((c = get()) != delim && c != EOF_CHAR)
+        save(c);
 #endif
-        *workp = EOS;                   /* Terminate filename           */
-        instring = FALSE;
-        if (openinclude(work, (delim == '"')))
-            return;
-        /*
-         * No sense continuing if #include file isn't there.
-         */
-        cfatal("Cannot open include file \"%s\"", work);
-
-incerr: cerror("#include syntax error", NULLST);
+    *workp = EOS;                   /* Terminate filename           */
+    instring = FALSE;
+    if (openinclude(work, (delim == '"')))
         return;
+    /*
+     * No sense continuing if #include file isn't there.
+     */
+    cfatal("Cannot open include file \"%s\"", work);
+
+  incerr: cerror("#include syntax error", NULLST);
+    return;
 }
 
-FILE_LOCAL int
-openinclude(char* filename, int searchlocal)
 /*
  * Actually open an include file.  This routine is only called from
  * doinclude() above, but was written as a separate subroutine for
@@ -396,102 +411,112 @@ openinclude(char* filename, int searchlocal)
  * active files.  Returns TRUE if the file was opened, FALSE
  * if openinclude() fails.  No error message is printed.
  */
+FILE_LOCAL int openinclude(char* filename, int searchlocal)
 {
-        char           **incptr;
-        char                    tmpname[NFWORK]; /* Filename work area   */
+    char** incptr;
+    char tmpname[NFWORK]; /* Filename work area   */
 
-        if (searchlocal) {
-            /*
-             * Look in local directory first
-             */
+    if (searchlocal)
+    {
+        /*
+         * Look in local directory first
+         */
 #if HOST == SYS_UNIX
-            /*
-             * Try to open filename relative to the directory of the current
-             * source file (as opposed to the current directory). (ARF, SCK).
-             */
-            if (filename[0] != '/'
-             && hasdirectory(infile->filename, tmpname))
-                strcat(tmpname, filename);
-            else {
-                strcpy(tmpname, filename);
-            }
-#else
-            if (!hasdirectory(filename, tmpname)
-             && hasdirectory(infile->filename, tmpname))
-                strcat(tmpname, filename);
-            else {
-                strcpy(tmpname, filename);
-            }
-#endif
-            if (openfile(tmpname))
-                return (TRUE);
-        }
         /*
-         * Look in any directories specified by -I command line
-         * arguments, then in the builtin search list.
+         * Try to open filename relative to the directory of the current
+         * source file (as opposed to the current directory). (ARF, SCK).
          */
-        for (incptr = incdir; incptr < incend; incptr++) {
-            if (strlen(*incptr) + strlen(filename) >= (NFWORK - 1))
-                cfatal("Filename work buffer overflow", NULLST);
-            else {
+        if (filename[0] != '/' &&
+            hasdirectory(infile->filename, tmpname))
+        {
+            strcat(tmpname, filename);
+        }
+        else
+        {
+            strcpy(tmpname, filename);
+        }
+#else
+        if (!hasdirectory(filename, tmpname) &&
+            hasdirectory(infile->filename, tmpname))
+        {
+            strcat(tmpname, filename);
+        }
+        else
+        {
+            strcpy(tmpname, filename);
+        }
+#endif
+        if (openfile(tmpname))
+            return (TRUE);
+    }
+    /*
+     * Look in any directories specified by -I command line
+     * arguments, then in the builtin search list.
+     */
+    for (incptr = incdir; incptr < incend; incptr++)
+    {
+        if (strlen(*incptr) + strlen(filename) >= (NFWORK - 1))
+            cfatal("Filename work buffer overflow", NULLST);
+        else
+        {
 #if HOST == SYS_UNIX
-                if (filename[0] == '/')
-                    strcpy(tmpname, filename);
-                else {
-                    sprintf(tmpname, "%s/%s", *incptr, filename);
-                }
+            if (filename[0] == '/')
+                strcpy(tmpname, filename);
+            else
+                sprintf(tmpname, "%s/%s", *incptr, filename);
+
 #elif HOST == SYS_UNKNOWN
-                if (filename[0] == '\\')
-                    strcpy(tmpname, filename);
-                else {
-                    sprintf(tmpname, "%s\\%s", *incptr, filename);
-                }
+            if (filename[0] == '\\')
+                strcpy(tmpname, filename);
+            else
+                sprintf(tmpname, "%s\\%s", *incptr, filename);
 #else
-                if (!hasdirectory(filename, tmpname))
-                    sprintf(tmpname, "%s%s", *incptr, filename);
+            if (!hasdirectory(filename, tmpname))
+                sprintf(tmpname, "%s%s", *incptr, filename);
 #endif
-                if (openfile(tmpname))
-                    return (TRUE);
-            }
+            if (openfile(tmpname))
+                return (TRUE);
         }
-        return (FALSE);
+    }
+    return (FALSE);
 }
 
-FILE_LOCAL int
-hasdirectory(char* source, char* result)
 /*
  * If a device or directory is found in the source filename string, the
  * node/device/directory part of the string is copied to result and
  * hasdirectory returns TRUE.  Else, nothing is copied and it returns FALSE.
  */
+FILE_LOCAL int hasdirectory(char* source, char* result)
 {
 #if HOST == SYS_UNIX
-        char           *tp;
+    char* tp;
 
-        if ((tp = strrchr(source, '/')) == NULL)
-            return (FALSE);
-        else {
-            strncpy(result, source, tp - source + 1);
-            result[tp - source + 1] = EOS;
-            return (TRUE);
-        }
+    if ((tp = strrchr(source, '/')) == NULL)
+        return (FALSE);
+    else
+    {
+        strncpy(result, source, tp - source + 1);
+        result[tp - source + 1] = EOS;
+        return (TRUE);
+    }
 #else
-        /*
-         * Random DEC operating system (RSTS/E)
-         */
-        char           *tp;
-
-        if ((tp = strrchr(source, ']')) == NULL
-         && (tp = strrchr(source, ':')) == NULL)
-            return (FALSE);
-        else {
-            strncpy(result, source, tp - source + 1);
-            result[tp - source + 1] = EOS;
-            return (TRUE);
-        }
+    /*
+     * Random DEC operating system (RSTS/E)
+     */
+    char* tp;
+
+    if ((tp = strrchr(source, ']')) == NULL &&
+        (tp = strrchr(source, ':')) == NULL)
+    {
+        return (FALSE);
+    }
+    else
+    {
+        strncpy(result, source, tp - source + 1);
+        result[tp - source + 1] = EOS;
+        return (TRUE);
+    }
 #endif
 }
 
-
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/rsc/source/rscpp/cpp3.c b/rsc/source/rscpp/cpp3.c
index 124215d..f663a9f 100644
--- a/rsc/source/rscpp/cpp3.c
+++ b/rsc/source/rscpp/cpp3.c
@@ -37,31 +37,30 @@ void InitCpp3()
 }
 
 
-int
-openfile(char* filename)
 /*
  * Open a file, add it to the linked list of open files.
  * This is called only from openfile() above.
  */
+int openfile(char* filename)
 {
-        FILE           *fp;
+    FILE* fp;
 
-        if ((fp = fopen(filename, "r")) == NULL) {
+    if ((fp = fopen(filename, "r")) == NULL)
+    {
 #if OSL_DEBUG_LEVEL > 1
-            if ( debug || !bDumpDefs )
-                perror(filename);
+        if ( debug || !bDumpDefs )
+            perror(filename);
 #endif
-            return (FALSE);
-        }
+        return (FALSE);
+    }
 #if OSL_DEBUG_LEVEL > 1
-        if (debug)
-            fprintf(stderr, "Reading from \"%s\"\n", filename);
+    if (debug)
+        fprintf(stderr, "Reading from \"%s\"\n", filename);
 #endif
-        addfile(fp, filename);
-        return (TRUE);
+    addfile(fp, filename);
+    return (TRUE);
 }
 
-void addfile(FILE* fp, char* filename)
 /*
  * Initialize tables for this open file.  This is called from openfile()
  * above (for #include files), and from the entry to cpp to open the main
@@ -69,31 +68,33 @@ void addfile(FILE* fp, char* filename)
  * structure which is used to read characters.  (getfile() is also called
  * to setup a macro replacement.)
  */
+void addfile(FILE* fp, char* filename)
 {
-        FILEINFO       *file;
-        file = getfile(NBUFF, filename);
-        file->fp = fp;                  /* Better remember FILE *       */
-        file->buffer[0] = EOS;          /* Initialize for first read    */
-        line = 1;                       /* Working on line 1 now        */
-        wrongline = TRUE;               /* Force out initial #line      */
+    FILEINFO* file;
+
+    file = getfile(NBUFF, filename);
+    file->fp = fp;                  /* Better remember FILE *       */
+    file->buffer[0] = EOS;          /* Initialize for first read    */
+    line = 1;                       /* Working on line 1 now        */
+    wrongline = TRUE;               /* Force out initial #line      */
 }
 
-void setincdirs()
 /*
  * Append system-specific directories to the include directory list.
  * Called only when cpp is started.
  */
+void setincdirs()
 {
 
 #ifdef  CPP_INCLUDE
-        *incend++ = CPP_INCLUDE;
+    *incend++ = CPP_INCLUDE;
 #define IS_INCLUDE      1
 #else
 #define IS_INCLUDE      0
 #endif
 
 #if HOST == SYS_UNIX
-        *incend++ = "/usr/include";
+    *incend++ = "/usr/include";
 #define MAXINCLUDE      (NINCLUDE - 1 - IS_INCLUDE)
 #endif
 
@@ -112,17 +113,16 @@ void setincdirs()
  */
 
 #if !defined( WNT ) && ! defined UNX
-        extern   char     *getenv( char *pStr ); /* BP */
+    extern char* getenv( char *pStr ); /* BP */
 #endif
-                 char     *pIncGetEnv = NULL;    /* Pointer auf INCLUDE   */
+    char* pIncGetEnv = NULL;    /* Pointer auf INCLUDE   */
 
-        if ( ( pIncGetEnv = getenv("INCLUDE") ) != NULL )
-            AddInclude( pIncGetEnv );
+    if ( ( pIncGetEnv = getenv("INCLUDE") ) != NULL )
+        AddInclude( pIncGetEnv );
 
 #define MAXINCLUDE      (NINCLUDE - 3 - IS_INCLUDE)
 #endif
 
-
 }
 
 /* Kontext: Erweiterung des INCLUDE-Services
@@ -135,8 +135,8 @@ void setincdirs()
 
 int AddInclude( char* pIncStr )
 {
-    char     *pIncEnv    = NULL;    /* Kopie des INCLUDE     */
-    char     *pIncPos;              /* wandert zum naechsten */
+    char* pIncEnv    = NULL;    /* Kopie des INCLUDE     */
+    char* pIncPos;              /* wandert zum naechsten */
 
     pIncEnv = savestring( pIncStr );
     pIncPos = strtok( pIncEnv, ";" );
@@ -151,125 +151,131 @@ int AddInclude( char* pIncStr )
     return( 1 );
 }
 
-int
-dooptions(int argc, char** argv)
 /*
  * dooptions is called to process command line arguments (-Detc).
  * It is called only at cpp startup.
  */
+int dooptions(int argc, char** argv)
 {
-        char           *ap;
-        DEFBUF         *dp;
-        int            c;
-        int            i, j;
-        char           *arg;
-        SIZES          *sizp;          /* For -S               */
-        int            size;           /* For -S               */
-        int            isdatum;        /* FALSE for -S*        */
-        int            endtest;        /* For -S               */
-
-        for (i = j = 1; i < argc; i++) {
-            arg = ap = argv[i];
-
-            if (*ap++ != '-' || *ap == EOS)
+    char* ap;
+    DEFBUF* dp;
+    int c;
+    int i, j;
+    char* arg;
+    SIZES* sizp;        /* For -S               */
+    int size;           /* For -S               */
+    int isdatum;        /* FALSE for -S*        */
+    int endtest;        /* For -S               */
+
+    for (i = j = 1; i < argc; i++)
+    {
+        arg = ap = argv[i];
+
+        if (*ap++ != '-' || *ap == EOS)
+        {
+            argv[j++] = argv[i];
+        }
+        else
+        {
+            c = *ap++;                      /* Option byte          */
+            if (islower(c))                 /* Normalize case       */
+                c = toupper(c);
+            switch (c)                      /* Command character    */
             {
-                    argv[j++] = argv[i];
-            }
-            else {
-                c = *ap++;                      /* Option byte          */
-                if (islower(c))                 /* Normalize case       */
-                    c = toupper(c);
-                switch (c) {                    /* Command character    */
-                case 'C':                       /* Keep comments        */
-                    cflag = TRUE;
-                    keepcomments = TRUE;
-                    break;
-
-                case 'D':                       /* Define symbol        */
-                    /*
-                     * If the option is just "-Dfoo", make it -Dfoo=1
-                     */
-                    while (*ap != EOS && *ap != '=')
+            case 'C':                       /* Keep comments        */
+                cflag = TRUE;
+                keepcomments = TRUE;
+                break;
+
+            case 'D':                       /* Define symbol        */
+                /*
+                 * If the option is just "-Dfoo", make it -Dfoo=1
+                 */
+                while (*ap != EOS && *ap != '=')
+                    ap++;
+                if (*ap == EOS)
+                    ap = "1";
+                else
+                    *ap++ = EOS;
+                /*
+                 * Now, save the word and its definition.
+                 */
+                dp = defendel(argv[i] + 2, FALSE);
+                dp->repl = savestring(ap);
+                dp->nargs = DEF_NOARGS;
+                break;
+
+            case 'E':                       /* Ignore non-fatal     */
+                eflag = TRUE;               /* errors.              */
+                break;
+
+            case 'I':                       /* Include directory    */
+                AddInclude( ap );           /* BP, 11.09.91 */
+                break;
+
+            case 'N':                       /* No predefineds       */
+                nflag++;                    /* Repeat to undefine   */
+                break;                      /* __LINE__, etc.       */
+
+            case 'S':
+                sizp = size_table;
+                if (0 != (isdatum = (*ap != '*'))) /* If it's just -S,     */
+                    endtest = T_FPTR;       /* Stop here            */
+                else                        /* But if it's -S*      */
+                {
+                    ap++;                   /* Step over '*'        */
+                    endtest = 0;            /* Stop at end marker   */
+                }
+                while (sizp->bits != endtest && *ap != EOS)
+                {
+                    if (!isdigit(*ap))      /* Skip to next digit   */
+                    {
                         ap++;
-                    if (*ap == EOS)
-                        ap = "1";
-                    else
-                        *ap++ = EOS;
-                    /*
-                     * Now, save the word and its definition.
-                     */
-                    dp = defendel(argv[i] + 2, FALSE);
-                    dp->repl = savestring(ap);
-                    dp->nargs = DEF_NOARGS;
-                    break;
-
-                case 'E':                       /* Ignore non-fatal     */
-                    eflag = TRUE;               /* errors.              */
-                    break;
-
-                case 'I':                       /* Include directory    */
-                    AddInclude( ap );           /* BP, 11.09.91 */
-                    break;
-
-                case 'N':                       /* No predefineds       */
-                    nflag++;                    /* Repeat to undefine   */
-                    break;                      /* __LINE__, etc.       */
-
-                case 'S':
-                    sizp = size_table;
-                    if (0 != (isdatum = (*ap != '*'))) /* If it's just -S,     */
-                        endtest = T_FPTR;       /* Stop here            */
-                    else {                      /* But if it's -S*      */
-                        ap++;                   /* Step over '*'        */
-                        endtest = 0;            /* Stop at end marker   */
+                        continue;
                     }
-                    while (sizp->bits != endtest && *ap != EOS) {
-                        if (!isdigit(*ap)) {    /* Skip to next digit   */
-                            ap++;
-                            continue;
-                        }
-                        size = 0;               /* Compile the value    */
-                        while (isdigit(*ap)) {
-                            size *= 10;
-                            size += (*ap++ - '0');
-                        }
-                        if (isdatum)
-                            sizp->size = size;  /* Datum size           */
-                        else
-                            sizp->psize = size; /* Pointer size         */
-                        sizp++;
+                    size = 0;               /* Compile the value    */
+                    while (isdigit(*ap))
+                    {
+                        size *= 10;
+                        size += (*ap++ - '0');
                     }
-                    if (sizp->bits != endtest)
-                        cwarn("-S, too few values specified in %s", argv[i]);
-                    else if (*ap != EOS)
-                        cwarn("-S, too many values, \"%s\" unused", ap);
-                    break;
+                    if (isdatum)
+                        sizp->size = size;  /* Datum size           */
+                    else
+                        sizp->psize = size; /* Pointer size         */
+                    sizp++;
+                }
+                if (sizp->bits != endtest)
+                    cwarn("-S, too few values specified in %s", argv[i]);
+                else if (*ap != EOS)
+                    cwarn("-S, too many values, \"%s\" unused", ap);
+                break;
 
-                case 'U':                       /* Undefine symbol      */
-                    if (defendel(ap, TRUE) == NULL)
-                        cwarn("\"%s\" wasn't defined", ap);
-                    break;
+            case 'U':                       /* Undefine symbol      */
+                if (defendel(ap, TRUE) == NULL)
+                    cwarn("\"%s\" wasn't defined", ap);
+                break;
 
 #if OSL_DEBUG_LEVEL > 1
-                case 'X':                       /* Debug                */
-                    debug = (isdigit(*ap)) ? atoi(ap) : 1;
+            case 'X':                       /* Debug                */
+                debug = (isdigit(*ap)) ? atoi(ap) : 1;
 #if (HOST == SYS_UNIX)
-                    signal(SIGINT, (void (*)(int)) abort); /* Trap "interrupt" */
+                signal(SIGINT, (void (*)(int)) abort); /* Trap "interrupt" */
 #endif
-                    fprintf(stderr, "Debug set to %d\n", debug);
-                    break;
+                fprintf(stderr, "Debug set to %d\n", debug);
+                break;
 #endif
 
 #if OSL_DEBUG_LEVEL > 1
-                case 'P':                       /* #define's dump       */
-                    bDumpDefs = 1;
-                    fprintf(stderr, "Dump #define's is on\n");
-                    break;
+            case 'P':                       /* #define's dump       */
+                bDumpDefs = 1;
+                fprintf(stderr, "Dump #define's is on\n");
+                break;
 #endif
 
-                default:                        /* What is this one?    */
-                    cwarn("Unknown option \"%s\"", arg);
-                    fprintf(stderr, "The following options are valid:\n\
+            default:                        /* What is this one?    */
+                cwarn("Unknown option \"%s\"", arg);
+                fprintf(stderr, "The following options are valid:\n\
   -C\t\t\tWrite source file comments to output\n\
   -Dsymbol=value\tDefine a symbol with the given (optional) value\n\
   -Idirectory\t\tAdd a directory to the #include search list\n\
@@ -277,107 +283,110 @@ dooptions(int argc, char** argv)
   -Stext\t\tSpecify sizes for #if sizeof\n\
   -Usymbol\t\tUndefine symbol\n");
 #if OSL_DEBUG_LEVEL > 1
-                    fprintf(stderr, "  -Xvalue\t\tSet internal debug flag\n");
-                    fprintf(stderr, "  -P\t\t\tdump #define's\n");
+                fprintf(stderr, "  -Xvalue\t\tSet internal debug flag\n");
+                fprintf(stderr, "  -P\t\t\tdump #define's\n");
 #endif
-                    break;
-                }                       /* Switch on all options        */
-            }                           /* If it's a -option            */
-        }                               /* For all arguments            */
+                break;
+            }                       /* Switch on all options        */
+        }                           /* If it's a -option            */
+    }                               /* For all arguments            */
 #if OSL_DEBUG_LEVEL > 1
-        if ( (bDumpDefs ? j > 4 : j > 3) ) {
+    if ( (bDumpDefs ? j > 4 : j > 3) )
 #else
-        if (j > 3) {
+    if (j > 3)
 #endif
-            cerror(
-                "Too many file arguments.  Usage: cpp [input [output]]",
+    {
+        cerror( "Too many file arguments.  Usage: cpp [input [output]]",
                 NULLST);
-        }
-        return (j);                     /* Return new argc              */
+    }
+    return (j);                     /* Return new argc              */
 }
 
-int
-readoptions(char* filename, char*** pfargv)
+int readoptions(char* filename, char*** pfargv)
 {
-        FILE           *fp;
-        int c;
-        int bInQuotes = 0;
-        char optbuff[1024], *poptbuff;
-        int fargc=0, back;
-        char *fargv[PARALIMIT], **pfa;
-
-        pfa=*pfargv=malloc(sizeof(fargv));
-
-        poptbuff=&optbuff[0];
-        filename++;
-        if ((fp = fopen(filename, "r")) == NULL) {
+    FILE* fp;
+    int c;
+    int bInQuotes = 0;
+    char optbuff[1024];
+    char* poptbuff;
+    int fargc=0;
+    int back;
+    char* fargv[PARALIMIT];
+    char** pfa;
+
+    pfa = *pfargv = malloc(sizeof(fargv));
+
+    poptbuff = &optbuff[0];
+    filename++;
+    if ((fp = fopen(filename, "r")) == NULL)
+    {
 #if OSL_DEBUG_LEVEL > 1
-            if ( debug || !bDumpDefs )
-                perror(filename);
+        if ( debug || !bDumpDefs )
+            perror(filename);
 #endif
-            return (FALSE);
+        return (FALSE);
+    }
+    do
+    {
+        /*
+         *  #i27914# double ticks '"' now have a duplicate function:
+         *  1. they define a string ( e.g. -DFOO="baz" )
+         *  2. a string can contain spaces, so -DFOO="baz zum" defines one
+         *  argument no two !
+         */
+        c = fgetc(fp);
+        if ( c != ' ' && c != CR && c != NL && c != HT && c != EOF)
+        {
+            *poptbuff++ = (char)c;
+            if( c == '"' )
+                bInQuotes = ~bInQuotes;
         }
-        do
+        else
         {
-            /*
-             *  #i27914# double ticks '"' now have a duplicate function:
-             *  1. they define a string ( e.g. -DFOO="baz" )
-             *  2. a string can contain spaces, so -DFOO="baz zum" defines one
-             *  argument no two !
-             */
-            c=fgetc(fp);
-            if ( c != ' ' && c != CR && c != NL && c != HT && c != EOF)
-            {
-                *poptbuff++=(char)c;
-                if( c == '"' )
-                    bInQuotes = ~bInQuotes;
-            }
+            if( c != EOF && bInQuotes )
+                *poptbuff++ = (char)c;
             else
             {
-                if( c != EOF && bInQuotes )
-                    *poptbuff++=(char)c;
-                else
+                *poptbuff = EOS;
+                if (strlen(optbuff)>0)
                 {
-                    *poptbuff=EOS;
-                    if (strlen(optbuff)>0)
-                    {
-                        pfa[fargc+1]=strdup(optbuff);
-                        fargc++;
-                        pfa[fargc+1]=0;
-                        poptbuff=&optbuff[0];
-                    }
+                    pfa[fargc + 1] = strdup(optbuff);
+                    fargc++;
+                    pfa[fargc + 1] = 0;
+                    poptbuff = &optbuff[0];
                 }
             }
         }
-        while ( c != EOF );
+    }
+    while ( c != EOF );
 
-        fclose(fp);
-        back=dooptions(fargc+1,pfa);
+    fclose(fp);
+    back=dooptions(fargc+1,pfa);
 
-        return (back);
+    return (back);
 }
 
 #if HOST != SYS_UNIX
-FILE_LOCAL void
-zap_uc(char* ap)
+
 /*
  * Dec operating systems mangle upper-lower case in command lines.
  * This routine forces the -D and -U arguments to uppercase.
  * It is called only on cpp startup by dooptions().
  */
+FILE_LOCAL void zap_uc(char* ap)
 {
-        while (*ap != EOS) {
-            /*
-             * Don't use islower() here so it works with Multinational
-             */
-            if (*ap >= 'a' && *ap <= 'z')
-                *ap = (char)toupper(*ap);
-            ap++;
-        }
+    while (*ap != EOS)
+    {
+        /*
+         * Don't use islower() here so it works with Multinational
+         */
+        if (*ap >= 'a' && *ap <= 'z')
+            *ap = (char)toupper(*ap);
+        ap++;
+    }
 }
 #endif
 
-void initdefines()
 /*
  * Initialize the built-in #define's.  There are two flavors:
  *      #define decus   1               (static definitions)
@@ -387,51 +396,57 @@ void initdefines()
  * Note: the built-in static definitions are suppressed by the -N option.
  * __LINE__, __FILE__, and __DATE__ are always present.
  */
+void initdefines()
 {
-        char           **pp;
-        char           *tp;
-        DEFBUF         *dp;
-        int            i;
-        time_t         tvec;
-
-        /*
-         * Predefine the built-in symbols.  Allow the
-         * implementor to pre-define a symbol as "" to
-         * eliminate it.
-         */
-        if (nflag == 0) {
-            for (pp = preset; *pp != NULL; pp++) {
-                if (*pp[0] != EOS) {
-                    dp = defendel(*pp, FALSE);
-                    dp->repl = savestring("1");
-                    dp->nargs = DEF_NOARGS;
-                }
+    char** pp;
+    char* tp;
+    DEFBUF* dp;
+    int i;
+    time_t tvec;
+
+    /*
+     * Predefine the built-in symbols.  Allow the
+     * implementor to pre-define a symbol as "" to
+     * eliminate it.
+     */
+    if (nflag == 0)
+    {
+        for (pp = preset; *pp != NULL; pp++)
+        {
+            if (*pp[0] != EOS)
+            {
+                dp = defendel(*pp, FALSE);
+                dp->repl = savestring("1");
+                dp->nargs = DEF_NOARGS;
             }
         }
+    }
+    /*
+     * The magic pre-defines (__FILE__ and __LINE__ are
+     * initialized with negative argument counts.  expand()
+     * notices this and calls the appropriate routine.
+     * DEF_NOARGS is one greater than the first "magic" definition.
+     */
+    if (nflag < 2)
+    {
+        for (pp = magic, i = DEF_NOARGS; *pp != NULL; pp++)
+        {
+            dp = defendel(*pp, FALSE);
+            dp->nargs = --i;
+        }
+#if OK_DATE
         /*
-         * The magic pre-defines (__FILE__ and __LINE__ are
-         * initialized with negative argument counts.  expand()
-         * notices this and calls the appropriate routine.
-         * DEF_NOARGS is one greater than the first "magic" definition.
+         * Define __DATE__ as today's date.
          */
-        if (nflag < 2) {
-            for (pp = magic, i = DEF_NOARGS; *pp != NULL; pp++) {
-                dp = defendel(*pp, FALSE);
-                dp->nargs = --i;
-            }
-#if OK_DATE
-            /*
-             * Define __DATE__ as today's date.
-             */
-            dp = defendel("__DATE__", FALSE);
-            dp->repl = tp = getmem(27);
-            dp->nargs = DEF_NOARGS;
-            time( &tvec);
-            *tp++ = '"';
-            strcpy(tp, ctime(&tvec));
-            tp[24] = '"';                       /* Overwrite newline    */
+        dp = defendel("__DATE__", FALSE);
+        dp->repl = tp = getmem(27);
+        dp->nargs = DEF_NOARGS;
+        time( &tvec);
+        *tp++ = '"';
+        strcpy(tp, ctime(&tvec));
+        tp[24] = '"';                       /* Overwrite newline    */
 #endif
-        }
+    }
 }
 
 
diff --git a/rsc/source/rscpp/cpp4.c b/rsc/source/rscpp/cpp4.c
index 0925caf..6240c1b 100644
--- a/rsc/source/rscpp/cpp4.c
+++ b/rsc/source/rscpp/cpp4.c
@@ -26,10 +26,10 @@
  * parm[], parmp, and parlist[] are used to store #define() argument
  * lists.  nargs contains the actual number of parameters stored.
  */
-static char     parm[NPARMWORK + 1];    /* define param work buffer     */
-static char     *parmp;                 /* Free space in parm           */
-static char     *parlist[LASTPARM];     /* -> start of each parameter   */
-static int      nargs;                  /* Parameters for this macro    */
+static char parm[NPARMWORK + 1];    /* define param work buffer     */
+static char* parmp;                 /* Free space in parm           */
+static char* parlist[LASTPARM];     /* -> start of each parameter   */
+static int nargs;                   /* Parameters for this macro    */
 
 void InitCpp4()
 {
@@ -43,7 +43,6 @@ void InitCpp4()
 }
 
 
-void dodefine()
 /*
  * Called from control when a #define is scanned.  This module
  * parses formal parameters and the replacement string.  When
@@ -81,142 +80,155 @@ void dodefine()
  * charput      puts a single character in the macro work area (parm[])
  *              in a manner analogous to textput().
  */
+void dodefine()
 {
-        int                     c;
-        DEFBUF                  *dp;            /* -> new definition    */
-        int                     isredefine;     /* TRUE if redefined    */
-        char                    *old = 0;       /* Remember redefined   */
-
-        if (type[(c = skipws())] != LET)
-            goto bad_define;
-        isredefine = FALSE;                     /* Set if redefining    */
-        if ((dp = lookid(c)) == NULL)           /* If not known now     */
-            dp = defendel(token, FALSE);        /* Save the name        */
-        else {                                  /* It's known:          */
-            isredefine = TRUE;                  /* Remember this fact   */
-            old = dp->repl;                     /* Remember replacement */
-            dp->repl = NULL;                    /* No replacement now   */
-        }
-        parlist[0] = parmp = parm;              /* Setup parm buffer    */
-        if ((c = get()) == '(') {               /* With arguments?      */
-            nargs = 0;                          /* Init formals counter */
-            do {                                /* Collect formal parms */
-                if (nargs >= LASTPARM)
-                    cfatal("Too many arguments for macro", NULLST);
-                else if ((c = skipws()) == ')')
-                    break;                      /* Got them all         */
-                else if (type[c] != LET)        /* Bad formal syntax    */
-                    goto bad_define;
-                scanid(c);                      /* Get the formal param */
-                parlist[nargs++] = parmp;       /* Save its start       */
-                textput(token);                 /* Save text in parm[]  */
-            } while ((c = skipws()) == ',');    /* Get another argument */
-            if (c != ')')                       /* Must end at )        */
+    int c;
+    DEFBUF* dp;            /* -> new definition    */
+    int isredefine;        /* TRUE if redefined    */
+    char* old = 0;         /* Remember redefined   */
+
+    if (type[(c = skipws())] != LET)
+        goto bad_define;
+    isredefine = FALSE;                     /* Set if redefining    */
+    if ((dp = lookid(c)) == NULL)           /* If not known now     */
+        dp = defendel(token, FALSE);        /* Save the name        */
+    else                                    /* It's known:          */
+    {
+        isredefine = TRUE;                  /* Remember this fact   */
+        old = dp->repl;                     /* Remember replacement */
+        dp->repl = NULL;                    /* No replacement now   */
+    }
+    parlist[0] = parmp = parm;              /* Setup parm buffer    */
+    if ((c = get()) == '(')                 /* With arguments?      */
+    {
+        nargs = 0;                          /* Init formals counter */
+        do                                  /* Collect formal parms */
+        {
+            if (nargs >= LASTPARM)
+                cfatal("Too many arguments for macro", NULLST);
+            else if ((c = skipws()) == ')')
+                break;                      /* Got them all         */
+            else if (type[c] != LET)        /* Bad formal syntax    */
                 goto bad_define;
-            c = ' ';                            /* Will skip to body    */
-        }
-        else {
-            /*
-             * DEF_NOARGS is needed to distinguish between
-             * "#define foo" and "#define foo()".
-             */
-            nargs = DEF_NOARGS;                 /* No () parameters     */
+            scanid(c);                      /* Get the formal param */
+            parlist[nargs++] = parmp;       /* Save its start       */
+            textput(token);                 /* Save text in parm[]  */
         }
-        if (type[c] == SPA)                     /* At whitespace?       */
-            c = skipws();                       /* Not any more.        */
-        workp = work;                           /* Replacement put here */
-        inmacro = TRUE;                         /* Keep \<newline> now  */
-        while (c != EOF_CHAR && c != '\n') {    /* Compile macro body   */
-            if (c == '#') {                     /* Token concatenation? */
-                while (workp > work && type[(int)workp[-1]] == SPA)
-                    --workp;                    /* Erase leading spaces */
-                save(TOK_SEP);                  /* Stuff a delimiter    */
-                c = skipws();                   /* Eat whitespace       */
-                if (type[c] == LET)             /* Another token here?  */
-                    ;                           /* Stuff it normally    */
-                else if (type[c] == DIG) {      /* Digit string after?  */
-                    while (type[c] == DIG) {    /* Stuff the digits     */
-                        save(c);
-                        c = get();
-                    }
-                    save(TOK_SEP);              /* Delimit 2nd token    */
-                }
-                else {
-                    ciwarn("Strange character after # (%d.)", c);
+        while ((c = skipws()) == ',');      /* Get another argument */
+        if (c != ')')                       /* Must end at )        */
+            goto bad_define;
+        c = ' ';                            /* Will skip to body    */
+    }
+    else
+    {
+        /*
+         * DEF_NOARGS is needed to distinguish between
+         * "#define foo" and "#define foo()".
+         */
+        nargs = DEF_NOARGS;                 /* No () parameters     */
+    }
+    if (type[c] == SPA)                     /* At whitespace?       */
+        c = skipws();                       /* Not any more.        */
+    workp = work;                           /* Replacement put here */
+    inmacro = TRUE;                         /* Keep \<newline> now  */
+    while (c != EOF_CHAR && c != '\n')      /* Compile macro body   */
+    {
+        if (c == '#')                       /* Token concatenation? */
+        {
+            while (workp > work && type[(int)workp[-1]] == SPA)
+                --workp;                    /* Erase leading spaces */
+            save(TOK_SEP);                  /* Stuff a delimiter    */
+            c = skipws();                   /* Eat whitespace       */
+            if (type[c] == LET)             /* Another token here?  */
+                ;                           /* Stuff it normally    */
+            else if (type[c] == DIG)        /* Digit string after?  */
+            {
+                while (type[c] == DIG)      /* Stuff the digits     */
+                {
+                    save(c);
+                    c = get();
                 }
-                continue;
+                save(TOK_SEP);              /* Delimit 2nd token    */
             }
-            switch (type[c]) {
-            case LET:
-                checkparm(c, dp);               /* Might be a formal    */
-                break;
+            else
+            {
+                ciwarn("Strange character after # (%d.)", c);
+            }
+            continue;
+        }
+        switch (type[c])
+        {
+        case LET:
+            checkparm(c, dp);               /* Might be a formal    */
+            break;
 
-            case DIG:                           /* Number in mac. body  */
-            case DOT:                           /* Maybe a float number */
-                scannumber(c, save);            /* Scan it off          */
-                break;
+        case DIG:                           /* Number in mac. body  */
+        case DOT:                           /* Maybe a float number */
+            scannumber(c, save);            /* Scan it off          */
+            break;
 
-            case QUO:                           /* String in mac. body  */
-                stparmscan(c);
-                break;
+        case QUO:                           /* String in mac. body  */
+            stparmscan(c);
+            break;
 
-            case BSH:                           /* Backslash            */
-                save('\\');
-                if ((c = get()) == '\n')
-                    wrongline = TRUE;
-                save(c);
-                break;
+        case BSH:                           /* Backslash            */
+            save('\\');
+            if ((c = get()) == '\n')
+                wrongline = TRUE;
+            save(c);
+            break;
 
-            case SPA:                           /* Absorb whitespace    */
-                /*
-                 * Note: the "end of comment" marker is passed on
-                 * to allow comments to separate tokens.
-                 */
-                if (workp[-1] == ' ')           /* Absorb multiple      */
-                    break;                      /* spaces               */
-                else if (c == '\t')
-                    c = ' ';                    /* Normalize tabs       */
-                /* Fall through to store character                      */
-            default:                            /* Other character      */
-                save(c);
-                break;
-            }
-            c = get();
+        case SPA:                           /* Absorb whitespace    */
+            /*
+             * Note: the "end of comment" marker is passed on
+             * to allow comments to separate tokens.
+             */
+            if (workp[-1] == ' ')           /* Absorb multiple      */
+                break;                      /* spaces               */
+            else if (c == '\t')
+                c = ' ';                    /* Normalize tabs       */
+            /* Fall through to store character                      */
+        default:                            /* Other character      */
+            save(c);
+            break;
         }
-        inmacro = FALSE;                        /* Stop newline hack    */
-        unget();                                /* For control check    */
-        if (workp > work && workp[-1] == ' ')   /* Drop trailing blank  */
-            workp--;
-        *workp = EOS;                           /* Terminate work       */
-        dp->repl = savestring(work);            /* Save the string      */
-        dp->nargs = nargs;                      /* Save arg count       */
+        c = get();
+    }
+    inmacro = FALSE;                        /* Stop newline hack    */
+    unget();                                /* For control check    */
+    if (workp > work && workp[-1] == ' ')   /* Drop trailing blank  */
+        workp--;
+    *workp = EOS;                           /* Terminate work       */
+    dp->repl = savestring(work);            /* Save the string      */
+    dp->nargs = nargs;                      /* Save arg count       */
 #if OSL_DEBUG_LEVEL > 1
-        if (debug)
-            dumpadef("macro definition", dp);
-        else if (bDumpDefs)
-            dumpadef(NULL, dp);
+    if (debug)
+        dumpadef("macro definition", dp);
+    else if (bDumpDefs)
+        dumpadef(NULL, dp);
 #endif
-        if (isredefine) {                       /* Error if redefined   */
-            if ((old != NULL && dp->repl != NULL && !streq(old, dp->repl))
-             || (old == NULL && dp->repl != NULL)
-             || (old != NULL && dp->repl == NULL)) {
+    if (isredefine)                         /* Error if redefined   */
+    {
+        if ((old != NULL && dp->repl != NULL && !streq(old, dp->repl)) ||
+            (old == NULL && dp->repl != NULL) ||
+            (old != NULL && dp->repl == NULL))
+        {
 #ifdef STRICT_UNDEF
-                cerror("Redefining defined variable \"%s\"", dp->name);
+            cerror("Redefining defined variable \"%s\"", dp->name);
 #else
-                cwarn("Redefining defined variable \"%s\"", dp->name);
+            cwarn("Redefining defined variable \"%s\"", dp->name);
 #endif
-            }
-            if (old != NULL)                    /* We don't need the    */
-                free(old);                      /* old definition now.  */
         }
-        return;
-
-bad_define:
-        cerror("#define syntax error", NULLST);
-        inmacro = FALSE;                        /* Stop <newline> hack  */
+        if (old != NULL)                    /* We don't need the    */
+            free(old);                      /* old definition now.  */
+    }
+    return;
+
+  bad_define:
+    cerror("#define syntax error", NULLST);
+    inmacro = FALSE;                        /* Stop <newline> hack  */
 }
 
-void checkparm(int c, DEFBUF* dp)
 /*
  * Replace this param if it's defined.  Note that the macro name is a
  * possible replacement token.  We stuff DEF_MAGIC in front of the token
@@ -224,114 +236,122 @@ void checkparm(int c, DEFBUF* dp)
  * the output routine.  This prevents the macro expander from
  * looping if someone writes "#define foo foo".
  */
+void checkparm(int c, DEFBUF* dp)
 {
-        int            i;
-        char           *cp;
+    int i;
+    char* cp;
 
-        scanid(c);                              /* Get parm to token[]  */
-        for (i = 0; i < nargs; i++) {           /* For each argument    */
-            if (streq(parlist[i], token)) {     /* If it's known        */
+    scanid(c);                              /* Get parm to token[]  */
+    for (i = 0; i < nargs; i++)             /* For each argument    */
+    {
+        if (streq(parlist[i], token))       /* If it's known        */
+        {
 #ifdef SOLAR
-                save(DEL);
+            save(DEL);
 #endif
-                save(i + MAC_PARM);             /* Save a magic cookie  */
-                return;                         /* And exit the search  */
-            }
+            save(i + MAC_PARM);             /* Save a magic cookie  */
+            return;                         /* And exit the search  */
         }
-        if (streq(dp->name, token))             /* Macro name in body?  */
-            save(DEF_MAGIC);                    /* Save magic marker    */
-        for (cp = token; *cp != EOS;)           /* And save             */
-            save(*cp++);                        /* The token itself     */
+    }
+    if (streq(dp->name, token))             /* Macro name in body?  */
+        save(DEF_MAGIC);                    /* Save magic marker    */
+    for (cp = token; *cp != EOS;)           /* And save             */
+        save(*cp++);                        /* The token itself     */
 }
 
-void stparmscan(int delim)
 /*
  * Normal string parameter scan.
  */
+void stparmscan(int delim)
 {
-        char           *wp;
-        int            i;
-
-        wp = workp;                     /* Here's where it starts       */
-        if (!scanstring(delim, save))
-            return;                     /* Exit on scanstring error     */
-        workp[-1] = EOS;                /* Erase trailing quote         */
-        wp++;                           /* -> first string content byte */
-        for (i = 0; i < nargs; i++) {
-            if (streq(parlist[i], wp)) {
+    char* wp;
+    int i;
+
+    wp = workp;                     /* Here's where it starts       */
+    if (!scanstring(delim, save))
+        return;                     /* Exit on scanstring error     */
+    workp[-1] = EOS;                /* Erase trailing quote         */
+    wp++;                           /* -> first string content byte */
+    for (i = 0; i < nargs; i++)
+    {
+        if (streq(parlist[i], wp))
+        {
 #ifdef SOLAR
-                *wp++ = DEL;
-                *wp++ = MAC_PARM + PAR_MAC;     /* Stuff a magic marker */
-                *wp++ = (char)(i + MAC_PARM);   /* Make a formal marker */
-                *wp = wp[-4];                   /* Add on closing quote */
-                workp = wp + 1;                 /* Reset string end     */
+            *wp++ = DEL;
+            *wp++ = MAC_PARM + PAR_MAC;     /* Stuff a magic marker */
+            *wp++ = (char)(i + MAC_PARM);   /* Make a formal marker */
+            *wp = wp[-4];                   /* Add on closing quote */
+            workp = wp + 1;                 /* Reset string end     */
 #else
-                *wp++ = MAC_PARM + PAR_MAC;     /* Stuff a magic marker */
-                *wp++ = (i + MAC_PARM);         /* Make a formal marker */
-                *wp = wp[-3];                   /* Add on closing quote */
-                workp = wp + 1;                 /* Reset string end     */
+            *wp++ = MAC_PARM + PAR_MAC;     /* Stuff a magic marker */
+            *wp++ = (i + MAC_PARM);         /* Make a formal marker */
+            *wp = wp[-3];                   /* Add on closing quote */
+            workp = wp + 1;                 /* Reset string end     */
 #endif
-                return;
-            }
+            return;
         }
-        workp[-1] = wp[-1];             /* Nope, reset end quote.       */
+    }
+    workp[-1] = wp[-1];             /* Nope, reset end quote.       */
 }
 
-void doundef()
 /*
  * Remove the symbol from the defined list.
  * Called from the #control processor.
  */
+void doundef()
 {
-        int            c;
-
-        if (type[(c = skipws())] != LET)
-            cerror("Illegal #undef argument", NULLST);
-        else {
-            scanid(c);                          /* Get name to token[]  */
-            if (defendel(token, TRUE) == NULL) {
+    int c;
+
+    if (type[(c = skipws())] != LET)
+        cerror("Illegal #undef argument", NULLST);
+    else
+    {
+        scanid(c);                          /* Get name to token[]  */
+        if (defendel(token, TRUE) == NULL)
+        {
 #ifdef STRICT_UNDEF
-                cwarn("Symbol \"%s\" not defined in #undef", token);
+            cwarn("Symbol \"%s\" not defined in #undef", token);
 #endif
-            }
         }
+    }
 }
 
-void textput(char* text)
 /*
  * Put the string in the parm[] buffer.
  */
+void textput(char* text)
 {
-        int    size;
-
-        size = strlen(text) + 1;
-        if ((parmp + size) >= &parm[NPARMWORK])
-            cfatal("Macro work area overflow", NULLST);
-        else {
-            strcpy(parmp, text);
-            parmp += size;
-        }
+    int size;
+
+    size = strlen(text) + 1;
+    if ((parmp + size) >= &parm[NPARMWORK])
+        cfatal("Macro work area overflow", NULLST);
+    else
+    {
+        strcpy(parmp, text);
+        parmp += size;
+    }
 }
 
-void charput(int c)
 /*
  * Put the byte in the parm[] buffer.
  */
+void charput(int c)
 {
-        if (parmp >= &parm[NPARMWORK])
-            cfatal("Macro work area overflow", NULLST);
-        else {
-            *parmp++ = (char)c;
-        }
+    if (parmp >= &parm[NPARMWORK])
+        cfatal("Macro work area overflow", NULLST);
+    else
+    {
+        *parmp++ = (char)c;
+    }
 }
 
 /*
  *              M a c r o   E x p a n s i o n
  */
 
-static DEFBUF   *macro;         /* Catches start of infinite macro      */
+static DEFBUF* macro;         /* Catches start of infinite macro      */
 
-void expand(DEFBUF* tokenp)
 /*
  * Expand a macro.  Called from the cpp mainline routine (via subroutine
  * macroid()) when a token is found in the symbol table.  It calls
@@ -341,176 +361,197 @@ void expand(DEFBUF* tokenp)
  * "pushed back" onto the input stream.  (When the get() routine runs
  * off the end of the macro line, it will dismiss the macro itself.)
  */
+void expand(DEFBUF* tokenp)
 {
-        int            c;
-        FILEINFO       *file;
+    int c;
+    FILEINFO* file;
 
 #if OSL_DEBUG_LEVEL > 1
-        if (debug)
-            dumpadef("expand entry", tokenp);
+    if (debug)
+        dumpadef("expand entry", tokenp);
 #endif
-        /*
-         * If no macro is pending, save the name of this macro
-         * for an eventual error message.
-         */
-        if (recursion++ == 0)
-            macro = tokenp;
-        else if (recursion == RECURSION_LIMIT) {
-            cerror("Recursive macro definition of \"%s\"", tokenp->name);
-            fprintf(stderr, "(Defined by \"%s\")\n", macro->name);
-            if (rec_recover) {
-                do {
-                    c = get();
-                } while (infile != NULL && infile->fp == NULL);
-                unget();
-                recursion = 0;
-                return;
+    /*
+     * If no macro is pending, save the name of this macro
+     * for an eventual error message.
+     */
+    if (recursion++ == 0)
+        macro = tokenp;
+    else if (recursion == RECURSION_LIMIT)
+    {
+        cerror("Recursive macro definition of \"%s\"", tokenp->name);
+        fprintf(stderr, "(Defined by \"%s\")\n", macro->name);
+        if (rec_recover)
+        {
+            do
+            {
+                c = get();
             }
+            while (infile != NULL && infile->fp == NULL);
+            unget();
+            recursion = 0;
+            return;
         }
-        /*
-         * Here's a macro to expand.
-         */
-        nargs = 0;                              /* Formals counter      */
-        parmp = parm;                           /* Setup parm buffer    */
-        switch (tokenp->nargs) {
-        case (-2):                              /* __LINE__             */
-            sprintf(work, "%d", line);
-            ungetstring(work);
-            break;
-
-        case (-3):                              /* __FILE__             */
-            for (file = infile; file != NULL; file = file->parent) {
-                if (file->fp != NULL) {
-                    sprintf(work, "\"%s\"", (file->progname != NULL)
+    }
+    /*
+     * Here's a macro to expand.
+     */
+    nargs = 0;                              /* Formals counter      */
+    parmp = parm;                           /* Setup parm buffer    */
+    switch (tokenp->nargs)
+    {
+    case (-2):                              /* __LINE__             */
+        sprintf(work, "%d", line);
+        ungetstring(work);
+        break;
+
+    case (-3):                              /* __FILE__             */
+        for (file = infile; file != NULL; file = file->parent)
+        {
+            if (file->fp != NULL)
+            {
+                sprintf(work, "\"%s\"", (file->progname != NULL)
                         ? file->progname : file->filename);
-                    ungetstring(work);
-                    break;
-                }
+                ungetstring(work);
+                break;
             }
-            break;
+        }
+        break;
 
-        default:
+    default:
+        /*
+         * Nothing funny about this macro.
+         */
+        if (tokenp->nargs < 0)
+            cfatal("Bug: Illegal __ macro \"%s\"", tokenp->name);
+        while ((c = skipws()) == '\n')      /* Look for (, skipping */
+            wrongline = TRUE;               /* spaces and newlines  */
+        if (c != '(')
+        {
             /*
-             * Nothing funny about this macro.
+             * If the programmer writes
+             *      #define foo() ...
+             *      ...
+             *      foo [no ()]
+             * just write foo to the output stream.
              */
-            if (tokenp->nargs < 0)
-                cfatal("Bug: Illegal __ macro \"%s\"", tokenp->name);
-            while ((c = skipws()) == '\n')      /* Look for (, skipping */
-                wrongline = TRUE;               /* spaces and newlines  */
-            if (c != '(') {
-                /*
-                 * If the programmer writes
-                 *      #define foo() ...
-                 *      ...
-                 *      foo [no ()]
-                 * just write foo to the output stream.
-                 */
-                unget();
-                cwarn("Macro \"%s\" needs arguments", tokenp->name);
-                fputs(tokenp->name, pCppOut );
-                return;
+            unget();
+            cwarn("Macro \"%s\" needs arguments", tokenp->name);
+            fputs(tokenp->name, pCppOut );
+            return;
+        }
+        else if (expcollect())              /* Collect arguments    */
+        {
+            if (tokenp->nargs != nargs)     /* Should be an error?  */
+            {
+                cwarn("Wrong number of macro arguments for \"%s\"",
+                      tokenp->name);
             }
-            else if (expcollect()) {            /* Collect arguments    */
-                if (tokenp->nargs != nargs) {   /* Should be an error?  */
-                    cwarn("Wrong number of macro arguments for \"%s\"",
-                        tokenp->name);
-                }
 #if OSL_DEBUG_LEVEL > 1
-                if (debug)
-                    dumpparm("expand");
+            if (debug)
+                dumpparm("expand");
 #endif
-            }                           /* Collect arguments            */
-        case DEF_NOARGS:                /* No parameters just stuffs    */
-            expstuff(tokenp);           /* Do actual parameters         */
-        }                               /* nargs switch                 */
+        }                           /* Collect arguments            */
+    case DEF_NOARGS:                /* No parameters just stuffs    */
+        expstuff(tokenp);           /* Do actual parameters         */
+    }                               /* nargs switch                 */
 }
 
-FILE_LOCAL int
-expcollect()
 /*
  * Collect the actual parameters for this macro.  TRUE if ok.
  */
+FILE_LOCAL int expcollect()
 {
-        int    c;
-        int    paren;                  /* For embedded ()'s    */
-        for (;;) {
-            paren = 0;                          /* Collect next arg.    */
-            while ((c = skipws()) == '\n')      /* Skip over whitespace */
-                wrongline = TRUE;               /* and newlines.        */
-            if (c == ')') {                     /* At end of all args?  */
-                /*
-                 * Note that there is a guard byte in parm[]
-                 * so we don't have to check for overflow here.
-                 */
-                *parmp = EOS;                   /* Make sure terminated */
-                break;                          /* Exit collection loop */
+    int c;
+    int paren;                  /* For embedded ()'s    */
+    for (;;)
+    {
+        paren = 0;                          /* Collect next arg.    */
+        while ((c = skipws()) == '\n')      /* Skip over whitespace */
+            wrongline = TRUE;               /* and newlines.        */
+        if (c == ')')                       /* At end of all args?  */
+        {
+            /*
+             * Note that there is a guard byte in parm[]
+             * so we don't have to check for overflow here.
+             */
+            *parmp = EOS;                   /* Make sure terminated */
+            break;                          /* Exit collection loop */
+        }
+        else if (nargs >= LASTPARM)
+            cfatal("Too many arguments in macro expansion", NULLST);
+        parlist[nargs++] = parmp;           /* At start of new arg  */
+        for (;; c = cget())                 /* Collect arg's bytes  */
+        {
+            if (c == EOF_CHAR)
+            {
+                cerror("end of file within macro argument", NULLST);
+                return (FALSE);             /* Sorry.               */
             }
-            else if (nargs >= LASTPARM)
-                cfatal("Too many arguments in macro expansion", NULLST);
-            parlist[nargs++] = parmp;           /* At start of new arg  */
-            for (;; c = cget()) {               /* Collect arg's bytes  */
-                if (c == EOF_CHAR) {
-                    cerror("end of file within macro argument", NULLST);
-                    return (FALSE);             /* Sorry.               */
-                }
-                else if (c == '\\') {           /* Quote next character */
-                    charput(c);                 /* Save the \ for later */
-                    charput(cget());            /* Save the next char.  */
-                    continue;                   /* And go get another   */
-                }
-                else if (type[c] == QUO) {      /* Start of string?     */
-                    scanstring(c, charput);     /* Scan it off          */
-                    continue;                   /* Go get next char     */
-                }
-                else if (c == '(')              /* Worry about balance  */
-                    paren++;                    /* To know about commas */
-                else if (c == ')') {            /* Other side too       */
-                    if (paren == 0) {           /* At the end?          */
-                        unget();                /* Look at it later     */
-                        break;                  /* Exit arg getter.     */
-                    }
-                    paren--;                    /* More to come.        */
+            else if (c == '\\')             /* Quote next character */
+            {
+                charput(c);                 /* Save the \ for later */
+                charput(cget());            /* Save the next char.  */
+                continue;                   /* And go get another   */
+            }
+            else if (type[c] == QUO)        /* Start of string?     */
+            {
+                scanstring(c, charput);     /* Scan it off          */
+                continue;                   /* Go get next char     */
+            }
+            else if (c == '(')              /* Worry about balance  */
+                paren++;                    /* To know about commas */
+            else if (c == ')')              /* Other side too       */
+            {
+                if (paren == 0)             /* At the end?          */
+                {
+                    unget();                /* Look at it later     */
+                    break;                  /* Exit arg getter.     */
                 }
-                else if (c == ',' && paren == 0) /* Comma delimits args */
-                    break;
-                else if (c == '\n')             /* Newline inside arg?  */
-                    wrongline = TRUE;           /* We'll need a #line   */
-                charput(c);                     /* Store this one       */
-            }                                   /* Collect an argument  */
-            charput(EOS);                       /* Terminate argument   */
+                paren--;                    /* More to come.        */
+            }
+            else if (c == ',' && paren == 0) /* Comma delimits args */
+                break;
+            else if (c == '\n')             /* Newline inside arg?  */
+                wrongline = TRUE;           /* We'll need a #line   */
+            charput(c);                     /* Store this one       */
+        }                                   /* Collect an argument  */
+        charput(EOS);                       /* Terminate argument   */
 #if OSL_DEBUG_LEVEL > 1
-            if (debug)
+        if (debug)
             fprintf( pCppOut, "parm[%d] = \"%s\"\n", nargs, parlist[nargs - 1]);
 #endif
-        }                                       /* Collect all args.    */
-        return (TRUE);                          /* Normal return        */
+    }                                       /* Collect all args.    */
+    return (TRUE);                          /* Normal return        */
 }
 
-FILE_LOCAL
-void expstuff(DEFBUF* tokenp)
 /*
  * Stuff the macro body, replacing formal parameters by actual parameters.
  */
+FILE_LOCAL void expstuff(DEFBUF* tokenp)
 {
-        int             c;                      /* Current character    */
-        char            *inp;                   /* -> repl string       */
-        char            *defp;                  /* -> macro output buff */
-        int             size;                   /* Actual parm. size    */
-        char            *defend;                /* -> output buff end   */
-        int             string_magic;           /* String formal hack   */
-        FILEINFO        *file;                  /* Funny #include       */
-
-        file = getfile(NBUFF, tokenp->name);
-        inp = tokenp->repl;                     /* -> macro replacement */
-        defp = file->buffer;                    /* -> output buffer     */
-        defend = defp + (NBUFF - 1);            /* Note its end         */
-        if (inp != NULL) {
-            while ((c = (*inp++ & 0xFF)) != EOS) {
+    int c;                      /* Current character    */
+    char* inp;                  /* -> repl string       */
+    char* defp;                 /* -> macro output buff */
+    int size;                   /* Actual parm. size    */
+    char* defend;               /* -> output buff end   */
+    int string_magic;           /* String formal hack   */
+    FILEINFO* file;             /* Funny #include       */
+
+    file = getfile(NBUFF, tokenp->name);
+    inp = tokenp->repl;                     /* -> macro replacement */
+    defp = file->buffer;                    /* -> output buffer     */
+    defend = defp + (NBUFF - 1);            /* Note its end         */
+    if (inp != NULL)
+    {
+        while ((c = (*inp++ & 0xFF)) != EOS)
+        {
 #ifdef SOLAR
-                if (c == DEL) {
-                    c = (*inp++ & 0xFF);
+            if (c == DEL)
+            {
+                c = (*inp++ & 0xFF);
 #else

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list