Make this compile cleanly when warnings are enabled:

- ANSIfy function declarations
 - braces around initializers structs within structs
 - add parens in complicated expressions
 - disambiguate dangling elses
 - no more implicit int
 - make functions static where possible
 - use prototypes
 - don't use varargs hack for diag()

Requested by: joerg
MFC after:	2 weeks
This commit is contained in:
Jens Schweikhardt 2001-10-28 18:35:32 +00:00
parent 76c83512ef
commit 7916863d82
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=85632
8 changed files with 310 additions and 227 deletions

View File

@ -52,6 +52,7 @@ static const char rcsid[] =
#include <stdlib.h>
#include <string.h>
#include "indent_globs.h"
#include "indent.h"
/* profile types */
#define PRO_SPECIAL 1 /* special case */
@ -69,6 +70,8 @@ static const char rcsid[] =
#define STDIN 3 /* use stdin */
#define KEY 4 /* type (keyword) */
static void scan_profile(FILE *);
char *option_source = "?";
/*
@ -85,80 +88,81 @@ struct pro {
int *p_obj; /* the associated variable */
} pro[] = {
"T", PRO_SPECIAL, 0, KEY, 0,
"bacc", PRO_BOOL, false, ON, &blanklines_around_conditional_compilation,
"badp", PRO_BOOL, false, ON, &blanklines_after_declarations_at_proctop,
"bad", PRO_BOOL, false, ON, &blanklines_after_declarations,
"bap", PRO_BOOL, false, ON, &blanklines_after_procs,
"bbb", PRO_BOOL, false, ON, &blanklines_before_blockcomments,
"bc", PRO_BOOL, true, OFF, &ps.leave_comma,
"bl", PRO_BOOL, true, OFF, &btype_2,
"br", PRO_BOOL, true, ON, &btype_2,
"bs", PRO_BOOL, false, ON, &Bill_Shannon,
"cdb", PRO_BOOL, true, ON, &comment_delimiter_on_blankline,
"cd", PRO_INT, 0, 0, &ps.decl_com_ind,
"ce", PRO_BOOL, true, ON, &cuddle_else,
"ci", PRO_INT, 0, 0, &continuation_indent,
"cli", PRO_SPECIAL, 0, CLI, 0,
"c", PRO_INT, 33, 0, &ps.com_ind,
"di", PRO_INT, 16, 0, &ps.decl_indent,
"dj", PRO_BOOL, false, ON, &ps.ljust_decl,
"d", PRO_INT, 0, 0, &ps.unindent_displace,
"eei", PRO_BOOL, false, ON, &extra_expression_indent,
"ei", PRO_BOOL, true, ON, &ps.else_if,
"fbc", PRO_FONT, 0, 0, (int *) &blkcomf,
"fbx", PRO_FONT, 0, 0, (int *) &boxcomf,
"fb", PRO_FONT, 0, 0, (int *) &bodyf,
"fc1", PRO_BOOL, true, ON, &format_col1_comments,
"fcb", PRO_BOOL, true, ON, &format_block_comments,
"fc", PRO_FONT, 0, 0, (int *) &scomf,
"fk", PRO_FONT, 0, 0, (int *) &keywordf,
"fs", PRO_FONT, 0, 0, (int *) &stringf,
"ip", PRO_BOOL, true, ON, &ps.indent_parameters,
"i", PRO_INT, 8, 0, &ps.ind_size,
"lc", PRO_INT, 0, 0, &block_comment_max_col,
"lp", PRO_BOOL, true, ON, &lineup_to_parens,
"l", PRO_INT, 78, 0, &max_col,
"nbacc", PRO_BOOL, false, OFF, &blanklines_around_conditional_compilation,
"nbadp", PRO_BOOL, false, OFF, &blanklines_after_declarations_at_proctop,
"nbad", PRO_BOOL, false, OFF, &blanklines_after_declarations,
"nbap", PRO_BOOL, false, OFF, &blanklines_after_procs,
"nbbb", PRO_BOOL, false, OFF, &blanklines_before_blockcomments,
"nbc", PRO_BOOL, true, ON, &ps.leave_comma,
"nbs", PRO_BOOL, false, OFF, &Bill_Shannon,
"ncdb", PRO_BOOL, true, OFF, &comment_delimiter_on_blankline,
"nce", PRO_BOOL, true, OFF, &cuddle_else,
"ndj", PRO_BOOL, false, OFF, &ps.ljust_decl,
"neei", PRO_BOOL, false, OFF, &extra_expression_indent,
"nei", PRO_BOOL, true, OFF, &ps.else_if,
"nfc1", PRO_BOOL, true, OFF, &format_col1_comments,
"nfcb", PRO_BOOL, true, OFF, &format_block_comments,
"nip", PRO_BOOL, true, OFF, &ps.indent_parameters,
"nlp", PRO_BOOL, true, OFF, &lineup_to_parens,
"npcs", PRO_BOOL, false, OFF, &proc_calls_space,
"npro", PRO_SPECIAL, 0, IGN, 0,
"npsl", PRO_BOOL, true, OFF, &procnames_start_line,
"nps", PRO_BOOL, false, OFF, &pointer_as_binop,
"nsc", PRO_BOOL, true, OFF, &star_comment_cont,
"nsob", PRO_BOOL, false, OFF, &swallow_optional_blanklines,
"nv", PRO_BOOL, false, OFF, &verbose,
"pcs", PRO_BOOL, false, ON, &proc_calls_space,
"psl", PRO_BOOL, true, ON, &procnames_start_line,
"ps", PRO_BOOL, false, ON, &pointer_as_binop,
"sc", PRO_BOOL, true, ON, &star_comment_cont,
"sob", PRO_BOOL, false, ON, &swallow_optional_blanklines,
"st", PRO_SPECIAL, 0, STDIN, 0,
"troff", PRO_BOOL, false, ON, &troff,
"v", PRO_BOOL, false, ON, &verbose,
{"T", PRO_SPECIAL, 0, KEY, 0},
{"bacc", PRO_BOOL, false, ON, &blanklines_around_conditional_compilation},
{"badp", PRO_BOOL, false, ON, &blanklines_after_declarations_at_proctop},
{"bad", PRO_BOOL, false, ON, &blanklines_after_declarations},
{"bap", PRO_BOOL, false, ON, &blanklines_after_procs},
{"bbb", PRO_BOOL, false, ON, &blanklines_before_blockcomments},
{"bc", PRO_BOOL, true, OFF, &ps.leave_comma},
{"bl", PRO_BOOL, true, OFF, &btype_2},
{"br", PRO_BOOL, true, ON, &btype_2},
{"bs", PRO_BOOL, false, ON, &Bill_Shannon},
{"cdb", PRO_BOOL, true, ON, &comment_delimiter_on_blankline},
{"cd", PRO_INT, 0, 0, &ps.decl_com_ind},
{"ce", PRO_BOOL, true, ON, &cuddle_else},
{"ci", PRO_INT, 0, 0, &continuation_indent},
{"cli", PRO_SPECIAL, 0, CLI, 0},
{"c", PRO_INT, 33, 0, &ps.com_ind},
{"di", PRO_INT, 16, 0, &ps.decl_indent},
{"dj", PRO_BOOL, false, ON, &ps.ljust_decl},
{"d", PRO_INT, 0, 0, &ps.unindent_displace},
{"eei", PRO_BOOL, false, ON, &extra_expression_indent},
{"ei", PRO_BOOL, true, ON, &ps.else_if},
{"fbc", PRO_FONT, 0, 0, (int *) &blkcomf},
{"fbx", PRO_FONT, 0, 0, (int *) &boxcomf},
{"fb", PRO_FONT, 0, 0, (int *) &bodyf},
{"fc1", PRO_BOOL, true, ON, &format_col1_comments},
{"fcb", PRO_BOOL, true, ON, &format_block_comments},
{"fc", PRO_FONT, 0, 0, (int *) &scomf},
{"fk", PRO_FONT, 0, 0, (int *) &keywordf},
{"fs", PRO_FONT, 0, 0, (int *) &stringf},
{"ip", PRO_BOOL, true, ON, &ps.indent_parameters},
{"i", PRO_INT, 8, 0, &ps.ind_size},
{"lc", PRO_INT, 0, 0, &block_comment_max_col},
{"lp", PRO_BOOL, true, ON, &lineup_to_parens},
{"l", PRO_INT, 78, 0, &max_col},
{"nbacc", PRO_BOOL, false, OFF, &blanklines_around_conditional_compilation},
{"nbadp", PRO_BOOL, false, OFF, &blanklines_after_declarations_at_proctop},
{"nbad", PRO_BOOL, false, OFF, &blanklines_after_declarations},
{"nbap", PRO_BOOL, false, OFF, &blanklines_after_procs},
{"nbbb", PRO_BOOL, false, OFF, &blanklines_before_blockcomments},
{"nbc", PRO_BOOL, true, ON, &ps.leave_comma},
{"nbs", PRO_BOOL, false, OFF, &Bill_Shannon},
{"ncdb", PRO_BOOL, true, OFF, &comment_delimiter_on_blankline},
{"nce", PRO_BOOL, true, OFF, &cuddle_else},
{"ndj", PRO_BOOL, false, OFF, &ps.ljust_decl},
{"neei", PRO_BOOL, false, OFF, &extra_expression_indent},
{"nei", PRO_BOOL, true, OFF, &ps.else_if},
{"nfc1", PRO_BOOL, true, OFF, &format_col1_comments},
{"nfcb", PRO_BOOL, true, OFF, &format_block_comments},
{"nip", PRO_BOOL, true, OFF, &ps.indent_parameters},
{"nlp", PRO_BOOL, true, OFF, &lineup_to_parens},
{"npcs", PRO_BOOL, false, OFF, &proc_calls_space},
{"npro", PRO_SPECIAL, 0, IGN, 0},
{"npsl", PRO_BOOL, true, OFF, &procnames_start_line},
{"nps", PRO_BOOL, false, OFF, &pointer_as_binop},
{"nsc", PRO_BOOL, true, OFF, &star_comment_cont},
{"nsob", PRO_BOOL, false, OFF, &swallow_optional_blanklines},
{"nv", PRO_BOOL, false, OFF, &verbose},
{"pcs", PRO_BOOL, false, ON, &proc_calls_space},
{"psl", PRO_BOOL, true, ON, &procnames_start_line},
{"ps", PRO_BOOL, false, ON, &pointer_as_binop},
{"sc", PRO_BOOL, true, ON, &star_comment_cont},
{"sob", PRO_BOOL, false, ON, &swallow_optional_blanklines},
{"st", PRO_SPECIAL, 0, STDIN, 0},
{"troff", PRO_BOOL, false, ON, &troff},
{"v", PRO_BOOL, false, ON, &verbose},
/* whew! */
0, 0, 0, 0, 0
{0, 0, 0, 0, 0}
};
/*
* set_profile reads $HOME/.indent.pro and ./.indent.pro and handles arguments
* given in these files.
*/
set_profile()
void
set_profile(void)
{
register FILE *f;
char fname[BUFSIZ];
@ -176,8 +180,8 @@ set_profile()
option_source = "Command line";
}
scan_profile(f)
register FILE *f;
static void
scan_profile(register FILE *f)
{
register int i;
register char *p;
@ -196,11 +200,10 @@ scan_profile(f)
}
}
char *param_start;
char *param_start;
eqin(s1, s2)
register char *s1;
register char *s2;
static int
eqin(char *s1, char *s2)
{
while (*s1) {
if (*s1++ != *s2++)
@ -213,7 +216,8 @@ eqin(s1, s2)
/*
* Set the defaults.
*/
set_defaults()
void
set_defaults(void)
{
register struct pro *p;
@ -227,11 +231,10 @@ set_defaults()
*p->p_obj = p->p_default;
}
set_option(arg)
register char *arg;
void
set_option(char *arg)
{
register struct pro *p;
extern double atof();
arg++; /* ignore leading "-" */
for (p = pro; p->p_name; p++)

View File

@ -56,9 +56,12 @@ static const char rcsid[] =
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "indent_globs.h"
#include "indent_codes.h"
#include <ctype.h>
#include "indent.h"
static void bakcopy(void);
char *in_name = "Standard Input"; /* will always point to name of input
* file */
@ -66,20 +69,17 @@ char *out_name = "Standard Output"; /* will always point to name
* of output file */
char bakfile[MAXPATHLEN] = "";
static void usage __P((void));
main(argc, argv)
int argc;
char **argv;
int
main(int argc, char **argv)
{
extern int found_err; /* flag set in diag() on error */
extern int found_err; /* flag set in diagN() on error */
int dec_ind; /* current indentation for declarations */
int di_stack[20]; /* a stack of structure indentation levels */
int flushed_nl; /* used when buffering up comments to remember
* that a newline was passed over */
int force_nl; /* when true, code must be broken */
int hd_type; /* used to store type of stmt for if (...),
int hd_type = 0; /* used to store type of stmt for if (...),
* for (...), etc */
register int i; /* local loop counter */
int scase; /* set to true when we see a case, so we will
@ -252,7 +252,7 @@ main(argc, argv)
parse(semicolon);
{
register char *p = buf_ptr;
register col = 1;
register int col = 1;
while (1) {
if (*p == ' ')
@ -349,7 +349,7 @@ main(argc, argv)
if (sc_end >= &(save_com[sc_size])) { /* check for temp buffer
* overflow */
diag(1, "Internal buffer overflow - Move big comment from right after if, while, or whatever.");
diag2(1, "Internal buffer overflow - Move big comment from right after if, while, or whatever.");
fflush(output);
exit(1);
}
@ -363,10 +363,10 @@ main(argc, argv)
if (flushed_nl) /* if we flushed a newline, make sure it is
* put back */
force_nl = true;
if (type_code == sp_paren && *token == 'i'
&& last_else && ps.else_if
|| type_code == sp_nparen && *token == 'e'
&& e_code != s_code && e_code[-1] == '}')
if ((type_code == sp_paren && *token == 'i'
&& last_else && ps.else_if)
|| (type_code == sp_nparen && *token == 'e'
&& e_code != s_code && e_code[-1] == '}'))
force_nl = false;
if (sc_end == 0) { /* ignore buffering if comment wasnt
@ -383,7 +383,7 @@ main(argc, argv)
*sc_end++ = ' ';
if (verbose && !flushed_nl) /* print error msg if the line
* was not already broken */
diag(0, "Line broken");
diag2(0, "Line broken");
flushed_nl = false;
}
for (t_ptr = token; *t_ptr; ++t_ptr)
@ -419,7 +419,7 @@ main(argc, argv)
|| s_com != e_com) /* must dump end of line */
dump_line();
if (ps.tos > 1) /* check for balanced braces */
diag(1, "Stuff missing from end of file.");
diag2(1, "Stuff missing from end of file.");
if (verbose) {
printf("There were %d output lines and %d comments\n",
@ -440,7 +440,7 @@ main(argc, argv)
(type_code != lbrace || !btype_2)) {
/* we should force a broken line here */
if (verbose && !flushed_nl)
diag(0, "Line broken");
diag2(0, "Line broken");
flushed_nl = false;
dump_line();
ps.want_blank = false; /* dont insert blank at line start */
@ -540,7 +540,7 @@ main(argc, argv)
ps.sizeof_mask &= (1 << ps.p_l_follow) - 1;
if (--ps.p_l_follow < 0) {
ps.p_l_follow = 0;
diag(0, "Extra %c", *token);
diag3(0, "Extra %c", *token);
}
if (e_code == s_code) /* if the paren starts the line */
ps.paren_level = ps.p_l_follow; /* then indent it */
@ -713,7 +713,7 @@ main(argc, argv)
* stmt. It is a bit complicated, because the semicolon might
* be in a for stmt
*/
diag(1, "Unbalanced parens");
diag2(1, "Unbalanced parens");
ps.p_l_follow = 0;
if (sp_sw) { /* this is a check for a if, while, etc. with
* unbalanced parens */
@ -758,7 +758,7 @@ main(argc, argv)
if (ps.p_l_follow > 0) { /* check for preceding unbalanced
* parens */
diag(1, "Unbalanced parens");
diag2(1, "Unbalanced parens");
ps.p_l_follow = 0;
if (sp_sw) { /* check for unclosed if, for, etc. */
sp_sw = false;
@ -800,7 +800,7 @@ main(argc, argv)
* declarations */
parse(semicolon);
if (ps.p_l_follow) {/* check for unclosed if, for, else. */
diag(1, "Unbalanced parens");
diag2(1, "Unbalanced parens");
ps.p_l_follow = 0;
sp_sw = false;
}
@ -809,7 +809,7 @@ main(argc, argv)
if (s_code != e_code && !ps.block_init) { /* '}' must be first on
* line */
if (verbose)
diag(0, "Line broken");
diag2(0, "Line broken");
dump_line();
}
*e_code++ = '}';
@ -852,7 +852,7 @@ main(argc, argv)
if (*token == 'e') {
if (e_code != s_code && (!cuddle_else || e_code[-1] != '}')) {
if (verbose)
diag(0, "Line broken");
diag2(0, "Line broken");
dump_line();/* make sure this starts a line */
ps.want_blank = false;
}
@ -863,7 +863,7 @@ main(argc, argv)
else {
if (e_code != s_code) { /* make sure this starts a line */
if (verbose)
diag(0, "Line broken");
diag2(0, "Line broken");
dump_line();
ps.want_blank = false;
}
@ -909,19 +909,19 @@ main(argc, argv)
*e_code++ = ' ';
ps.want_blank = false;
if (is_procname == 0 || !procnames_start_line) {
if (!ps.block_init)
if (!ps.block_init) {
if (troff && !ps.dumped_decl_indent) {
sprintf(e_code, "\n.De %dp+\200p\n", dec_ind * 7);
ps.dumped_decl_indent = 1;
e_code += strlen(e_code);
}
else
} else {
while ((e_code - s_code) < dec_ind) {
CHECK_SIZE_CODE;
*e_code++ = ' ';
}
}
else {
}
}
} else {
if (dec_ind && s_code != e_code)
dump_line();
dec_ind = 0;
@ -1072,7 +1072,7 @@ main(argc, argv)
if (strncmp(s_lab, "#if", 3) == 0) {
if (blanklines_around_conditional_compilation) {
register c;
register int c;
prefix_blankline_requested++;
while ((c = getc(input)) == '\n');
ungetc(c, input);
@ -1082,18 +1082,18 @@ main(argc, argv)
state_stack[ifdef_level++] = ps;
}
else
diag(1, "#if stack overflow");
diag2(1, "#if stack overflow");
}
else if (strncmp(s_lab, "#else", 5) == 0)
if (ifdef_level <= 0)
diag(1, "Unmatched #else");
diag2(1, "Unmatched #else");
else {
match_state[ifdef_level - 1] = ps;
ps = state_stack[ifdef_level - 1];
}
else if (strncmp(s_lab, "#endif", 6) == 0) {
if (ifdef_level <= 0)
diag(1, "Unmatched #endif");
diag2(1, "Unmatched #endif");
else {
ifdef_level--;
@ -1104,7 +1104,7 @@ main(argc, argv)
*/
if (match_state[ifdef_level].tos >= 0
&& bcmp(&ps, &match_state[ifdef_level], sizeof ps))
diag(0, "Syntactically inconsistant #ifdef alternatives.");
diag2(0, "Syntactically inconsistant #ifdef alternatives.");
#endif
}
if (blanklines_around_conditional_compilation) {
@ -1115,7 +1115,7 @@ main(argc, argv)
break; /* subsequent processing of the newline
* character will cause the line to be printed */
case comment: /* we have gotten a /* this is a biggie */
case comment: /* we have gotten a / followed by * this is a biggie */
if (flushed_nl) { /* we should force a broken line here */
flushed_nl = false;
dump_line();
@ -1132,19 +1132,13 @@ main(argc, argv)
} /* end of main while (1) loop */
}
static void
usage()
{
fprintf(stderr, "usage: indent [ file [ outfile ] ] [ options ]\n");
exit(1);
}
/*
* copy input file to backup file if in_name is /blah/blah/blah/file, then
* backup file will be ".Bfile" then make the backup file the input and
* original input file the output
*/
bakcopy()
static void
bakcopy(void)
{
int n,
bakchn;
@ -1163,7 +1157,7 @@ bakcopy()
bakchn = creat(bakfile, 0600);
if (bakchn < 0)
err(1, "%s", bakfile);
while (n = read(fileno(input), buff, sizeof buff))
while ((n = read(fileno(input), buff, sizeof buff)) != 0)
if (write(bakchn, buff, n) != n)
err(1, "%s", bakfile);
if (n < 0)

47
usr.bin/indent/indent.h Normal file
View File

@ -0,0 +1,47 @@
/*
* Copyright (c) 2001 Jens Schweikhardt
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#if 0
__FBSDID("$FreeBSD$");
#endif
void addkey(char *, int);
int compute_code_target(void);
int compute_label_target(void);
int count_spaces(int, char *);
int lexi(void);
void diag2(int, char *);
void diag3(int, char *, int);
void diag4(int, char *, int, int);
void dump_line(void);
void fill_buffer(void);
void parse(int);
void parsefont(struct fstate *, char *);
void pr_comment(void);
void set_defaults(void);
void set_option(char *);
void set_profile(void);
void writefdef(struct fstate *f, int);

View File

@ -157,7 +157,7 @@ int procnames_start_line; /* if true, the names of procedures
int proc_calls_space; /* If true, procedure calls look like:
* foo(bar) rather than foo (bar) */
int format_block_comments; /* true if comments beginning with
* `/*\n' are to be reformatted */
* `/ * \n' are to be reformatted */
int format_col1_comments; /* If comments which start in column 1
* are to be magically reformatted
* (just like comments that begin in
@ -220,7 +220,7 @@ struct parser_state {
float cstk[STACKSIZE];/* used to store case stmt indentation levels */
int box_com; /* set to true when we are in a "boxed"
* comment. In that case, the first non-blank
* char should be lined up with the / in /* */
* char should be lined up with the / in / followed by * */
int comment_delta,
n_comment_delta;
int cast_mask; /* indicates which close parens close off

View File

@ -47,20 +47,22 @@ static const char rcsid[] =
#include <stdlib.h>
#include <string.h>
#include "indent_globs.h"
#include "indent.h"
int comment_open;
static paren_target;
static int paren_target;
static int pad_output(int current, int target);
dump_line()
void
dump_line(void)
{ /* dump_line is the routine that actually
* effects the printing of the new source. It
* prints the label section, followed by the
* code section with the appropriate nesting
* level, followed by any comments */
register int cur_col,
target_col;
static not_first_line;
target_col = 1;
static int not_first_line;
if (ps.procname[0]) {
if (troff) {
@ -143,7 +145,7 @@ dump_line()
}
target_col = compute_code_target();
{
register i;
register int i;
for (i = 0; i < ps.p_l_follow; i++)
if (ps.paren_indents[i] >= 0)
@ -157,7 +159,7 @@ dump_line()
putc(*p, output);
cur_col = count_spaces(cur_col, s_code);
}
if (s_com != e_com)
if (s_com != e_com) {
if (troff) {
int all_here = 0;
register char *p;
@ -216,7 +218,7 @@ dump_line()
}
}
else { /* print comment, if any */
register target = ps.com_col;
register int target = ps.com_col;
register char *com_st = s_com;
target += ps.comment_delta;
@ -251,6 +253,7 @@ dump_line()
cur_col = count_spaces(cur_col, com_st);
++ps.com_lines; /* count lines with comments */
}
}
if (ps.use_ff)
putc('\014', output);
else
@ -282,19 +285,19 @@ dump_line()
ps.paren_level = ps.p_l_follow;
paren_target = -ps.paren_indents[ps.paren_level - 1];
not_first_line = 1;
return;
}
compute_code_target()
int
compute_code_target(void)
{
register target_col = ps.ind_size * ps.ind_level + 1;
register int target_col = ps.ind_size * ps.ind_level + 1;
if (ps.paren_level)
if (!lineup_to_parens)
target_col += continuation_indent * ps.paren_level;
else {
register w;
register t = paren_target;
register int w;
register int t = paren_target;
if ((w = count_spaces(t, s_code) - max_col) > 0
&& count_spaces(target_col, s_code) <= max_col) {
@ -310,7 +313,8 @@ compute_code_target()
return target_col;
}
compute_label_target()
int
compute_label_target(void)
{
return
ps.pcase ? (int) (case_ind * ps.ind_size) + 1
@ -334,8 +338,8 @@ compute_label_target()
* buffer from temporary buffer
*
*/
int
fill_buffer()
void
fill_buffer(void)
{ /* this routine reads stuff from the input */
register char *p;
register int i;
@ -351,9 +355,9 @@ fill_buffer()
}
for (p = in_buffer;;) {
if (p >= in_buffer_limit) {
register size = (in_buffer_limit - in_buffer) * 2 + 10;
register offset = p - in_buffer;
in_buffer = (char *) realloc(in_buffer, size);
register int size = (in_buffer_limit - in_buffer) * 2 + 10;
register int offset = p - in_buffer;
in_buffer = realloc(in_buffer, size);
if (in_buffer == 0)
err(1, "input line too long");
p = in_buffer + offset;
@ -391,11 +395,12 @@ fill_buffer()
p++;
if (*p == '*')
com = 1;
else if (*p == 'O')
else if (*p == 'O') {
if (*++p == 'N')
p++, com = 1;
else if (*p == 'F' && *++p == 'F')
p++, com = 2;
}
while (*p == ' ' || *p == '\t')
p++;
if (p[0] == '*' && p[1] == '/' && p[2] == '\n' && com) {
@ -418,7 +423,6 @@ fill_buffer()
putc(*p, output);
while (*p++ != '\n');
}
return;
}
/*
@ -449,11 +453,13 @@ fill_buffer()
* HISTORY: initial coding November 1976 D A Willcox of CAC
*
*/
pad_output(current, target) /* writes tabs and blanks (if necessary) to
static int
pad_output(int current, int target)
/* writes tabs and blanks (if necessary) to
* get the current output position up to the
* target column */
int current; /* the current column value */
int target; /* position we want it at */
/* current: the current column value */
/* target: position we want it at */
{
register int curr; /* internal column pointer */
register int tcur;
@ -495,13 +501,11 @@ pad_output(current, target) /* writes tabs and blanks (if necessary) to
*
*/
int
count_spaces(current, buffer)
count_spaces(int current, char *buffer)
/*
* this routine figures out where the character position will be after
* printing the text in buffer starting at column "current"
*/
int current;
char *buffer;
{
register char *buf; /* used to look thru buffer */
register int cur; /* current character counter */
@ -533,9 +537,9 @@ count_spaces(current, buffer)
}
int found_err;
/* VARARGS2 */
diag(level, msg, a, b)
char *msg;
void
diag4(int level, char *msg, int a, int b)
{
if (level)
found_err = 1;
@ -551,18 +555,49 @@ diag(level, msg, a, b)
}
}
writefdef(f, nm)
register struct fstate *f;
void
diag3(int level, char *msg, int a)
{
if (level)
found_err = 1;
if (output == stdout) {
fprintf(stdout, "/**INDENT** %s@%d: ", level == 0 ? "Warning" : "Error", line_no);
fprintf(stdout, msg, a);
fprintf(stdout, " */\n");
}
else {
fprintf(stderr, "%s@%d: ", level == 0 ? "Warning" : "Error", line_no);
fprintf(stderr, msg, a);
fprintf(stderr, "\n");
}
}
void
diag2(int level, char *msg)
{
if (level)
found_err = 1;
if (output == stdout) {
fprintf(stdout, "/**INDENT** %s@%d: ", level == 0 ? "Warning" : "Error", line_no);
fprintf(stdout, msg);
fprintf(stdout, " */\n");
}
else {
fprintf(stderr, "%s@%d: ", level == 0 ? "Warning" : "Error", line_no);
fprintf(stderr, msg);
fprintf(stderr, "\n");
}
}
void
writefdef(struct fstate *f, int nm)
{
fprintf(output, ".ds f%c %s\n.nr s%c %d\n",
nm, f->font, nm, f->size);
}
char *
chfont(of, nf, s)
register struct fstate *of,
*nf;
char *s;
char *
chfont(struct fstate *of, struct fstate *nf, char *s)
{
if (of->font[0] != nf->font[0]
|| of->font[1] != nf->font[1]) {
@ -591,13 +626,12 @@ chfont(of, nf, s)
return s;
}
parsefont(f, s0)
register struct fstate *f;
char *s0;
void
parsefont(struct fstate *f, char *s0)
{
register char *s = s0;
int sizedelta = 0;
bzero(f, sizeof *f);
while (*s) {
if (isdigit(*s))

View File

@ -33,11 +33,13 @@
* SUCH DAMAGE.
*/
#if 0
#ifndef lint
static char sccsid[] = "@(#)lexi.c 8.1 (Berkeley) 6/6/93";
static const char rcsid[] =
"$FreeBSD$";
#endif /* not lint */
#endif
/*
* Here we have the token scanner for indent. It scans off one token and puts
@ -55,6 +57,8 @@ static const char rcsid[] =
#define alphanum 1
#define opchar 3
void fill_buffer(void);
struct templ {
char *rwd;
int rwcode;
@ -62,37 +66,37 @@ struct templ {
struct templ specials[1000] =
{
"switch", 1,
"case", 2,
"break", 0,
"struct", 3,
"union", 3,
"enum", 3,
"default", 2,
"int", 4,
"char", 4,
"float", 4,
"double", 4,
"long", 4,
"short", 4,
"typdef", 4,
"unsigned", 4,
"register", 4,
"static", 4,
"global", 4,
"extern", 4,
"void", 4,
"goto", 0,
"return", 0,
"if", 5,
"while", 5,
"for", 5,
"else", 6,
"do", 6,
"sizeof", 7,
"const", 9,
"volatile", 9,
0, 0
{"switch", 1},
{"case", 2},
{"break", 0},
{"struct", 3},
{"union", 3},
{"enum", 3},
{"default", 2},
{"int", 4},
{"char", 4},
{"float", 4},
{"double", 4},
{"long", 4},
{"short", 4},
{"typdef", 4},
{"unsigned", 4},
{"register", 4},
{"static", 4},
{"global", 4},
{"extern", 4},
{"void", 4},
{"goto", 0},
{"return", 0},
{"if", 5},
{"while", 5},
{"for", 5},
{"else", 6},
{"do", 6},
{"sizeof", 7},
{"const", 9},
{"volatile", 9},
{0, 0}
};
char chartype[128] =
@ -117,14 +121,10 @@ char chartype[128] =
1, 1, 1, 0, 3, 0, 3, 0
};
int
lexi()
lexi(void)
{
int unary_delim; /* this is set to 1 if the current token
*
* forces a following operator to be unary */
static int last_code; /* the last token type returned */
static int l_struct; /* set to 1 if the last token was 'struct' */
@ -145,7 +145,7 @@ lexi()
}
/* Scan an alphanumeric token */
if (chartype[*buf_ptr] == alphanum || buf_ptr[0] == '.' && isdigit(buf_ptr[1])) {
if (chartype[(int)*buf_ptr] == alphanum || (buf_ptr[0] == '.' && isdigit(buf_ptr[1]))) {
/*
* we have a character or number
*/
@ -154,7 +154,7 @@ lexi()
* reserved words */
register struct templ *p;
if (isdigit(*buf_ptr) || buf_ptr[0] == '.' && isdigit(buf_ptr[1])) {
if (isdigit(*buf_ptr) || (buf_ptr[0] == '.' && isdigit(buf_ptr[1]))) {
int seendot = 0,
seenexp = 0,
seensfx = 0;
@ -169,14 +169,15 @@ lexi()
}
else
while (1) {
if (*buf_ptr == '.')
if (*buf_ptr == '.') {
if (seendot)
break;
else
seendot++;
}
CHECK_SIZE_TOKEN;
*e_token++ = *buf_ptr++;
if (!isdigit(*buf_ptr) && *buf_ptr != '.')
if (!isdigit(*buf_ptr) && *buf_ptr != '.') {
if ((*buf_ptr != 'E' && *buf_ptr != 'e') || seenexp)
break;
else {
@ -187,6 +188,7 @@ lexi()
if (*buf_ptr == '+' || *buf_ptr == '-')
*e_token++ = *buf_ptr++;
}
}
}
while (1) {
if (!(seensfx & 1) &&
@ -209,7 +211,7 @@ lexi()
}
}
else
while (chartype[*buf_ptr] == alphanum || *buf_ptr == BACKSLASH) {
while (chartype[(int)*buf_ptr] == alphanum || *buf_ptr == BACKSLASH) {
/* fill_buffer() terminates buffer with newline */
if (*buf_ptr == BACKSLASH) {
if (*(buf_ptr + 1) == '\n') {
@ -582,8 +584,8 @@ lexi()
/*
* Add the given keyword to the keyword table, using val as the keyword type
*/
addkey(key, val)
char *key;
void
addkey(char *key, int val)
{
register struct templ *p = specials;
while (p->rwd)
@ -598,5 +600,4 @@ addkey(key, val)
p->rwcode = val;
p[1].rwd = 0;
p[1].rwcode = 0;
return;
}

View File

@ -32,19 +32,23 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#if 0
#ifndef lint
static char sccsid[] = "@(#)parse.c 8.1 (Berkeley) 6/6/93";
static const char rcsid[] =
"$FreeBSD$";
#endif /* not lint */
#endif
#include <stdio.h>
#include "indent_globs.h"
#include "indent_codes.h"
#include "indent.h"
parse(tk)
int tk; /* the code for the construct scanned */
static void reduce(void);
void
parse(int tk) /* tk: the code for the construct scanned */
{
int i;
@ -145,7 +149,7 @@ parse(tk)
case elselit: /* scanned an else */
if (ps.p_stack[ps.tos] != ifhead)
diag(1, "Unmatched 'else'");
diag2(1, "Unmatched 'else'");
else {
ps.ind_level = ps.il[ps.tos]; /* indentation for else should
* be same as for if */
@ -164,7 +168,7 @@ parse(tk)
ps.p_stack[ps.tos] = stmt;
}
else
diag(1, "Stmt nesting error.");
diag2(1, "Stmt nesting error.");
break;
case swstmt: /* had switch (...) */
@ -188,7 +192,7 @@ parse(tk)
break;
default: /* this is an error */
diag(1, "Unknown code to parser");
diag2(1, "Unknown code to parser");
return;
@ -244,9 +248,9 @@ parse(tk)
/*----------------------------------------------*\
| REDUCTION PHASE |
\*----------------------------------------------*/
reduce()
static void
reduce(void)
{
register int i;
for (;;) { /* keep looping until there is nothing left to

View File

@ -32,17 +32,17 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#if 0
#ifndef lint
static char sccsid[] = "@(#)pr_comment.c 8.1 (Berkeley) 6/6/93";
static const char rcsid[] =
"$FreeBSD$";
#endif /* not lint */
#endif
#include <stdio.h>
#include <stdlib.h>
#include "indent_globs.h"
#include "indent.h"
/*
* NAME:
* pr_comment
@ -74,8 +74,8 @@ static const char rcsid[] =
* beginning of the input line are removed
*/
pr_comment()
void
pr_comment(void)
{
int now_col; /* column we are in now */
int adj_max_col; /* Adjusted max_col for when we decide to
@ -85,12 +85,12 @@ pr_comment()
char *t_ptr; /* used for moving string */
int unix_comment; /* tri-state variable used to decide if it is
* a unix-style comment. 0 means only blanks
* since /*, 1 means regular style comment, 2
* since /+*, 1 means regular style comment, 2
* means unix style comment */
int break_delim = comment_delimiter_on_blankline;
int l_just_saw_decl = ps.just_saw_decl;
/*
* int ps.last_nl = 0; /* true iff the last significant thing
* int ps.last_nl = 0; true iff the last significant thing
* weve seen is a newline
*/
int one_liner = 1; /* true iff this comment is a one-liner */
@ -116,9 +116,9 @@ pr_comment()
if (*buf_ptr == '-' || *buf_ptr == '*' ||
(*buf_ptr == '\n' && !format_block_comments)) {
ps.box_com = true; /* A comment with a '-' or '*' immediately
* after the /* is assumed to be a boxed
* after the /+* is assumed to be a boxed
* comment. A comment with a newline
* immediately after the /* is assumed to
* immediately after the /+* is assumed to
* be a block comment and is treated as a
* box comment unless format_block_comments
* is nonzero (the default). */
@ -136,7 +136,7 @@ pr_comment()
ps.com_col = 1 + !format_col1_comments;
}
else {
register target_col;
register int target_col;
break_delim = 0;
if (s_code != e_code)
target_col = count_spaces(compute_code_target(), s_code);
@ -163,7 +163,7 @@ pr_comment()
buf_ptr++;
}
ps.comment_delta = 0;
*e_com++ = '/'; /* put '/*' into buffer */
*e_com++ = '/'; /* put '/' followed by '*' into buffer */
*e_com++ = '*';
if (*buf_ptr != ' ' && !ps.box_com)
*e_com++ = ' ';