Provided by: findent_4.2.6-1_amd64
NAME
findent - Indents, converts and relabels Fortran programs.
SYNOPSIS
findent [OPTION]... Findent reads from STDIN and writes to STDOUT.
DESCRIPTION
Findent indents and optionally relabels a Fortran source. Findent can convert from fixed form to free form and vice-versa, and can supplement single END statements, see 'Refactor' below. Comment lines with '!' in column one are not indented. You can correct findent related indenting errors by inserting comment lines: ! findentfix: <fortran statement> where <fortran statement> is for example DO, END, WHERE() etcetera. Findent will adjust the indentation according to <fortran statement>. Errors in OPTIONS are silently ignored. Options marked with [NO_ENV] are ignored if given via environment variable FINDENT_FLAGS. In the long options, you can replace '_' with '-'. Below: <n> denotes an unsigned decimal number. <c> denotes a character. General options: -h, --help print this text. [NO_ENV] -H, --manpage print man page. [NO_ENV] --readme print some background information. [NO_ENV] --changelog print ChangeLog. [NO_ENV] -v, --version prints findent version. [NO_ENV] -q, --query_fix_free guess free or fixed, prints 'fixed' or 'free' and exits. [NO_ENV] --continuation=<c> ' ': (default) do not change continuation characters. '0': create numbered continuation characters. other: use that continuation character. default for conversion from free to fixed is '&'. --include_left=<n> (0/1) 1: indent include statements to starting indent (default:0). -l<n>, --label_left=<n> (0/1) 1: move statement labels to start of line. (default: free: 1, fixed: 0) -lastindent, --last_indent prints computed indentation of last line. (for usage with vim) [NO_ENV] -lastusable, --last_usable prints line number of last line usable. as start for indenting(for usage with vim). [NO_ENV] -iauto, --input_format=auto determine automatically input format (free or fixed). -ifixed, --input_format=fixed force input format fixed (default: auto). -ifree, --input_format=free force input format free (default:auto). -i-, --indent=none do not change indent (useful in combination with -R). -L<n>, --input_line_length=<n> use only first <n> characters of each line. default=0: take whole lines. -L<n>g, --input_line_length=<n>g same as above, but use gfortran convention. for counting the characters with tabbed lines. example: --input_line_length=72g. -M<n>, --max_indent=<n> maximum output indent, default 100, 0: no limit. -ofixed, --output_format=fixed force fixed format output. -ofree, --output_format=free force free format output. -osame, --output_format=same output format same is input format. --openmp=<n> 1/0: do/don't indent openmp conditionals (default: 1). NOTE: for free format, the omp sentinel must be '!$ '. -Rr, --refactor_end refactor subroutines etc: the END line. of a subroutine, program etc. is, if possible, replaced by 'end subroutine <name>' or 'end function <name>' or 'end procedure <name>' or 'end program <name>' or 'end block data <name>' or 'end module <name>' or 'end submodule <name>' 'end interface <name>' 'end type <name>' where <name> is the name of the appropriate procedure, subroutine etc. NOTE1: if the END line contains a continuation the results are undefined. NOTE2: a line like 'end function fun' will be replaced by. 'end subroutine sub' if the END line ends 'subroutine sub'. NOTE3: the flag --refactor_procedures is deprecated, use --refactor_end. -RR, --refactor_end=upcase same as -Rr, but 'END SUBROUTINE <name>'. in stead of 'end subroutine <name>' etc. --relabel=shuffle shuffles existing labels, primarily meant for demo and debugging. see also the notes under --relabel below. --relabel, --relabel=<n1>,<n2> renumber labels: n1 = starting index, n2 is increment (default:1000,10). if n1=0 or n2=0, relabeling is disabled. see also RELABEL below. NOTE1: use only SYNTAX-CORRECT SOURCES with this option. NOTE2: CHECK the functionality of your program after using this option. NOTE3: after finding an error (missing label, ill formatted label list, ...) findent will stop relabeling, but will continue indenting and/or converting. --relabel_reset=<n> 1: reset label numbering at start of subroutine/function/program. 0: do not reset label numbering (default: 1). --query_relabel[=<n>] generate report. [NO_ENV] n=0, or flag omitted: do not generate report. n=1: generate summary (only error message or OK message). n=2: generate report of original and renumbered labels (default). NOTE: if n >= 0, no output of the fortran source. --ws_remred[=<n>] replace redundant white space with one space. n=0, or flag omitted: do not replace redundant spaces. NOTE1: use with care, avoid pieces of code with not terminated strings and use Fortran code without syntax errors: changes are irreversible. NOTE2: for statements containing an hollerith, this flag is ignored. --safe ignore next flags marked with [NO_ENV] (used by wfindent). Indenting options: -I<n>, --start_indent=<n> starting indent (default:0). -Ia, --start_indent=a determine starting indent from first line. -i<n>, --indent=<n> all indents except I,c,C,e (default: 3). -a<n>, --indent_associate=<n> ASSOCIATE indent. -b<n>, --indent_block=<n> BLOCK indent. -d<n>, --indent_do=<n> DO indent. -f<n>, --indent_if=<n> IF indent. -E<n>, --indent_enum=<n> ENUM indent. -F<n>, --indent_forall=<n> FORALL indent. -j<n>, --indent_interface=<n> INTERFACE indent. -m<n>, --indent_module=<n> MODULE indent. -r<n>, --indent_procedure=<n> FUNCTION, SUBROUTINE and PROGRAM indent. -s<n>, --indent_select=<n> SELECT indent. -t<n>, --indent_type=<n> TYPE indent. -w<n>, --indent_where=<n> WHERE indent. -x<n>, --indent_critical=<n> CRITICAL indent. --indent_changeteam=<n> CHANGE TEAM indent. -C-, --indent_contains=restart, restart indent after CONTAINS. -k<n>, --indent_continuation=<n> continuation indent except for lines starting with '&' (see flag -K). NOTE: free to free only. -k-, --indent_continuation=none continuation lines not preceded by '&' are untouched. NOTE: free to free only. -kd, --indent_continuation=default continuation lines not preceded by '&' are default indented. NOTE: free to free only. -K, --indent_ampersand indent lines starting with '&' (free only). --align_paren[=<n>] align continuation lines not preceded by '&' with preceding unmatched left parenthesis. n=0, or flag omitted: do not align. n=1: do align (default). NOTE1: free to free only. NOTE1: for statements containing an hollerith, this flag is ignored. Next defaults are: all - all/2. -c<n>, --indent_case=<n> CASE negative indent. NOTE: also for RANK, TYPEIS and CLASSIS. -C<n>, --indent_contains=<n> CONTAINS negative indent. -e<n>, --indent_entry=<n> ENTRY negative indent. Dependencies: --deps output dependency information only, other flags are ignored. [NO_ENV] This can be used to generate a dependencies file for usage with make(1). The format of this information: Fortran source -> findent output include "file1" -> inc file1 #include "file2" -> cpp file2 #include <file3> -> std file3 ??include 'file4' -> coc file4 use module1 -> use module1 submodule(m) subm -> use m mod m:subm module module2 -> mod module2 --makefdeps outputs a sh(1) script that serves as a an example to generate dependencies for use in make(1). [NO_ENV] Environment: findent parses the environment variable FINDENT_FLAGS before the command-line flags. Usage with vim: --vim_help outputs directions to use findent in (g)vim. [NO_ENV] --vim_fortran outputs file 'fortran.vim', see --vim_help. [NO_ENV] --vim_findent outputs file 'findent.vim', see --vim_help. [NO_ENV] Usage with gedit: --gedit_help outputs directions to use findent in gedit. [NO_ENV] --gedit_external outputs script 'findent-gedit', see --gedit_help. [NO_ENV] --gedit_plugin outputs file 'findent.plugin', see --gedit_help. [NO_ENV] --gedit_plugin_py outputs file 'python.py', see --gedit_help. [NO_ENV] Usage with emacs: --emacs_help outputs directions to use findent in emacs. [NO_ENV] --emacs_findent outputs script 'findent.el', see --emacs_help. [NO_ENV] RELABEL: The following constructs are candidates for relabeling: - 100,110,120,130: label - X: integer or real or logical expression - I: identifier - [,]: optional comma - ...: not parsed by findent, can be anything except '=...' - [IF]: optional IF(...) 100 ... ! statement or format label IF(...) 110,120,130 IF(...) 110,120 DO 100[,] I=X,... DO 100[,] WHILE(...) DO 100[,] CONCURRENT(...) DO 100 [IF] ACCEPT 100... [IF] ASSIGN 100 TO I [IF] BACKSPACE(...,ERR=100,...) [IF] CALL I(...,*100,...,$110,...,&120,...) [IF] CLOSE(...,ERR=100,...) [IF] DECODE(...,100,...,ERR=110,...) [IF] DELETE(...,ERR=110,...) [IF] ENCODE(...,100,...,ERR=110,...) [IF] ENDFILE(...,ERR=100,...) [IF] FIND(...,ERR=110,...) [IF] FLUSH(...,ERR=100,...) [IF] GOTO 100 [IF] GOTO I[,](100,110,120) [IF] GOTO(100,110,120)... [IF] INQUIRE(...,ERR=100,...) [IF] OPEN(...,ERR=100,...) [IF] PRINT 100... [IF] READ 100... [IF] READ(...,100,...) [IF] READ(...,ERR=100,...,END=110,EOR=120,...,FMT=130)... [IF] REREAD 100... [IF] REREAD(...,100,...) [IF] REREAD(...,ERR=100,...,END=110,EOR=120,...,FMT=130)... [IF] REWIND(...,ERR=100,...) [IF] REWRITE(...,100) ... [IF] REWRITE(...,ERR=100,...,FMT=110,...,EOR=120)... [IF] TYPE 100... [IF] WAIT(...,ERR=100,...,END=110,...,EOR=120,...) [IF] WRITE(...,100) ... [IF] WRITE(...,ERR=100,...,FMT=110,...,EOR=120)... Examples: Indent: findent < in.f > out.f findent -i2 -r0 < in.f > out.f Relabel: findent --relabel < in.f > out.f Convert fixed to free form: findent -ofree < prog.f > prog.f90 Convert free to fixed form: findent -ofixed < prog.f90 > prog.f Refactor 'end': findent -Rr < in.f90 > out.f90 BUGS: * Also for free-format, findent is space-insensitive, while the standard states that space must be used as general separator. * There are some issues with labels in a continuation when converting from free to fixed format. For example: 123& 4 continue The problems arise because it is not possible to define a statement label in a continuation in fixed format. * When converting from fixed format to free format, findent discards white space in a string if the string contains a continuation, e.g: print *,"a +b" is converted to: print *,"a& &b" * Relabel issues In some cases, findent refuses to relabel. To see the cause, use the flag '--query-relabel=1', e.g.: findent --relabel=10,10 --query-relabel=1 If the fortran source contains label-related errors, or when findent misbehaves, relabeling can create havoc. So: test.
DONATIONS
Donations to support the maintenance of this program are welcome: https://paypal.me/wvermin
COPYRIGHT
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.