[net.sources] indent with different bracket switch

wjm@teddy.UUCP (01/22/86)

This posting describes the changes to indent to indent with indented
braces on their own line.  Use the switch -bg to get this style of
indentation.

diff -c ./Makefile /usr/src/local/indent/Makefile
*** ./Makefile	Fri May 31 02:33:30 1985
--- /usr/src/local/indent/Makefile	Thu Jun 13 15:42:21 1985
***************
*** 1,3
  #
  # @(#)Makefile 1.1 85/05/30 SMI; from UCB 4.2 10/22/82
  #

--- 1,4 -----
+ #	@(#)Makefile	4.2	(Berkeley)	10/22/82
  #
  DESTDIR=
  CFLAGS=	-O
***************
*** 1,6
  #
- # @(#)Makefile 1.1 85/05/30 SMI; from UCB 4.2 10/22/82
- #
  DESTDIR=
  CFLAGS=	-O
  OBJS=	indent.o io.o lexi.o parse.o pr_comment.o

--- 1,5 -----
  #	@(#)Makefile	4.2	(Berkeley)	10/22/82
  #
  DESTDIR=
  CFLAGS=	-O
  OBJS=	indent.o io.o lexi.o parse.o pr_comment.o
***************
*** 4,9
  DESTDIR=
  CFLAGS=	-O
  OBJS=	indent.o io.o lexi.o parse.o pr_comment.o
  
  indent: indent.o io.o lexi.o parse.o pr_comment.o
  	cc -o indent ${OBJS}

--- 3,10 -----
  DESTDIR=
  CFLAGS=	-O
  OBJS=	indent.o io.o lexi.o parse.o pr_comment.o
+ CFILES = indent.c io.c lexi.c parse.c pr_comment.c
+ HFILES = indent_codes.h indent_globs.h
  
  indent: indent.o io.o lexi.o parse.o pr_comment.o
  	cc -o indent ${OBJS}
***************
*** 8,13
  indent: indent.o io.o lexi.o parse.o pr_comment.o
  	cc -o indent ${OBJS}
  
  clean:
  	rm -f ${OBJS} indent
  

--- 9,16 -----
  indent: indent.o io.o lexi.o parse.o pr_comment.o
  	cc -o indent ${OBJS}
  
+ indent.lst:
+ 	(clist $(HFILES) $(CFILES) > $@) &
  clean:
  	rm -f ${OBJS} indent
  
***************
*** 12,15
  	rm -f ${OBJS} indent
  
  install:
! 	install -s indent ${DESTDIR}/usr/ucb/indent

--- 15,18 -----
  	rm -f ${OBJS} indent
  
  install:
! 	install indent ${DESTDIR}/usr/local/indent
Only in /usr/src/local/indent: README
Only in .: SCCS
Only in /usr/src/local/indent: indent.1
diff -c ./indent.c /usr/src/local/indent/indent.c
*** ./indent.c	Fri May 31 02:33:51 1985
--- /usr/src/local/indent/indent.c	Mon Oct  7 21:44:34 1985
***************
*** 1,6
! #ifndef lint
! static	char sccsid[] = "@(#)indent.c 1.1 85/05/30 SMI"; /* from UCB 4.1 10/21/82 */
! #endif
  
  /*
  

--- 1,4 -----
! static char sccsid[] = "@(#)indent.c	4.1	(GenRad) 30-Sep-85 12:56 jpn";
  
  /*
  
***************
*** 48,53
  	dec_nest =
  	decl_com_ind =
  	decl_on_line =
  	i_l_follow =
  	in_decl =
  	ind_level =

--- 46,52 -----
  	dec_nest =
  	decl_com_ind =
  	decl_on_line =
+ 	gr_btype = do GenRad style indentation
  	i_l_follow =
  	in_decl =
  	ind_level =
***************
*** 87,92
  	No one (main routine)
  
  HISTORY:
  	November 1976	D A Willcox of CAC	Initial coding
  	12/9/76		D A Willcox of CAC	Fixed defaults for decl_com_ind
  						to be 8 less than com_ind if 

--- 86,95 -----
  	No one (main routine)
  
  HISTORY:
+ 	30-Sep-85 12:56 jpn of GenRad           gr spacing with parens
+ 	12-Jun-85 11:33 wjm of GenRad		treat else if on 1 line
+ 	19-Dec-84 09:32 wjm of GenRad		Add bg for gr indentation
+ 						use open, not creat
  	November 1976	D A Willcox of CAC	Initial coding
  	12/9/76		D A Willcox of CAC	Fixed defaults for decl_com_ind
  						to be 8 less than com_ind if 
***************
*** 98,103
  						Added code to handle -br and -bl
  						parameters
  */
  #include "indent_globs.h";
  #include "indent_codes.h";
  

