Provided by: bcpp_0.0.20210108-1_amd64 bug

NAME

       bcpp - make C++ beautifier

SYNOPSIS

       bcpp [-bcl] [-bnl] [-cc <num>] [-f <num>]
        [-fi <input file name>] [-fnc <custom config file>] [-fo <output file name>] [-h] [-i <num>] [-lg] [-nc]
       [-qb] [-s] [-t] [-tbcl] [-tbnl] [<other options>] [<input file name>] [<output file name>]

GENERAL OPTIONS

       -bcl   Open braces on code line

       -bnl   Open braces on new line

       -cc <num>
              Column to align comments with code

       -f <num>
              Function line spacing

       -fi <string>
              Input file name

       -fnc <string>
              Load custom configuration file

       -fo <string>
              Output file name

       -h, -? Display help message

       -i <num>
              Indent space length

       -lg    Leave graphic chars

       -nc <num>
              Column to align comments with no code

       -qb <num>
              Define internal queue buffer size

       -s     Use spaces in indenting

       -t     Use tabs in indenting

       -tbcl  Top-level open braces on code line

       -tbnl  Top-level open braces on new line

ENABLE/DISABLE OPTIONS

       Options beginning with -y or -n enable/disable functions, respectively.

       -ya or -na
              Open braces on code line

       -yb or -nb
              Backup input file with .bac extension

       -ybbi or -nbbi
              Indent both braces of a block

       -ybi or -nbi
              Indent trailing brace of block

       -ykcwc or -nkcwc
              Keep comments with Code

       -ylcnc or -nlcnc
              Leave comments with NoCode

       -yo or -no
              Program output

       -yq or -nq
              Change non-ASCII chars in quotes to octal

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.

            Keep_Comments_With_Code : Boolean
                 This  option  overrides  the  "Comments_With_Code"  option.   Setting  this option On will make
                 comments which do not fit as inline comments append to the code anyway.

            Leave_Comments_NoCode : Boolean
                 This option 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()