Man Linux: Main Page and Category List

NAME

       bcpp - make C++ beautifier

OVERVIEW

       This program enables a user to reformat certain elements of a C, or C++
       source code. This helps if one person’s code is a little unreadable, or
       has been indented to a style that you dislike.  Using this program will
       hopefully help in re-styling the code so that  it  closely  meets  your
       style.  However,  due  to  the  many styles of C(++) that can be coded,
       there are limits to how well this program will handle the source  code,
       and resulting re-formatted source.

       The following are a list of features implemented:

            -  Reposition comments at certain locations.

            -  Remove non-printable characters not contained within quotes.

            -  Convert    non-printable    characters    within    quotes   to
               octal/character notation.

            -  Re-space line spacing between functions.

            -  Trim trailing spaces from all lines, as  well  as  leading  and
               trailing blank lines from the file.

            -  Reposition  opening  braces  to  Kernighan/Ritchie style, or to
               Pascal style.

            -  Use of tabs, or spaces in indenting.

            -  Indention of single line code, according to certain C condition
               statements, including embedded SQL statements.

Requirements

       This program will run under Microsoft DOS V3.3 and Unix platforms.

       It  uses approximately 50 - 70k (or more, dependant upon internal queue
       size) of memory during execution.

       The program code has been written in such a way  as  to  be  compatible
       with  existing C++ compilers, however the code is not ANSI standard and
       may require modification for your environment.   The  source  code  has
       been  written  with  standard  ANSI  and  Posix functions so that least
       amount of rewriting should be needed if recompiling on another computer
       platform.

       The  current  sources  have been compiled using Turbo C++ V3.0, for MS-
       DOS, GNU G++ 2.7.2 under Sun SPARCstation  running  SunOS,  Solaris  as
       well as SGI workstations running IRIX.