--- 101,107 -----
  						Added code to handle -br and -bl
  						parameters
  */
+ #include <sys/file.h>
  #include "indent_globs.h";
  #include "indent_codes.h";
  
***************
*** 133,138
      "-bl", 15,		       /* put brace on left by itself */
      "-st", 16,		       /* use the standard input and output
  				  files */
      0, 0
  };
  

--- 137,143 -----
      "-bl", 15,		       /* put brace on left by itself */
      "-st", 16,		       /* use the standard input and output
  				  files */
+     "-bg", 17,			/* put brace on left indented */
      0, 0
  };
  
***************
*** 179,185
      int     want_blank;	       /* set to true when the following token
  			          should be prefixed by a blank. (Said
  			          prefixing is ignored in some cases.) */
! 
  #ifdef dolog		       /* include declarations needed for log */
      int     log_fid;	       /* fid of log file */
  

--- 184,191 -----
      int     want_blank;	       /* set to true when the following token
  			          should be prefixed by a blank. (Said
  			          prefixing is ignored in some cases.) */
!     int	    last_else;		/* last stme is else 12-Jun-85 11:37 wjm */
!     
  #ifdef dolog		       /* include declarations needed for log */
      int     log_fid;	       /* fid of log file */
  
***************
*** 239,244
      input = -1;
      output = -1;
      ljust_decl = d_ljust;
  
  
  

--- 245,251 -----
      input = -1;
      output = -1;
      ljust_decl = d_ljust;
+     last_else = 0;		/* starts off as FALSE */
  
  
  
***************
*** 254,259
  			          value by an arg, we will set this equal
  			          to com_ind */
      btype_2 = d_btype_2;
      unindent_displace = d_unindent;
      leave_comma = d_leave_comma;
  

--- 261,267 -----
  			          value by an arg, we will set this equal
  			          to com_ind */
      btype_2 = d_btype_2;
+     gr_btype = d_gr_btype;
      unindent_displace = d_unindent;
      leave_comma = d_leave_comma;
  
***************
*** 280,286
  			printf ("Input and output files must be different\n");
  			exit ();
  		    }
! 		    output = creat (out_name, 0644);
  		    if (output < 0) {   /* check for create error */
  			printf ("Can't create %s\n", argv[i]);
  			exit ();

--- 288,294 -----
  			printf ("Input and output files must be different\n");
  			exit ();
  		    }
! 		    output = open (out_name, (O_WRONLY | O_CREAT | O_EXCL ),0666);
  		    if (output < 0) {   /* check for create error */
  			printf ("Can't create %s\n", argv[i]);
  			exit ();
***************
*** 521,527
  			type_code != lbrace
  			||
  			!btype_2
! 		    )) {       /* we should force a broken line here */
  		if (verbose && !flushed_nl)
  		    printf ("%d: Line broken\n", line_no);
  		flushed_nl = false;

--- 529,541 -----
  			type_code != lbrace
  			||
  			!btype_2
! 		    )
! 		    &&		/* check for the else if case here */
! 		    !( type_code == sp_paren
! 		    	&& *token == 'i'
! 			&& last_else
! 		     )
! 		    ) {       /* we should force a broken line here */
  		if (verbose && !flushed_nl)
  		    printf ("%d: Line broken\n", line_no);
  		flushed_nl = false;
***************
*** 565,572
  		want_blank = false;
  		break;
  
! 	    case newline: 
! 		dump_line ();
  		++line_no;     /* keep track of input line number */
  		want_blank = false;
  		break;

--- 579,590 -----
  		want_blank = false;
  		break;
  
! 	    case newline:	/* don't insert between else if */
! 	        if ( !last_else )
! 		    {
! 		    dump_line ();
! 		    want_blank = false;
! 		    }
  		++line_no;     /* keep track of input line number */
  		break;
  
***************
*** 568,574
  	    case newline: 
  		dump_line ();
  		++line_no;     /* keep track of input line number */
- 		want_blank = false;
  		break;
  
  	    case lparen:       /* got a ( or [ */

--- 586,591 -----
  		    want_blank = false;
  		    }
  		++line_no;     /* keep track of input line number */
  		break;
  
  	    case lparen:       /* got a ( or [ */
