siebers%cadillac.cad.mcc.com@MCC.COM (Greg Siebers) (07/14/89)
I intended to send this only to Jim Kingdon, but I cannot reach him at either kingdon@ai.mit.edu or kingdon@prep.ai.mit.edu. Sorry for its length. I have done some simple comparisons between the new GNU-indent and Sun's version of indent from SunOS 4.0.1, and I noticed a few places where Sun's version did a better job. For example, for the Sun version I used the following ~/.indent.pro: -bap -bacc -bad -bbb -bc -br -nbs -cdb -ce -cli0.5 -d0 -di16 -eei -nfc1 -i4 -nip -l100 -lp -npcs -npsl -sc -nsob -v and the only changes for GNU-indent were: -cli4 instead of -cli0.5 -ip0 instead of -nip ********************************************************************************* The sample input file was the following: ======================================= static int Write(ch) char ch; { extern int write (); ch &= '\177'; if (write(1, &ch, 1) != 1) fprintf (stderr, "Unbuffered write failed"); } /*--------------------------------------------------------------------*/ void CharOut (c) int c; { int m, n; switch ((char) c) { case ('\t'): m = 1; do { m += TAB_WIDTH; } while (m <= next_column); if (m > screen_width) { SoftNewLine(); } else { for (n = m - next_column; n > 0; n--) CharOut((int) ' '); } break; } } ********************************************************************************* The output from Sun's version of indent was: =========================================== static int Write(ch) char ch; { extern int write(); ch &= '\177'; if (write(1, &ch, 1) != 1) fprintf(stderr, "Unbuffered write failed"); } /*--------------------------------------------------------------------*/ void CharOut(c) int c; { int m, n; switch ((char) c) { case ('\t'): m = 1; do { m += TAB_WIDTH; } while (m <= next_column); if (m > screen_width) { SoftNewLine(); } else { for (n = m - next_column; n > 0; n--) CharOut((int) ' '); } break; } } ********************************************************************************* and the output from GNU-indent was: ================================== static int Write(ch) char ch; { extern int write(); ch &='\177'; if (write(1, &ch, 1) !=1) fprintf(stderr, "Unbuffered write failed"); } /*--------------------------------------------------------------------*/ void CharOut(c) int c; { int m, n; switch ((char) c) { case ('\t'): m = 1; do { m += TAB_WIDTH; } while (m <= next_column); if (m > screen_width) { SoftNewLine(); } else { for (n = m - next_column; n > 0; n--) CharOut((int) ' '); } break; } } ********************************************************************************* Using "grep -n ch" to locate some critical lines: ================================================ test.SUN:3:char ch; test.SUN:7: ch &= '\177'; test.SUN:8: if (write(1, &ch, 1) != 1) test.GNU:3:char ch; NOTE: no indentation test.GNU:7: ch &='\177'; NOTE: extra indent; no space after = test.GNU:9: if (write(1, &ch, 1) !=1) NOTE: extra line 8; no space after = ********************************************************************************* and using "grep while" yields: ============================= test.SUN: } while (m <= next_column); test.GNU: } while (m <= next_column); NOTE: extra indentation ********************************************************************************* I also tried compiling GNU-indent on an Apollo running SR10.1, and I obtained the following warning and error messages, most of which could be fixed by running lint and taking note of comments regarding enumeration type clashes: =========================================================================== parousia(0.73)> make cc -O -A nansi -A cpu,3000 -A systype,bsd4.3 -A runtype,bsd4.3 -W0,-frnd,-comchk,-std -c indent.c ******** Line 266 of "indent.c": [Warning #159] Variable "last_token_ends_sp" was not initialized before this use. ******** Line 1277 of "indent.c": [Warning #202] Value assigned to flushed_nl is never used; assignment eliminated by optimizer. cc -O -A nansi -A cpu,3000 -A systype,bsd4.3 -A runtype,bsd4.3 -W0,-frnd,-comchk,-std -c io.c ******** Line 244 of "io.c": [Warning #202] Value assigned to cur_col is never used; assignment eliminated by optimizer. cc -O -A nansi -A cpu,3000 -A systype,bsd4.3 -A runtype,bsd4.3 -W0,-frnd,-comchk,-std -c lexi.c (0086) {0, 0} ******** Line 86 of "lexi.c": [Error #079] Illegal type of constant "0" for variable "rwcode". *** Exit 1 Stop. parousia(0.74)> diff -c0 -t lexi.c.bak lexi.c *** lexi.c.bak Tue Jul 4 21:46:41 1989 --- lexi.c Wed Jul 12 13:03:36 1989 *************** *** 86 **** ! {0, 0} --- 86 ---- ! {0, rw_break} NOTE: just a quick fix to allow it to compile parousia(0.77)> make cc -O -A nansi -A cpu,3000 -A systype,bsd4.3 -A runtype,bsd4.3 -W0,-frnd,-comchk,-std -c lexi.c cc -O -A nansi -A cpu,3000 -A systype,bsd4.3 -A runtype,bsd4.3 -W0,-frnd,-comchk,-std -c parse.c cc -O -A nansi -A cpu,3000 -A systype,bsd4.3 -A runtype,bsd4.3 -W0,-frnd,-comchk,-std -c pr_comment.c ******** Line 330 of "pr_comment.c": [Warning #202] Value assigned to now_col is never used; assignment eliminated by optimizer. ******** Line 312 of "pr_comment.c": [Warning #202] Value assigned to now_col is never used; assignment eliminated by optimizer. cc -O -A nansi -A cpu,3000 -A systype,bsd4.3 -A runtype,bsd4.3 -W0,-frnd,-comchk,-std -c args.c (0150) {"T", PRO_KEY, 0, 0, 0, &exp_T}, ******** Line 150 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0159) {"bli", PRO_INT, 0, 0, &brace_indent, &exp_bli}, ******** Line 159 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0164) {"cd", PRO_INT, 0, 0, &decl_com_ind, &exp_cd}, ******** Line 164 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0166) {"ci", PRO_INT, 0, 0, &continuation_indent, &exp_ci}, ******** Line 166 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0167) {"cli", PRO_INT, 0, 0, &case_indent, &exp_cli}, ******** Line 167 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0168) {"cp", PRO_INT, 33, 0, &else_endif_col, &exp_cp}, ******** Line 168 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0169) {"c", PRO_INT, 33, 0, &com_ind, &exp_c}, ******** Line 169 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0170) {"di", PRO_INT, 16, 0, &decl_indent, &exp_di}, ******** Line 170 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0172) {"d", PRO_INT, 0, 0, &unindent_displace, &exp_d}, ******** Line 172 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0175) {"fbc", PRO_FONT, 0, 0, (int *) &blkcomf, &exp_fbc}, ******** Line 175 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0176) {"fbx", PRO_FONT, 0, 0, (int *) &boxcomf, &exp_fbx}, ******** Line 176 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0177) {"fb", PRO_FONT, 0, 0, (int *) &bodyf, &exp_fb}, ******** Line 177 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0180) {"fc", PRO_FONT, 0, 0, (int *) &scomf, &exp_fc}, ******** Line 180 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0181) {"fk", PRO_FONT, 0, 0, (int *) &keywordf, &exp_fk}, ******** Line 181 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0182) {"fs", PRO_FONT, 0, 0, (int *) &stringf, &exp_fs}, ******** Line 182 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0183) {"gnu", PRO_SETTINGS, 0, 0, ******** Line 183 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0188) {"i", PRO_INT, 4, 0, &ind_size, &exp_i}, ******** Line 188 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0189) {"kr", PRO_SETTINGS, 0, 0, ******** Line 189 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0193) {"lc", PRO_INT, 0, 0, &block_comment_max_col, &exp_lc}, ******** Line 193 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0195) {"l", PRO_INT, 78, 0, &max_col, &exp_l}, ******** Line 195 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0214) {"npro", PRO_IGN, 0, 0, 0, &exp_pro}, ******** Line 214 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0227) {"st", PRO_STDIN, 0, 0, 0, &exp_st}, ******** Line 227 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0229) {"version", PRO_PRSTRING, 0, 0, (int *)"GNU indent 1.0. Based on Berkeley indent 5.11 (9/15/88).", &exp_version}, ******** Line 229 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". (0233) {0, 0, 0, 0, 0, 0} ******** Line 233 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_type". ******** Line 233 of "args.c": [Error #079] Illegal type of constant "0" for variable "p_special". *** Exit 1 Stop. parousia(0.78)> diff -c0 -t args.c.bak args.c *** args.c.bak Tue Jul 11 23:24:25 1989 --- args.c Wed Jul 12 13:34:42 1989 *************** NOTE: more quick fixes for compilation, *** 150 **** and not necessarily correct ! {"T", PRO_KEY, 0, 0, 0, &exp_T}, --- 150 ---- ! {"T", PRO_KEY, 0, OFF, 0, &exp_T}, *************** *** 159 **** ! {"bli", PRO_INT, 0, 0, &brace_indent, &exp_bli}, --- 159 ---- ! {"bli", PRO_INT, 0, OFF, &brace_indent, &exp_bli}, *************** *** 164 **** ! {"cd", PRO_INT, 0, 0, &decl_com_ind, &exp_cd}, --- 164 ---- ! {"cd", PRO_INT, 0, OFF, &decl_com_ind, &exp_cd}, *************** *** 166,170 **** ! {"ci", PRO_INT, 0, 0, &continuation_indent, &exp_ci}, ! {"cli", PRO_INT, 0, 0, &case_indent, &exp_cli}, ! {"cp", PRO_INT, 33, 0, &else_endif_col, &exp_cp}, ! {"c", PRO_INT, 33, 0, &com_ind, &exp_c}, ! {"di", PRO_INT, 16, 0, &decl_indent, &exp_di}, --- 166,170 ---- ! {"ci", PRO_INT, 0, OFF, &continuation_indent, &exp_ci}, ! {"cli", PRO_INT, 0, OFF, &case_indent, &exp_cli}, ! {"cp", PRO_INT, 33, OFF, &else_endif_col, &exp_cp}, ! {"c", PRO_INT, 33, OFF, &com_ind, &exp_c}, ! {"di", PRO_INT, 16, OFF, &decl_indent, &exp_di}, *************** *** 172 **** ! {"d", PRO_INT, 0, 0, &unindent_displace, &exp_d}, --- 172 ---- ! {"d", PRO_INT, 0, OFF, &unindent_displace, &exp_d}, *************** *** 175,177 **** ! {"fbc", PRO_FONT, 0, 0, (int *) &blkcomf, &exp_fbc}, ! {"fbx", PRO_FONT, 0, 0, (int *) &boxcomf, &exp_fbx}, ! {"fb", PRO_FONT, 0, 0, (int *) &bodyf, &exp_fb}, --- 175,177 ---- ! {"fbc", PRO_FONT, 0, OFF, (int *) &blkcomf, &exp_fbc}, ! {"fbx", PRO_FONT, 0, OFF, (int *) &boxcomf, &exp_fbx}, ! {"fb", PRO_FONT, 0, OFF, (int *) &bodyf, &exp_fb}, *************** *** 180,183 **** ! {"fc", PRO_FONT, 0, 0, (int *) &scomf, &exp_fc}, ! {"fk", PRO_FONT, 0, 0, (int *) &keywordf, &exp_fk}, ! {"fs", PRO_FONT, 0, 0, (int *) &stringf, &exp_fs}, ! {"gnu", PRO_SETTINGS, 0, 0, --- 180,183 ---- ! {"fc", PRO_FONT, 0, OFF, (int *) &scomf, &exp_fc}, ! {"fk", PRO_FONT, 0, OFF, (int *) &keywordf, &exp_fk}, ! {"fs", PRO_FONT, 0, OFF, (int *) &stringf, &exp_fs}, ! {"gnu", PRO_SETTINGS, 0, OFF, *************** *** 188,189 **** ! {"i", PRO_INT, 4, 0, &ind_size, &exp_i}, ! {"kr", PRO_SETTINGS, 0, 0, --- 188,189 ---- ! {"i", PRO_INT, 4, OFF, &ind_size, &exp_i}, ! {"kr", PRO_SETTINGS, 0, OFF, *************** *** 193 **** ! {"lc", PRO_INT, 0, 0, &block_comment_max_col, &exp_lc}, --- 193 ---- ! {"lc", PRO_INT, 0, OFF, &block_comment_max_col, &exp_lc}, *************** *** 195 **** ! {"l", PRO_INT, 78, 0, &max_col, &exp_l}, --- 195 ---- ! {"l", PRO_INT, 78, OFF, &max_col, &exp_l}, *************** *** 214 **** ! {"npro", PRO_IGN, 0, 0, 0, &exp_pro}, --- 214 ---- ! {"npro", PRO_IGN, 0, OFF, 0, &exp_pro}, *************** *** 227 **** ! {"st", PRO_STDIN, 0, 0, 0, &exp_st}, --- 227 ---- ! {"st", PRO_STDIN, 0, OFF, 0, &exp_st}, *************** *** 229 **** ! {"version", PRO_PRSTRING, 0, 0, (int *)VERSION_STRING, &exp_version}, --- 229 ---- ! {"version", PRO_PRSTRING, 0, OFF, (int *)VERSION_STRING, &exp_version}, *************** *** 233 **** ! {0, 0, 0, 0, 0, 0} --- 233 ---- ! {0, PRO_BOOL, 0, OFF, 0, 0} parousia(0.81)> make cc -O -A nansi -A cpu,3000 -A systype,bsd4.3 -A runtype,bsd4.3 -W0,-frnd,-comchk,-std -c args.c cc -O -A nansi -A cpu,3000 -A systype,bsd4.3 -A runtype,bsd4.3 -W0,-frnd,-comchk,-std -c globs.c cc -o indent -O -A nansi -A cpu,3000 -A systype,bsd4.3 -A runtype,bsd4.3 -W0,-frnd,-comchk,-std indent.o io.o lexi.o parse.o pr_comment.o args.o globs.o ********************************************************************************* ----------------------------------------------------------------------- Gregory R. Siebers | MAIL: P.O. Box 200195, Austin, TX 78720 MCC CAD Program | ARPA: siebers@mcc.com (512) 338-3656 | UUCP: ...!cs.utexas.edu!milano!cadillac!siebers -----------------------------------------------------------------------