OPERATION

       Operation  of  the program is via the command line (CLI), and with help
       from a configuration file you  can  define  your  format  requirements.
       Basically each command directive starts with a dash "-" followed my the
       command name. If  another  parameter  is  need  for  the  command,  the
       parameter  is added after the command, and separated with a space (i.e.
       bcpp -fi input.cpp).

       N.B: Do not enter bcpp.exe on its own to find  its  command  help,  use
       bcpp -?, or bcpp -h. This is due to the input redirection from the O/S.
       Keeping to Unix CLI convention, a string that is read from the CLI  and
       does  not have a command directive is considered a input file. If there
       are two such occurrences on the command line, the  precedence  will  be
       input  file  first,  and  output  file  second  (i.e.,  bcpp infile.cpp
       outfile.cpp -lg),  a  third  such  occurrence  will  generate  a  error
       message.

       If  no output file is presented, its assumed output is via the standard
       output.  This  automatically  turns  off  program  output.   Parameters
       entered  on  the  command  line will override parameters that have been
       read from the configuration file.

       Example:
            bcpp -fi input.cpp -f 2 -qb 5 -na -no -cc 60 > output.cpp

       Synopsis

               -fi input.cpp   Input file = input.cpp
               -f 2            Function spacing = 2
               -qb 2           Internal Queue Buffer = 5
               -na             Remove non-ascii chars
               -no             Suppress program output
               -cc 60          Comments that appear on same line as
                               code will be placed in column 60.
               > output.cpp    Output of program is redirected to
                               "output.cpp"

       A configuration file can be used to specify most of the  non-  changing
       elements  in  reformatting  of code. The configuration file consists of
       some fairly lengthy words that are used to explain the output style  of
       the code. However setting these parameters is very easy, they basically
       consist of two types, Boolean, or Integer types.  Using  your  favorite
       text editor, you can change the following within the configuration file
       ...

       The following parameters will be  contained  within  the  configuration
       file  (default  is  bcpp.cfg).  The  program  will  attempt to read the
       default configuration file at the program source (i.e. which path  bcpp
       was  run).  Using the -fnc option you can define a custom configuration
       file name, and path from the CLI.

       Integer Type Ranges : 0 - 5000 Boolean Type Ranges : On, Yes,  or  Off,
       No

            Function_Spacing : Integer
                 This   parameter   specifies  how  many  lines  separate  two
                 functions.

                 e.g.,
                      function_spacing      = 2

                 CLI
                      -f 2

            Use_Tabs: Boolean
                 Specifies whether to use tabs in indenting code.

                 e.g.,
                      use_tabs              = no

                 CLI
                      -t   (Turn tabs on, default uses spaces)
                      -s   (Use tabs for indenting)

            Indent_Spacing : Integer
                 Specifies how many spaces to indent. This parameter also sets
                 the  width  of  tabs. Bcpp considers the width of a tab to be
                 the same as the width of an indent.

                 E.G.
                      indent_spacing        = 4

                 CLI
                      -i 4

            Comments_With_Code : Integer
                 Defines the column in which comments that appear  after  code
                 on a line will be placed.

                 e.g.,
                      comments_with_code    = 50

                 CLI
                      -cc 50

            Comments_With_Nocode : Integer
                 Defines  the  column  in which comments that appear in a line
                 will be placed.

                 e.g.,
                      comments_with_nocode  = 0

                 CLI
                      -nc 0

            Indent_Preprocessor: Boolean
                 If true, bcpp will indent preprocessor lines to the indention
                 of  the  C(++)  code. If false, preprocessor lines will be in
                 the   first   column.   Unrecognized   (i.e.,    nonstandard)
                 preprocessor lines are always put into the first column.

            Indent_Exec_Sql: Boolean
                 If  true,  bcpp looks for embedded SQL statements (e.g., EXEC
                 SQL), and formats them specially.

            Leave_Comments_NoCode : Boolean
                 This options  overrides  the  "Comments_With_Nocode"  option.
                 Setting this option On will indent comments that do not occur
                 on the same line as code to the same indention as code.

                 e.g.,
                      leave_comments_nocode = on

                 CLI
                      -nlcnc (Turn off Leave_Comments_NoCode)
                      -ylcnc (Turn on Leave_Comments_NoCode)

            NonAscii_Quotes_To_Octal : Boolean
                 Use this option to change non-ASCII (non-printable) chars  to
                 octal notation if they lie within quotes. This parameter does
                 not  take  effect  unless  either  the  Ascii_Chars_Only   or
                 Leave_Graphic_Chars parameters have been set.

                 e.g.,
                      NonAscii_Quotes_to_Octal = no

                 CLI
                      -nq  (Turn off non-ascii chars in quotes to octal)
                      -yq  (Turn on non-ascii chars in quotes to octal)

            Leave_Graphic_Chars : Boolean
                 Setting  this  parameter  to  yes  will  strip  non-printable
                 characters from the source file,  but  leave  any  characters
                 that  are  IBM  graphics  alone. Any non-printable characters
                 that   lie   within   quotes   will   be   transformed   into
                 octal/character    notation,    if   NonAscii_Quotes_To_Octal
                 parameter is set to True.

                 E.G.
                      leave_graphic_chars      = yes

                 CLI
                      -lg

            Ascii_Chars_Only : Boolean
                 Setting this parameter to yes will strip  any  non-printable,
                 non-ASCII  characters  from the input file. Any non-printable
                 characters that lie within quotes will  be  transformed  into
                 octal/character  notation  if NonAscii_Quotes_To_Octal is set
                 to  True.  Comment  out  this  parameter  if  you  are  using
                 Leave_Graphic_Chars   parameter,   as   this  parameter  will
                 override it.

                 e.g.,
                      ascii_chars_only         = yes

                 CLI
                      -na  (Do not remove non-ASCII characters)
                      -ya  (Yes remove non-ASCII characters)

            Place_Brace_On_New_Line : Boolean
                 When set to ’on’ bcpp will place opening braces on new  lines
                 ("Pascal"  style  C  coding), when set to ’off’ bcpp will use
                 "K&R" style C coding.

                 Pascal style C coding:
                      if (condition)
                      {
                          statements;
                      }

                 K&R style C coding:
                      if (condition) {
                          statements;
                      }

                 e.g.,
                      place_brace_on_new_line  = on

                 CLI
                      -bnl (on )
                      -bcl (off)

            Program_Output : Boolean
                 This parameter will stop output from the  program  corrupting
                 output  that  may  exit  from  the  program  via the standard
                 output.  If this parameter is set to off/no then no output is
                 generated  from  the program, unless an error is encountered.
                 The standard error is used to display any errors  encountered
                 while processing.

                 E.G
                      program_output          = off

                 CLI
                      -no (default is generate output if possible, this will
                           force output off)
                      -yo (turn on program output if possible)

            Queue_Buffer : Integer
                 Specifies  what  the internal memory requires will be in size
                 of the line processing buffer. This is used  for  open  brace
                 relocation  in Kernighan/Ritchie style. Extending this buffer
                 to large amounts of memory  will  slow  processing  on  small
                 machines.

                 e.g.,
                      Queue_Buffer            = 2

                 CLI
                      -qb 2

            ; : Not Applicable
                 Placing  a  semicolon in front of text makes everything after
                 the semicolon a comment.

            Backup_File : Boolean
                 This option will backup the input file to  a  file  with  the
                 extension  ".bac"  and  overwrite  the  input  file  with the
                 reformatted version.

                 e.g.,
                      backup_file             = yes

                 CLI
                      -yb  (yes, backup input file if possible)
                      -nb  (no, do not backup input file)

Loading Configuration File : CLI only

       Bcpp implements a configuration setting to allow custom file  selection
       from a specific path/file defined by a user.

       e.g.,
            bcpp input.cpp -yb (read bcpp.cfg configuration file
                                before processing CLI options)

            bcpp -fnc /bin/bcpp.cfg (load configuration file at
                                     said location)

       CLI
            -fnc (use user defined)

       Input File Name : CLI only
              This  option directs bcpp to read data at a given path, and file
              name.

              E.G
                   bcpp -fi input.cpp > output.cpp

              CLI
                   -fi

       Output File Name : CLI only
              This defines the output file name that data is to be written to.

              e.g.,
                   Has to be like this, (in DOS, at least):

                   bcpp  -fo output.cpp < input.cpp

              ClI
                   -fo

       Online Help : CLI only
              Some  online  help which is brief but to the point exists within
              the program. The help lists all of the  CLI  commands  available
              within the program.

              E.G bcpp -h

              CLI bcpp -?
                  bcpp -h