***************
*** 576,582
  		if (want_blank && *token != '[')
  			       /* don't put space in front of square
  			          bracket */
! 		    *e_code++ = ' ';
  
  		if (in_decl)
  		    while ((e_code - s_code) < dec_ind)

--- 593,600 -----
  		if (want_blank && *token != '[')
  			       /* don't put space in front of square
  			          bracket */
! 		    if (gr_btype == false || par_blank_ok) /* jpn */
! 			*e_code++ = ' ';
  
  		if (in_decl)
  		    while ((e_code - s_code) < dec_ind)
***************
*** 844,849
  			          expression is scanned */
  		hd_type = (*token == 'i' ? ifstmt :
  			(*token == 'w' ? whilestmt : forstmt));
  	    /* remember the type of header for later use by parser */
  		goto copy_id;  /* copy the token into line */
  

--- 862,869 -----
  			          expression is scanned */
  		hd_type = (*token == 'i' ? ifstmt :
  			(*token == 'w' ? whilestmt : forstmt));
+ 		if ( last_else && hd_type == ifstmt )
+ 		    force_nl = false;/* else if () on 1 line! (wjm) */
  	    /* remember the type of header for later use by parser */
  		goto copy_id;  /* copy the token into line */
  
***************
*** 858,863
  		}
  
  		force_nl = true;
  	    /* also, following stuff must go onto new line */
  		parse (*token == 'e' ? elselit : dolit);
  	    /* pass token on to parser */

--- 878,884 -----
  		}
  
  		force_nl = true;
+ 		last_else = *token == 'e';/* catch else if stmt */
  	    /* also, following stuff must go onto new line */
  		parse (*token == 'e' ? elselit : dolit);
  	    /* pass token on to parser */
***************
*** 986,992
  
  	*e_code = '\0';	       /* make sure code section is null
  			          terminated */
! 
      }			       /* end of main while (1) loop */
  };
  

--- 1007,1014 -----
  
  	*e_code = '\0';	       /* make sure code section is null
  			          terminated */
! 	if ( type_code != sp_nparen && type_code != newline )
! 	    last_else = false;	/* last else is only true once */
      }			       /* end of main while (1) loop */
  };
  
***************
*** 1097,1102
  	    break;
  	case 14: 	       /* -br */
  	    btype_2 = true;
  	    break;
  	case 15: 	       /* -bl */
  	    btype_2 = false;

--- 1119,1125 -----
  	    break;
  	case 14: 	       /* -br */
  	    btype_2 = true;
+ 	    gr_btype = false;
  	    break;
  	case 15: 	       /* -bl */
  	    btype_2 = false;
***************
*** 1100,1105
  	    break;
  	case 15: 	       /* -bl */
  	    btype_2 = false;
  	    break;
  	case 16:
  	    if(input<0) input = 0;

--- 1123,1129 -----
  	    break;
  	case 15: 	       /* -bl */
  	    btype_2 = false;
+ 	    gr_btype = false;
  	    break;
  	case 16:
  	    if(input<0) input = 0;
***************
*** 1105,1110
  	    if(input<0) input = 0;
  	    if(output<0) output = 1;
  	    break;
      }
  }
  

--- 1129,1139 -----
  	    if(input<0) input = 0;
  	    if(output<0) output = 1;
  	    break;
+ 	case 17:		/* -bg */
+ 	    btype_2 = false;
+ 	    gr_btype = true;
+ 	    break;
+ 
      }
  }
  
diff -c ./indent_codes.h /usr/src/local/indent/indent_codes.h
*** ./indent_codes.h	Fri May 31 02:35:21 1985
--- /usr/src/local/indent/indent_codes.h	Thu Jun 13 14:55:52 1985
***************
*** 1,4
! /*	@(#)indent_codes.h 1.1 85/05/30 SMI; from UCB 4.1 10/21/82	*/
  
  /*
  

--- 1,4 -----
! /*	indent_codes.h	4.2	83/08/11	*/
  
  /*
  
diff -c ./indent_globs.h /usr/src/local/indent/indent_globs.h
*** ./indent_globs.h	Fri May 31 02:35:38 1985
--- /usr/src/local/indent/indent_globs.h	Mon Oct  7 21:43:49 1985
***************
*** 1,4
! /*	@(#)indent_globs.h 1.1 85/05/30 SMI; from UCB 4.1 10/21/82	*/
  
  /*
  

--- 1,5 -----
! /*	indent_globs.h	4.2	19-Dec-84 09:26 wjm add gr_btype
! 				83/08/11	*/
  
  /*
  
***************
*** 46,52
  #define d_leave_comma 0
  		   /* default value for leave_comma */
  #define d_btype_2 1/* default value for btype_2 */
