static void devide_line( char * out /* 'out' is 'output' in actual */ ) /* * Devide a too long line into output lines shorter than NWORK. * This routine is called from putout(). */ { FILEINFO * file; char * save; char * wp; int c; file = unget_string( out, NULL); /* To re-read the line */ wp = out_ptr = out; while ((c = get_ch()), file == infile) { if (char_type[ c] & HSP) { if (keep_spaces || out == out_ptr || (char_type[ *(out_ptr - 1) & UCHARMAX] & HSP)) { *out_ptr++ = c; wp++; } continue; } scan_token( c, &wp, out_wend); /* Read a token */ if (NWORK-2 < wp - out_ptr) { /* Too long a token */ cfatal( "Too long token %s", out_ptr, 0L, NULL); /* _F_ */ } else if (out_end <= wp) { /* Too long line */ if (mcpp_debug & MACRO_CALL) { /* -K option */ /* Other than GCC or Visual C */ /* scan_token() scans a comment as sequence of some */ /* tokens such as '/', '*', ..., '*', '/', since it */ /* does not expect comment. */ save = out_ptr; while ((save = strrchr( save, '/')) != NULL) { if (*(save - 1) == '*') { /* '*' '/' sequence */ out_ptr = save + 1; /* Devide at the end*/ break; /* of a comment*/ } } } save = save_string( out_ptr); /* Save the token */ *out_ptr++ = '\n'; /* Append newline */ *out_ptr = EOS; put_a_line( out); /* Putout the former tokens */ wp = out_ptr = stpcpy( out, save); /* Restore the token */ free( save); } else { /* Still in size */ out_ptr = wp; /* Advance the pointer */ } } unget_ch(); /* Push back the source character */ put_a_line( out); /* Putout the last tokens */ sharp( NULL, 0); /* Correct line number */ }
static void putout( char * out /* Output line (line-end is always 'out_ptr') */ ) /* * Put out a line with or without "post-preprocessing". */ { size_t len; *out_ptr++ = '\n'; /* Put out a newline */ *out_ptr = EOS; #if ! MBCHAR_IS_ESCAPE_FREE post_preproc( out); #elif ! HAVE_DIGRAPHS if (mcpp_mode == STD && option_flag.dig) post_preproc( out); #endif /* Else no post-preprocess */ #if COMPILER != GNUC && COMPILER != MSC /* GCC and Visual C can accept very long line */ len = strlen( out); if (len > NWORK - 1) devide_line( out); /* Devide a too long line */ else #endif put_a_line( out); }
static void putout( char * out /* Output line (line-end is always 'out_ptr') */ ) /* * Put out a line with or without "post-preprocessing". */ { size_t len; *out_ptr++ = '\n'; /* Put out a newline */ *out_ptr = EOS; /* Else no post-preprocess */ /* GCC and Visual C can accept very long line */ len = strlen( out); if (len > NWORK - 1) devide_line( out); /* Devide a too long line */ else put_a_line( out); }