Configuration File Error Messages

       If  you  enter a command/parameter incorrectly within the configuration
       file, upon the executable program reading it, the program will generate
       a  error  message  along  with  its  line  number.  The following is an
       explanation of error messages that may occur while  reading  parameters
       within the configuration file.

            Syntax Error After Key Word :
               Error  occurs  because the character/word after a parameter was
               incorrect, or expected another keyword (e.g  =,  Yes,  No,  On,
               Off)

            Range Error :
               Error  occurs  when  integer  parameters have a invalid numeric
               setting (i.e., A number is not within 0 - 5000).

            Expected Numeric Data :
               This error occurs  when  alpha-numeric  data  is  in  place  of
               numeric data for integer type parameters.

            Cannot Decipher :
               The   parameter   at   said   line  is  not  valid  (i.e.,  not
               recognizable).

       If any errors have occurred after reading the configuration  file;  the
       user  is  prompted  with  a [y/n] continuation prompt to either fix the
       configuration error(s) before processing, or continue with current  set
       parameters.

Run Time Errors During Input File Processing

            Memory Allocation Failed :
               The program was unable to allocate memory to process data. This
               error will stop processing of data.

            Error In Line Construction

            Expected Some Sort Of Code ! Data Type = ? :
               This error is generated within the line  construction  process.
               The  decoded line from the input file may be too indecipherable
               for this program. Find the line in the input file,  and see  if
               it can be altered so that processing can continue.

C(++) Beautifier Limitations

       This  section highlights certain areas within code where bcpp will fail
       to reconstruct the output code to the desired style  (although  it  may
       still be able to compile).

            -  All  code  that  is  fed  through  this  program should be in a
               compilable state. This  means  that  there  should  be  closing
               braces  that  cancel  out  opening  braces. Bcpp does no syntax
               checking at all upon the code, but reformats  it  according  to
               open,  closing  braces,  and  a handful of key words for single
               line indentation.

            -  There is also a limitation on how  far  the  movement  of  open
               braces  can  be processed. This is due to the current design of
               the program (this can fixed easily by  extending  the  internal
               queue  buffer  size),  memory  requirements,  processing speed.
               Dynamic memory allocation is used  extensively  throughout  the
               program,  and  may  exceed current limits if certain conditions
               arise.

               The example shows that the movements of the brace from the  new
               line  to the above code line will not take place as it would be
               out of scope for the program if the internal  queue  buffer  is
               limited to 2 lines in size.

                    Example of brace movement scope:

                    if (a == b)
                    // Brace will not be re-positioned
                    {
                         b = c;
                    }

                    if (a == b)    // Brace will be re-positioned
                    {
                         b = c;
                    }

                    End Result

                    if (a == b)
                    // Brace will not be re-positioned
                    {
                         b = c;
                    }

                    if (a == b){   // Brace will be re-positioned
                         b = c;
                    }

            -  There  is  a  constraint that a single line of code should only
               have one type of comment. If there are both C, and C++ existing
               on  the  same  line  then  the  line  construction phase of the
               program will become confused, and generate a error message. The
               following  line will produce a Line Construction Error message.

               Example of multiple comments.

                    /* C Comment */ a = b; // C++ Comment

               The above line will generate an error. Remedy this by  removing
               one  type of comment, combine them, or place one on a new line.

AUTHORS

       Written By Steven De Toni December 1995
       Updated by Thomas Dickey January 1997-2002

       You can contact Steven De Toni via various online networks:

                 Internet Address
                      tge@midland.co.nz
                      steve@alpha.ocbbs.gen.nz

                 Net Mail Via Fido-Net (Dog Net)
                      Steven De Toni,
                      "The Great Escape",
                      Hamilton,
                      New Zealand

                 Demi-Monde New Zealand National Mail Net Work
                      (see Dog Net)

       If all else fails, send snail mail to:

                 17 Garden Heights Ave,
                 Melville,
                 Hamilton,
                 New Zealand

       Thomas Dickey can be reached at

                 dickey@invisible-island.net

       Special thanks goes out to Glyn Webster for proof  reading  my  manual,
       and testing my program.

       Thanks  to Justin Slootsky for his input, and changes for this version.

       All  grammatical  errors  within  this  document  are  there  for  your
       enjoyment. ;-)

DISCLAIMER

       The  authors  give no guarantees that this program will function to the
       specifications  given  via  the   configuration,   or   the   program’s
       reconstructed  output  of  source  code  that  have been processed. Any
       damage that might arise from the use of this program (be  it  software,
       or  hardware)  is  the problem of user, and not the authors. Using this
       software binds you to this disclaimer.

                                                              C++ Beautifier()