! 
  #define tabsize 8  /* the size of a tab */
  #define tabmask 0177770
  		   /* mask used when figuring length of lines with tabs */

--- 47,53 -----
  #define d_leave_comma 0
  		   /* default value for leave_comma */
  #define d_btype_2 1/* default value for btype_2 */
! #define d_gr_btype 0		/* default value for gr_btype	 */
  #define tabsize 8  /* the size of a tab */
  #define tabmask 0177770
  		   /* mask used when figuring length of lines with tabs */
***************
*** 115,120
  int     decl_on_line;
  		   /* set to true if this line of code has part of a
  		      declaration on it */
  int     had_eof;   /* set to true when input is exhausted */
  int     i_l_follow;/* the level to which ind_level should be set after the
  		      current line is printed */

--- 116,122 -----
  int     decl_on_line;
  		   /* set to true if this line of code has part of a
  		      declaration on it */
+ int	gr_btype;		/* set to true if using gr std indent	 */
  int     had_eof;   /* set to true when input is exhausted */
  int     i_l_follow;/* the level to which ind_level should be set after the
  		      current line is printed */
***************
*** 154,156
  		      with a form feed */
  int     verbose;   /* when true, non-essential error messages are printed 
  		   */

--- 156,162 -----
  		      with a form feed */
  int     verbose;   /* when true, non-essential error messages are printed 
  		   */
+ int     par_blank_ok;
+ 		   /* when true, and gr standard formatting,  an open
+ 		      parenthesis may be preceded by a space (modified by
+ 		      want_blank in indent.c) */
diff -c ./io.c /usr/src/local/indent/io.c
*** ./io.c	Fri May 31 02:34:09 1985
--- /usr/src/local/indent/io.c	Thu Jun 13 14:55:53 1985
***************
*** 1,6
! #ifndef lint
! static	char sccsid[] = "@(#)io.c 1.1 85/05/30 SMI"; /* from UCB 4.1 10/21/82 */
! #endif
  
  /*
  

--- 1,4 -----
! static char sccsid[] = "@(#)io.c	4.1	(Berkeley)	10/21/82";
  
  /*
  
***************
*** 110,116
  
  HISTORY:
  	initial coding 	November 1976	D A Willcox of CAC
! 
  */
  #include "indent_globs.h";
  

--- 108,114 -----
  
  HISTORY:
  	initial coding 	November 1976	D A Willcox of CAC
! 	11-Jun-85 17:55 wjm print single character as a char, not int
  */
  #include "indent_globs.h";
  
***************
*** 116,122
  
  
  
! int     ff = 014;	       /* used to write a form feed */
  
  
  dump_line () {		       /* dump_line is the routine that actually

--- 114,120 -----
  
  
  
! char     *ff = "\f";	       /* used to write a form feed */
  
  
  dump_line () {		       /* dump_line is the routine that actually
***************
*** 195,201
      }
  
      if (use_ff)
! 	write (output, &ff, 1);/* end the output with a ff */
      else
  	write (output, "\n", 1); /* or a newline */
      use_ff = false;

--- 193,199 -----
      }
  
      if (use_ff)
! 	write (output, ff, 1);/* end the output with a ff */
      else
  	write (output, "\n", 1); /* or a newline */
      use_ff = false;
diff -c ./lexi.c /usr/src/local/indent/lexi.c
*** ./lexi.c	Fri May 31 02:34:28 1985
--- /usr/src/local/indent/lexi.c	Mon Oct  7 21:46:17 1985
***************
*** 1,6
! #ifndef lint
! static	char sccsid[] = "@(#)lexi.c 1.1 85/05/30 SMI"; /* from UCB 4.1 10/21/82 */
! #endif
  
  /*
  

--- 1,5 -----
! static char sccsid[] = "@(#)lexi.c	4.1	(GenRad) 30-Sep-85 12:56 jpn";
! static char oldsccs[] = "@(#)lexi.c	4.1	(Berkeley)	10/21/82";
  
  /*
  
***************
*** 100,105
      "else", 6,
      "do", 6,
      "sizeof", 0,
      0, 0
  };
  

--- 99,105 -----
      "else", 6,
      "do", 6,
      "sizeof", 0,
+     "return", 0,	/* jpn */
      0, 0
  };
  
***************
*** 174,179
  		fill_buffer ();
  	}
  
  	*tok++ = '\0';
  
  	if (l_struct) {	       /* if last token was 'struct', then this token

--- 174,181 -----
  		fill_buffer ();
  	}
  
+ 	par_blank_ok = false;  /* jpn */
+ 
  	*tok++ = '\0';
  
  	if (l_struct) {	       /* if last token was 'struct', then this token
***************
*** 204,209
  
  	    if (found_it) {    /* we have a keyword */
  		last_u_d = true;
  		switch (specials[i].rwcode) {
  		    case 1:    /* it is a switch */
  			return (swstmt);

--- 206,212 -----
  
  	    if (found_it) {    /* we have a keyword */
  		last_u_d = true;
+ 		par_blank_ok = true;  /* jpn */
  		switch (specials[i].rwcode) {
  		    case 1:    /* it is a switch */
  			return (swstmt);
***************
*** 445,450
  
  
      }			       /* end of switch */
  
      if (code != newline) {
  	l_struct = false;

--- 448,462 -----
  
  
      }			       /* end of switch */
+ 
+     /* this section is a hack for gr standard spacing and open parens */
+     if (code == lparen) {      /* jpn */
+ 	if (last_code == lparen)
+ 	    par_blank_ok = true;
+     }
+     else {
+ 	par_blank_ok = true;
+     }
  
      if (code != newline) {
  	l_struct = false;
diff -c ./parse.c /usr/src/local/indent/parse.c
*** ./parse.c	Fri May 31 02:34:46 1985
--- /usr/src/local/indent/parse.c	Thu Jun 20 08:34:59 1985
***************
*** 1,6
! #ifndef lint
! static	char sccsid[] = "@(#)parse.c 1.1 85/05/30 SMI"; /* from UCB 4.1 10/21/82 */
! #endif
  
  /*
  

--- 1,4 -----
! static char sccsid[] = "@(#)parse.c	4.1  (GenRad)	18-Jun-85 16:13 wjm";
  
  /*
  
***************
*** 80,85
  	btype_2
  	case_ind =
  	cstk =
  	i_l_follow =
  	il =		Stack of indentation levels
  	ind_level =

--- 78,84 -----
  	btype_2
  	case_ind =
  	cstk =
+ 	gr_btype =
  	i_l_follow =
  	il =		Stack of indentation levels
  	ind_level =
***************
*** 96,101
  	main
  
  HISTORY:
  	initial coding 	November 1976	D A Willcox of CAC
  
  */

--- 95,102 -----
  	main
  
  HISTORY:
+ 	12-Jun-85 16:17 wjm indent else if at the same level
+ 	19-Dec-84 09:49 wjm add GenRad style indentation -bg
  	initial coding 	November 1976	D A Willcox of CAC
  
  */
***************
*** 151,157
  	    }
  	    break;
  
! 	case ifstmt: 	       /* scanned if (...) */
  	case dolit: 	       /* 'do' */
  	case forstmt: 	       /* for (...) */
  	    p_stack[++tos] = tk;

--- 152,167 -----
  	    }
  	    break;
  
! 	case ifstmt: 	       /* scanned if (...) *//*  12-Jun-85 16:22 wjm*/
! 	    if ( p_stack[tos] == elsehead )/* an else if statement */
! 		{
! 		p_stack[ ++tos ] = ifstmt;
! 		il[tos] = ind_level = i_l_follow = il[ tos - 1];
! 		++i_l_follow;
! 		search_brace = btype_2;
! 		break;		/* fall thru for the normal case */
! 		}
! 	    
  	case dolit: 	       /* 'do' */
  	case forstmt: 	       /* for (...) */
  	    p_stack[++tos] = tk;
***************
*** 164,170
  	    break_comma = false;
  	/* don't break comma in an initial list */
  	    if (p_stack[tos] == stmt || p_stack[tos] == decl
! 				     || p_stack[tos] == stmtl)
  		++i_l_follow;  /* it is a random, isolated stmt group or a
  			          declaration */
  	    else {

--- 174,181 -----
  	    break_comma = false;
  	/* don't break comma in an initial list */
  	    if (p_stack[tos] == stmt || p_stack[tos] == decl
! 				     || p_stack[tos] == stmtl) {
! 
  		++i_l_follow;  /* it is a random, isolated stmt group or a
  			          declaration */
  		if ( gr_btype )	/* also indent brackets */
***************
*** 167,174
  				     || p_stack[tos] == stmtl)
  		++i_l_follow;  /* it is a random, isolated stmt group or a
  			          declaration */
! 	    else {
! 		if (s_code == e_code) {
  		/* only do this if there is nothing on the line */
  		    --ind_level;
  		/* it is a group as part of a while, for, etc. */

--- 178,194 -----
  
  		++i_l_follow;  /* it is a random, isolated stmt group or a
  			          declaration */
! 		if ( gr_btype )	/* also indent brackets */
! 		    ind_level = i_l_follow;
! 		}
! 	    else if ( gr_btype )
! 		{
! 		if ( p_stack[tos] == swstmt )
! 		    --ind_level;
! 		}
! 	    else
! 		{
! 		if (s_code == e_code && !gr_btype) {
  		/* only do this if there is nothing on the line */
  		    --ind_level;
  		/* it is a group as part of a while, for, etc. */
***************
*** 181,186
  
  	    p_stack[++tos] = lbrace;
  	    il[tos] = ind_level;
  	    p_stack[++tos] = stmt;
  	/* allow null stmt between braces */
  	    il[tos] = i_l_follow;

--- 201,212 -----
  
  	    p_stack[++tos] = lbrace;
  	    il[tos] = ind_level;
+ 	    if ( gr_btype )	/* make sure things get back correctly */
+ 		{
+ 		--il[tos];
+ 		if ( p_stack[tos - 1] == swstmt )
+ 		    --il[tos];
+ 		}
  	    p_stack[++tos] = stmt;
  	/* allow null stmt between braces */
  	    il[tos] = i_l_follow;
***************
*** 192,197
  		ind_level = i_l_follow = il[tos];
  		p_stack[++tos] = whilestmt;
  		il[tos] = ind_level = i_l_follow;
  	    }
  	    else {	       /* it is a while loop */
  		p_stack[++tos] = whilestmt;

--- 218,227 -----
  		ind_level = i_l_follow = il[tos];
  		p_stack[++tos] = whilestmt;
  		il[tos] = ind_level = i_l_follow;
+ 		if ( gr_btype ) 
+ 		    {
+ 		    ++ind_level;/* gr style assumes curly's */
+ 		    }
  	    }
  	    else {	       /* it is a while loop */
  		p_stack[++tos] = whilestmt;
***************
*** 222,228
  	case rbrace: 	       /* scanned a } */
  	/* stack should have <lbrace> <stmt> or <lbrace> <stmtl> */
  	    if (p_stack[tos - 1] == lbrace) {
! 		ind_level = i_l_follow = il[--tos];
  		p_stack[tos] = stmt;
  	    }
  	    else {

--- 252,260 -----
  	case rbrace: 	       /* scanned a } */
  	/* stack should have <lbrace> <stmt> or <lbrace> <stmtl> */
  	    if (p_stack[tos - 1] == lbrace) {
! 		if ( !gr_btype )
! 		    ind_level = il[ tos - 1];
! 		i_l_follow = il[--tos];
  		p_stack[tos] = stmt;
  		if ( gr_btype && tos > 0 && p_stack[tos-1] == swstmt )
  		    --ind_level;	/* move one back for switch's */
***************
*** 224,229
  	    if (p_stack[tos - 1] == lbrace) {
  		ind_level = i_l_follow = il[--tos];
  		p_stack[tos] = stmt;
  	    }
  	    else {
  		printf ("%d: Stmt nesting error\n", line_no);

--- 256,263 -----
  		    ind_level = il[ tos - 1];
  		i_l_follow = il[--tos];
  		p_stack[tos] = stmt;
+ 		if ( gr_btype && tos > 0 && p_stack[tos-1] == swstmt )
+ 		    --ind_level;	/* move one back for switch's */
  	    }
  	    else {
  		printf ("%d: Stmt nesting error\n", line_no);
diff -c ./pr_comment.c /usr/src/local/indent/pr_comment.c
*** ./pr_comment.c	Fri May 31 02:35:04 1985
--- /usr/src/local/indent/pr_comment.c	Thu Jun 13 14:55:59 1985
***************
*** 1,6
! #ifndef lint
! static	char sccsid[] = "@(#)pr_comment.c 1.1 85/05/30 SMI"; /* from UCB 4.1 10/21/82 */
! #endif
  
  /*
  

--- 1,4 -----
! static char sccsid[] = "@(#)pr_comment.c	4.1	(Berkeley)	10/21/82";
  
  /*