findent-4.3.2/0000755000000000000000000000000014566134066010110 5ustar00findent-4.3.2/AUTHORS0000644000000000000000000000004414566134066011156 0ustar00Willem Vermin wvermin@gmail.com findent-4.3.2/COPYING0000644000000000000000000000277414566134066011155 0ustar00Copyright: 2015-2024 Willem Vermin wvermin@gmail.com License: BSD-3-Clause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. findent-4.3.2/ChangeLog0000644000000000000000000006202114566134066011663 0ustar00findent-4.3.2: pre01: recognize SIMPLE findent-4.3.1: pre01: src/Makefile.am: remove .PHONY tarfile.inc, to prevent useless remakes of tarfile.inc doc/design/findent.tex.in: make resulting pdf reproducible by \pdfinfoomitdate 1 \pdftrailerid{findent design} pre02: bootstrap: changed code to obtain doc/design/date.tex.in pre03: support for cross compile: toascii.sh and creating man page now use native compilers test/esope.f.try.f.ref.in: fix check for esope program pre04: test/prelude.in: if envvar FINDENTCHECK is set, this is used for findent. This enables one to run 'make check' with the executable on another system. Added script 'towin' to create a windows executable. pre05: Removed references to jfindent. Adapt doc/design/README findent-4.3.0: pre01: Jump in versioning because we added a new feature in 4.2.7: --selfrep findent-4.2.7: pre1: add doc/design/ with in-depth info about the internals pre2: add doc/design/README pre3: relabel.cpp: circumvent unjustified warning about possibly uninitialized variable 'pregion' pre4: add flag --selfrep make generation of files in doc/design autoconf-compliant pre5: configure.ac: disable sefrep when creating a windows version: it seems impossible to avoid the carriage returns when writing a binary file to stdout on windows pre6: fortran.cpp test11.sh: prevent popping up indentation level when encountering an END, ENDIF, ... as first non-blank line pre7: fortran.cpp, guessindent(): in case of fixed format, skip first 6 chars of line. Still looking for a solution for the undesired behaviour in vim, espcially with labelled statements ... pre8: flags.cpp: change default for --relabel_reset from 1 to 0: debugging is easier when all labels are different pre9: fortran.cpp: fix bug concerning handling of continuation statement mixed with preprocessor statements github issue14, thanks to Nicholas Hine for mentioning this bug findent-4.2.6: fix errors with respect to autopkgtest findent-4.2.5: pre1: fortran.cpp: removed debugging statements findent-4.2.4: pre1: fortran.cpp fix bug which caused wrong indentation of this two-liner: do i=1,10;print*,i;enddo continue Thanks to Solovjev Andrey for notifying: github issue#12 findent-4.2.3: pre1: Makefile.am: add debprelude, debpostlude findent-4.2.2: pre1: test/init.in: remove check for Windows Makefile.am: when crosscompiling, the man page cannot be generated with the fresh-baked findent. Therefore: First try the fresh-baked findent, if that fails, try the installed native findent, and if that fails, put a one liner in the man page. (Issue created by Sebastian Ehlert) bootstrap: Make autopkgtest working again. test/test25.sh: Add test for availability of generated man page. test/test13.sh: prevent hang if findent does not recognize -h or --help or -H or --manpage test/test17.sh: the same for options like --vim-help: i.e. options that do not read from stdin src/Makefile.am: add AUTOMAKE_OPTIONS = std-options to create target installcheck pre2: test25.sh: change test for availability of man page (Not every man supports flag -l) pre3: make things debian-compliant findent-4.2.1: pre1: functions.h: trivial addition in string2number to make cppcheck happy pre3: relabel.cpp, flags.cpp, flags.h, docs.cpp: implement flag --relabel=shuffle pre4: docs.cpp, flags,cpp, flags.h, free.cpp: implement -K, --indent_ampersand, thanks to Kai Germaschewski findent-4.2.0: pre1: fix insignifcant bug in free.cpp: change test if line is like: 123& pre2: implement --ws-remred pre3: free.cpp: remove non-fatal bug in --align-paren actualise dates bootstrap: create $deb/tests if necessary findent-4.1.3: pre1: relabel.cpp: add relabel support for module procedure pre2: disable --align_paren=1 for statements containing Hollerith constants. flags.cpp: --align-paren is now synonymous with --align-paren=1 --query-relabel is now synonymous with --query-relabel=2 pre3: line_prep.cpp: add some comment findent-4.1.2: pre1: docs.cpp: minor adaption pre2: Add old-DEC statements TYPE, ACCEPT, DECODE, ENCODE pre3: Add DEC's REREAD Add support for '#' in I/O parameter (DEC's direct access) e.g. read(3#20) x Support for the even older "'" cannot be done, however see pre4 Add support for & and $ next to * for label parameter in call list (DEC) e.g: call sub(x,&20) Add flag --changelog Bring wfindent.bat more or less up to date Fix some typo's in ChangeLog pre4: line_prep.cpp, lexer.l: recognize u'n next to u#n in for example READ(10'6) x recognise DELETE (INTEL extension) recognise FIND (INTEL extension) recognise REWRITE (INTEL extension) recognise SELECT RANK and RANK pre5: test/test20.sh: add test for SELECT RANK fix simplemake.sh, to create .inc files and compile relabel.cpp add a direction to create and place the man page pre6: implement refactoring END INTERFACE statements pre7: implement refactoring END TYPE statements pre8: add --refactor_end as synonym for --refactor_procedures, the latter is deprecated. Change some variable names accordingly. pre9: implement -kd, --indent_continuation=default implement --align_paren=1 pre10: wfindent: add --safe before other flags for findent flags.cpp, flags.h, docs.cpp: add flag --safe wfindent.bat: allow double-hyphened flags, use --safe pre11: wfindent only handles regular, readable, writable files simplemake.sh: add instructions for installing wfindent pre12: fixed Bug: end procedure not indented (#7) pre13: fortran.cpp, parser.y, prop.h: simplified check if statement is executable statement findent-4.1.1: pre1: restored some parts of doc/README pre2:fix gedit/findent.py (get_location() does not work any more) doc/README: minor changes pre3: lexer.l, lineprep.{h,cpp}, pre_analyzer.{h,cpp}, configure.ac replaced std::vector and std::stack by std::deque configure.ac: check for all used header files pre4: free.cpp, fixed.cpp, docs.cpp: -l0 and -l1 now also work in fixed removed bug with -l0 and free relabel.cpp functions.cpp: take care of labels like 010. pre5: some minor fixes in documentations findent-4.1.0: added relabel function: --relabel[=n1,n2] --relabel-reset=0|1 --query-relabel=0|1|2 findent-3.1.8: gedit_external.inc: change /bin/bash into /bin/sh Makefile.am: change .o in .$(OBJEXT) functions.(cpp,h}: remove firstchars(), replace by std::string.substr() pre_analyzer.{cpp,h}, fortran.cpp: remove first parameter from analyze() flags.cpp, fortran,cpp: add '// fall through' to quiet compiler Changed fortran.vim: no forced window-width for .f90, no margins for .f Added copyright to most of the files src/Makefile.am: change $? to appropriate filenames combine rule for parser.cpp and parser.hpp src/parser.y: better lay-out Ignore some flags in env FINDENT_FLAGS eg: -q -h Better layout for manpage and help output. findent-3.1.7: change parser.h into parser.hpp. bison-3.7 includes this in parser.cpp findent-3.1.6: docs.cpp: document environment variable FINDENT_FLAGS vim/fortran.vim: add let $FINDENT_FLAGS = "" vim/fortran.vim: remove ' 2>/dev/null', because not all shells understand this gedit/findent.py: change f into i gedit/gedit.plugin: add copyright findent-3.1.5: parser.y: recognize also (non-standard): END FUNCTION(something) END SUBROUTINE(something) END PROCEDURE(something) END PROGRAM(something) Correct bug when parsing 'TYPE isname' and 'CLASS isname' The lexer returned resp "TYPEIS" and "CLASSIS" which should only be the case when 'IS' is followed by '('. (ticket 9) findent-3.1.4: adapted some debian stuff docs.cpp: added donations entry in manpage parser.y: recognize MODULE PROCEDURE SGAMMA, DGAMMA (ticket 8) parser.y, lexer.l: recognize NON_RECURSIVE findent-3.1.3: changed /bin/bash back to /bin/sh for all scripts used during installation and running (because of openBSD) changed in test folder all uses of 'sed' to remove \r to 'tr' because I couldn't get sed to work property on all systems changed all uses of $< in Makefile.am's into $? (because of BSD make) findent-3.1.2: correct spelling error in debian/control pre_analyzer.h: change IF etc into PRE_IF to avoid expansion of macro's IF etc. test/test18.sh: trivial change in sed command deps/makedeps: use awk in stead of bash. (bash-3.x does not associative arrays) test: some tiny things to make it work in macOS wfindent: check if gnu-getopt is available test: change all bin/sh into bin/bash (because of $'string' construct) findent-3.1.1: added support for ESOPE (SEGMENT, ENDSEGMENT) as configuration parameter free-format: statement label can now contain an & bug fix: fortran.cp: preprocessor line with continuations where not handled properly configure.ac: changed testing for gfortran make check: start wineserver in first test to speed up checks. before ubuntu19.04 this was not necessary findent-3.1.0: added simplemake.sh: compiles findent without configure; make updated wfindent findent-3.0.1: doc/README: add something about dependencies findent-3.0.0: add generation of dependencies (flags --deps and --makefdeps) corrected a few minor bugs findent-2.9.2: fortran.cpp, findentclass.cpp: fixed error in -ifixed -lastusable by taking in account the wizardbuffer findent-2.9.1: lexer.l: allow space after '#' in cpp preprocessor directive findent-2.9.0: add 2018 features: CRITICAL [(...)] CHANGE TEAM (...) END TEAM [(...)] fortran.cpp: add CHANGETEAM for detection of moduleprocedure add CLASSIS etc to not usables for flag -lastusable test/Makefile.am test/test-compile.sh.in configure.ac: test for working gfortran: yes: 'make check' will compile sources no: 'make check' will not compile sources findent-2.8.6: fix bug: wrong lastindent when last line is ENDIF,END etc. this bug was introduced in version 2.8.3 adapt documentation for systems without sudo findent-2.8.5: implemented openmp awareness findent-2.8.4: major restructuring of the code. findent-2.8.3: parser.y, lexer.l: changed detection of do-constructs DO , DO , 100 are now NOT classified as a do-construct explicit detection of DOWHILE and DOCONCURRENT Made detection of PROGRAM and FUNCTION more precise: for PROGRAM only allowed: PROGRAM IDENTIFIER some old dialects permit this PROGRAM i.e: program without a name for FUNCTION: parameter list is now required makedeb: some enhancements. debian.wheezy, debian.xenial: directories with deviations from sid findent.cpp, some tests: more generic refactoring of end statements. Now for example: 'end subroutine' will be refactored to 'end subroutine mysub'. Moreover: 'end subroutine mysub' will be changed into 'end function myfun' if appropriate. test/Makefile: clean up bootstrap: copies most files from test to debian/tests test: adapted test scripts to run in test and in sadt findent.cpp, lexer.l: let the lexer find the string findentfix: in stead of a function in findent.cpp findent.cpp, lexer.l, parser.y: minor change in definition of lexer_set() test/test-compile.sh.in: improved output when test fails findent.cpp, lexer.l: add support for coco preprocessor functions.cpp, functions.h: moved some general usable string functions to functions.cpp test: added test18.sh for testing coco and cpp lexer.l, parser.y, findent.cpp: use lexer to scan preprocessor lines TODO: correct handling of continuation lines of preprocessor lines, especially coco continuations : clean up code, findent.cpp is too messy ~pre3 streamlined .h files, added prop.h usage.cpp usage.h added flags.cpp flags.h lexer.h re-arrange code, to make it better readable. use list in stead of deque for (cur)lines added free2fixed ~pre4 implemented a finite state machine in get_full_statement() change list and stack into deque implemented user-choosable continuation character cleaned up code made some optimizations adapted documentation findent-2.8.2: debianizing ... findent-2.8.1: adapt wfindent and wfindent.bat to long options parser.y: get rid of shift-reduce conflict src/Makefile.am: some minors to ensure proper regeneration of lexer.cpp if necessary findent-2.8.0: implement ! findentfix: clean up code, enhance documentation parallel make, also for make check, seems to work now findent-2.7.4: src/Makefile.am, configure.ac: if flex/bison is not to be used, but lexer.l or parser.y has been changed, produce a warning message. maketar: remove creating executable Readme.1st: adapted to previous line Change build process: no bison or flex needed when building from tarball. Update debian directory. bootstrap: fix bug which prevented 'make dist' to run src/Makefile.am, Makefile.am, scripts/Makefile.am: fixes to facilitate 'make distcheck' src/findent.cpp, add option -i- to disable indenting test: add test7.sh and test8.sh to test flag -i- README: add method to get indented comments when converting from fixed to free parser.y, lexer.y: recognize PROCEDURE(not only MODULEPROCEDURE) as PROCEDURE makedeb: add i386-wheezy Makefile.am, configure.ac: introduce variable MAKEWIN to mv findent to findent.exe when compiling for windows. Somehow, now the mingw compiler does not generate foo.exe when requested to produce foo. findent.cpp: add comment for names of long flags add -osame option findent.cpp tocpp.sh vim_plugin.cpp vim_plugin.h gedit_plugin.cpp gedit_plugin.h let findent output configuration files for usage with vim and gedit. Flags: --vim_help --gedit_help --vim_findent --vim_fortran --gedit_external --gedit_plugin --gedit_plugin_py test: use only one or two lines for testing flags -h, -H add tests (test16.sh) for vim and gedit related flags. make use of MAKEWIN (see configure.ac) to determine if we made an windows executable. parser.y: bugfix take care that "dom(1)%t" is recognized as an lvalue so that "dom(1)%t = 0" is not classified as the start of a do-loop, but as an assignment by adding: lvalue: lvalue '%' lvalue test, findent.cpp, emacs add ability to generate emacs config file. add aliases for flags containing '_': '-' can be used instead findent-2.7.3: findent-2.7.2: copyright: BSD-3 debial/rules: add export DEB_BUILD_MAINT_OPTIONS=hardening=+all debian/, makedeb, maketar: some slight modifications for debian packaging findent.cpp: changed output of pure comment lines while converting from fixed to free: - comment starts with [cC*!] in column one: the first character is replaced by '!' and the comment is output unindented - comment starting with '!', not in column 1, is indented - comment with [dD] in column one: is output as-is, prepended with '!', starting in column one fixed format: if garbage is detected in label field, output that line as-is findent-2.7.1: maketar: adapt version in debian/changelog vim somewhat better findent.vim and fortran.vim pre_analyzer.cpp: bugfix findent-2.7.0: findent.cpp: - add option -lastindent to output only the indentation level of the last line - recognise '# if' etc - fixed minor bug: code starting with preprocessor directive in combination with -Ia did not function properly - add flag -Q. returncode =2 for free, 4 for fixed for usage in vim - removed documentation for -Q, it is not needed now - add stack for dolabels to obtain correct indenting in cases like this: do 1 i=1,2 #if x 1 continue #else 1 continue #endif - make fixed ! comment output as in free - better initialization of indents if startindent>0 - -Innn now sets auto_firstindent = 0 - better #if ... handling wfindent: - add code to look for findent in default PATH if the given location (FINDENT=) does not work - exit if no findent is found all: - omit 'using namespace std' - update documentation README, README.1st - move test folder out of src folder - separate tests, new tests for -lastindent and -lastonly vim: - add a folder vim and two files: findent.vim and fortran.vim findent-2.6.0: findent.cpp: - -Ia now also works correct if source starts with 'end', 'endif' etc. - bootstrap now fills in findent version in configure.ac on the 'AC_INIT(' line - configure.ac add AC_CONFIG_FILES statements to copy test cases to build directory findent-2.5.1: findent.cpp: - corrected help output for the -rR flag by replacing leading '\' by space - some improvements in help output findent-2.5.0: findent.cpp: - lines starting originally with '!' are not indented - pure comment lines, not starting with '!' get an indent of at least 1 - added -C- flag: resets indent with 'contains' - continuation lines not starting with '&' are extra intented flag: -kn - flag -k-: continuation lines are untouched - findent.cpp: somewhat better layout of man page README: - add remark about not wanting irreversible changes to sources wfindent: - use installation path of findent in stead of 'findent' - recognize -v, -h and -H flags: run findent using only this flag - ignore -q flag wfindent.bat: - recognize -v, -h and -H flags: run findent using only this flag - ignore -q flag test: - adapted progfree.f.try.f.ref and progfree-dos.f.try.f.ref findent-2.4.1: fixed typo in help text. findent-2.4: release 2.4 findent-2.3.1: findent.cpp: correct explanation of -l flag in usage() maketar: fix a few nearly-bugs src/parser.y, src/Makefile.am: take care that older versions of bison work findent-2.3: jfindent: is now in a separate folder: ../jfindent with it's on autoconf setup Makefile.am: added $(DESTDIR) for the man page adapted to new jfindent location findent.cpp: fix bug in converting fixed to free when dealing with a preprocessor continuation configure.ac: explicitly include macros in m4, do not use AC_CONFIG_MACRO_DIR, this seems not to work in Debian wheezy repaired make check. Send log file to stdout. maketar, makezip: removed making jfindent.jar configure.ac: use standard AC_PROG_YACC jfindent 1.1: jfindent now writes config file after reading (successful or not) and after clicking 'Quit' added 'recent folders' menu item under 'File' some trivial changes added menuitem 'File->Save configuration' version 2.2: convert to autoconf findent-2.2: Makefile: add support for creating 32 bit executable findent.cpp: -H options produces man page findent.cpp: better support for preprocessor lines with continuation line src/Makefile.am configure.ac: take care that no manpage is made when compiling for windows findent-2.1: wfindent.bat: added wfindent: change from bash syntax to sh syntax Jfindent.java: added added Oracle copyright text finished ... added file menu added about menu somewhat better menubar and better texts for buttons and more intuitive behaviour with 'show all options' removed 'show all options' button, extend help with this information some trivia when previewing a file, the scroll position remains the same when trying different options Make menu textArea's non-editable CHANGELOG added subversion Id to all files Makefile: add support for jfindent fix minor bug: make -j works now README: add text for jfindent revised the text README.1st: add text for jfindent revised the text INSTALL: revised the text lexer.l: allow $ as non-first character in identifier findent-2.0: Complete new code Better parser Space insensitive Fortran 2008 compliant findent-1.6.5: Makefile: removed -g flag created 'zip' and 'tar' targets findent.y: added code and help text for the -L flag wfindent: added -L flag README: replaced NOTE 1, it covers now tab input. Added scripts 'makezip' and 'maketar' Added README.1st findent-1.6.4: findent.y: determine if input comes from terminal, warn user and accept a single dot ('.') as end-of file Extended usage() with examples findent-1.6.3: findent.l, findent.y, findent.h: implement refactor routines findent.y: bug fixes for fixed form continuation lines findent-1.6.2: regcognise tabbed source: [1-9] is recognised as a continuation line fixed bug when tab follows label: ltab2sp now takes in acccount a statement label findent-1.6.1: findent.l: get rid of flex message: "warning, dangerous trailing context" by slight redefinition of statement-label simplified else, elseif, elsewhere recognition findent.y: recognize debug lines in fixed format ('d' or 'D' in colimn 1), treating them as comment lines. Special treatment with -ofree: debug line as: 'd print *,"debug",i' will be output after conversion to free format as: '!d print *,"debug",i' findent-1.6.0: Makefile: slight change in rule to make .o from .cpp wfindent: added findent.l: fixed recognition of elseif by better definition of {nc} README: describe wfindent INSTALL: install wfindent findent-1.5.9: findent.l: recognize 'label :' ('label:' was already recognized) recognize false type as in 'typecode = 10' better discrimination between fixed and free findent.y: recognize '123 enddo', do not double-de-indent findent-1.5.8: findent.y: fill indent-stack from 0 to start_indent with the default indent findent.l: support for construct name in 'do' 'if' 'select' 'block' recognize some forms of false end recognize 'abstract type' and 'abstract interface' findent-1.5.7 findent.l: recognize strings in 'rest' state more precise definition of function recognize 'endprogram' do not confuse 'do (i) =' witha do statement findent.y: fixed form: put an ' ' as possible separator between label and code findent-1.5.6 Makefile: added support for cross compiling to windows: make clean make MINGW=1 creates a windows 32 bit findent.exe findent.l: ticket 1: more precise recognition of function statement findent-1.5.5 findent.y: added support for conditional preprocessor statements. Example: #ifdef USEMPI subroutine mysub(a,b) real a,b #else subroutine mysub(a) real a #endif end subroutine mysub indents correctly now. findent-1.5.4 findent.y: recognize ' x = 3 & ! comment' as a line needing a continuation preprocessor statements are handled on ad-hoc basis findent.l: preprocessor statements are not recognized any more findent-1.5.3 findent.y: add fixed-to-free: add check if this is a preprocessor line fixed-to-free: fixed fortran can have a trailing comment, starting with !, and have a continuation line. This is fixed. fixed-to-free: fixed bad handling of otherwise empty continuation lines findent.l: better recognition of fixed and free recognize 'integer(kind=8) function func1(a,b)' as a function Thanks to Dusan Jovic removed 'select' from definition of explicitly not-handled keywords findent-1.5.2 findent.l: let lexer recognise 'type, public :: mytype' Thanks to Dusan Jovic findent-1.5.1 findent.l: added some patterns to distinguish between fixed and fixed format findent.y: fix for files that do not end with \n fix for correct indenting continuation line while converting findent-1.5 README: add recipe to use equalprg in vim findent.y: add ';' in to rules to quiet bison-2.5 fix placement of preprocessor lines if they are in a continuation suite enlarge number of lines to be considered when determining fixed or free from 10 to 1000 findent.l: fix definition of {neol} findent-1.4 findent.y: make sure that string(n,' ') is always called with n >= 0 findent-1.3 version.h: set version to 1.3 findent.h: add definition for lexer_set() findent.l: add lexer_set() in lexer_init(): change lexer_push() to lexer_set() findent.y: replace lexer_pop()...lexer_push() sequences by lexer_set() minor code cleaning. Makefile: 'test' dependent of 'all' 'clean' also cleans test directory test/progfixed_dos.f: add -ifixed in first line test/progfree_dos.f: add -ifree in first line README: minor adaptations CHANGELOG added findent-1.2 findent.l: fix error in lexer_push findent-1.1 findent.l: fix error in lexer_pop findent-1.0 initial release findent-4.3.2/INSTALL0000644000000000000000000003662614566134066011156 0ustar00Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2017, 2020-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell command './configure && make && make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the 'README' file for instructions specific to this package. Some packages provide this 'INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The 'configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a 'Makefile' in each directory of the package. It may also create one or more '.h' files containing system-dependent definitions. Finally, it creates a shell script 'config.status' that you can run in the future to recreate the current configuration, and a file 'config.log' containing compiler output (useful mainly for debugging 'configure'). It can also use an optional file (typically called 'config.cache' and enabled with '--cache-file=config.cache' or simply '-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how 'configure' could check whether to do them, and mail diffs or instructions to the address given in the 'README' so they can be considered for the next release. If you are using the cache, and at some point 'config.cache' contains results you don't want to keep, you may remove or edit it. The file 'configure.ac' (or 'configure.in') is used to create 'configure' by a program called 'autoconf'. You need 'configure.ac' if you want to change it or regenerate 'configure' using a newer version of 'autoconf'. The simplest way to compile this package is: 1. 'cd' to the directory containing the package's source code and type './configure' to configure the package for your system. Running 'configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type 'make' to compile the package. 3. Optionally, type 'make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type 'make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the 'make install' phase executed with root privileges. 5. Optionally, type 'make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior 'make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing 'make clean'. To also remove the files that 'configure' created (so you can compile the package for a different kind of computer), type 'make distclean'. There is also a 'make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type 'make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide 'make distcheck', which can by used by developers to test that all other targets like 'make install' and 'make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the 'configure' script does not know about. Run './configure --help' for details on some of the pertinent environment variables. You can give 'configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU 'make'. 'cd' to the directory where you want the object files and executables to go and run the 'configure' script. 'configure' automatically checks for the source code in the directory that 'configure' is in and in '..'. This is known as a "VPATH" build. With a non-GNU 'make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use 'make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple '-arch' options to the compiler but only a single '-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the 'lipo' tool if you have problems. Installation Names ================== By default, 'make install' installs the package's commands under '/usr/local/bin', include files under '/usr/local/include', etc. You can specify an installation prefix other than '/usr/local' by giving 'configure' the option '--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option '--exec-prefix=PREFIX' to 'configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like '--bindir=DIR' to specify different values for particular kinds of files. Run 'configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of '${prefix}', so that specifying just '--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to 'configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the 'make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, 'make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of '${prefix}'. Any directories that were specified during 'configure', but not in terms of '${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the 'DESTDIR' variable. For example, 'make install DESTDIR=/alternate/directory' will prepend '/alternate/directory' before all installation names. The approach of 'DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of '${prefix}' at 'configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving 'configure' the option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. Some packages pay attention to '--enable-FEATURE' options to 'configure', where FEATURE indicates an optional part of the package. They may also pay attention to '--with-PACKAGE' options, where PACKAGE is something like 'gnu-as' or 'x' (for the X Window System). The 'README' should mention any '--enable-' and '--with-' options that the package recognizes. For packages that use the X Window System, 'configure' can usually find the X include and library files automatically, but if it doesn't, you can use the 'configure' options '--x-includes=DIR' and '--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of 'make' will be. For these packages, running './configure --enable-silent-rules' sets the default to minimal output, which can be overridden with 'make V=1'; while running './configure --disable-silent-rules' sets the default to verbose, which can be overridden with 'make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX 'make' updates targets which have the same timestamps as their prerequisites, which makes it generally unusable when shipped generated files such as 'configure' are involved. Use GNU 'make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its '' header file. The option '-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put '/usr/ucb' early in your 'PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in '/usr/bin'. So, if you need '/usr/ucb' in your 'PATH', put it _after_ '/usr/bin'. On Haiku, software installed for all users goes in '/boot/common', not '/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features 'configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, 'configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the '--build=TYPE' option. TYPE can either be a short name for the system type, such as 'sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file 'config.sub' for the possible values of each field. If 'config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option '--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with '--host=TYPE'. Sharing Defaults ================ If you want to set default values for 'configure' scripts to share, you can create a site shell script called 'config.site' that gives default values for variables like 'CC', 'cache_file', and 'prefix'. 'configure' looks for 'PREFIX/share/config.site' if it exists, then 'PREFIX/etc/config.site' if it exists. Or, you can set the 'CONFIG_SITE' environment variable to the location of the site script. A warning: not all 'configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to 'configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the 'configure' command line, using 'VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified 'gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash 'configure' Invocation ====================== 'configure' recognizes the following options to control how it operates. '--help' '-h' Print a summary of all of the options to 'configure', and exit. '--help=short' '--help=recursive' Print a summary of the options unique to this package's 'configure', and exit. The 'short' variant lists options used only in the top level, while the 'recursive' variant lists options also present in any nested packages. '--version' '-V' Print the version of Autoconf used to generate the 'configure' script, and exit. '--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally 'config.cache'. FILE defaults to '/dev/null' to disable caching. '--config-cache' '-C' Alias for '--cache-file=config.cache'. '--quiet' '--silent' '-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to '/dev/null' (any error messages will still be shown). '--srcdir=DIR' Look for the package's source code in directory DIR. Usually 'configure' can determine that directory automatically. '--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. '--no-create' '-n' Run the configure checks, but stop before creating any output files. 'configure' also accepts some other, not widely useful, options. Run 'configure --help' for more details. findent-4.3.2/LICENCE0000644000000000000000000000002514566134066011072 0ustar00See the file COPYING findent-4.3.2/Makefile.am0000644000000000000000000000410614566134066012145 0ustar00# -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AUTOMAKE_OPTIONS = gnu SUBDIRS = src scripts test vim gedit emacs doc deps MAINTAINERCLEANFILES = config.h.in~ EXTRA_DIST = bootstrap README LICENCE README.1st README.windows \ README.2nd simplemake.sh addcopyright.sh \ debpostlude debprelude bootdate towin maintainer-clean-local: rm -rf bin share autom4te.cache builtparser builtlexer: cd src; $(MAKE) $@ tarfile = $(top_builddir)/$(PACKAGE_TARNAME)-$(VERSION).tar.gz CLEANFILES = $(tarfile) findent-4.3.2/Makefile.in0000644000000000000000000006716414566134066012173 0ustar00# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/m4_ax_prog_cc_for_build.m4 \ $(top_srcdir)/m4/m4_ax_prog_cxx_for_build.m4 \ $(top_srcdir)/m4/ax_prog_bison.m4 \ $(top_srcdir)/m4/ax_prog_flex.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in AUTHORS \ COPYING ChangeLog INSTALL NEWS README compile config.guess \ config.sub depcomp install-sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip # Exists only to be overridden by the user if desired. AM_DISTCHECK_DVI_TARGET = dvi distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_OBJEXT = @BUILD_OBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CPP_FOR_BUILD = @CPP_FOR_BUILD@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXCPPFLAGS_FOR_BUILD = @CXXCPPFLAGS_FOR_BUILD@ CXXCPP_FOR_BUILD = @CXXCPP_FOR_BUILD@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@ CXX_FOR_BUILD = @CXX_FOR_BUILD@ CYGPATH_W = @CYGPATH_W@ DATE = @DATE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CC_FOR_BUILD = @ac_ct_CC_FOR_BUILD@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_CXX_FOR_BUILD = @ac_ct_CXX_FOR_BUILD@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ make_include = @make_include@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = gnu SUBDIRS = src scripts test vim gedit emacs doc deps MAINTAINERCLEANFILES = config.h.in~ EXTRA_DIST = bootstrap README LICENCE README.1st README.windows \ README.2nd simplemake.sh addcopyright.sh \ debpostlude debprelude bootdate towin tarfile = $(top_builddir)/$(PACKAGE_TARNAME)-$(VERSION).tar.gz CLEANFILES = $(tarfile) all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-zstd: distdir tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ *.tar.zst*) \ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile config.h installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic \ maintainer-clean-local mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ dist-zstd distcheck distclean distclean-generic distclean-hdr \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic \ maintainer-clean-local mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile maintainer-clean-local: rm -rf bin share autom4te.cache builtparser builtlexer: cd src; $(MAKE) $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: findent-4.3.2/NEWS0000644000000000000000000000000014566134066010575 0ustar00findent-4.3.2/README0000644000000000000000000000340514566134066010772 0ustar00# -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. For installation instructions and usage, see README.1st and INSTALL For more in-depth information: see doc/README For maintainers: see README.2nd findent-4.3.2/README.1st0000644000000000000000000001331014566134066011474 0ustar00# -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. findent: Indents/beautifies/converts Fortran sources. Prints dependencies based on: - definitions and uses of modules and submodules - include, #include and ??include statements Findent can emit a script that uses findent to create a dependencies file for use in an Makefile. - findent supports Fortran-66 up to Fortran-2018 - findent can convert from fixed form to free form and vice-versa - findent honours cpp and coco preprocess statements - findent is validated against all constructs in 'Modern Fortran explained, Incorporating Fortran 2018, Metcalf e.a.' - findent honours OpenMP conditionals - findent runs in Unix and Windows - high speed: 50K - 100K lines per second - wrapper for processing one or more files in one call available for Unix and Windows (wfindent and wfindent.bat respectively) - vim, gedit, emacs: findent optionally emits configuration files for these editors to use findent as a plugin. - gui frontent available in a separate package: jfindent Unix-Linux users with a 'decent' shell and make: prerequisites: gnumake, g++ make findent and wfindent: download findent-x.y.tgz $ tar xf findent-x.y.z.tgz $ cd findent-x.y $ ./configure --prefix= $ make clean $ make On systems with sudo (Debian, Ubuntu, Linux Mint, ...): $ sudo make install On systems without sudo (Redhat, Scientific Linux, ...): $ su -c 'make install' if bison or flex are found, they will be used to regenerate the parser and lexer sources. See ./configure --help You can create an Windows executable (requires Ubuntu package g++-mingw-w64-i686-win32): $ a=i686-w64-mingw32 $ b=`gcc -dumpmachine` $ export CXX="$a-g++ -static" $ ./configure --build=$b --host=$a $ make clean $ make You can also use the script 'towin'. If things are ok: findent.exe will be available in src/ wfindent.bat is available in scripts/ Unix-Linux users for whom above recipe does not work: prerequisites: a Bourne shell (sh, bash), C++ compiler make findent: download findent-x.y.tgz $ tar xf findent-x.y.z.tgz $ cd findent-x.y edit simplemake.sh to fill in the correct values of the name of the C++ compiler, default: g++ the compile flags, default: -O2 the name of the program to create, default: findent $ sh simplemake.sh copy the generated program to the desired location ( e.g. $HOME/bin). make wfindent: in the directory 'scripts' you find a template for wfindent: wfindent.tmpl edit wfindent.tmpl: change 'findent-location' into the path to findent e.g. /usr/local/bin/findent. Copy wfindent.tmpl to the desired location, e.g.: $ cp wfindent.tmpl $HOME/bin/wfindent Windows users: download findent-x.y.zip $ unzip findent-x.y.zip $ copy findent.exe C:\WINDOWS $ copy wfindent.bat C:\WINDOWS All systems: Usage: $ findent -h Examples: $ findent < in.f90 > out.f90 $ findent -i4 -Rr < in.f > out.f90 $ wfindent -i4 -Rr *.f Usage with Make: $ findent --makefdeps > makefdeps $ chmod +x makefdeps use something like the following in your Makefile: include deps dep deps: ./makefdeps *.f90 > deps Of course, if makefdeps is not adequate for you, you can create your own script, possibly inspired by makefdeps. (g)vim users: Install findent, the following command shows instructions how to use findent in (g)vim: findent --vim_help Documentation: in (g)vim: :help equalprg :help indentexpr vim/README and the comments in the files vim/findent.vim and vim/fortran.vim gedit users: Install findent, the following command shows instructions how to use findent in gedit: findent --gedit_help emacs users: Install findent, the following command shows instructions how to use findent in emacs: findent --emacs_help findent-4.3.2/README.2nd0000644000000000000000000000402514566134066011453 0ustar00# -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Extra maintainer scripts: - bootstrap: * Adds copyright to files (see addcopyright.sh) * autoreconf -fvi * Creates the output of flex and bison for usage on systems that do not have bison and/or flex installed. (make sure YOU have bison and flex installed) * make distclean - addcopyright.sh: called in bootstrap to add copyright to files. - design: doc/design/findent.pdf findent-4.3.2/README.windows0000644000000000000000000000536714566134066012474 0ustar00# -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. findent: indents/beautifies/converts Fortran sources - findent supports Fortran-2008 - findent can convert from fixed form to free form - binaries for Unix and Windows (findent and findent.exe respectively) - wrapper for processing one or more files in one call available for Unix and Windows (wfindent and wfindent.bat respectively) - (g)vim users: findent can act as a plug-in to format your edit file with the '=' command Windows users: download findent-x.y.zip $ unzip findent-x.y.zip $ copy findent.exe C:\WINDOWS (*) $ copy wfindent.bat C:\WINDOWS (*) (*) or another location where you store your executables Usage: $ findent -h Examples: $ findent < in.f90 > out.f90 $ findent -i4 -Rr < in.f > out.f90 $ wfindent -i4 -Rr *.f (g)vim users: Install findent, and add the following to your .vimrc: augroup fortfiletype autocmd! autocmd Filetype fortran :execute ":setl sw=3" autocmd Filetype fortran :execute ":setl equalprg=findent\\ -Ia\\ -i3" autocmd Filetype fortran :execute ":setl expandtab" augroup END Read :help = in vim or gvim. findent-4.3.2/aclocal.m40000644000000000000000000012712414566134066011757 0ustar00# generated automatically by aclocal 1.16.5 -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.71],, [m4_warning([this file was generated for autoconf 2.71. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.16.5], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.16.5])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE="gmake" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking is enabled. # This creates each '.Po' and '.Plo' makefile fragment that we'll need in # order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl m4_ifdef([_$0_ALREADY_INIT], [m4_fatal([$0 expanded multiple times ]m4_defn([_$0_ALREADY_INIT]))], [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi AC_SUBST([CTAGS]) if test -z "$ETAGS"; then ETAGS=etags fi AC_SUBST([ETAGS]) if test -z "$CSCOPE"; then CSCOPE=cscope fi AC_SUBST([CSCOPE]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Copyright (C) 1998-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_LEX # ----------- # Autoconf leaves LEX=: if lex or flex can't be found. Change that to a # "missing" invocation, for better error output. AC_DEFUN([AM_PROG_LEX], [AC_PREREQ([2.50])dnl AC_REQUIRE([AM_MISSING_HAS_RUN])dnl AC_REQUIRE([AC_PROG_LEX])dnl if test "$LEX" = :; then LEX=${am_missing_run}flex fi]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless 'enable' is passed literally. # For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], am_maintainer_other[ make rules and dependencies not useful (and sometimes confusing) to the casual installer])], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/m4_ax_prog_cc_for_build.m4]) m4_include([m4/m4_ax_prog_cxx_for_build.m4]) findent-4.3.2/addcopyright.sh0000755000000000000000000000435514566134066013137 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. crfile=`mktemp` cat < COPYING | sed 's/^/#-# /' > "$crfile" n=0 while [ "$1" ] ; do f="$1" shift txt="-""copyright-" if file --mime "$f" | grep -q binary ; then echo "$f: binary" continue fi if ! grep -q -- "$txt" "$f" ; then echo "$f: no $txt" continue fi # following 2 sed commands take care that only the first '-copyright-' # will be followed by the copyright text # Notice that sed requires a newline after the filename of the 'r' command sed -i "/^\s*#-#/d" "$f" sed -i "/$txt/{r $crfile :a;n;ba;}" "$f" n=`expr $n + 1` done echo "$n files copyrighted" findent-4.3.2/bootdate0000644000000000000000000000001314566134066011626 0ustar001708701750 findent-4.3.2/bootstrap0000755000000000000000000000667014566134066012064 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. debroot=../findent-debian deb=$debroot/debian # for --selfrep option, see also configure.ac date +%s > bootdate # -- generate date.tex.in for creating doc/design/findent.{pdf,md} date -d '@'`cat bootdate` +'%b %d, %Y' > doc/design/date.tex.in ./addcopyright.sh Makefile.am addcopyright.sh bootstrap configure.ac README* simplemake.sh find src \( -name '*.cpp' -o -name '*.h' -o -name '*.y' -o -name '*.l' -o -name '*.am' \ -o -name '*.sh' \) -print0 | xargs -0 ./addcopyright.sh ./addcopyright.sh test/*.sh test/*.am test/*.sh.in doc/*.am emacs/*.am gedit/*.am gedit/*.py \ scripts/wfindent.tmpl scripts/*.am head -n 2 ChangeLog > test/changelog.ref.in || exit 1 autoreconf -fvi || exit 1 ./configure || exit 1 make clean || exit 1 # make builtparser.cpp etc beforehand, so that they can be # used as EXTRA_DIST's make builtparser builtlexer || exit 1 # create autopkg suite in debian directory, if present if [ -d $deb ] ; then mkdir -p $deb/tests || exit 1 cp test/*.f test/*.ref test/*.sh test/doit $deb/tests || exit 1 cp debprelude $deb/tests/prelude || exit 1 cp debpostlude $deb/tests/postlude || exit 1 echo "Tests:" > $deb/tests/control || exit 1 for f in $deb/tests/test?.sh $deb/tests/test??.sh ; do echo " `basename $f`" >> $deb/tests/control || exit 1 done fi make distclean || exit 1 echo "bootstrap done" findent-4.3.2/compile0000755000000000000000000001635014566134066011473 0ustar00#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN* | MSYS*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/* | msys/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: findent-4.3.2/config.guess0000755000000000000000000014051214566134066012433 0ustar00#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-01-09' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # Just in case it came from the environment. GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case $UNAME_SYSTEM in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #else #include /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case $UNAME_VERSION in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; sun4*:SunOS:*:*) case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case `/bin/arch` in sun3) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if test "$HP_ARCH" = hppa2.0w then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:SerenityOS:*:*) GUESS=$UNAME_MACHINE-pc-serenity ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_X32 >/dev/null then LIBCABI=${LIBC}x32 fi fi GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. GUESS=i386-sequent-sysv4 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; x86_64:Haiku:*:*) GUESS=x86_64-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "${cputype-}" = 386; then UNAME_MACHINE=i386 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; i*86:Fiwix:*:*) GUESS=$UNAME_MACHINE-pc-fiwix ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: findent-4.3.2/config.h.in0000644000000000000000000000521314566134066012134 0ustar00/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if you have the header file. */ #undef HAVE_ALGORITHM /* Define to 1 if you have the header file. */ #undef HAVE_ASSERT_H /* Define to 1 if you have the header file. */ #undef HAVE_DEQUE /* Define to 1 if you have the header file. */ #undef HAVE_ERRNO_H /* Define to 1 if you have the header file. */ #undef HAVE_GETOPT_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_IOMANIP /* Define to 1 if you have the header file. */ #undef HAVE_IOSTREAM /* Define to 1 if you have the header file. */ #undef HAVE_MAP /* Define to 1 if you have the header file. */ #undef HAVE_SET /* Define to 1 if you have the header file. */ #undef HAVE_SSTREAM /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_TYPEINFO /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the header file. */ #undef HAVE_UTILITY /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if all of the C90 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a `char[]'. */ #undef YYTEXT_POINTER findent-4.3.2/config.sub0000755000000000000000000010511614566134066012077 0ustar00#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-01-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 basic_os=$field2 ;; zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ | unicom* | ibm* | next | hp | isi* | apollo | altos* \ | convergent* | ncr* | news | 32* | 3600* | 3100* \ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ | ultra | tti* | harris | dolphin | highlevel | gould \ | cbm | ns | masscomp | apple | axis | knuth | cray \ | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 basic_os= ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; convex-c1) basic_machine=c1-convex basic_os=bsd ;; convex-c2) basic_machine=c2-convex basic_os=bsd ;; convex-c32) basic_machine=c32-convex basic_os=bsd ;; convex-c34) basic_machine=c34-convex basic_os=bsd ;; convex-c38) basic_machine=c38-convex basic_os=bsd ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next case $basic_os in openstep*) ;; nextstep*) ;; ns2*) basic_os=nextstep2 ;; *) basic_os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x$basic_os != x then # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. case $basic_os in gnu/linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` ;; os2-emx) kernel=os2 os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read kernel os <&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os in linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ | linux-musl* | linux-relibc* | linux-uclibc* ) ;; uclinux-uclibc* ) ;; -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 exit 1 ;; kfreebsd*-gnu* | kopensolaris*-gnu*) ;; vxworks-simlinux | vxworks-simwindows | vxworks-spe) ;; nto-qnx*) ;; os2-emx) ;; *-eabi* | *-gnueabi*) ;; -*) # Blank kernel with real OS is always fine. ;; *-*) echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$os in *-riscix*) vendor=acorn ;; *-sunos*) vendor=sun ;; *-cnk* | *-aix*) vendor=ibm ;; *-beos*) vendor=be ;; *-hpux*) vendor=hp ;; *-mpeix*) vendor=hp ;; *-hiux*) vendor=hitachi ;; *-unos*) vendor=crds ;; *-dgux*) vendor=dg ;; *-luna*) vendor=omron ;; *-genix*) vendor=ns ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) vendor=ibm ;; *-ptx*) vendor=sequent ;; *-tpf*) vendor=ibm ;; *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; *-aux*) vendor=apple ;; *-hms*) vendor=hitachi ;; *-mpw* | *-macos*) vendor=apple ;; *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; *-vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: findent-4.3.2/configure0000755000000000000000000127056614566134066012040 0ustar00#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for findent 4.3.2. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="as_nop=: if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else $as_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and wvermin@gmail.com $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='findent' PACKAGE_TARNAME='findent' PACKAGE_VERSION='4.3.2' PACKAGE_STRING='findent 4.3.2' PACKAGE_BUGREPORT='wvermin@gmail.com' PACKAGE_URL='' ac_unique_file="src/findent.cpp" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_cxx_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS CXXCPPFLAGS_FOR_BUILD CXXFLAGS_FOR_BUILD CXXCPP_FOR_BUILD ac_ct_CXX_FOR_BUILD CXX_FOR_BUILD host_os host_vendor host_cpu host CXXCPP LDFLAGS_FOR_BUILD CPPFLAGS_FOR_BUILD CFLAGS_FOR_BUILD BUILD_OBJEXT BUILD_EXEEXT CPP_FOR_BUILD ac_ct_CC_FOR_BUILD CC_FOR_BUILD build_os build_vendor build_cpu build CPP SED am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX ac_ct_FC FCFLAGS FC CROSSCOMPILE_FALSE CROSSCOMPILE_TRUE USEFLEX_FALSE USEFLEX_TRUE LEXLIB am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC LEX_OUTPUT_ROOT LEX USEBISON_FALSE USEBISON_TRUE EGREP GREP YFLAGS YACC USEESOPE_FALSE USEESOPE_TRUE make_include MAKESELFREP_FALSE MAKESELFREP_TRUE DATE MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_maintainer_mode enable_selfrep with_esope with_bison with_flex enable_dependency_tracking ' ac_precious_vars='build_alias host_alias target_alias YACC YFLAGS LEX CC CFLAGS LDFLAGS LIBS CPPFLAGS FC FCFLAGS CXX CXXFLAGS CCC CPP CXXCPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures findent 4.3.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/findent] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of findent 4.3.2:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-selfrep Build with self replicating mode [default=yes] --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-esope Build with esope support [default=no] --with-bison Use bison to create parser [default=use-bison-if-available] --with-flex Use flex to create lexer [default=use-flex-if-available] Some influential environment variables: YACC The `Yet Another Compiler Compiler' implementation to use. Defaults to the first program found out of: `bison -y', `byacc', `yacc'. YFLAGS The list of arguments that will be passed by default to $YACC. This script will default YFLAGS to the empty string to avoid a default value of `-d' given by some make applications. LEX The 'Fast lexical analyser generator' to use CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory FC Fortran compiler command FCFLAGS Fortran compiler flags CXX C++ compiler command CXXFLAGS C++ compiler flags CPP C preprocessor CXXCPP C++ preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF findent configure 4.3.2 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_fc_try_compile LINENO # --------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_fc_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_fc_try_compile # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_check_header_compile LINENO HEADER VAR INCLUDES # --------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_cxx_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_header_compile ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by findent $as_me 4.3.2, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " # Test code for whether the C++ compiler supports C++98 (global declarations) ac_cxx_conftest_cxx98_globals=' // Does the compiler advertise C++98 conformance? #if !defined __cplusplus || __cplusplus < 199711L # error "Compiler does not advertise C++98 conformance" #endif // These inclusions are to reject old compilers that // lack the unsuffixed header files. #include #include // and are *not* freestanding headers in C++98. extern void assert (int); namespace std { extern int strcmp (const char *, const char *); } // Namespaces, exceptions, and templates were all added after "C++ 2.0". using std::exception; using std::strcmp; namespace { void test_exception_syntax() { try { throw "test"; } catch (const char *s) { // Extra parentheses suppress a warning when building autoconf itself, // due to lint rules shared with more typical C programs. assert (!(strcmp) (s, "test")); } } template struct test_template { T const val; explicit test_template(T t) : val(t) {} template T add(U u) { return static_cast(u) + val; } }; } // anonymous namespace ' # Test code for whether the C++ compiler supports C++98 (body of main) ac_cxx_conftest_cxx98_main=' assert (argc); assert (! argv[0]); { test_exception_syntax (); test_template tt (2.0); assert (tt.add (4) == 6.0); assert (true && !false); } ' # Test code for whether the C++ compiler supports C++11 (global declarations) ac_cxx_conftest_cxx11_globals=' // Does the compiler advertise C++ 2011 conformance? #if !defined __cplusplus || __cplusplus < 201103L # error "Compiler does not advertise C++11 conformance" #endif namespace cxx11test { constexpr int get_val() { return 20; } struct testinit { int i; double d; }; class delegate { public: delegate(int n) : n(n) {} delegate(): delegate(2354) {} virtual int getval() { return this->n; }; protected: int n; }; class overridden : public delegate { public: overridden(int n): delegate(n) {} virtual int getval() override final { return this->n * 2; } }; class nocopy { public: nocopy(int i): i(i) {} nocopy() = default; nocopy(const nocopy&) = delete; nocopy & operator=(const nocopy&) = delete; private: int i; }; // for testing lambda expressions template Ret eval(Fn f, Ret v) { return f(v); } // for testing variadic templates and trailing return types template auto sum(V first) -> V { return first; } template auto sum(V first, Args... rest) -> V { return first + sum(rest...); } } ' # Test code for whether the C++ compiler supports C++11 (body of main) ac_cxx_conftest_cxx11_main=' { // Test auto and decltype auto a1 = 6538; auto a2 = 48573953.4; auto a3 = "String literal"; int total = 0; for (auto i = a3; *i; ++i) { total += *i; } decltype(a2) a4 = 34895.034; } { // Test constexpr short sa[cxx11test::get_val()] = { 0 }; } { // Test initializer lists cxx11test::testinit il = { 4323, 435234.23544 }; } { // Test range-based for int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; for (auto &x : array) { x += 23; } } { // Test lambda expressions using cxx11test::eval; assert (eval ([](int x) { return x*2; }, 21) == 42); double d = 2.0; assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0); assert (d == 5.0); assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0); assert (d == 5.0); } { // Test use of variadic templates using cxx11test::sum; auto a = sum(1); auto b = sum(1, 2); auto c = sum(1.0, 2.0, 3.0); } { // Test constructor delegation cxx11test::delegate d1; cxx11test::delegate d2(); cxx11test::delegate d3(45); } { // Test override and final cxx11test::overridden o1(55464); } { // Test nullptr char *c = nullptr; } { // Test template brackets test_template<::test_template> v(test_template(12)); } { // Unicode literals char const *utf8 = u8"UTF-8 string \u2500"; char16_t const *utf16 = u"UTF-8 string \u2500"; char32_t const *utf32 = U"UTF-32 string \u2500"; } ' # Test code for whether the C compiler supports C++11 (complete). ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals} ${ac_cxx_conftest_cxx11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_cxx_conftest_cxx98_main} ${ac_cxx_conftest_cxx11_main} return ok; } " # Test code for whether the C compiler supports C++98 (complete). ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals} int main (int argc, char **argv) { int ok = 0; ${ac_cxx_conftest_cxx98_main} return ok; } " as_fn_append ac_header_cxx_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_cxx_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_cxx_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_cxx_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_cxx_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_cxx_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_cxx_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_cxx_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_cxx_list " unistd.h unistd_h HAVE_UNISTD_H" # Auxiliary files required by this configure script. ac_aux_files="config.guess config.sub compile missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in #(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ 'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else $as_nop cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else $as_nop if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='findent' VERSION='4.3.2' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 printf %s "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test ${enable_maintainer_mode+y} then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else $as_nop USE_MAINTAINER_MODE=no fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 printf "%s\n" "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE ac_config_headers="$ac_config_headers config.h" # Following is for the --selfrep option. If possible we create a binary that # does not change when recompiled. # see https://reproducible-builds.org/ # First: check if SOURCE_DATE_EPOCH is already defined # if not: use the file 'bootdate' which should contain the output of 'date +%s' s="$SOURCE_DATE_EPOCH" if test "x$s" = x ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: SOURCE_DATE_EPOCH is not defined" >&5 printf "%s\n" "$as_me: WARNING: SOURCE_DATE_EPOCH is not defined" >&2;} if test -f "$srcdir/bootdate" ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Try to read SOURCE_DATE_EPOCH from file '$srcdir/bootdate'" >&5 printf "%s\n" "$as_me: Try to read SOURCE_DATE_EPOCH from file '$srcdir/bootdate'" >&6;} s=`head -n1 "$srcdir/bootdate"` xd=`date -u -d "@$s" 2>/dev/null || date -u -r "$s" 2>/dev/null || echo "Invalid date format"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Read SOURCE_DATE_EPOCH=$s, i.e: $xd " >&5 printf "%s\n" "$as_me: Read SOURCE_DATE_EPOCH=$s, i.e: $xd " >&6;} fi else xd=`date -u -d "@$s" 2>/dev/null || date -u -r "$s" 2>/dev/null || echo "Invalid date format"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Given SOURCE_DATE_EPOCH=$s, i.e: $xd " >&5 printf "%s\n" "$as_me: Given SOURCE_DATE_EPOCH=$s, i.e: $xd " >&6;} fi # final checks on the validity of SOURCE_DATE_EPOCH # - must be an positive integer # - date must be within -20 years and +1 year from current date # if these are not fulfilled, use `date +%s` x=$(echo "$s" | tr -dc "0-9" ) good=no now=`date "+%s"` if test "x$x" != x ; then firstdate=$( expr "$now" - 631152000 ) lastdate=$( expr "$now" + 31536000 ) if test "$x" -gt "$firstdate" -a "$x" -lt "$lastdate" ; then good=yes fi fi if test x"$good" = xyes ; then SOURCE_DATE_EPOCH="$x" else SOURCE_DATE_EPOCH="$now" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: SOURCE_DATE_EPOCH set from current date" >&5 printf "%s\n" "$as_me: WARNING: SOURCE_DATE_EPOCH set from current date" >&2;} fi xd=`date -u -d "@$SOURCE_DATE_EPOCH" 2>/dev/null || date -u -r "$SOURCE_DATE_EPOCH" 2>/dev/null || echo "Invalid date format"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Using SOURCE_DATE_EPOCH=$SOURCE_DATE_EPOCH, i.e: $xd " >&5 printf "%s\n" "$as_me: Using SOURCE_DATE_EPOCH=$SOURCE_DATE_EPOCH, i.e: $xd " >&6;} DATE_FMT="+%Y-%m-%d" DATE=`date -u -d "@$SOURCE_DATE_EPOCH" "$DATE_FMT" 2>/dev/null || date -u -r "$SOURCE_DATE_EPOCH" "$DATE_FMT" 2>/dev/null || date -u "$DATE_FMT"` # Check if we can create a reproducible 'make dist'. # If yes: replace the original am__tar (Make's recipe to make a tarball) by # a recipe that creates a reproducible tarball tardir=conftestdir mkdir "$tardir" echo "foo" > $tardir/test { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Checking the capabilities of the tar program..." >&5 printf "%s\n" "$as_me: Checking the capabilities of the tar program..." >&6;} "${TAR-tar}" --format=posix --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime \ --owner=0 --group=0 --numeric-owner --mtime="@${SOURCE_DATE_EPOCH}" --sort=name -cf - "$tardir" > /dev/null if test $? -eq 0 ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: The program tar is usable to create a reproducible tar ball." >&5 printf "%s\n" "$as_me: The program tar is usable to create a reproducible tar ball." >&6;} am__tar='$${TAR-tar} --format=posix --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime \ --owner=0 --group=0 --numeric-owner --mtime="'"@${SOURCE_DATE_EPOCH}"'" --sort=name -chf - "$$tardir"' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: The program tar is not usable to create a reproducible build." >&5 printf "%s\n" "$as_me: WARNING: The program tar is not usable to create a reproducible build." >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: If a reproducible build is desired, use environment variable 'TAR' to point to a pax-enabled tar," >&5 printf "%s\n" "$as_me: WARNING: If a reproducible build is desired, use environment variable 'TAR' to point to a pax-enabled tar," >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: or use the flag '--disable-selfrep'." >&5 printf "%s\n" "$as_me: WARNING: or use the flag '--disable-selfrep'." >&2;} fi rm -r "$tardir" # Check whether --enable-selfrep was given. if test ${enable_selfrep+y} then : enableval=$enable_selfrep; else $as_nop enable_selfrep=yes fi if test "x$enable_selfrep" = "xyes" ; then MAKESELFREP_TRUE= MAKESELFREP_FALSE='#' else MAKESELFREP_TRUE='#' MAKESELFREP_FALSE= fi # --- end of selfrep code make_include="include" # Check whether --with-esope was given. if test ${with_esope+y} then : withval=$with_esope; else $as_nop with_esope=no fi if test "x$with_esope" = "xyes"; then USEESOPE_TRUE= USEESOPE_FALSE='#' else USEESOPE_TRUE='#' USEESOPE_FALSE= fi # test if bison available etc... # Check whether --with-bison was given. if test ${with_bison+y} then : withval=$with_bison; else $as_nop with_bison=use-bison-if-available fi usebison="$with_bison" if test "x$with_bison" != "xno" then : # =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_prog_bison.html # =========================================================================== # # SYNOPSIS # # AX_PROG_BISON(ACTION-IF-TRUE,ACTION-IF-FALSE) # # DESCRIPTION # # Check whether bison is the parser generator. Run ACTION-IF-TRUE if # successful, ACTION-IF-FALSE otherwise # # LICENSE # # Copyright (c) 2009 Francesco Salvestrini # Copyright (c) 2010 Diego Elio Petteno` # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 9 fi for ac_prog in 'bison -y' byacc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_YACC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_YACC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi YACC=$ac_cv_prog_YACC if test -n "$YACC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5 printf "%s\n" "$YACC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$YACC" && break done test -n "$YACC" || YACC="yacc" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 printf %s "checking for grep that handles long lines and -e... " >&6; } if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in grep ggrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 else $as_nop if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in egrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" if test "x$with_bison" = "xyes" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if bison is the parser generator" >&5 printf %s "checking if bison is the parser generator... " >&6; } if test ${ax_cv_prog_bison+y} then : printf %s "(cached) " >&6 else $as_nop if $YACC --version 2>/dev/null | $EGREP -q '^bison ' then : ax_cv_prog_bison=yes else $as_nop ax_cv_prog_bison=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_prog_bison" >&5 printf "%s\n" "$ax_cv_prog_bison" >&6; } if test "$ax_cv_prog_bison" = "yes" then : YACC="${YACC% -y} -o y.tab.c" else $as_nop as_fn_error $? "No valid bison found. Try --without-bison" "$LINENO" 5 fi fi if test "x$with_bison" = "xuse-bison-if-available" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if bison is the parser generator" >&5 printf %s "checking if bison is the parser generator... " >&6; } if test ${ax_cv_prog_bison+y} then : printf %s "(cached) " >&6 else $as_nop if $YACC --version 2>/dev/null | $EGREP -q '^bison ' then : ax_cv_prog_bison=yes else $as_nop ax_cv_prog_bison=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_prog_bison" >&5 printf "%s\n" "$ax_cv_prog_bison" >&6; } if test "$ax_cv_prog_bison" = "yes" then : YACC="${YACC% -y} -o y.tab.c" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Will use bison if necessary to create parser." >&5 printf "%s\n" "$as_me: Will use bison if necessary to create parser." >&6;} usebison="yes" else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No bison found. Will use pre-built parser." >&5 printf "%s\n" "$as_me: No bison found. Will use pre-built parser." >&6;} usebison="no" fi fi if test "x$usebison" = "xyes"; then USEBISON_TRUE= USEBISON_FALSE='#' else USEBISON_TRUE='#' USEBISON_FALSE= fi # test if flex available etc... # Check whether --with-flex was given. if test ${with_flex+y} then : withval=$with_flex; else $as_nop with_flex=use-flex-if-available fi useflex="$with_flex" if test "x$with_flex" != "xno" then : # =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_prog_flex.html # =========================================================================== # # SYNOPSIS # # AX_PROG_FLEX(ACTION-IF-TRUE,ACTION-IF-FALSE) # # DESCRIPTION # # Check whether flex is the scanner generator. Run ACTION-IF-TRUE if # successful, ACTION-IF-FALSE otherwise # # LICENSE # # Copyright (c) 2009 Francesco Salvestrini # Copyright (c) 2010 Diego Elio Petteno` # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 12 fi DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi for ac_prog in flex lex do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_LEX+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$LEX"; then ac_cv_prog_LEX="$LEX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_LEX="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LEX=$ac_cv_prog_LEX if test -n "$LEX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5 printf "%s\n" "$LEX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$LEX" && break done test -n "$LEX" || LEX=":" if test "x$LEX" != "x:"; then cat >conftest.l <<_ACEOF %{ #ifdef __cplusplus extern "C" #endif int yywrap(void); %} %% a { ECHO; } b { REJECT; } c { yymore (); } d { yyless (1); } e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument. */ #ifdef __cplusplus yyless ((yyinput () != 0)); #else yyless ((input () != 0)); #endif } f { unput (yytext[0]); } . { BEGIN INITIAL; } %% #ifdef YYTEXT_POINTER extern char *yytext; #endif int yywrap (void) { return 1; } int main (void) { return ! yylex (); } _ACEOF { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lex output file root" >&5 printf %s "checking for lex output file root... " >&6; } if test ${ac_cv_prog_lex_root+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_lex_root=unknown { { ac_try="$LEX conftest.l" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$LEX conftest.l") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && if test -f lex.yy.c; then ac_cv_prog_lex_root=lex.yy elif test -f lexyy.c; then ac_cv_prog_lex_root=lexyy fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5 printf "%s\n" "$ac_cv_prog_lex_root" >&6; } if test "$ac_cv_prog_lex_root" = unknown then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot find output from $LEX; giving up on $LEX" >&5 printf "%s\n" "$as_me: WARNING: cannot find output from $LEX; giving up on $LEX" >&2;} LEX=: LEXLIB= fi LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root if test ${LEXLIB+y} then : else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lex library" >&5 printf %s "checking for lex library... " >&6; } if test ${ac_cv_lib_lex+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_LIBS="$LIBS" ac_found=false for ac_cv_lib_lex in 'none needed' -lfl -ll 'not found'; do case $ac_cv_lib_lex in #( 'none needed') : ;; #( 'not found') : break ;; #( *) : LIBS="$ac_cv_lib_lex $ac_save_LIBS" ;; #( *) : ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_found=: fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if $ac_found; then break fi done LIBS="$ac_save_LIBS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5 printf "%s\n" "$ac_cv_lib_lex" >&6; } if test "$ac_cv_lib_lex" = 'not found' then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: required lex library not found; giving up on $LEX" >&5 printf "%s\n" "$as_me: WARNING: required lex library not found; giving up on $LEX" >&2;} LEX=: LEXLIB= elif test "$ac_cv_lib_lex" = 'none needed' then : LEXLIB='' else $as_nop LEXLIB=$ac_cv_lib_lex fi ac_save_LIBS="$LIBS" LIBS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing yywrap" >&5 printf %s "checking for library containing yywrap... " >&6; } if test ${ac_cv_search_yywrap+y} then : printf %s "(cached) " >&6 else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char yywrap (); int main (void) { return yywrap (); ; return 0; } _ACEOF for ac_lib in '' fl l do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_yywrap=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_yywrap+y} then : break fi done if test ${ac_cv_search_yywrap+y} then : else $as_nop ac_cv_search_yywrap=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_yywrap" >&5 printf "%s\n" "$ac_cv_search_yywrap" >&6; } ac_res=$ac_cv_search_yywrap if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" LEXLIB="$LIBS" fi LIBS="$ac_save_LIBS" fi if test "$LEX" != : then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5 printf %s "checking whether yytext is a pointer... " >&6; } if test ${ac_cv_prog_lex_yytext_pointer+y} then : printf %s "(cached) " >&6 else $as_nop # POSIX says lex can declare yytext either as a pointer or an array; the # default is implementation-dependent. Figure out which it is, since # not all implementations provide the %pointer and %array declarations. ac_cv_prog_lex_yytext_pointer=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define YYTEXT_POINTER 1 `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_lex_yytext_pointer=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5 printf "%s\n" "$ac_cv_prog_lex_yytext_pointer" >&6; } if test $ac_cv_prog_lex_yytext_pointer = yes; then printf "%s\n" "#define YYTEXT_POINTER 1" >>confdefs.h fi fi rm -f conftest.l $LEX_OUTPUT_ROOT.c fi if test "$LEX" = :; then LEX=${am_missing_run}flex fi if test "x$with_flex" = "xyes" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if flex is the lexer generator" >&5 printf %s "checking if flex is the lexer generator... " >&6; } if test ${ax_cv_prog_flex+y} then : printf %s "(cached) " >&6 else $as_nop if $LEX --version 2>/dev/null | $EGREP -qw '^g?flex' then : ax_cv_prog_flex=yes else $as_nop ax_cv_prog_flex=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_prog_flex" >&5 printf "%s\n" "$ax_cv_prog_flex" >&6; } if test "$ax_cv_prog_flex" = "yes" then : else $as_nop as_fn_error $? "No valid flex found. Try --without-flex" "$LINENO" 5 fi fi if test "x$with_flex" = "xuse-flex-if-available" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if flex is the lexer generator" >&5 printf %s "checking if flex is the lexer generator... " >&6; } if test ${ax_cv_prog_flex+y} then : printf %s "(cached) " >&6 else $as_nop if $LEX --version 2>/dev/null | $EGREP -qw '^g?flex' then : ax_cv_prog_flex=yes else $as_nop ax_cv_prog_flex=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_prog_flex" >&5 printf "%s\n" "$ax_cv_prog_flex" >&6; } if test "$ax_cv_prog_flex" = "yes" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Will use flex if necessary to create lexer." >&5 printf "%s\n" "$as_me: Will use flex if necessary to create lexer." >&6;} useflex="yes" else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No flex found. Will use pre-built lexer." >&5 printf "%s\n" "$as_me: No flex found. Will use pre-built lexer." >&6;} useflex="no" fi fi if test "x$useflex" = "xyes"; then USEFLEX_TRUE= USEFLEX_FALSE='#' else USEFLEX_TRUE='#' USEFLEX_FALSE= fi if test "x$cross_compiling" = "xyes"; then CROSSCOMPILE_TRUE= CROSSCOMPILE_FALSE='#' else CROSSCOMPILE_TRUE='#' CROSSCOMPILE_FALSE= fi # test for working gfortran (only used in make check): ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in gfortran do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in gfortran do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else $as_nop FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else $as_nop ac_cv_prog_fc_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test "x$FC" = "xgfortran" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: gfortran will be used to compile test sources in 'make check'" >&5 printf "%s\n" "$as_me: gfortran will be used to compile test sources in 'make check'" >&6;} else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No gfortran compiler found. 'make check' will not try to compile test sources" >&5 printf "%s\n" "$as_me: No gfortran compiler found. 'make check' will not try to compile test sources" >&6;} fi ac_config_files="$ac_config_files test/prelude" ac_config_files="$ac_config_files test/postlude" ac_config_files="$ac_config_files test/test-compile.sh" ac_config_files="$ac_config_files test/doit" ac_config_files="$ac_config_files test/init.sh" ac_config_files="$ac_config_files test/progfixed-dos.f.try.f.ref" ac_config_files="$ac_config_files test/progfixed-dos.f" ac_config_files="$ac_config_files test/progfixed.f.try.f.ref" ac_config_files="$ac_config_files test/progfixed.f" ac_config_files="$ac_config_files test/progfixed1.f.try.f.ref" ac_config_files="$ac_config_files test/progfixed1.f" ac_config_files="$ac_config_files test/progfixedfree-dos.f.try.f.ref" ac_config_files="$ac_config_files test/progfixedfree-dos.f" ac_config_files="$ac_config_files test/progfixedfree.f.try.f.ref" ac_config_files="$ac_config_files test/progfixedfree.f" ac_config_files="$ac_config_files test/progfree-dos.f.try.f.ref" ac_config_files="$ac_config_files test/progfree-dos.f" ac_config_files="$ac_config_files test/progfree.f.try.f.ref" ac_config_files="$ac_config_files test/progfree.f" ac_config_files="$ac_config_files test/progfree1.f.try.f.ref" ac_config_files="$ac_config_files test/progfree1.f" ac_config_files="$ac_config_files test/progfreefixed.f.try.f.ref" ac_config_files="$ac_config_files test/progfreefixed.f" ac_config_files="$ac_config_files test/esope.f.try.f.ref" ac_config_files="$ac_config_files test/esope.f" ac_config_files="$ac_config_files test/progrelabelfree.f" ac_config_files="$ac_config_files test/progrelabelfree.f.try.f.ref" ac_config_files="$ac_config_files test/progfixedrelabelfixed.f" ac_config_files="$ac_config_files test/progfixedrelabelfixed.f.try.f.ref" ac_config_files="$ac_config_files test/progfixedshufflefixed.f" ac_config_files="$ac_config_files test/progfixedshufflefixed.f.try.f.ref" ac_config_files="$ac_config_files test/progshufflefree.f" ac_config_files="$ac_config_files test/progshufflefree.f.try.f.ref" ac_config_files="$ac_config_files test/changelog.ref" ac_config_files="$ac_config_files test/emacs_findent.ref" ac_config_files="$ac_config_files test/emacs_help.ref" ac_config_files="$ac_config_files test/gedit_external.ref" ac_config_files="$ac_config_files test/gedit_help.ref" ac_config_files="$ac_config_files test/gedit_plugin.ref" ac_config_files="$ac_config_files test/gedit_plugin_py.ref" ac_config_files="$ac_config_files test/help.ref" ac_config_files="$ac_config_files test/makefdeps.ref" ac_config_files="$ac_config_files test/manpage.ref" ac_config_files="$ac_config_files test/readme.ref" ac_config_files="$ac_config_files test/vim_findent.ref" ac_config_files="$ac_config_files test/vim_fortran.ref" ac_config_files="$ac_config_files test/vim_help.ref" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CXX+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 printf "%s\n" "$CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CXX+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 printf "%s\n" "$ac_ct_CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 printf %s "checking whether the compiler supports GNU C++... " >&6; } if test ${ac_cv_cxx_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+y} ac_save_CXXFLAGS=$CXXFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 printf %s "checking whether $CXX accepts -g... " >&6; } if test ${ac_cv_prog_cxx_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes else $as_nop CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : else $as_nop ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } if test $ac_test_CXXFLAGS; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_prog_cxx_stdcxx=no if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 printf %s "checking for $CXX option to enable C++11 features... " >&6; } if test ${ac_cv_prog_cxx_cxx11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cxx_cxx11=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx11_program _ACEOF for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx11" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX fi if test "x$ac_cv_prog_cxx_cxx11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cxx_cxx11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx11" fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 ac_prog_cxx_stdcxx=cxx11 fi fi if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 printf %s "checking for $CXX option to enable C++98 features... " >&6; } if test ${ac_cv_prog_cxx_cxx98+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cxx_cxx98=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx98_program _ACEOF for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx98=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx98" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX fi if test "x$ac_cv_prog_cxx_cxx98" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cxx_cxx98" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx98" fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 ac_prog_cxx_stdcxx=cxx98 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CXX_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 else $as_nop ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in sed gsed do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 printf %s "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test ${ac_cv_prog_CPP+y} then : printf %s "(cached) " >&6 else $as_nop # Double quotes because $CC needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 printf "%s\n" "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac cross_compiling_build=no ac_build_tool_prefix= if test -n "$build" then : ac_build_tool_prefix="$build-" elif test -n "$build_alias" then : ac_build_tool_prefix="$build_alias-" fi ac_ext=c ac_cpp='$CPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' ac_compile='$CC_FOR_BUILD -c $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' ac_link='$CC_FOR_BUILD -o conftest$ac_build_exeext $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS_FOR_BUILD conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_build_c_compiler_gnu was_set_c_compiler_gnu=${ac_cv_c_compiler_gnu+y} if test ${was_set_c_compiler_gnu} then : saved_c_compiler_gnu=$ac_cv_c_compiler_gnu { ac_cv_c_compiler_gnu=; unset ac_cv_c_compiler_gnu;} fi ac_ext=c ac_cpp='$CPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' ac_compile='$CC_FOR_BUILD -c $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' ac_link='$CC_FOR_BUILD -o conftest$ac_build_exeext $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS_FOR_BUILD conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_build_c_compiler_gnu if test -n "$ac_build_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_build_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC_FOR_BUILD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC_FOR_BUILD"; then ac_cv_prog_CC_FOR_BUILD="$CC_FOR_BUILD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC_FOR_BUILD="${ac_build_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC_FOR_BUILD=$ac_cv_prog_CC_FOR_BUILD if test -n "$CC_FOR_BUILD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC_FOR_BUILD" >&5 printf "%s\n" "$CC_FOR_BUILD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC_FOR_BUILD"; then ac_ct_CC_FOR_BUILD=$CC_FOR_BUILD # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC_FOR_BUILD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC_FOR_BUILD"; then ac_cv_prog_ac_ct_CC_FOR_BUILD="$ac_ct_CC_FOR_BUILD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC_FOR_BUILD="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC_FOR_BUILD=$ac_cv_prog_ac_ct_CC_FOR_BUILD if test -n "$ac_ct_CC_FOR_BUILD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC_FOR_BUILD" >&5 printf "%s\n" "$ac_ct_CC_FOR_BUILD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC_FOR_BUILD" = x; then CC_FOR_BUILD="" else case $cross_compiling_build:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with build triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with build triplet" >&2;} ac_tool_warned=yes ;; esac CC_FOR_BUILD=$ac_ct_CC_FOR_BUILD fi else CC_FOR_BUILD="$ac_cv_prog_CC_FOR_BUILD" fi if test -z "$CC_FOR_BUILD"; then if test -n "$ac_build_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_build_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC_FOR_BUILD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC_FOR_BUILD"; then ac_cv_prog_CC_FOR_BUILD="$CC_FOR_BUILD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC_FOR_BUILD="${ac_build_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC_FOR_BUILD=$ac_cv_prog_CC_FOR_BUILD if test -n "$CC_FOR_BUILD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC_FOR_BUILD" >&5 printf "%s\n" "$CC_FOR_BUILD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC_FOR_BUILD"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC_FOR_BUILD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC_FOR_BUILD"; then ac_cv_prog_CC_FOR_BUILD="$CC_FOR_BUILD" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC_FOR_BUILD="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC_FOR_BUILD shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC_FOR_BUILD to just the basename; use the full file name. shift ac_cv_prog_CC_FOR_BUILD="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC_FOR_BUILD=$ac_cv_prog_CC_FOR_BUILD if test -n "$CC_FOR_BUILD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC_FOR_BUILD" >&5 printf "%s\n" "$CC_FOR_BUILD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC_FOR_BUILD"; then if test -n "$ac_build_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_build_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC_FOR_BUILD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC_FOR_BUILD"; then ac_cv_prog_CC_FOR_BUILD="$CC_FOR_BUILD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC_FOR_BUILD="$ac_build_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC_FOR_BUILD=$ac_cv_prog_CC_FOR_BUILD if test -n "$CC_FOR_BUILD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC_FOR_BUILD" >&5 printf "%s\n" "$CC_FOR_BUILD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC_FOR_BUILD" && break done fi if test -z "$CC_FOR_BUILD"; then ac_ct_CC_FOR_BUILD=$CC_FOR_BUILD for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC_FOR_BUILD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC_FOR_BUILD"; then ac_cv_prog_ac_ct_CC_FOR_BUILD="$ac_ct_CC_FOR_BUILD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC_FOR_BUILD="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC_FOR_BUILD=$ac_cv_prog_ac_ct_CC_FOR_BUILD if test -n "$ac_ct_CC_FOR_BUILD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC_FOR_BUILD" >&5 printf "%s\n" "$ac_ct_CC_FOR_BUILD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC_FOR_BUILD" && break done if test "x$ac_ct_CC_FOR_BUILD" = x; then CC_FOR_BUILD="" else case $cross_compiling_build:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with build triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with build triplet" >&2;} ac_tool_warned=yes ;; esac CC_FOR_BUILD=$ac_ct_CC_FOR_BUILD fi fi fi if test -z "$CC_FOR_BUILD"; then if test -n "$ac_build_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_build_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC_FOR_BUILD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC_FOR_BUILD"; then ac_cv_prog_CC_FOR_BUILD="$CC_FOR_BUILD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC_FOR_BUILD="${ac_build_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC_FOR_BUILD=$ac_cv_prog_CC_FOR_BUILD if test -n "$CC_FOR_BUILD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC_FOR_BUILD" >&5 printf "%s\n" "$CC_FOR_BUILD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC_FOR_BUILD"; then ac_ct_CC_FOR_BUILD=$CC_FOR_BUILD # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC_FOR_BUILD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC_FOR_BUILD"; then ac_cv_prog_ac_ct_CC_FOR_BUILD="$ac_ct_CC_FOR_BUILD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC_FOR_BUILD="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC_FOR_BUILD=$ac_cv_prog_ac_ct_CC_FOR_BUILD if test -n "$ac_ct_CC_FOR_BUILD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC_FOR_BUILD" >&5 printf "%s\n" "$ac_ct_CC_FOR_BUILD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC_FOR_BUILD" = x; then CC_FOR_BUILD="" else case $cross_compiling_build:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with build triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with build triplet" >&2;} ac_tool_warned=yes ;; esac CC_FOR_BUILD=$ac_ct_CC_FOR_BUILD fi else CC_FOR_BUILD="$ac_cv_prog_CC_FOR_BUILD" fi fi test -z "$CC_FOR_BUILD" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_build_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC_FOR_BUILD=yes else GCC_FOR_BUILD= fi ac_test_CFLAGS=${CFLAGS_FOR_BUILD+y} ac_save_CFLAGS=$CFLAGS_FOR_BUILD { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC_FOR_BUILD accepts -g" >&5 printf %s "checking whether $CC_FOR_BUILD accepts -g... " >&6; } if test ${ac_cv_build_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_build_prog_cc_g=no CFLAGS_FOR_BUILD="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_build_prog_cc_g=yes else $as_nop CFLAGS_FOR_BUILD="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS_FOR_BUILD="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_build_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_build_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_build_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_build_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build_prog_cc_g" >&5 printf "%s\n" "$ac_cv_build_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS_FOR_BUILD=$ac_save_CFLAGS elif test $ac_cv_build_prog_cc_g = yes; then if test "$GCC_FOR_BUILD" = yes; then CFLAGS_FOR_BUILD="-g -O2" else CFLAGS_FOR_BUILD="-g" fi else if test "$GCC_FOR_BUILD" = yes; then CFLAGS_FOR_BUILD="-O2" else CFLAGS_FOR_BUILD= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC_FOR_BUILD option to enable C11 features" >&5 printf %s "checking for $CC_FOR_BUILD option to enable C11 features... " >&6; } if test ${ac_cv_build_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_build_prog_cc_c11=no ac_save_CC=$CC_FOR_BUILD cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC_FOR_BUILD="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_build_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_build_objext conftest.beam test "x$ac_cv_build_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC_FOR_BUILD=$ac_save_CC fi if test "x$ac_cv_build_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_build_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_build_prog_cc_c11" >&6; } CC_FOR_BUILD="$CC_FOR_BUILD $ac_cv_build_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_build_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC_FOR_BUILD option to enable C99 features" >&5 printf %s "checking for $CC_FOR_BUILD option to enable C99 features... " >&6; } if test ${ac_cv_build_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_build_prog_cc_c99=no ac_save_CC=$CC_FOR_BUILD cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC_FOR_BUILD="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_build_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_build_objext conftest.beam test "x$ac_cv_build_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC_FOR_BUILD=$ac_save_CC fi if test "x$ac_cv_build_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_build_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_build_prog_cc_c99" >&6; } CC_FOR_BUILD="$CC_FOR_BUILD $ac_cv_build_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_build_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC_FOR_BUILD option to enable C89 features" >&5 printf %s "checking for $CC_FOR_BUILD option to enable C89 features... " >&6; } if test ${ac_cv_build_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_build_prog_cc_c89=no ac_save_CC=$CC_FOR_BUILD cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC_FOR_BUILD="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_build_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_build_objext conftest.beam test "x$ac_cv_build_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC_FOR_BUILD=$ac_save_CC fi if test "x$ac_cv_build_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_build_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_build_prog_cc_c89" >&6; } CC_FOR_BUILD="$CC_FOR_BUILD $ac_cv_build_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_build_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=c ac_cpp='$CPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' ac_compile='$CC_FOR_BUILD -c $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' ac_link='$CC_FOR_BUILD -o conftest$ac_build_exeext $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS_FOR_BUILD conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_build_c_compiler_gnu ac_ext=c ac_cpp='$CPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' ac_compile='$CC_FOR_BUILD -c $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' ac_link='$CC_FOR_BUILD -o conftest$ac_build_exeext $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS_FOR_BUILD conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_build_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC_FOR_BUILD understands -c and -o together" >&5 printf %s "checking whether $CC_FOR_BUILD understands -c and -o together... " >&6; } if test ${am_cv_build_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_build_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC_FOR_BUILD -c conftest.$ac_ext -o conftest2.$ac_build_objext" >&5 ($CC_FOR_BUILD -c conftest.$ac_ext -o conftest2.$ac_build_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_build_objext; then : OK else am_cv_build_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_build_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_build_prog_cc_c_o" >&6; } if test "$am_cv_build_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC_FOR_BUILD="$am_aux_dir/compile $CC_FOR_BUILD" fi ac_ext=c ac_cpp='$CPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' ac_compile='$CC_FOR_BUILD -c $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' ac_link='$CC_FOR_BUILD -o conftest$ac_build_exeext $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS_FOR_BUILD conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_build_c_compiler_gnu depcc="$CC_FOR_BUILD" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_build_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_build_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${BUILD_OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${BUILD_OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_build_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_build_CC_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_build_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_build_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_build_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_build_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi if test ${was_set_c_compiler_gnu} then : ac_cv_c_compiler_gnu=$saved_c_compiler_gnu fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_build_exeext+y} && test "$ac_cv_build_exeext" != no; then :; else ac_cv_build_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_build_exeext" = no && ac_cv_build_exeext= else $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_build_exeext=$ac_cv_build_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_build_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_build_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_build_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build_exeext" >&5 printf "%s\n" "$ac_cv_build_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_build_exeext ac_build_exeext=$BUILD_EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling_build" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_build_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling_build=no else if test "$cross_compiling_build" = maybe; then cross_compiling_build=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--build'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling_build" >&5 printf "%s\n" "$cross_compiling_build" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_build_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_build_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_build_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_build_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build_objext" >&5 printf "%s\n" "$ac_cv_build_objext" >&6; } OBJEXT=$ac_cv_build_objext ac_build_objext=$BUILD_OBJEXT ac_ext=c ac_cpp='$CPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' ac_compile='$CC_FOR_BUILD -c $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' ac_link='$CC_FOR_BUILD -o conftest$ac_build_exeext $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS_FOR_BUILD conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_build_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 printf %s "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP_FOR_BUILD" && test -d "$CPP_FOR_BUILD"; then CPP_FOR_BUILD= fi if test -z "$CPP_FOR_BUILD"; then if test ${ac_cv_build_prog_CPP+y} then : printf %s "(cached) " >&6 else $as_nop # Double quotes because $CC needs to be expanded for CPP_FOR_BUILD in "$CC_FOR_BUILD -E" "$CC_FOR_BUILD -E -traditional-cpp" cpp /lib/cpp do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : break fi done ac_cv_build_prog_CPP=$CPP_FOR_BUILD fi CPP_FOR_BUILD=$ac_cv_build_prog_CPP else ac_cv_build_prog_CPP=$CPP_FOR_BUILD fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP_FOR_BUILD" >&5 printf "%s\n" "$CPP_FOR_BUILD" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP_FOR_BUILD\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' ac_compile='$CC_FOR_BUILD -c $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' ac_link='$CC_FOR_BUILD -o conftest$ac_build_exeext $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS_FOR_BUILD conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_build_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 printf %s "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if test ${ac_cv_prog_CXXCPP+y} then : printf %s "(cached) " >&6 else $as_nop # Double quotes because $CXX needs to be expanded for CXXCPP in "$CXX -E" cpp /lib/cpp do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 printf "%s\n" "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac cross_compiling_build=no ac_build_tool_prefix= if test -n "$build" then : ac_build_tool_prefix="$build-" elif test -n "$build_alias" then : ac_build_tool_prefix="$build_alias-" fi ac_ext=cpp ac_cpp='$CXXCPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' ac_compile='$CXX_FOR_BUILD -c $CXXFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' ac_link='$CXX_FOR_BUILD -o conftest$ac_exeext $CXXFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' ac_compile='$CXX_FOR_BUILD -c $CXXFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' ac_link='$CXX_FOR_BUILD -o conftest$ac_exeext $CXXFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX_FOR_BUILD"; then if test -n "$CCC"; then CXX_FOR_BUILD=$CCC else if test -n "$ac_build_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_build_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CXX_FOR_BUILD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CXX_FOR_BUILD"; then ac_cv_prog_CXX_FOR_BUILD="$CXX_FOR_BUILD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CXX_FOR_BUILD="$ac_build_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX_FOR_BUILD=$ac_cv_prog_CXX_FOR_BUILD if test -n "$CXX_FOR_BUILD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX_FOR_BUILD" >&5 printf "%s\n" "$CXX_FOR_BUILD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CXX_FOR_BUILD" && break done fi if test -z "$CXX_FOR_BUILD"; then ac_ct_CXX_FOR_BUILD=$CXX_FOR_BUILD for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CXX_FOR_BUILD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CXX_FOR_BUILD"; then ac_cv_prog_ac_ct_CXX_FOR_BUILD="$ac_ct_CXX_FOR_BUILD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX_FOR_BUILD="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX_FOR_BUILD=$ac_cv_prog_ac_ct_CXX_FOR_BUILD if test -n "$ac_ct_CXX_FOR_BUILD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX_FOR_BUILD" >&5 printf "%s\n" "$ac_ct_CXX_FOR_BUILD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CXX_FOR_BUILD" && break done if test "x$ac_ct_CXX_FOR_BUILD" = x; then CXX_FOR_BUILD="g++" else case $cross_compiling_build:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with build triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with build triplet" >&2;} ac_tool_warned=yes ;; esac CXX_FOR_BUILD=$ac_ct_CXX_FOR_BUILD fi fi fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 printf %s "checking whether the compiler supports GNU C++... " >&6; } if test ${ac_cv_cxx_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test $ac_compiler_gnu = yes; then GXX_FOR_BUILD=yes else GXX_FOR_BUILD= fi ac_test_CXXFLAGS=${CXXFLAGS_FOR_BUILD+y} ac_save_CXXFLAGS=$CXXFLAGS_FOR_BUILD { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX_FOR_BUILD accepts -g" >&5 printf %s "checking whether $CXX_FOR_BUILD accepts -g... " >&6; } if test ${ac_cv_build_prog_cxx_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_build_prog_cxx_g=no CXXFLAGS_FOR_BUILD="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_build_prog_cxx_g=yes else $as_nop CXXFLAGS_FOR_BUILD="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : else $as_nop ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS_FOR_BUILD="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_build_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build_prog_cxx_g" >&5 printf "%s\n" "$ac_cv_build_prog_cxx_g" >&6; } if test $ac_test_CXXFLAGS; then CXXFLAGS_FOR_BUILD=$ac_save_CXXFLAGS elif test $ac_cv_build_prog_cxx_g = yes; then if test "$GXX_FOR_BUILD" = yes; then CXXFLAGS_FOR_BUILD="-g -O2" else CXXFLAGS_FOR_BUILD="-g" fi else if test "$GXX_FOR_BUILD" = yes; then CXXFLAGS_FOR_BUILD="-O2" else CXXFLAGS_FOR_BUILD= fi fi ac_prog_cxx_stdcxx=no if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX_FOR_BUILD option to enable C++11 features" >&5 printf %s "checking for $CXX_FOR_BUILD option to enable C++11 features... " >&6; } if test ${ac_cv_prog_cxx_cxx11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cxx_cxx11=no ac_save_CXX=$CXX_FOR_BUILD cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx11_program _ACEOF for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA do CXX_FOR_BUILD="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx11" != "xno" && break done rm -f conftest.$ac_ext CXX_FOR_BUILD=$ac_save_CXX fi if test "x$ac_cv_prog_cxx_cxx11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cxx_cxx11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } CXX_FOR_BUILD="$CXX_FOR_BUILD $ac_cv_prog_cxx_cxx11" fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 ac_prog_cxx_stdcxx=cxx11 fi fi if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX_FOR_BUILD option to enable C++98 features" >&5 printf %s "checking for $CXX_FOR_BUILD option to enable C++98 features... " >&6; } if test ${ac_cv_prog_cxx_cxx98+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cxx_cxx98=no ac_save_CXX=$CXX_FOR_BUILD cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx98_program _ACEOF for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA do CXX_FOR_BUILD="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx98=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx98" != "xno" && break done rm -f conftest.$ac_ext CXX_FOR_BUILD=$ac_save_CXX fi if test "x$ac_cv_prog_cxx_cxx98" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cxx_cxx98" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } CXX_FOR_BUILD="$CXX_FOR_BUILD $ac_cv_prog_cxx_cxx98" fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 ac_prog_cxx_stdcxx=cxx98 fi fi ac_ext=cpp ac_cpp='$CXXCPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' ac_compile='$CXX_FOR_BUILD -c $CXXFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' ac_link='$CXX_FOR_BUILD -o conftest$ac_exeext $CXXFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu depcc="$CXX_FOR_BUILD" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_build_CXX_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_build_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_build_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_build_CXX_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_build_CXX_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_build_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_build_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_build_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=cpp ac_cpp='$CXXCPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' ac_compile='$CXX_FOR_BUILD -c $CXXFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' ac_link='$CXX_FOR_BUILD -o conftest$ac_exeext $CXXFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 printf %s "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP_FOR_BUILD"; then if test ${ac_cv_build_prog_CXXCPP+y} then : printf %s "(cached) " >&6 else $as_nop # Double quotes because $CXX needs to be expanded for CXXCPP_FOR_BUILD in "$CXX_FOR_BUILD -E" cpp /lib/cpp do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : break fi done ac_cv_build_prog_CXXCPP=$CXXCPP_FOR_BUILD fi CXXCPP_FOR_BUILD=$ac_cv_build_prog_CXXCPP else ac_cv_build_prog_CXXCPP=$CXXCPP_FOR_BUILD fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXXCPP_FOR_BUILD" >&5 printf "%s\n" "$CXXCPP_FOR_BUILD" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP_FOR_BUILD\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=cpp ac_cpp='$CXXCPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' ac_compile='$CXX_FOR_BUILD -c $CXXFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' ac_link='$CXX_FOR_BUILD -o conftest$ac_exeext $CXXFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cross_compiling_build=no ac_build_tool_prefix= if test -n "$build" then : ac_build_tool_prefix="$build-" elif test -n "$build_alias" then : ac_build_tool_prefix="$build_alias-" fi ac_ext=c ac_cpp='$CPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' ac_compile='$CC_FOR_BUILD -c $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' ac_link='$CC_FOR_BUILD -o conftest$ac_build_exeext $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS_FOR_BUILD conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_build_c_compiler_gnu was_set_c_compiler_gnu=${ac_cv_c_compiler_gnu+y} if test ${was_set_c_compiler_gnu} then : saved_c_compiler_gnu=$ac_cv_c_compiler_gnu { ac_cv_c_compiler_gnu=; unset ac_cv_c_compiler_gnu;} fi ac_ext=c ac_cpp='$CPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' ac_compile='$CC_FOR_BUILD -c $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' ac_link='$CC_FOR_BUILD -o conftest$ac_build_exeext $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS_FOR_BUILD conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_build_c_compiler_gnu if test -n "$ac_build_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_build_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC_FOR_BUILD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC_FOR_BUILD"; then ac_cv_prog_CC_FOR_BUILD="$CC_FOR_BUILD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC_FOR_BUILD="${ac_build_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC_FOR_BUILD=$ac_cv_prog_CC_FOR_BUILD if test -n "$CC_FOR_BUILD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC_FOR_BUILD" >&5 printf "%s\n" "$CC_FOR_BUILD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC_FOR_BUILD"; then ac_ct_CC_FOR_BUILD=$CC_FOR_BUILD # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC_FOR_BUILD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC_FOR_BUILD"; then ac_cv_prog_ac_ct_CC_FOR_BUILD="$ac_ct_CC_FOR_BUILD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC_FOR_BUILD="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC_FOR_BUILD=$ac_cv_prog_ac_ct_CC_FOR_BUILD if test -n "$ac_ct_CC_FOR_BUILD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC_FOR_BUILD" >&5 printf "%s\n" "$ac_ct_CC_FOR_BUILD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC_FOR_BUILD" = x; then CC_FOR_BUILD="" else case $cross_compiling_build:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with build triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with build triplet" >&2;} ac_tool_warned=yes ;; esac CC_FOR_BUILD=$ac_ct_CC_FOR_BUILD fi else CC_FOR_BUILD="$ac_cv_prog_CC_FOR_BUILD" fi if test -z "$CC_FOR_BUILD"; then if test -n "$ac_build_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_build_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC_FOR_BUILD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC_FOR_BUILD"; then ac_cv_prog_CC_FOR_BUILD="$CC_FOR_BUILD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC_FOR_BUILD="${ac_build_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC_FOR_BUILD=$ac_cv_prog_CC_FOR_BUILD if test -n "$CC_FOR_BUILD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC_FOR_BUILD" >&5 printf "%s\n" "$CC_FOR_BUILD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC_FOR_BUILD"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC_FOR_BUILD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC_FOR_BUILD"; then ac_cv_prog_CC_FOR_BUILD="$CC_FOR_BUILD" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC_FOR_BUILD="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC_FOR_BUILD shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC_FOR_BUILD to just the basename; use the full file name. shift ac_cv_prog_CC_FOR_BUILD="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC_FOR_BUILD=$ac_cv_prog_CC_FOR_BUILD if test -n "$CC_FOR_BUILD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC_FOR_BUILD" >&5 printf "%s\n" "$CC_FOR_BUILD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC_FOR_BUILD"; then if test -n "$ac_build_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_build_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC_FOR_BUILD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC_FOR_BUILD"; then ac_cv_prog_CC_FOR_BUILD="$CC_FOR_BUILD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC_FOR_BUILD="$ac_build_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC_FOR_BUILD=$ac_cv_prog_CC_FOR_BUILD if test -n "$CC_FOR_BUILD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC_FOR_BUILD" >&5 printf "%s\n" "$CC_FOR_BUILD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC_FOR_BUILD" && break done fi if test -z "$CC_FOR_BUILD"; then ac_ct_CC_FOR_BUILD=$CC_FOR_BUILD for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC_FOR_BUILD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC_FOR_BUILD"; then ac_cv_prog_ac_ct_CC_FOR_BUILD="$ac_ct_CC_FOR_BUILD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC_FOR_BUILD="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC_FOR_BUILD=$ac_cv_prog_ac_ct_CC_FOR_BUILD if test -n "$ac_ct_CC_FOR_BUILD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC_FOR_BUILD" >&5 printf "%s\n" "$ac_ct_CC_FOR_BUILD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC_FOR_BUILD" && break done if test "x$ac_ct_CC_FOR_BUILD" = x; then CC_FOR_BUILD="" else case $cross_compiling_build:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with build triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with build triplet" >&2;} ac_tool_warned=yes ;; esac CC_FOR_BUILD=$ac_ct_CC_FOR_BUILD fi fi fi if test -z "$CC_FOR_BUILD"; then if test -n "$ac_build_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_build_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC_FOR_BUILD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC_FOR_BUILD"; then ac_cv_prog_CC_FOR_BUILD="$CC_FOR_BUILD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC_FOR_BUILD="${ac_build_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC_FOR_BUILD=$ac_cv_prog_CC_FOR_BUILD if test -n "$CC_FOR_BUILD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC_FOR_BUILD" >&5 printf "%s\n" "$CC_FOR_BUILD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC_FOR_BUILD"; then ac_ct_CC_FOR_BUILD=$CC_FOR_BUILD # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC_FOR_BUILD+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC_FOR_BUILD"; then ac_cv_prog_ac_ct_CC_FOR_BUILD="$ac_ct_CC_FOR_BUILD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC_FOR_BUILD="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC_FOR_BUILD=$ac_cv_prog_ac_ct_CC_FOR_BUILD if test -n "$ac_ct_CC_FOR_BUILD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC_FOR_BUILD" >&5 printf "%s\n" "$ac_ct_CC_FOR_BUILD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC_FOR_BUILD" = x; then CC_FOR_BUILD="" else case $cross_compiling_build:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with build triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with build triplet" >&2;} ac_tool_warned=yes ;; esac CC_FOR_BUILD=$ac_ct_CC_FOR_BUILD fi else CC_FOR_BUILD="$ac_cv_prog_CC_FOR_BUILD" fi fi test -z "$CC_FOR_BUILD" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_build_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC_FOR_BUILD=yes else GCC_FOR_BUILD= fi ac_test_CFLAGS=${CFLAGS_FOR_BUILD+y} ac_save_CFLAGS=$CFLAGS_FOR_BUILD { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC_FOR_BUILD accepts -g" >&5 printf %s "checking whether $CC_FOR_BUILD accepts -g... " >&6; } if test ${ac_cv_build_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_build_prog_cc_g=no CFLAGS_FOR_BUILD="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_build_prog_cc_g=yes else $as_nop CFLAGS_FOR_BUILD="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS_FOR_BUILD="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_build_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_build_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_build_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_build_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build_prog_cc_g" >&5 printf "%s\n" "$ac_cv_build_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS_FOR_BUILD=$ac_save_CFLAGS elif test $ac_cv_build_prog_cc_g = yes; then if test "$GCC_FOR_BUILD" = yes; then CFLAGS_FOR_BUILD="-g -O2" else CFLAGS_FOR_BUILD="-g" fi else if test "$GCC_FOR_BUILD" = yes; then CFLAGS_FOR_BUILD="-O2" else CFLAGS_FOR_BUILD= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC_FOR_BUILD option to enable C11 features" >&5 printf %s "checking for $CC_FOR_BUILD option to enable C11 features... " >&6; } if test ${ac_cv_build_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_build_prog_cc_c11=no ac_save_CC=$CC_FOR_BUILD cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC_FOR_BUILD="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_build_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_build_objext conftest.beam test "x$ac_cv_build_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC_FOR_BUILD=$ac_save_CC fi if test "x$ac_cv_build_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_build_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_build_prog_cc_c11" >&6; } CC_FOR_BUILD="$CC_FOR_BUILD $ac_cv_build_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_build_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC_FOR_BUILD option to enable C99 features" >&5 printf %s "checking for $CC_FOR_BUILD option to enable C99 features... " >&6; } if test ${ac_cv_build_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_build_prog_cc_c99=no ac_save_CC=$CC_FOR_BUILD cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC_FOR_BUILD="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_build_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_build_objext conftest.beam test "x$ac_cv_build_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC_FOR_BUILD=$ac_save_CC fi if test "x$ac_cv_build_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_build_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_build_prog_cc_c99" >&6; } CC_FOR_BUILD="$CC_FOR_BUILD $ac_cv_build_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_build_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC_FOR_BUILD option to enable C89 features" >&5 printf %s "checking for $CC_FOR_BUILD option to enable C89 features... " >&6; } if test ${ac_cv_build_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_build_prog_cc_c89=no ac_save_CC=$CC_FOR_BUILD cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC_FOR_BUILD="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_build_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_build_objext conftest.beam test "x$ac_cv_build_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC_FOR_BUILD=$ac_save_CC fi if test "x$ac_cv_build_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_build_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_build_prog_cc_c89" >&6; } CC_FOR_BUILD="$CC_FOR_BUILD $ac_cv_build_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_build_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=c ac_cpp='$CPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' ac_compile='$CC_FOR_BUILD -c $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' ac_link='$CC_FOR_BUILD -o conftest$ac_build_exeext $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS_FOR_BUILD conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_build_c_compiler_gnu ac_ext=c ac_cpp='$CPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' ac_compile='$CC_FOR_BUILD -c $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' ac_link='$CC_FOR_BUILD -o conftest$ac_build_exeext $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS_FOR_BUILD conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_build_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC_FOR_BUILD understands -c and -o together" >&5 printf %s "checking whether $CC_FOR_BUILD understands -c and -o together... " >&6; } if test ${am_cv_build_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_build_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC_FOR_BUILD -c conftest.$ac_ext -o conftest2.$ac_build_objext" >&5 ($CC_FOR_BUILD -c conftest.$ac_ext -o conftest2.$ac_build_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_build_objext; then : OK else am_cv_build_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_build_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_build_prog_cc_c_o" >&6; } if test "$am_cv_build_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC_FOR_BUILD="$am_aux_dir/compile $CC_FOR_BUILD" fi ac_ext=c ac_cpp='$CPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' ac_compile='$CC_FOR_BUILD -c $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' ac_link='$CC_FOR_BUILD -o conftest$ac_build_exeext $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS_FOR_BUILD conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_build_c_compiler_gnu depcc="$CC_FOR_BUILD" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_build_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_build_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${BUILD_OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${BUILD_OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_build_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_build_CC_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_build_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_build_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_build_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_build_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi if test ${was_set_c_compiler_gnu} then : ac_cv_c_compiler_gnu=$saved_c_compiler_gnu fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_build_exeext+y} && test "$ac_cv_build_exeext" != no; then :; else ac_cv_build_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_build_exeext" = no && ac_cv_build_exeext= else $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_build_exeext=$ac_cv_build_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_build_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_build_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_build_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build_exeext" >&5 printf "%s\n" "$ac_cv_build_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_build_exeext ac_build_exeext=$BUILD_EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling_build" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_build_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling_build=no else if test "$cross_compiling_build" = maybe; then cross_compiling_build=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--build'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling_build" >&5 printf "%s\n" "$cross_compiling_build" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_build_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_build_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_build_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_build_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build_objext" >&5 printf "%s\n" "$ac_cv_build_objext" >&6; } OBJEXT=$ac_cv_build_objext ac_build_objext=$BUILD_OBJEXT ac_ext=c ac_cpp='$CPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' ac_compile='$CC_FOR_BUILD -c $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' ac_link='$CC_FOR_BUILD -o conftest$ac_build_exeext $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS_FOR_BUILD conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_build_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 printf %s "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP_FOR_BUILD" && test -d "$CPP_FOR_BUILD"; then CPP_FOR_BUILD= fi if test -z "$CPP_FOR_BUILD"; then if test ${ac_cv_build_prog_CPP+y} then : printf %s "(cached) " >&6 else $as_nop # Double quotes because $CC needs to be expanded for CPP_FOR_BUILD in "$CC_FOR_BUILD -E" "$CC_FOR_BUILD -E -traditional-cpp" cpp /lib/cpp do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : break fi done ac_cv_build_prog_CPP=$CPP_FOR_BUILD fi CPP_FOR_BUILD=$ac_cv_build_prog_CPP else ac_cv_build_prog_CPP=$CPP_FOR_BUILD fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP_FOR_BUILD" >&5 printf "%s\n" "$CPP_FOR_BUILD" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else $as_nop # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else $as_nop # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP_FOR_BUILD\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP_FOR_BUILD $CPPFLAGS_FOR_BUILD' ac_compile='$CC_FOR_BUILD -c $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD conftest.$ac_ext >&5' ac_link='$CC_FOR_BUILD -o conftest$ac_build_exeext $CFLAGS_FOR_BUILD $CPPFLAGS_FOR_BUILD $LDFLAGS_FOR_BUILD conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_build_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_header= ac_cache= for ac_item in $ac_header_cxx_list do if test $ac_cache; then ac_fn_cxx_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi # Autoupdate added the next two lines to ensure that your configure # script's behavior did not change. They are probably safe to remove. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 else $as_nop if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in egrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" for ac_header in iostream string deque map algorithm sstream iomanip set typeinfo utility do : as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_cxx_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes" then : cat >>confdefs.h <<_ACEOF #define `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else $as_nop as_fn_error $? "Exiting" "$LINENO" 5 fi done for ac_header in assert.h errno.h getopt.h inttypes.h stdio.h stdlib.h string.h unistd.h do : as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_cxx_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes" then : cat >>confdefs.h <<_ACEOF #define `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else $as_nop as_fn_error $? "Exiting" "$LINENO" 5 fi done ac_config_files="$ac_config_files Makefile src/Makefile scripts/Makefile test/Makefile vim/Makefile gedit/Makefile emacs/Makefile doc/Makefile deps/Makefile doc/design/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MAKESELFREP_TRUE}" && test -z "${MAKESELFREP_FALSE}"; then as_fn_error $? "conditional \"MAKESELFREP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USEESOPE_TRUE}" && test -z "${USEESOPE_FALSE}"; then as_fn_error $? "conditional \"USEESOPE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USEBISON_TRUE}" && test -z "${USEBISON_FALSE}"; then as_fn_error $? "conditional \"USEBISON\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USEFLEX_TRUE}" && test -z "${USEFLEX_FALSE}"; then as_fn_error $? "conditional \"USEFLEX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CROSSCOMPILE_TRUE}" && test -z "${CROSSCOMPILE_FALSE}"; then as_fn_error $? "conditional \"CROSSCOMPILE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by findent $as_me 4.3.2, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ findent config.status 4.3.2 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "test/prelude") CONFIG_FILES="$CONFIG_FILES test/prelude" ;; "test/postlude") CONFIG_FILES="$CONFIG_FILES test/postlude" ;; "test/test-compile.sh") CONFIG_FILES="$CONFIG_FILES test/test-compile.sh" ;; "test/doit") CONFIG_FILES="$CONFIG_FILES test/doit" ;; "test/init.sh") CONFIG_FILES="$CONFIG_FILES test/init.sh" ;; "test/progfixed-dos.f.try.f.ref") CONFIG_FILES="$CONFIG_FILES test/progfixed-dos.f.try.f.ref" ;; "test/progfixed-dos.f") CONFIG_FILES="$CONFIG_FILES test/progfixed-dos.f" ;; "test/progfixed.f.try.f.ref") CONFIG_FILES="$CONFIG_FILES test/progfixed.f.try.f.ref" ;; "test/progfixed.f") CONFIG_FILES="$CONFIG_FILES test/progfixed.f" ;; "test/progfixed1.f.try.f.ref") CONFIG_FILES="$CONFIG_FILES test/progfixed1.f.try.f.ref" ;; "test/progfixed1.f") CONFIG_FILES="$CONFIG_FILES test/progfixed1.f" ;; "test/progfixedfree-dos.f.try.f.ref") CONFIG_FILES="$CONFIG_FILES test/progfixedfree-dos.f.try.f.ref" ;; "test/progfixedfree-dos.f") CONFIG_FILES="$CONFIG_FILES test/progfixedfree-dos.f" ;; "test/progfixedfree.f.try.f.ref") CONFIG_FILES="$CONFIG_FILES test/progfixedfree.f.try.f.ref" ;; "test/progfixedfree.f") CONFIG_FILES="$CONFIG_FILES test/progfixedfree.f" ;; "test/progfree-dos.f.try.f.ref") CONFIG_FILES="$CONFIG_FILES test/progfree-dos.f.try.f.ref" ;; "test/progfree-dos.f") CONFIG_FILES="$CONFIG_FILES test/progfree-dos.f" ;; "test/progfree.f.try.f.ref") CONFIG_FILES="$CONFIG_FILES test/progfree.f.try.f.ref" ;; "test/progfree.f") CONFIG_FILES="$CONFIG_FILES test/progfree.f" ;; "test/progfree1.f.try.f.ref") CONFIG_FILES="$CONFIG_FILES test/progfree1.f.try.f.ref" ;; "test/progfree1.f") CONFIG_FILES="$CONFIG_FILES test/progfree1.f" ;; "test/progfreefixed.f.try.f.ref") CONFIG_FILES="$CONFIG_FILES test/progfreefixed.f.try.f.ref" ;; "test/progfreefixed.f") CONFIG_FILES="$CONFIG_FILES test/progfreefixed.f" ;; "test/esope.f.try.f.ref") CONFIG_FILES="$CONFIG_FILES test/esope.f.try.f.ref" ;; "test/esope.f") CONFIG_FILES="$CONFIG_FILES test/esope.f" ;; "test/progrelabelfree.f") CONFIG_FILES="$CONFIG_FILES test/progrelabelfree.f" ;; "test/progrelabelfree.f.try.f.ref") CONFIG_FILES="$CONFIG_FILES test/progrelabelfree.f.try.f.ref" ;; "test/progfixedrelabelfixed.f") CONFIG_FILES="$CONFIG_FILES test/progfixedrelabelfixed.f" ;; "test/progfixedrelabelfixed.f.try.f.ref") CONFIG_FILES="$CONFIG_FILES test/progfixedrelabelfixed.f.try.f.ref" ;; "test/progfixedshufflefixed.f") CONFIG_FILES="$CONFIG_FILES test/progfixedshufflefixed.f" ;; "test/progfixedshufflefixed.f.try.f.ref") CONFIG_FILES="$CONFIG_FILES test/progfixedshufflefixed.f.try.f.ref" ;; "test/progshufflefree.f") CONFIG_FILES="$CONFIG_FILES test/progshufflefree.f" ;; "test/progshufflefree.f.try.f.ref") CONFIG_FILES="$CONFIG_FILES test/progshufflefree.f.try.f.ref" ;; "test/changelog.ref") CONFIG_FILES="$CONFIG_FILES test/changelog.ref" ;; "test/emacs_findent.ref") CONFIG_FILES="$CONFIG_FILES test/emacs_findent.ref" ;; "test/emacs_help.ref") CONFIG_FILES="$CONFIG_FILES test/emacs_help.ref" ;; "test/gedit_external.ref") CONFIG_FILES="$CONFIG_FILES test/gedit_external.ref" ;; "test/gedit_help.ref") CONFIG_FILES="$CONFIG_FILES test/gedit_help.ref" ;; "test/gedit_plugin.ref") CONFIG_FILES="$CONFIG_FILES test/gedit_plugin.ref" ;; "test/gedit_plugin_py.ref") CONFIG_FILES="$CONFIG_FILES test/gedit_plugin_py.ref" ;; "test/help.ref") CONFIG_FILES="$CONFIG_FILES test/help.ref" ;; "test/makefdeps.ref") CONFIG_FILES="$CONFIG_FILES test/makefdeps.ref" ;; "test/manpage.ref") CONFIG_FILES="$CONFIG_FILES test/manpage.ref" ;; "test/readme.ref") CONFIG_FILES="$CONFIG_FILES test/readme.ref" ;; "test/vim_findent.ref") CONFIG_FILES="$CONFIG_FILES test/vim_findent.ref" ;; "test/vim_fortran.ref") CONFIG_FILES="$CONFIG_FILES test/vim_fortran.ref" ;; "test/vim_help.ref") CONFIG_FILES="$CONFIG_FILES test/vim_help.ref" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "scripts/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;; "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "vim/Makefile") CONFIG_FILES="$CONFIG_FILES vim/Makefile" ;; "gedit/Makefile") CONFIG_FILES="$CONFIG_FILES gedit/Makefile" ;; "emacs/Makefile") CONFIG_FILES="$CONFIG_FILES emacs/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "deps/Makefile") CONFIG_FILES="$CONFIG_FILES deps/Makefile" ;; "doc/design/Makefile") CONFIG_FILES="$CONFIG_FILES doc/design/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; "test/test-compile.sh":F) chmod +x test/test-compile.sh ;; "test/doit":F) chmod +x test/doit ;; "test/init.sh":F) chmod +x test/init.sh ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi findent-4.3.2/configure.ac0000644000000000000000000002320014566134066012373 0ustar00# -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_INIT([findent],[4.3.2],[wvermin@gmail.com]) AM_INIT_AUTOMAKE AM_MAINTAINER_MODE AC_CONFIG_SRCDIR([src/findent.cpp]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIR([m4]) # Following is for the --selfrep option. If possible we create a binary that # does not change when recompiled. # see https://reproducible-builds.org/ # First: check if SOURCE_DATE_EPOCH is already defined # if not: use the file 'bootdate' which should contain the output of 'date +%s' s="$SOURCE_DATE_EPOCH" if test "x$s" = x ; then AC_MSG_WARN([SOURCE_DATE_EPOCH is not defined]) if test -f "$srcdir/bootdate" ; then AC_MSG_NOTICE([Try to read SOURCE_DATE_EPOCH from file '$srcdir/bootdate']) s=`head -n1 "$srcdir/bootdate"` xd=`date -u -d "@$s" 2>/dev/null || date -u -r "$s" 2>/dev/null || echo "Invalid date format"` AC_MSG_NOTICE([Read SOURCE_DATE_EPOCH=$s, i.e: $xd ]) fi else xd=`date -u -d "@$s" 2>/dev/null || date -u -r "$s" 2>/dev/null || echo "Invalid date format"` AC_MSG_NOTICE([Given SOURCE_DATE_EPOCH=$s, i.e: $xd ]) fi # final checks on the validity of SOURCE_DATE_EPOCH # - must be an positive integer # - date must be within -20 years and +1 year from current date # if these are not fulfilled, use `date +%s` x=$(echo "$s" | tr -dc "[0-9]" ) good=no now=`date "+%s"` if test "x$x" != x ; then firstdate=$( expr "$now" - 631152000 ) lastdate=$( expr "$now" + 31536000 ) if test "$x" -gt "$firstdate" -a "$x" -lt "$lastdate" ; then good=yes fi fi if test x"$good" = xyes ; then SOURCE_DATE_EPOCH="$x" else SOURCE_DATE_EPOCH="$now" AC_MSG_WARN([SOURCE_DATE_EPOCH set from current date]) fi xd=`date -u -d "@$SOURCE_DATE_EPOCH" 2>/dev/null || date -u -r "$SOURCE_DATE_EPOCH" 2>/dev/null || echo "Invalid date format"` AC_MSG_NOTICE([Using SOURCE_DATE_EPOCH=$SOURCE_DATE_EPOCH, i.e: $xd ]) DATE_FMT="+%Y-%m-%d" DATE=`date -u -d "@$SOURCE_DATE_EPOCH" "$DATE_FMT" 2>/dev/null || date -u -r "$SOURCE_DATE_EPOCH" "$DATE_FMT" 2>/dev/null || date -u "$DATE_FMT"` AC_SUBST([DATE]) # Check if we can create a reproducible 'make dist'. # If yes: replace the original am__tar (Make's recipe to make a tarball) by # a recipe that creates a reproducible tarball tardir=conftestdir mkdir "$tardir" echo "foo" > $tardir/test AC_MSG_NOTICE([Checking the capabilities of the tar program...]) "${TAR-tar}" --format=posix --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime \ --owner=0 --group=0 --numeric-owner --mtime="@${SOURCE_DATE_EPOCH}" --sort=name -cf - "$tardir" > /dev/null if test $? -eq 0 ; then AC_MSG_NOTICE([The program tar is usable to create a reproducible tar ball.]) am__tar='$${TAR-tar} --format=posix --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime \ --owner=0 --group=0 --numeric-owner --mtime="'"@${SOURCE_DATE_EPOCH}"'" --sort=name -chf - "$$tardir"' else AC_MSG_WARN([The program tar is not usable to create a reproducible build.]) AC_MSG_WARN([If a reproducible build is desired, use environment variable 'TAR' to point to a pax-enabled tar,]) AC_MSG_WARN([or use the flag '--disable-selfrep'.]) fi rm -r "$tardir" AC_ARG_ENABLE(selfrep, [AS_HELP_STRING([--enable-selfrep],[Build with self replicating mode @<:@default=yes@:>@])],[],[enable_selfrep=yes]) AM_CONDITIONAL([MAKESELFREP],[test "x$enable_selfrep" = "xyes" ]) # --- end of selfrep code AC_SUBST([make_include], ["include"]) AC_ARG_WITH(esope, [AS_HELP_STRING([--with-esope],[Build with esope support @<:@default=no@:>@])],[],[with_esope=no]) AM_CONDITIONAL([USEESOPE],[test "x$with_esope" = "xyes"]) # test if bison available etc... AC_ARG_WITH(bison, [AS_HELP_STRING([--with-bison],[Use bison to create parser @<:@default=use-bison-if-available@:>@])],[],[with_bison=use-bison-if-available]) usebison="$with_bison" AS_IF( [test "x$with_bison" != "xno"], [ m4_include([m4/ax_prog_bison.m4]) ] ) AS_IF( [test "x$with_bison" = "xyes"], [AX_PROG_BISON([],[AC_MSG_ERROR([No valid bison found. Try --without-bison])])]) AS_IF( [test "x$with_bison" = "xuse-bison-if-available"], [AX_PROG_BISON(AC_MSG_NOTICE([Will use bison if necessary to create parser.]) [usebison="yes"], AC_MSG_NOTICE([No bison found. Will use pre-built parser.]) [usebison="no"])]) AM_CONDITIONAL([USEBISON],[test "x$usebison" = "xyes"]) # test if flex available etc... AC_ARG_VAR([LEX],[The 'Fast lexical analyser generator' to use]) AC_ARG_WITH(flex, [AS_HELP_STRING([--with-flex],[Use flex to create lexer @<:@default=use-flex-if-available@:>@])],[],[with_flex=use-flex-if-available]) useflex="$with_flex" AS_IF( [test "x$with_flex" != "xno"], [ m4_include([m4/ax_prog_flex.m4]) ] ) AS_IF( [test "x$with_flex" = "xyes"], [AX_PROG_FLEX([],[AC_MSG_ERROR([No valid flex found. Try --without-flex])])]) AS_IF( [test "x$with_flex" = "xuse-flex-if-available"], [AX_PROG_FLEX(AC_MSG_NOTICE([Will use flex if necessary to create lexer.]) [useflex="yes"], AC_MSG_NOTICE([No flex found. Will use pre-built lexer.]) [useflex="no"])]) AM_CONDITIONAL([USEFLEX],[test "x$useflex" = "xyes"]) AM_CONDITIONAL([CROSSCOMPILE],[test "x$cross_compiling" = "xyes"]) # test for working gfortran (only used in make check): AC_PROG_FC([gfortran]) AS_IF( [test "x$FC" = "xgfortran"], [AC_MSG_NOTICE([gfortran will be used to compile test sources in 'make check'])], [AC_MSG_NOTICE([No gfortran compiler found. 'make check' will not try to compile test sources])]) AC_CONFIG_FILES([test/prelude]) AC_CONFIG_FILES([test/postlude]) AC_CONFIG_FILES([test/test-compile.sh],[chmod +x test/test-compile.sh]) AC_CONFIG_FILES([test/doit],[chmod +x test/doit]) AC_CONFIG_FILES([test/init.sh],[chmod +x test/init.sh]) AC_CONFIG_FILES([test/progfixed-dos.f.try.f.ref]) AC_CONFIG_FILES([test/progfixed-dos.f]) AC_CONFIG_FILES([test/progfixed.f.try.f.ref]) AC_CONFIG_FILES([test/progfixed.f]) AC_CONFIG_FILES([test/progfixed1.f.try.f.ref]) AC_CONFIG_FILES([test/progfixed1.f]) AC_CONFIG_FILES([test/progfixedfree-dos.f.try.f.ref]) AC_CONFIG_FILES([test/progfixedfree-dos.f]) AC_CONFIG_FILES([test/progfixedfree.f.try.f.ref]) AC_CONFIG_FILES([test/progfixedfree.f]) AC_CONFIG_FILES([test/progfree-dos.f.try.f.ref]) AC_CONFIG_FILES([test/progfree-dos.f]) AC_CONFIG_FILES([test/progfree.f.try.f.ref]) AC_CONFIG_FILES([test/progfree.f]) AC_CONFIG_FILES([test/progfree1.f.try.f.ref]) AC_CONFIG_FILES([test/progfree1.f]) AC_CONFIG_FILES([test/progfreefixed.f.try.f.ref]) AC_CONFIG_FILES([test/progfreefixed.f]) AC_CONFIG_FILES([test/esope.f.try.f.ref]) AC_CONFIG_FILES([test/esope.f]) AC_CONFIG_FILES([test/progrelabelfree.f]) AC_CONFIG_FILES([test/progrelabelfree.f.try.f.ref]) AC_CONFIG_FILES([test/progfixedrelabelfixed.f]) AC_CONFIG_FILES([test/progfixedrelabelfixed.f.try.f.ref]) AC_CONFIG_FILES([test/progfixedshufflefixed.f]) AC_CONFIG_FILES([test/progfixedshufflefixed.f.try.f.ref]) AC_CONFIG_FILES([test/progshufflefree.f]) AC_CONFIG_FILES([test/progshufflefree.f.try.f.ref]) AC_CONFIG_FILES([test/changelog.ref]) AC_CONFIG_FILES([test/emacs_findent.ref]) AC_CONFIG_FILES([test/emacs_help.ref]) AC_CONFIG_FILES([test/gedit_external.ref]) AC_CONFIG_FILES([test/gedit_help.ref]) AC_CONFIG_FILES([test/gedit_plugin.ref]) AC_CONFIG_FILES([test/gedit_plugin_py.ref]) AC_CONFIG_FILES([test/help.ref]) AC_CONFIG_FILES([test/makefdeps.ref]) AC_CONFIG_FILES([test/manpage.ref]) AC_CONFIG_FILES([test/readme.ref]) AC_CONFIG_FILES([test/vim_findent.ref]) AC_CONFIG_FILES([test/vim_fortran.ref]) AC_CONFIG_FILES([test/vim_help.ref]) AC_PROG_CXX AC_PROG_AWK AC_PROG_SED AX_PROG_CXX_FOR_BUILD AX_PROG_CC_FOR_BUILD AC_LANG([C++]) AC_HEADER_STDC AC_CHECK_HEADERS([iostream string deque map algorithm sstream iomanip set typeinfo utility],[],AC_MSG_ERROR([Exiting])) AC_CHECK_HEADERS([assert.h errno.h getopt.h inttypes.h stdio.h stdlib.h string.h unistd.h],[],AC_MSG_ERROR([Exiting])) AC_CONFIG_FILES([Makefile src/Makefile scripts/Makefile test/Makefile vim/Makefile gedit/Makefile emacs/Makefile doc/Makefile deps/Makefile doc/design/Makefile]) AC_OUTPUT findent-4.3.2/debpostlude0000644000000000000000000000005014566134066012340 0ustar00# Note: this is a copy of debpostlude : findent-4.3.2/debprelude0000644000000000000000000000034614566134066012151 0ustar00# Note: this is a copy of debprelude rp() { # poor man's realpath cd "$1" pwd } export FINDENT=findent export WFINDENT=wfindent dir=debian/tests/`basename $0`.tmpdir rm -rf $dir mkdir -p $dir cd $dir # vim: filetype=sh findent-4.3.2/depcomp0000755000000000000000000005602014566134066011470 0ustar00#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: findent-4.3.2/deps/0000755000000000000000000000000014566134066011043 5ustar00findent-4.3.2/deps/Makefile.am0000644000000000000000000000002714566134066013076 0ustar00EXTRA_DIST = makefdeps findent-4.3.2/deps/Makefile.in0000644000000000000000000003015214566134066013111 0ustar00# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = deps ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/m4_ax_prog_cc_for_build.m4 \ $(top_srcdir)/m4/m4_ax_prog_cxx_for_build.m4 \ $(top_srcdir)/m4/ax_prog_bison.m4 \ $(top_srcdir)/m4/ax_prog_flex.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_OBJEXT = @BUILD_OBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CPP_FOR_BUILD = @CPP_FOR_BUILD@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXCPPFLAGS_FOR_BUILD = @CXXCPPFLAGS_FOR_BUILD@ CXXCPP_FOR_BUILD = @CXXCPP_FOR_BUILD@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@ CXX_FOR_BUILD = @CXX_FOR_BUILD@ CYGPATH_W = @CYGPATH_W@ DATE = @DATE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CC_FOR_BUILD = @ac_ct_CC_FOR_BUILD@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_CXX_FOR_BUILD = @ac_ct_CXX_FOR_BUILD@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ make_include = @make_include@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = makefdeps all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu deps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu deps/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: findent-4.3.2/deps/makefdeps0000755000000000000000000000240014566134066012724 0ustar00#!/bin/sh # - makefdeps - # Creates make-dependencies for fortran sources, based on # analysis by findent of (sub)modules that are needed or created and # include files. Include files are not further analyzed. # Dependencies will be like: # prog.o: sub1.o sub2.o # prog.o: file1.inc file2.inc # Example: # makefdeps *.f90 > deps usage() { echo "usage:" echo "$0 [-s objectsuffix] fortansources ..." echo "objectsuffix: default '.o'" echo "depending on your make system, '.lo' can be the correct one" exit 1 } FINDENTPROG=${FINDENT:-findent} O='.o' if [ "$1" = "-s" ] ; then O="$2" shift; shift fi while [ "$1" ] ; do j=${1%.*}$O $FINDENTPROG --deps < $1 | awk -v name="$j" '{ print $0, name}' shift done | awk '/^use /{use[$3] = use[$3] " " $2} /^mod |^sub /{ if (NF == 3) {module[$2] = $3}} /^inc |^cpp |^coc |^std / {include[$3] = include[$3] " " $2} END { for (k in use) { m = "" split(use[k],u) for (l in u) { m=m " " module[u[l]] } mm = m; gsub(" ","",mm) if (length(mm) != 0) { while (gsub(" "," ",m)){} sub("^ ","",m) print k ": " m } } for (k in include) { while(sub("^ ","",include[k])){} print k ": " include[k] } }' findent-4.3.2/doc/0000755000000000000000000000000014566134066010655 5ustar00findent-4.3.2/doc/Makefile.am0000644000000000000000000000322714566134066012715 0ustar00# -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. EXTRA_DIST = README SUBDIRS = design findent-4.3.2/doc/Makefile.in0000644000000000000000000004771314566134066012736 0ustar00# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/m4_ax_prog_cc_for_build.m4 \ $(top_srcdir)/m4/m4_ax_prog_cxx_for_build.m4 \ $(top_srcdir)/m4/ax_prog_bison.m4 \ $(top_srcdir)/m4/ax_prog_flex.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_OBJEXT = @BUILD_OBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CPP_FOR_BUILD = @CPP_FOR_BUILD@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXCPPFLAGS_FOR_BUILD = @CXXCPPFLAGS_FOR_BUILD@ CXXCPP_FOR_BUILD = @CXXCPP_FOR_BUILD@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@ CXX_FOR_BUILD = @CXX_FOR_BUILD@ CYGPATH_W = @CYGPATH_W@ DATE = @DATE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CC_FOR_BUILD = @ac_ct_CC_FOR_BUILD@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_CXX_FOR_BUILD = @ac_ct_CXX_FOR_BUILD@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ make_include = @make_include@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. EXTRA_DIST = README SUBDIRS = design all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic cscopelist-am ctags ctags-am \ distclean distclean-generic distclean-tags distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: findent-4.3.2/doc/README0000644000000000000000000006625014566134066011546 0ustar00For installation instructions and usage, see README.1st and INSTALL This document is a not very well structured story about findent. You can skip this and use findent after reading the output of findent -h. Findent: what? ============== Findent is an indenter for Fortran programs, fixed and free format. Findent can also translate fixed format to free format and vice versa. Since version 3.0.0, findent can generate dependencies based on USE, MODULE, SUBMODULE, INCLUDE, #include, ??include and emit a sh script that, using findent, creates a dependency file to be used in a Makefile. Since version 4.1.0, findent can relabel Fortran sources. Findent indents more than 100K lines per second, so usage as a standard indenter in an editor works very well, see 'findent and vim', 'findent and gedit' and 'findent and emacs' below. Findent will take care of: continuation lines multi-statement lines labelled and unlabelled do-loops IF IF ... THEN ... ENDIF where FORALL WHERE constructs FORALL constructs etc. see findentclass.cpp for details Findent will remove trailing spaces and tabs, and convert tabs at the start of a line into spaces. By default, statement labels are placed at the start of a line. Apart from this and indenting, findent will not alter the input, trying to preserve alignment. For example, the alignment in: X = 3.0*A + 4*B + & & 2 *C + Y will remain intact. Optionally, findent will refactor lines that end a subroutine etc.: SUBROUTINE SUB ... END FUNCTION MYFUN will become: SUBROUTINE SUB ... END SUBROUTINE SUB Findent is space-insensitive, for example a line like: REALFUN CTIONFUN(X) is recognized as the start of a function definition. Usage: findent -h Findent: why? ============= There are a number of public domain Fortran indenting tools, for example: - vim is shipped with an simple Fortran indenter - emacs has a Fortran indenter - floppy, only for fixed format: http://www.netlib.org/floppy/ - convert.f90: converts from fixed to free format, and indents: ftp://ftp.numerical.rl.ac.uk/pub/MandR/convert.f90 - f2f90: based on convert.f90: http://www.fortran.com/f2f90.tar.gz - f90ppr: an impressive piece of software that beautifies Fortran code and contains a macro processor. http://fortranwiki.org/fortran/show/f90ppr - fprettify: an indenter and beautifier, written in Python. IMHO not mature at the time of this writing (august 2018). https://github.com/pseewald/fprettify For me, the problem with these tools is, that - they are too simple (for example, do not recognize labelled do-loops) - or do too much (destroying neatly aligned pieces of code) - or are for me too complicated to adapt and extend. Furthermore, I want that indenting does not make irreversible changes to the source: I want always be able to get back to the version after the first indenting. (Exceptions: converting from fixed to free format or vice-versa; adding 'subroutine foo' after 'end'; relabeling). Therefore I decided, having some spare time after my retirement, to try to build a Fortran indenter, based on flex and bison for readability. As programming language I chose C++, because of the availability of string, deque, set and map. After more or less finishing the indenting part, I realized that findent should be able to play a role in determining the dependencies based on (sub)modules and various kinds of includes. So I added some lines to accomplish this. Together with an simple script dependencies are easily created. See 'man findent' under '--deps' for details. There are some tools that can generate dependencies for Fortran projects: - makedepf90: see https://github.com/outpaddling/makedepf90, also in debian and ubuntu. It seems that there is no support for submodules, but apart from that it seems to work well. - f90_mod_deps.py: see http://lagrange.mechse.illinois.edu/f90_mod_deps/f90_mod_deps.py does not seem to work properly. - fortdepend: see https://github.com/ZedThree/fort_depend.py Does not work with submodules and is picky about END statements. I did not investigate if these tools can cope with split MODULE and USE lines and fixed-format space-independent source code. Findent: how? ============= So, here it is, a Fortran indenter to my taste, based on flex, bison and g++. The program performs the following major tasks: - determine the input format: free or fixed - glue together continuation lines removing comments - pre-process the assembled input line, to make it better processable by flex: remove white space, substitute strings, hollerith's, statement label and operators like .EQ. by special tokens - perform a two-stage parsing: - try if the line is an assignment - if it is not an assignment, parse the line using as tokens the Fortran keywords (SUBROUTINE, DO, ...) - based on the outcome of the parse, determine the indentation - output the lines that were read in to compose the full line, trying to preserve the lay-out after the original leading white space, optionally converting from fixed-form to free-form. Also optionally, lines that end a subroutine, program etc., are completed (or even modified) as in: END subroutine mysub Preprocessor statements are accounted for to prevent that code like: #ifdef one SUBROUTINE ONE #else SUBROUTINE TWO #endif would result in a double SUBROUTINE indentation. Moreover, track is kept of do-labels, in order to correctly indent constructs like: DO 10 I=1,20 DO 10 J=1,10 X(I) = Y(I)+J 10 CONTINUE Findent: structure ================== In version 2.8.4, a major reorganizing has been done, trying to make the source more readable and more object-oriented. These are the classes (all starting with a capital): - Debugostream This class contains code for debugging. - Docs This class contains code (often generated) to output help- texts (includeing this text) etcetera. - Findentclass Findentclass contains basic functions and variables that are used throughout the program, such as: int determine_fix_or_free() if the input format is not given (parameter -ifixed or -ifree), this function tries to find a proof that the program is free-format. If so, FREE is returned, else FIXED. Fortranline mygetline() Reads a line from STDIN. Optionally, the function builds a buffer to store the line just read, this option is used by determine_fixed_or_free(). Fortranline Getline() Uses the buffer from mygetline() or mygetline() to return a Fortranline. Optionally, maintains a buffer (wizardbuffer) to enable a look-ahead for the wizard functions. - Fortranline This class contains a line of fortran code, and has many frequently used functions operating on that line. - Fortran This is an abstract class with functions and variables needed to construct a 'full_statement': a string that is composed of pure fortran code (stripped from comments, preprocessor directives, ..) and a deque of lines that constructed the full_statement, including comments and preprocessor statements. The pure virtual functions are filled in by class Fixed or class Free, depending on the format of the input. The indentation required is computed from full_statement and the current indentation. Special provisions are made for storing labelled do statements, preprocessor statements and more. - Free This class is a child of Fortran, and contains functions to indent and output the deque containing the continuation lines of a free format fortran source. Also, when conversion from free to fixed format is required, there is code to store the continuation lines in a fixed (not properly indented) deque, and present this to Fixed to output this in a properly indented format. - Fixed Basically the same as Free, but vice-versa. There is a special issue: to determine if there are continuation lines, a wizard has been created that can look ahead, see getnext() in Findentclass. - Flags This class implements a container for the flags (-ifree, -i4 ...) and contains code to interpret the flags. - Globals This class implements a container for a few global variables. Maybe, one would be tempted to make these static, but I tried not to use static variables in order to able to run more than one Findent in one program, one reading from STDIN, the other from a file for example. - Line_prep This class contains code to pre-analyze a full_statement to make the work easier for the lexer and parser. - Pre_analyzer This class contains code to see if a line is a preprocessor statement or a findentfix: line. - Simpleostream This class implements a simple filter to std::cout. The program starts in findent.cpp, and goes on in fortranrun.cpp. The whole thing is somewhat more hairy than I would like to see. I did not succeed to make the whole thing strictly hierarchical, and solved this by giving classes access to the internals of other classes using pointers. But, like in biology, in creating a program, there is no law to keep it simple. Btw, when adding the relabel option, I had to revise class-related things a bit, so maybe the information above is not entirely correct. Findent: relabel ================ Since version 4.1.0, findent optionally relabels, see the man page. Relevant flags (see the man page): --relabel --relabel=, --relabel=shuffle --relabel-restart --query-relabel I strongly advise to check your Fortran program after relabeling, please let me know if there are problems. Relabeling is done on a subroutine/function/program basis: the input is read until a start of a subroutine etc. is found, and stored in a buffer until the corresponding end is found, creating a list of defined and used labels. If something goes wrong (for example: usage of an undefined label), relabeling is abandoned for the current subroutine etc, and for the rest of the input. If everything seems ok, a second pass is started to perform the actual relabeling. The complete input, relabeled or not, is presented to the indenter/converter, so all flags are honoured. 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 almost 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)... relabel=shuffle =============== In stead of neatly renumbering your labels, you can also choose to randomly shuffle them, thereby keeping the semantics of your program the same, of course. This option is added for demo purposes and for debugging, and will not be used in a typical development environment. Findent: usage ============== Findent reads from standard input and writes to standard output: findent < prog.f90 > prog1.f90 See also 'wfindent' below. The command findent -h gives an overview of the possible flags and there effect. Most interesting are: -i example: -i5 which determines the amount of indent to be used by every item that calls for indenting -Ia The starting indent is determined from the first line (more or less), useful when using findent within vim, for example to intent a selected region: '<,'>:!findent -Ia -ofree converts from fixed format to free format. -L example: -L72 limit input line length to 72 characters. NOTE 1: Findent knows about tabbed input: for fixed-format input, the following transformations are made: 10I= -> 10I= 1K*J -> 1K*J X=Y -> X=Y So, a tab followed by 1-9 is transformed to a continuation line, otherwise to a normal line, starting in column 7. NOTE 2: Findent silently ignores errors in the flags NOTE 3: Handling of continuation lines Example: a = & (/ 3, 10, 12, 4, & 5, 9, 1, 0, & 13, 2, 25, 6 /) After running findent, with standard parameters, you get this: a = & (/ 3, 10, 12, 4, & 5, 9, 1, 0, & 13, 2, 25, 6 /) That is probably not what you really want. The recommended solution is: add '&' at the start of the continuation lines: a = & & (/ 3, 10, 12, 4, & & 5, 9, 1, 0, & & 13, 2, 25, 6 /) Findent will indent this as: a = & & (/ 3, 10, 12, 4, & & 5, 9, 1, 0, & & 13, 2, 25, 6 /) Not recommended solution: You can use the '-k-' flag, like: findent -k- < prog.f90 > prog1.f90 Findent will in this case not touch continuation lines without a starting '&', but leave them as they are. NOTE 4: Findent does not check the length of an output line, so it could be that the length will be larger than 72 or 132 for fixed and free format respectively. In fact, indenting old fixed format sources will very likely result in lines longer than 72 columns. If you are lucky, the compiler will generate an error message, but too long lines can result in changing the semantics of a program without notice. Advice: use a compiler flag that allows long lines: gfortran, free format: -ffree-line-length-none # unlimited gfortran, fixed formtat: -ffixed-line-length-none # unlimited ifort, free format: # no flag needed, default is unlimited ifort, fixed format: -132 # max line length is 132 pgf90, free format: # max line length is 264, # error if longer pgf90, fixed format: -Mextend # max line length is 132, # no error if longer NOTE 4.1: Here a script to check for line length: >>>> snip ---------- checklength --------------------------------------- #!/bin/sh # checks file line lengths # Usage: # checklength [file ...] # outputs "filename:line number:line length:line" for lines longer than length # tabs are converted to spaces using expand # if no file is given, read from stdin usage() { echo "Usage:" echo "$0 [file ...]" } if [ -z "$1" ] ; then usage exit 1 fi l="$1" doit() { expand | awk -v l="$1" -v f="$2" '{ if (length($0) > l) printf "%s:%d:%d:%s\n",f,FNR,length($0),$0 }' } if [ -z "$2" ] ; then doit "$l" "-" exit 0 fi shift while [ "$1" ] ; do cat "$1" | doit "$l" "$1" shift done <<<< snip ---------- checklength -------------------------------------- Example of usage: checklength 72 *.f NOTE 5: handling of comment lines Findent indents comment lines, but does not touch comment lines with the '!' in column one. NOTE 5.1: handling of comment lines converting fixed to free format As said above, findent does not touch comments starting in column 1. Since all vintage comments start in column 1, this has the effect that these comments will not be indented when converting from fixed to free format (using -ofree). If you want the comments indented, convert to free format, add a space before every line and use findent again. Example if the stream editor 'sed' is available: findent -ofree < prog.f | sed 's/^/ /' | findent > prog.f90 If 'sed' is not available (on Windows for example), you can create the program 'addspace' or, on Windows, 'addspace.exe' by compiling this program: >>>> snip -------- addspace.f ------------------------------------------ program addspace implicit none character(1000) :: line integer :: io do read(*,'(a)',iostat=io) line if (io .ne. 0) exit write(*,'(1x,a)') trim(line) enddo end program addspace <<<< snip -------- addspace.f ------------------------------------------ Or, if you have a vintage Fortran-4 compiler, by compiling this program: >>>> snip -------- ADDSPACE.F ------------------------------------------ DIMENSION L(1000) DATA LB/1H / 10 DO 15 I=1,1000 15 L(I)=LB READ(5,100,END=30) L DO 20 I=1000,1,-1 IF (L(I)-LB) 25,20,25 20 CONTINUE WRITE(6,110) GOTO 10 25 WRITE(6,110) (L(J),J=1,I) GOTO 10 30 CONTINUE 100 FORMAT(1000A1) 110 FORMAT(1H ,1000A1) END <<<< snip -------- ADDSPACE.F ------------------------------------------ Use the generated program 'addspace' in stead of 'sed': findent -ofree < prog.f | addspace | findent > prog.f90 Findent: failure, findentfix: ============================= One thing is certain: findent contains errors. I appreciate it if you bring errors to my attention. If possible I will fix them. On the other hand, it is possible to fool findent, for example by using #ifdef, #else, #endif in a way that confuses findent. Both cases can be solved using ! findentfix: , read on: The next program will not be indented correctly: >>>> snip -------- fixdemo.f90 ----------------------------------------- ! compile with: gfortran -cpp fixdemo.f90 ! or ! gfortran -cpp -DLOOPJ fixdemo.f90 program fixdemo implicit none integer i,j j=4 do i=1,3 #ifdef LOOPJ do j=1,2 #endif print *,i*j enddo #ifdef LOOPJ enddo print *,'with j-loop' #else print *,'without j-loop' #endif continue end program fixdemo <<<< snip -------- fixdemo.f90 ----------------------------------------- That is because findent takes the indentation from: #ifdef LOOPJ do j=1,2 #endif and #else print *,'without j-loop' #endif So, findent is missing an enddo for the j-loop. In this case, the solution would be to insert #else just before the first #endif. If, however, in a real-world example this is not possible, or when findent really makes an error, you can use findentfix. In the example above, insert directly after the last #endif: ! findentfix: enddo and findent will indent correctly. In general, the text after ! findentfix: will be used by findent as a normal source line, so the following could also be useful: ! FINDENTfix: subroutine dummy ! findentFIX: do;do;do ! FINDENTFIX: end;end ! findentfix: where () But the following would do nothing: ! findentfix: continue Findent: creating a dependency file for use in an Makefile. =========================================================== findent --deps < prog.f90 prints the dependencies found in prog.f90, based on USE, MODULE, SUBMODULE, INCLUDE, #include and ??include. This is used by the sh script makefdeps to create a dependency file for use in an Makefile. Creation of the makefdeps script: findent --makefdeps > makefdeps chmod +x makefdeps The command: ./makefdeps *.f90 will output a dependency file, to be used in an Makefile. The dependencies are based on .o files, for example: main.o: sub1.o sub2.o sub1.o: sub1.inc Example Makefile and fortran sources to create 'program' from main.f90 sub1.f90 sub2.f90 sub.inc: >>>> snip ---------- Makefile --------------------------------------- SRCS = main.f90 sub1.f90 sub2.f90 OBJS = $(SRCS:.f90=.o) %.o: %.f90 gfortran -c -o $@ $< program: $(OBJS) gfortran -o $@ $(OBJS) include deps dep deps: findent --makefdeps < /dev/null > makefdeps.sh @if [ "`head -n 1 makefdeps.sh`" != "#!/bin/sh" ] ; then \ findent -v 1>&2; \ echo "Use findent version >= 3.0.0" 1>&2 ; exit 1 ; fi chmod +x makefdeps.sh ./makefdeps.sh $(SRCS) > deps clean: rm -f *.o *.mod *.smod program deps <<<< snip ---------- Makefile --------------------------------------- >>>> snip ---------- main.f90 --------------------------------------- program main use mymod1 use mymod call sub1 call sub end <<<< snip ---------- main.f90 --------------------------------------- >>>> snip ---------- sub1.f90 --------------------------------------- module mymod1 contains subroutine sub1 print *,'this is sub1' end end module mymod interface module subroutine sub end subroutine end interface end module <<<< snip ---------- sub1.f90 --------------------------------------- >>>> snip ---------- sub2.f90 --------------------------------------- submodule (mymod) mymod2 contains module procedure sub include 'sub.inc' end procedure end submodule <<<< snip ---------- sub2.f90 --------------------------------------- >>>> snip ---------- sub.inc --------------------------------------- print *,'this is sub' <<<< snip ---------- sub.inc --------------------------------------- The fortran sources will be compiled in correct order, you can even use parallel make (make -j). BTW: this example uses the SUBMODULE statement: you need to have gfortran >= 6 to compile. Findent: installation: ====================== (For a more comprehensive text, see README.1st and INSTALL) Linux: $ ./configure --prefix=/usr/local $ make On systems with sudo (Debian, Ubuntu, Mint, ...): $ sudo make install On systems without sudo (Redhat, Scientific Linux, ...): $ su -c 'make install' Windows: copy findent.exe C:\WINDOWS wfindent ======== wfindent, a sh shell script, indents Fortran source in-place, performing a sanity check. It accepts all flags that findent accepts. Usage: wfindent [ findent flags ] files example wfindent -I4 *.f90 Installation: If you installed findent with the ./configure, make, make install method, wfindent is installed as well. Otherwise: On systems with sudo (Debian, Ubuntu, Mint, ...): $ sudo install scripts/wfindent /usr/local/bin On systems without sudo (Redhat, Scientific Linux, ...): $ su -c 'make install' wfindent.bat ============ wfindent.bat is for usage in the cmd shell of Windows and has the same functionality as wfindent, described just above. Installation: copy wfindent.bat C:\WINDOWS Findent and vim =============== Findent is since version 2.7 very vim-aware. When using the vim scripts (look at findent --vim-help), findent is used as equalprg ( :help equalprg ) and indentexpr ( :help indentexpr ) Findent can emit configuration files, look at the output of: findent --vim_help Findent and gedit ================= To enable findent in gedit, look at the output of: findent --gedit_help Findent and emacs ================= To enable findent in emacs, look at the output of: findent --emacs_help Issues ====== Since findent parses line-by-line, there are situations that are ambiguous: F(X) = X**2 An assignment or a statement function? ELSE WHERE Is this an ELSEWHERE as in WHERE(X .EQ. 0) Y=10 ELSE WHERE Y=1 END WHERE or is it part of an IF construct with name WHERE: WHERE: IF (X .EQ. 0) THEN Y=10 ELSE WHERE Y=1 ENDIF WHERE Findent chooses the first possibility. And there must be more ... Luckily, it seems that these ambiguities do not affect indentation. I tried to make findent Fortran-2008 compatible. This raised another ambiguity, because findent is space-insensitive: MODULE PROCEDURE MYPROC Is this an module PROCEDUREMYPROC or an moduleprocedure MYPROC? Findent assumes the last. Thanks to ========= It would not be possible for me to create findent if I could not stand of the shoulders of other free software projects. In alphabetical order (and probably forgetting some): autoconf: https://www.gnu.org/software/autoconf/autoconf.html bash: https://www.gnu.org/software/bash/ bison: https://www.gnu.org/software/bison/ debian: https://www.debian.org/ flex: https://github.com/westes/flex g++: https://gcc.gnu.org/ gcc: https://gcc.gnu.org/ gfortran: https://gcc.gnu.org/wiki/GFortran gnu software: https://www.gnu.org/ kcachegrind: https://kcachegrind.github.io/html/Home.html linux: https://en.wikipedia.org/wiki/Linux make: https://www.gnu.org/software/make/ ubuntu: https://www.ubuntu.com/ valgrind: http://valgrind.org/ vim: https://www.vim.org/ The website http://www.cplusplus.com/ helped me to find a way through C++. I like to thank the people who gave suggestions to improve the functionality of findent. ============================================================================= I am happy to receive comments, error reports and suggestions for improvements. June 2022, Willem Vermin, wvermin@gmail.com findent-4.3.2/doc/design/0000755000000000000000000000000014566134066012126 5ustar00findent-4.3.2/doc/design/Makefile.am0000644000000000000000000000554014566134066014166 0ustar00# -copyright- #-# Copyright: 2015,2016,2017,2018,2019,2020,2021,2022,2023 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # Here findent.pdf and findent.md are generated, describing the design of findent. # # # Most commands are prefixed with '-', so errors are ignored. EXTRA_DIST = findent.pdf findent.md findent.markdown.in date.tex.in findent.tex.in # to make sure the table of contents is correct, we run latex three times findent.pdf: findent.tex date.tex touch $@ - : | latex $(LATEXFLAGS) $< - : | latex $(LATEXFLAGS) $< - : | pdflatex $(LATEXFLAGS) $< rm -f $(texrubble) findent.md: findent.tex findent.markdown touch $@ - sed '/thead-textbf/s/thead/textbf/g' $< | pandoc --template findent.markdown -r latex -o $@ findent.markdown: findent.markdown.in date.tex - sed "s/nowdate/$$(cat date.tex)/" "$<" > $@ noinst_DATA = findent.pdf findent.md date.tex: date.tex.in - cp "$<" $@ # Depending on the name of the build directory and on the version of findent, # the character '~' can be part of the name of the source directory. # Latex has a special way to handle ~ in a filename, so: findent.tex: findent.tex.in - cp "$<" $@ texrubble = findent.aux findent.dvi findent.log findent.toc findent.out texput.log CLEANFILES = $(texrubble) DISTCLEANFILES = findent.pdf findent.md date.tex findent.markdown findent.tex findent-4.3.2/doc/design/Makefile.in0000644000000000000000000003612114566134066014176 0ustar00# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -copyright- #-# Copyright: 2015,2016,2017,2018,2019,2020,2021,2022,2023 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # Here findent.pdf and findent.md are generated, describing the design of findent. # # # Most commands are prefixed with '-', so errors are ignored. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/design ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/m4_ax_prog_cc_for_build.m4 \ $(top_srcdir)/m4/m4_ax_prog_cxx_for_build.m4 \ $(top_srcdir)/m4/ax_prog_bison.m4 \ $(top_srcdir)/m4/ax_prog_flex.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(noinst_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_OBJEXT = @BUILD_OBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CPP_FOR_BUILD = @CPP_FOR_BUILD@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXCPPFLAGS_FOR_BUILD = @CXXCPPFLAGS_FOR_BUILD@ CXXCPP_FOR_BUILD = @CXXCPP_FOR_BUILD@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@ CXX_FOR_BUILD = @CXX_FOR_BUILD@ CYGPATH_W = @CYGPATH_W@ DATE = @DATE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CC_FOR_BUILD = @ac_ct_CC_FOR_BUILD@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_CXX_FOR_BUILD = @ac_ct_CXX_FOR_BUILD@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ make_include = @make_include@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = findent.pdf findent.md findent.markdown.in date.tex.in findent.tex.in noinst_DATA = findent.pdf findent.md texrubble = findent.aux findent.dvi findent.log findent.toc findent.out texput.log CLEANFILES = $(texrubble) DISTCLEANFILES = findent.pdf findent.md date.tex findent.markdown findent.tex all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/design/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/design/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am .PRECIOUS: Makefile # to make sure the table of contents is correct, we run latex three times findent.pdf: findent.tex date.tex touch $@ - : | latex $(LATEXFLAGS) $< - : | latex $(LATEXFLAGS) $< - : | pdflatex $(LATEXFLAGS) $< rm -f $(texrubble) findent.md: findent.tex findent.markdown touch $@ - sed '/thead-textbf/s/thead/textbf/g' $< | pandoc --template findent.markdown -r latex -o $@ findent.markdown: findent.markdown.in date.tex - sed "s/nowdate/$$(cat date.tex)/" "$<" > $@ date.tex: date.tex.in - cp "$<" $@ # Depending on the name of the build directory and on the version of findent, # the character '~' can be part of the name of the source directory. # Latex has a special way to handle ~ in a filename, so: findent.tex: findent.tex.in - cp "$<" $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: findent-4.3.2/doc/design/README0000644000000000000000000000142714566134066013012 0ustar00This directory contains files to construct findent.pdf and findent.md. Programs needed: latex Debian: texlive-latex-base texlive-latex-recommended texlive-latex-extra pdflatex pandoc Input files are: findent.tex The text in latex format. date.tex The date to be used in findent.pdf and findent.md. findent.markdown.in For the layout of findent.md. Usage of make: make Creates findent.pdf and findent.md. make all Same as make. make findent.pdf Creates findent.pdf. make findent.md Creates findent.md. make clean Removes temporary files produced by latex and pdflatex. These files are automatically removed after successful creation of findent.pdf. findent-4.3.2/doc/design/date.tex.in0000644000000000000000000000001514566134066014166 0ustar00Feb 23, 2024 findent-4.3.2/doc/design/findent.markdown.in0000644000000000000000000000040014566134066015720 0ustar00

$title$

$author$

nowdate

ABSTRACT

$abstract$
$body$ findent-4.3.2/doc/design/findent.md0000644000000000000000000005267214566134066014113 0ustar00

Findent: design

Willem Vermin[^1]

Feb 23, 2024

ABSTRACT

*Findent* is a computer program to indent Fortran sources. *Findent* can also be used to convert from fixed format to free format and *vice versa*. The program *findent* became more complex than originally foreseen, that is why I wrote this document covering the inner workings of *findent*.
# *Findent*: Design objectives ## Reliability Assuming that *findent* will be used in serious projects, involving large Fortran programs, the code of *findent* should be as reliable as possible, therefore it is kept as simple as possible: - *Findent* handles only two files: standard input and standard output. The input contains the Fortran program to be handled, the output contains the modified program. - The programming language is C++, a well maintained and documented language. - No multithreading is used. - Parsing the input is done with the aid of `bison` and `flex`: well known and maintained tools. - *Findent* mostly works on a line-by-line basis. (Exceptions: labelled `DO`-loops require a simple administration, and relabelling needs the complete source of a program unit.) - *Findent* uses no configuration files: it is steered by command-line parameters and an environment variable containing command-line parameters. - A comprehensive test-suite is part of the distribution. ## Usability *Findent* is easy to use, yet offers the possibility to tweak the indentation to the user's taste: - All options have reasonable defaults, for example, usage can be as simple as: findent < program.f90 > newprogram.f90 Furthermore, the *findent* distribution comes with a wrapper script *wfindent* that can be used like (to indent all .f90 files): wfindent *.f90 Normally, *findent* detects if the input in fixed or free form. - All types of indentation (`DO`, `SUBROUTINE`, \...) can be specified on the command line, for example to use 5 spaces after `DO`: findent --indent-do=5 newprogram.f90 - *Findent* ignores white space outside strings and label fields. - Fixed and free format Fortran are supported. - Conversion from fixed to free form is implemented, as well as the other way around. - All kinds of `DO`-loops are recognized, even nested `DO`-loops using the same label. - *Findent* has been tested on legacy Fortran sources, going back to Fortran IV. Hollerith's are parsed correctly. - Unrecognized constructions are allowed and are written on the output as-is. Incomplete Fortran sources are handled gracefully. - *Findent* can relabel the Fortran source. The man page contains a warning: 'use this only on correct programs'. If *findent* detects a problem (missing label definition; incomplete program unit; \...), relabelling is abandoned. - High speed: *findent* indents about 100.000 lines per second. # Building *findent* ## End users Building *findent* is easy and is based on standard tools: - The distribution tar ball is based on `autoconf`, a mature program suite to distribute program sources. - The distribution tar ball contains the output files of `flex` and `bison`, so the user doesn't need to install these programs. (If they are installed, they will be used). - On Linux *findent* is built by unpacking the tar-ball, and issue the commands: cd findent-xx.yy.zz ./configure make make check # to run the test-suite sudo make install - For `MacOS`, building *findent* is the same as for Linux. - A `Windows` version can be obtained by the following: a=i686-w64-mingw32 b=`gcc -dumpmachine` export CXX="$a-g++ -static" ./configure --build=$b --host=$a make clean make You need to have `g++-mingw-w64-i686-win32` or something like that available. Probably, using `WSL` or `Cygwin` on `Windows` should make it possible to do the build on the Windows system. - If building as presented above does not succeed, the script `simplemake.sh`, containing usage instructions, can be used. ## Program development and maintenance The following is for developers and maintainers: - The script `bootstrap` runs `autoreconf`, replaces the copyright statements in nearly all sources and generates the output of the `flex` and `bison`. This output will be contained in the distribution tar ball, generated with make distcheck - An esoteric option is `--with-esope`. This causes *findent* to recognize `esope` constructs, see . - In the files `src/debug.h` and `src/debug.cpp` macros and functions are defined to be used when debugging. There is comment in those files how to use them. - *Findent* comes with a comprehensive test suite, located in the directory `test`. The tests will exercise every flag, and check if solved bugs are still solved. Testing is activated by running: make check # Usage ## Flags to influence the working of *findent* Options to *findent* can be given on the command line, like: findent -ifixed -ofree -i2 < prog.f > prog.f90 and/or in the environment variable FINDENT_FLAGS, like: export FINDENT_FLAGS='-i4 -I8' findent -ifixed -ofree < prog.f > prog.f90 Most flags relate to the format of the input file and output file. However, some options arrange that *findent* does not output an indented Fortran source, but other information. These flags are marked in the man page with the string `[NO_ENV]` and are ignored when present in the environment variable `FINDENT_FLAGS`. Invalid flags, both on the command line and in the environment, are silently ignored[^2]. Flags are read first from `FINDENT_FLAGS` and secondly from the command line. The flags are handled in the files `src/flags.cpp` and `src/flags.h`. See the man page for a description of the flags. ## Generating documentation *Findent* can generate the following documentation: - A text file ('help-file'), describing all flags. - A man page, suitable for processing with the program `man`. - A text file, containing the ChangeLog. - Text files, describing the usage in an editor. - Text file describing how to use *findent* in editor, for example `vim`. ## Miscellaneous other functions - Print version of *findent*. - Print 'free' or 'fixed', depending on what *findent* deduces from the input. - Print dependency information, based on: - Usage and definitions of modules. - Usage of `include files`. - Print a shell script to be used in combination with the dependencies. - Print the amount of indentation of the last line read. - Print the line number of the last usable line as a start for indenting. - Print a report of defined and used labels. - Print scripts to incorporate *findent* in the editors `Vim`, `Emacs` or `Gedit`. # Detailed overview of the internals of *findent* ## Starting the machinery The main program is in `findent.cpp`. The flags are read (`get_flags()`), and if some kind of documentation has to be produced (`docs.print()`), the program prints the documentation and returns. Otherwise, the class `Findent` from `findentclass.h` is instantiated as `findent` and `findent.run()` from `findentrun.cpp` is called. ## The main driver: fortran.run() `fortran.run` executes the following tasks (trivia are omitted here): - If standard input is connected to a terminal, take appropriate actions. - Read all of the input and store the lines in a buffer (`input_buffer`). - If the input format is not forced to be fixed or free, call `determine_fix_or_free()` to determine the format. - Instantiate `class indent` to either `Free` or `Fixed` as appropriate. These are subclasses of class `Fortran` in `fortran.h` to define the free or fixed alternatives of certain functions. See `free.cpp`, `free.h`, `fixed.cpp` and `fixed.h`. - Take actions if the user wants to relabel the input. - Enter the indenting loop (trivia omitted here): - Call `get_full_statement()` to create full Fortran line `full_statement` by collating the possible continuation lines to the first (see below). - Call `indent_and_output()` to determine the indentation and output the lines that define the full Fortran line. ## Collecting a full Fortran statement Collecting a full Fortran statement from the first line and continuation lines is done in `src/fortran.cpp`: `get_full_statement()`. This function looks surprisingly complex at first sight. This is because continuation lines can contain: - comment lines, - blank lines, - `cpp` or `coco` preprocessor statements, - `findentfix` lines (see the man page). Furthermore, attention must be paid if we are relabelling or not. The full Fortran statement is stored in `full_statement`. In `src/fortranline.cpp` and `src/fortranline.h` functions are defined to handle lines with Fortran code. Care has been taken that for fixed format, a tab at the start of a line is handled properly (see `do_clean()`). The call to `build_statement()` has a different implementation for free and fixed format, see `src/free.cpp` and `src/fixed.cpp`, respectively. This function performs the following tasks: - Add the input `Fortranline` to `c-lines` (a list of `Fortranline`'s). - Add the line, stripped from all non-fortran stuff to `full_statement`. - Signal if there are continuation lines to be expected. This is easy in the free-form case, but in the fixed-form case a look-ahead is necessary. See `wizard()` in `fixed.cpp`. ## Preprocessing the full Fortran statement Once a `full_statement` has been obtained, this line is preprocessed to make it suitable for parsing using `flex` and `bison`. This is done in `Line_prep::set_line()`, in file `src/line_prep.cpp`. An example may clarify this. Below is: - **s** - The full statement. - **sl** - Spaces removed, except in strings and Hollerith's, and after the statement label. - **sv** - Strings, Hollerith's, operators and statement label replaced by a space. - **sc** - Strings etc. replaced by `space number space`, the number is the index in `sv`. (`sc` is used for parsing with `bison` and `flex`.) - **wv** - A list, length = `sv.size()`. Each entry consists of a `struct whats` (see `line_prep.h`) which tells (`type`) what this entry contains: `invalid`, `none`, `string`, `statement label` or `operator`. In case of `string` there is `stringtype` which discriminates between Hollerith (`h`), single quoted string (`'`) or double quoted string (`"`). The value of the entry is contained in `value`. ------------------------------------------------------------------------ s: [123 call sub(5habcde , 5, 'f oo', 'ab c' .concat. "def")] sl: [123 callsub(5habcde,5,'f oo','ab c'.concat."def")] sv: [ callsub( ,5, , )] [0123456789012345678] ! these are index numbers in sv sc: [ 0 callsub( 9 ,5, 13 , 15 16 17 )] wv[0]: statement label [123] wv[9]: hollerith string [abcde] wv[13]: single quoted string [f oo] wv[15]: single quoted string [ab c] wv[16]: operator [concat] wv[17]: double quoted string [def] The other entries have type=none. ------------------------------------------------------------------------ ### Parsing the preprocessed full statement Parsing the preprocessed full statement is done using `bison` and `flex`. Things are arranged that one line at a time is parsed, see `lexer_set(Line_prep p, const int state)` in `lexer.l`. The string `sc` (see above) is used for parsing. Parsing is initiated in `indent_and_output()` in `fortran.cpp` by a call to `parseline()`. This function, returning a `propstruct` (see `prop.h`) containing the results, parses the full statement in two passes: - The lexer is brought in a state that does not recognize Fortran keywords. For example: ` subroutinesub(x)=10` will return kind=`ASSIGNMENT`. - If parsing does is not successful (kind = `UNCLASSIFIED`), full statement is parsed again, but now the lexer is in a state to recognize relevant Fortran keywords. For example: ` subroutinesub(x)` will succeed and returning kind=`SUBROUTINE`. ## Keeping track of indents In `indent_and_output()` (`fortran.cpp`), a stack is maintained containing the indents, along with the current index. The actions are in principle quite simple: if after parsing a relevant keyword is found (`SUBROUTINE`, `DO`, \...) the indent is changed as appropriate and put on the stack. If a kind of `END` (`ENDIF`, `END SUBROUTINE`, \...) is found, the indent is pulled from the stack. Some constructs deserve extra attention: - Labelled `DO`-loops: if a labelled `DO`-loop is encountered, the label involved is stored on a stack. When a corresponding statement label is encountered, appropriate action is taken, also in the case of nested `DO`-loops sharing to the same label.[^3] - `MODULE PROCEDURE` statements: at encountering a `MODULE PROCEDURE`, indentation if the next full statement is classified as an executable statement. - An ambiguity: ` MODULEPROCEDUREmyproc` Should this be interpreted as: ` MODULE PROCEDUREmyproc` or: ` MODULE PROCEDURE myproc` *Findent* assumes the last is correct.[^4] ## Handling cpp and coco preprocessor statements It was a design goal that *findent* should handle macro's more or less intelligent. For example: +-----------------+--------------------------+-----------------------------+ | **Input** | **Desired** | **Not desired** | +:================+:=========================+:============================+ | | | | | #ifdef DIM2 | #ifdef DIM2 | #ifdef DIM2 | | do y=1,ny | do y=1,ny | do y=1,ny | | #else | #else | #else | | do y=1,1 | do y=1,1 | do y=1,1 | | #endif | #endif | #endif | | do x=1,nx | do x=1,nx | do x=1,nx | | call s(x,y) | call s(x,y) | call s(x,y) | | enddo | enddo | enddo | | enddo | enddo | enddo | +-----------------+--------------------------+-----------------------------+ The following preprocessor statements (defined in `lexer.l`) are recognized: **cpp** **coco** -------------------- --------------------- `# if` `?? if` `# endif` `?? endif` `# else` `?? else` `# elif` `?? elseif` `# include "..." ` `?? include "..." ` `# include <...> ` `?? include <...> ` Note1: the rest of the preprocessing line is ignored, so, for example, `#if` has the same effect as `#ifdef`. Note2: the `include's` are only used when generating dependencies, and are ignored when indenting. Most of the preprocessor-handling code is reached via `handle_pre()` in `Fortran.cpp` and `Pre_analyzer()` in `pre_analyzer.cpp`. The strategy is as follows: - A stack is maintained to store the relevant items (e.g. the indentation level and the stack of indentations) (see `push_all()`, `top_all()` and `pop_all()` in `fortran.h`. - The relevant items are pushed on this stack after `#if`. - The relevant items are popped off the stack if appropriate after `#endif`, `#else` and `#elif`. - Handling the preprocessor statements is done recursively. - After a construct like #if ... #endif the indentation continues from the state before the `#if`, but after a construct like #if ... #else #endif the indentation continues from the state after the `#else`. In this way, most of the times *findent* will generate sensible indentation. If *findent* makes an error, this can easily be fixed by inclusion of a `findentfix` statement, for example (admittedly somewhat constructed): +----------------------+----------------------+ | **Original** | **Corrected** | +:=====================+:=====================+ | | | | program p | program p | | #ifdef A | #ifdef A | | do i=1,10 | do i=1,10 | | #else | #else | | i = 1 | i = 1 | | #endif | #endif | | x = x+i | x = x+i | | #ifdef A | #ifdef A | | enddo | !findentfix: do | | #endif | enddo | | end | #endif | | | end | +----------------------+----------------------+ ## Relabelling Relabelling (renumbering of labels) is done in the following stages: 1. Scan the input until a complete program unit (`PROGRAM`, `SUBROUTINE`, `FUNCTION`) is obtained, collecting the defined and used labels. 2. Regenerate the program unit, now with the renumbered labels. 3. Indent and output the renumbered program unit. 4. Go to step 1. If some error is detected, (not defined label, label spanning continuation lines, \...) relabelling is abandoned for the current and following program units, however, indentation proceeds as normal. If relabelling fails, one can run *findent* with the flag `--query-relabel`, to see the reason of failure. ## Generate miscellaneous text files Help files, man page, scripts for usage in editors *etc.* are generated in the file `src/docs.cpp`. For generating the man page and the help-file, the function `manout()` is used so that generating these files is based on the same input. The other files are include files, generated from the original text files. For example: `vim_fortran.inc` is generated from `vim/fortran.vim`, using the script `src/tocpp`. Details are available in the file `src/Makefile.am`. # Self replication *Findent* has the capability to output a tar ball containing the complete source.[^5] The method used is to create an include file for `src/selfrep.cpp` based on the output of `make dist`. See `src/Makefile.am` for details. An issue is to maintain a reproducible build (see ), because the tar ball contains time stamps for the containing files. This problem is solved by modifying the standard code to produce a tar ball. Normally, the file `bootdate`, created by `bootstrap` is used as time stamp. Most of the code is contained in `configure.ac`. # Copyright *Findent* comes with the BSD-3 license: ------------------------------------------------------------------------ ::: center Copyright: 2015,2016,2017,2018,2019,2020,2021,2022,2023 Willem Vermin License: BSD-3-Clause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ::: ------------------------------------------------------------------------ [^1]: Email: . Website: . [^2]: Since *findent* only writes to standard output, error messages would clutter the indented Fortran program. [^3]: Shared DO-termination is flagged as a 'deleted feature' by gfortran. [^4]: This ambiguity arises from the fact that all spaces are removed in the preprocessing phase. In fixed format (where spaces do not count), this ambiguity is also present for the compiler. [^5]: This can be disabled by giving the flag --disable-selfrep to configure. findent-4.3.2/doc/design/findent.pdf0000644000000000000000000047733414566134066014272 0ustar00%PDF-1.5 %ÐÔÅØ 117 0 obj << /Length 1596 /Filter /FlateDecode >> stream xÚåYIsÛ6¾ûWðHu"ûâS›Åi“éLÚ¨Í!Í¢ ™ Eª$e'ÿ¾ÈH$•(™vì´hoûÞ G›GÏ.ð‰ßG‹‹‡WLGD!Jëˆrˆ&‘”Q-£Å*z_eÅÊÍål΋W¶Î6Åìíâ9›ˆd„ Ž˜Ĥ‰æT#m¨§}å¹Ý%•ñï3ªb[m³@-p¤Q˜8bEG ˜¶¤ßMɘK ‘ C!¥yЯå»ôB({àTLñŒÄ”;&#ËA640’­Õ¤RÍÁxMƒô–uS%isŠ^ÐÏ ¨CpŒ9B-˜Ê¶3‚¸VÀ¨Ý—Õ³9*NüOZnwûÆVþ¿ÝŒê¸*7U²õ MéóöùÊm*gÔĨ\øÅºÜW©­Q¨.ÑiN;ÎU4íX'y´ÌAªu¤àA¡@Àà.í‰öµ]¹MÌkn8XÜØªñ‹ëªÜúå?0á﻽벵{›4Ç´ëÊÚéI±š°”bŠ8ë-¸ÉÒ@ÔÉ”Å)ʺýÈK]@ ][ÿ¼kaöË›Sf‘‚β“cÄE¯_€3M¶ So½• ¿]mtäö½Û\;¸eïül“IžðoB¶¶¶xÐ4žÀ[¹½»òë·UÙwÕŽLi®!ã4^µ‰Óý¶ CÆèvã­²bãš{È`½(\L»ÿn²^¹w°70,×S‘ªÀPŽð瑤I~à9¿ƒ·¹Í¥¯*c¦ŒAXøË¢ŽõQž·”xSé±#E$”x›ƒ Åp>Q‡œ £ííqUªø TT@P˜Ü8tù§M›ìÆë½™S Çt .ÄøG!ó eîëfÐà)µy–,³ ð¾Àø¿õ30“Í0öoñ: û­þp’ÿkÀqcî!~ü~ƒ˜Ÿ‡ä˜SÀ”„¾ˆãGû,_¹‚1N)!2Ó©JÕPîyOÃ>$”Áˆ£]Mû,y ê÷šµKMh£\Qô[pÝ?âkvV®Ð>W^vc cnhtÞØ¼Ü…†Á|Ïn¶IæŠpR¤v(ZKrgÕut3ÝP.6#‹¨‘Jxb³cy,ë#ó*OÚ¦ ±éæ"`V@~ˆ½u¶ ¾õÂŽÛ0†fëßö½ö¨…Iz8ûœJ¸#EG˜Éƒqéù à30=€»}fa$Iš•v¤Ña¤õ²¥;§÷³`Oå«8+_bŽŸ³:µyž¶Ü‡ð*!Œ*Îz_¤’Q ä0ÜÿF%¾:•¹Oå'¶I²ÜOÜÄVÂùá&³·aX[ûUŸtÒÎà£xÝ¿ŸH7-6ì‹úPà<hÄ—÷7ÞW‘WMÒV….þyW3\9N¯3ÈÑ„£ ÿV'½ÏdƒìàéŠÃ¢+ ®7…úPÁ<^]†|ð5Õ·Qµ‡ò+0ü‘‘lLä}nêò¬"Áû"ñ¸Ìsw0éb&éªCžû§î.Buwn±†rj·Ãàv#³Rß&¼rl¸¢ñ½ÃÖõ8Ÿ¾aÔ勚ŽÁ†ðmU!œÇ/m¾°Ô}cíØµ–³«!N &ñ#ù]X?Ÿ6_„`xaíî£÷«$}×[aJ[nÎ;DÜ»rªÏ,§2@ó#ÌúyénÊGwHC4”} h(ÊŠjÅgÎ kFxJ&ïÒö>,ÔÇû–dÙšãU8ëMPŠý/.\0`Gð™àéã!½kÆÃŠ‹}Ž“n„ÊÇfJßý€:†‚Ÿ‚✙Tø™ô•ÍÃä ©’géä™… ¬ÌPX{£yÀPz†ËÝŒ‘øC•m®G5—*®@ëãçéâ⯠wá‚# ~ÃÆTФ1Qº½xóG+xù<ˆݶ[·a qí>AäÑ«‹_ü§(A#ŒR~ÖeΖÎÂðkÔÑ'!n>Á+0i®tŸÂÌ–_õg¢ýöÐ$ió=DT•,—YƒŠ|°Ï9Ím}ín©í²Î;ÉêºivõåÇŸf5íáãþàþ³  ¦¹<¸c>DùoD£Þ endstream endobj 134 0 obj << /Length 1756 /Filter /FlateDecode >> stream xÚÅXß“›6~Ï_á·âöP™¶3I“ë´I'½<5}ÀFöÑÃà"¸ÿ}wµ ǹ¸i2}1ÒjµZ­¾ý´r°Ø.‚ÅÏOþ¾¸zòô2Ž2*Òáâj³a$Ò \$2ÌWÅâO.ÿ¼úõ饦š¡:‘`Ç©\–uaêŽç&£H„2Ÿ-}¥ï¥±å¶Æ¶öšÕ_fÝ•·Æ¦K‘ű›îëD¤iºðÁ3©BöHÈ¥/exoMU櫲*»¥’ÞYPÉ"™5¾LEœ%4õ¹µý®¬·°vxÝu>8Mæhë.¿d4ÙÝ̸ E˜©Aó®¬*²»ZúaêèD™×[S¸¬ékM[6½¥Î~ ªmƒA°ƒÞmSÝ’—` Ê—aâµ[¶w‰½ÆÍêÚ¼&áÞ©4>:¹ð3-ÂHÁÎ] É»m›ïhöm¨±nÀÓÄ+¸ÛlND# …Êä™áPÉ{ÝôUA†Wn^%·ômÝáUGÒ½Sm¬-aèàok6´gV‡§/O»ÁA³ïFc.˜èh [îönU¥hU«®<\y)Ñ[ €;cÊ@„“ý‚ñ,ŠÁ8ˆB6þ>”ÁÑœY4]ëdÞÌC i¼Î뢂•×ÔÕ¶"¯Ã=ßáOC<Ð{Fжƒi„ØNA*e½ï;‡Q’ ŠÝ‚×è;P4|…hA)Íueÿ(®š¼\7u——5º 9î0êñšÎðŠBF=‚’Õ‘‚ÚwqqdÑy[ê¨û‘uwË¢Ĩ@ ¢ßÁ /ÄcíÓ©}ê g'8;hBã<Å™† _åõ¶Ï·¬â ~ýôÝw$ÉIàNÚ8ŽÆ¶ŒÛvä‚J57 Ú÷ºß´h4Å%üSpë~ݽ¿n(Õv}Õ•Ýukò‚viçö cÈ‘ç{¡?Ëß0x„qK˧¦"ð„‰áz–†‹¦6ÔºÇgSÀVYPc M­¦Ô$"¯½Ui›úT–"é …'xÂR $“ :›ÊÜŸ09½eÓ^ wS7ˆ½»šÝ§ÅðbÕ‡t‹¸à|:ÂTSÙ/•Ï"ÄXÄz è®±²`hÜæpÞXA°Ý7§OñW¨ñàc¥‰·Êm Ûqïƒ8xu¿†û£ljäO7-ç{¼ªÌ©“ #¨MF—^¾9áµ D¤ ¿â(îùv‚ÚA¤P™ÌBßš¿ûÒÝr¡¦Ìׇ EGiJÑ× Ròk¼S^3Áh¯6¦°Ô$üBcÝ ÍŽIÇ6}»æôÈœm9!aFܘÂ}]vâ'ÿ/`À ŸŒ9DbiGuC_¸ðØö0.JǸݔy!zƒé”p3ØÚí Ô "ÇçD)ù"ÙÚñnDf§J„GM_W]Ô@:·eÛÔ»±ÛQToÉîPÁ¾åFê<òfæË×%õçƒS;ºÑ̵©-ñLÆv¾íËŽûåPe‘‡IgNJA°.W=ž“8ù€W@´ øJ¥Ãk ä×À;ûÁ[`†¨£·À£d“êSè}¤´gr‹”£¨XA  í‚ZÓQ§x)„ƒë¹íá¬Ie뼄Ϋ°½¡ SùÍl¶öÈYÆðÔ Ô Ü‘×³¬Ûoø’írö—(hU'bRìÄPÆÝšžr¸ ÔÐ/Ì&ÇJ®ê\å}Aú\铊¹Ï‘¨˜èzËuRì­qF¾Ä´qC‡G"/=cN;ßü$SZWR¨r#ŒkН]†ŠƒÍïé³çÂq“$ø‘>µ¹›}ˆ.XAÁý3Š]•Ü·øÒÙñC¡Ãùa9—zªÏ|•%‡Gê4ÇÈ>ä°±Ô¤2[9 Ú|¿§¸¶$±ë¶ÜŸz4Ënè`,Tîs *!Ó#Žt¯q¢bÉhònÄ›ÆåHUÒsäxyw\dçä¨Ö€Äi;êÇë³áp7Ã÷ÿæœ_ÓáîÀ¹‡eªò†2 E”dgž­<-ðþºãd/É•~Ô<„â~ˆé˜s0°i‡÷/OæŒüÄ+)DœÈÿLZ>0ò,ÉÜuß*¸ó?U8ªëó˳‹6´PzŒïïï^¼}óîê—ׯN˜ŠC¡‚è`˹*UF®C ÖÓ‡@jy“ëá™J{­9׬IÊÿí`žI•×ëõ˜µãJ<ÅѪFå> stream xÚÅXKÛ6¾çWi€ÈÈŠ+>ôJ±‡&Í6)ZäÐm Ûƒ,ɶY2L)ûøõá²åh7Ûm‚žD‡ä<¿*˜­fÁì§'ÁÑ÷ÕÅ“ÓóHÌR–F"š],g\¦,Vñ,"ÆE:»(fy—‚ó¿/~öž‡éÁ&3‚Ã|^5EÙtÈz.ã6©X¢¸ã«VM;‰·+õÜ—RyWëª+q(=½Ír;lûNWEI,ºÛUÍJÓJÖ4¨³Å܇“Êšæ—We]hv$óHQ_4œùùŠŽ48Rôº,F¢(o¹+­ÜKRn“u4?Ÿ‹Ø#Z·Ë» `•ë·[ÐÃpÅÀU÷+@ÂüÿuÛ|*wºjQ–(ÑçÜk74A’v0éZø†©Sy­r4«´ýn¶u¹ß—Å íÈìÊÕܸ§¦™¡Âj·¶Çµ0Úp³Ü & ¬Ï9KÈ„&ƒµ}ómmóŠªdä}„`Ö8 ½vI!Ƀ]¡d WnÛï'¢žLECÔûukbµÝjºa¼cWæs¼°j*pÆ-Ž-q­üT6´¥)5˜xB,TâËâÜ)M¯!¿è>ã¤élS_øB„Lıu‰5ì>ûîþµq%ßÚ„çž ­†SÄîË™ykéu¹Êò LÒdœ¤À Û~——ú„XV­±¹ Ë?Ú³Û{ö¿ûƒ‘ù¬œ#ë½mëºÜUÝú¹ž€„-ʹÙœ ¤«oæ‰ò¾†ÉïNƒß¸ ƒñÖs  îó`Ci/p,¼¬®ú”ðv¡ã˜•{W ugœûŒ3€H€ýmßÙmÚ¯Ì8°Ö{×ä-‚Ž«“ kýG=0¯„PiŠÚÙvµƒš³ìk4¬ôþ·XY ù™£ŠG ña‘C ¥' >Ó‰¤3£É…cݸåm¶²$ph—UèKÅc°Ž!îAx×@´¿´áK¢ð¼×%Ö, ò`±_‚ ½Šßƒ°%–`L¾ÑÏm{gñud5†LÀbYºÓrœ…r°p1‘wV¢ltëŠ.ƒ0Ø * Új&¹qíÀÞF{žD,‘Gꥑ¨ÂtøžÂ¨…¤:T•z`·¼Œ1Ÿ§óqŒ•’@¨•Ã…kÛü›¦à1)ÿ¶Z­]fñ³x9á˜P0!øƒü"L#éº>Ã6èDÕ§·=)&(-Ÿ•dgL²õ„R3®˜T ªÏƒ”‰*””L†‚îàY8Ú{ÕWu†¥ÊîLSé]úà%Æët‰åõ…b\º;··¼1hÅPK¡½š0bXÂÂ4¦c©FF–1 EôP#ËÁÆÖle¦o,ê¹VÙ--2[SA/šµ.JzËÜÙæ Ö/ï¹P±˜sta="è ‚Ð+*Ýab+Z-úÎ4§*´#Áh²ÈL{ü¨QŒ:H‚SQÌ"9¸7ë»bh9aHÅá2Xò„ŽÏèhèå{Ó©i”Ö¸¨{óz1¶2Ò”©XAF…Эt±=ÂåÊÕ·Mscq¼~§rq0˜šâ¤®]ëá …aZ[xê´}wÕ.g'ÛeÉÁ¼Ëº¼žðä• Cw¡ SÁàÏE¥ÛÇÁ6Τv`¯uµIÌ”8BvL^à „W´„ɦ>4˜Ï;ZhJ“B02í|Á<,0­ ÖF¤–;F$,=Pñhûº¼¡=™©“%Mìiô˜:`ÞUå.±5jª7 ¬.ß6ÞcÔˆÀû¥júë ƒ| EøÀú¦ÉÃàÜ cg‡ô*„1÷zðC³…þ›ê¤p#°Ùøõ1tOˆDð'ð¥ª{Çæø¡\C_Taܽã·R!|Bx÷YCçp8èè-©¶ù××ìæ†ÝÞN9…"îT+Ä‘‰çí&û8éKC7—äëÂÇûŽH}øÝõ%¬-sEŸ€iâPÝvçþxÁ÷Â}Ì 6€êÇúq²%M¥6ôYû¢÷k–¿ÿí®ÔæG©½¸»”*ìB]I¸3oaê]ôþ?OìàÒdÁý ÇEÌx’þ‡61ü qØ^Mu†r@Öýß„wz-)Ïv Ýˆùî…4$ ¬tëá?—{ò¹——s,m¹ÿ:gU”DþU¤ü œs%ÅTÄ.Î.!VyNÁêýf»Éò5ˆˆ S[Êëm»ëˆÿõ‡gOŸeþêÅ {{WåOÝF!YÊùç™J̾ ¯³g 7_·º;{–Ý빘Éñ"eIb>9ÚðæâÉ?™bc“ endstream endobj 147 0 obj << /Length 2069 /Filter /FlateDecode >> stream xÚ­XmÛ6þ¾¿ÂeÔâ’Ô{Ð+лfÓmÚ"¾ Š4(d™¶‰È¢+Êëìýú›áP²ìU¶{m?욎Èy}fH>ÛÎøìÕ ÷¿ÿ\ÞÜޥѬ`E*ÓÙr3Eʲ\Î2ž2!‹Ùr={ìËj&2 ªZ•ÍüÃò;ø<‚I2búí]”¶ ãŒñ,š…QÆò$'Þ_æy˜ã<Œ¸š¹`sø·F:C »òÞïx!`³Täp¼ÛjûÅá^7ÛSxJãP§yžtÉ Q„ÌY"³þK3—yÐÒQÖìU·ƒmhZ븨hÖíÊŽFå}©ëÐiJ1'—F(WµbÀ›ðà§Ö¬`ú€ª.ˆt´xÂc ÎÀê½\ïÞ~?%|ÁD.®d¼“ƒŠÿzØ‚1&v‹b–grØ­™Ú)›ùnÖæd'¶ŠAx>fwæX¯I]ˆˆÞЉtGÔÃ<¢±Vƒ­ˆ÷&-X’ö&MiÇ5FC;ŠƒÕQ»€‚_®½ƒXBIç2 @Z·hl§ö Ât•ã uC8~¥wå¯Rð«o.ô¦O¼Ú¯7pVœ’lFq” ¥áÁ9LYÕt.Ìqu–Ès¯hŽŠ¢¹,mÕ˜ŽöXUÊ%ÈzAR—ªVº çÉ8g<ijz¨f(³» ¦+Фç^7"‘2l^™¦+uC*‚q¶ÜzÛëÆvíT®PÖN›Æ.ˆ©*½ŸV¤aÿ©Z3&‰gtˆtÞ1+8 ùE2$“°­à.±¶m¹‡MR0šºWµ9ìÁ®HHƒ²YÓÊÄìTS6Õ,!xå.UÜîËjcêÚ%× •Р i êÙž£Ç úã#‹ZïrX#Ià ' ü©Ö¾x* ¨íåÏF!ixóÙ¸ˆÛ“ÁÑ+c:ðYy˜0PÂYžœí±±Sa&ÀA=OyìL« @6SÛIñøaNÌVê²rŸKÕ@®ŒË–‡VowW¨+!‡ÁÉ–bSd‚É,¾D Q–ÇTé\Ø s”uM Ö[:©Î=@Ý*ð loiJbƒ9v‡cGD³9/N˜6=›uS«O&@&9ø ŸÝÜÕÞÞ?Úš)ô–P™“r‰¶ÜioYÄLŠË¼”xpqâS[ù¨ÕרºÖ+zuÄÌöKå Û`æqö]÷çu»‹Åÿ…ò K [&þÑuãÇW;U}|ÈáÛ4¹ê6þ¯úuÐŒXÓ©VW43¯5ŒõT&䀷çò†¨s{¦À'•,Kã±ÿ„÷ŸU%@£?$)ÆI”BIŠû¯\ÄÍo¢¾ ‡ žÓ5T°1fç¶ÑÿŠá$b2rùs’ClI0°|Tú«®|«Ôµ—Æg¥1‹“Áâ»®;¼¸½=N!xšƒú¶‹ö¬R%Û´·»n_ß:qè?CÂSÞ”±`¼Y÷©p‰ æžÿ•Êïr¡èÓ¤pn©ÕTŒ@',ŠsMn«ÛµZ·l²"sVˆèÁ"N'ö«S€ˆeÃŽû²j%‰}¡*‚ͱ©\Ýötì¢Z¯ÖZù¾WÐ,Ä—àB‘Ú÷È·ïÑ\8{vª¡‘“v ­f—X¾ZÏîRc)ØûÒÎ="á;c}ÒÛÑw}áK_ÜV|­wý--áE~^ÆþlrÆP5O€Š¨$%Œ 8ѬùÆŒf5vŠÈµª#{ÔZµ6Îà/RÐ`²¯¬8Xk€€ÎuÇíÃT!ƒ°ÕwÎDùØ<2öD·è’X’ćÒW$ªOª­´õ,ÐILn^MÊí‚ø]t"•ÀßÑô†HÖÔ÷Ê/C,ù†¸Å‰í†óˆ›M]^—xK‡¾¶ïöJHˆû¾”aÁÄÆ„– 'Â>øÅ_/mCY£NÂóÚ]ž9ô¨OQÄbÿYäÛà»Î{¢}殑ôüLø/îêM„ͱËè–uƒ¶>*l’iaç§yeÿµØ×~t«-­ßá¥||®Áe!žSžÂž÷¢ ÿñ0€Oäï„W šÊç@ÉÎð9}ÿØB>5äÖ«{¤ÃÔz_âã„÷} ½‘¯oýûÀ³|B¹ãiŠJ¦ûždãÑÁù?Ôý CÌM̦Uª_4ø’~põa5&|ÊÊCÔáÁÙPJnͨmÓރꪹ׭i<ìážòI—t_ÊÝë7ß¼|³tÊ¿\Þü~ƒN‡X˜!ˆ$„à,M‹Yµ¿yÿÏÖ°)Ç"å“cÝÏ$+òFõìíÍÏô uÕÁLÄ©Û*ö²ß}ÿ5JþêíØ ÙsÝ ²œzñÔ§ƒi½¼Z¿Á1¯Þþ#Ô±wÄëçSÐñ> stream xÚ½YY“£F~ï_Á[Ó­êâØ7{==a‡×ÞîÝÛá` $‹@ ¨Ûþóά,J!M¯gß8½®É I¯9ÑJÓ]µ*"@h×ôÝ[ÃE#þ´ èp Fx'“èÀxx„¢ðiL—U³Câ$,[øÂâ€!“ÛÛè¸l".œÚÑYâÜ«jJĘs½€¤JŒz)rÇú†.53Öm][É_ˆøV‚£´"&ýmm±˜\¹âK3üÍ„SíÏ‚G×BÔ>l~å¼ÜüæbŒÜnT²Žn·¦Þ¯ˆz ~?5Ñ{Ï|^×ç–¹È7ñðÉlïHÉʺ“c¬?TƒÅüsï¢,âTlúÞ1/Á“áî×nº| r„HE|8_Ÿg<=Í0×"´€—Ñ’ñç³äýˆ^àOUã%örþPhc¾o7­ÁžîR:Öäˆm\ÉÇÈ¡÷(Q9CQeÊj Ó~y¾—¹ÞR4;õ¶D<ôfR¸ŒB=$ã©AE0:þÞ¥«£—#·ùn¿Xód‚E‰wÈçj÷:§ãë ‹ »f0+Ìþ£ê S×ycÚæ½8ÆšÇtºëCS °õ×ìÆË”>EÞÿËnÿìªÆíÙt½K$ ɹ= ¸‹Ä5s€Ài”½.¤9º*Š?!¤'BÜ®;cn cß"·¿™òÖÇÒÞ›iJë£ì/Û|XòÆD‚’³×z£ð+KSFкŠi¾U³? =ënŸŸMD7Mñaäc#uAAU5¥yºÈyŸ÷¦Õ4ϵàö5q¦ô,Õþ~O1åKª¡Ì‘¥±º®(&u$6JRåP’]ãjE·¬@™ú¦Æ¸8Á ™LMЧ¨%¬×B‡ëÊצç}’ze€ÀùŸ-@rÒiåŠ+D¨„<ÅcìÀ’Ðxp.§ÙÅÖøèùàáâ¬0˜»YeþâJg"¢ÏÙù®=ŒÄÑc¨,ͯ”ÌuÞ»=®™„Øh}yþÇûeØvÔ›îTœãZÏ5T¾¬;J÷ûƒÑj±†…ÄH*X|½ÄŸÇ);êíy¸·îçið9Éy–ŃÑ)=Ný´Î¶ê/çuF½s¦vTeAš¥X glrÒ @SÿéZÇ;±èYê‰uʸò›ÿóŠÒæ~i’`GnÁÛ]^,AœÔJüUÎÁZjÈÇ\ùÙ_:,f\‹…rK1©b*·$˜1Ipª"ÈhW*Wk}c ¬§!ÔV-Ô:Ï•yqEך¨¤Bx›š®ÉëÞ'¶£éu"NíäjÙ`óJÐ-^ ¶Ž7Æw’C4ú–ÛóÊÝBw”2k¹í4Eéö W(tgöSÕ»ßfÉQÂÔQ¤5Á…qÉÙxu,ø)Qý4¿ø ÇÑ~Åîy©W,…FÏ¿1ïvÔ‚«±½þ(G®·÷Ó,=œX*0¿æqØ·;COÿ­Rð©EFÝwœ‚ M§ @OÂ-®zzƸǵ~èeÚNc%èξ ·Š‰c÷Q¶EÏö3W$@Ç\r¼Ãº‘ã°ÔJ´r§,a‘Ô§ê}E8¾áfkF~2ÅïåÙ†èqCg†C×ôŒÈ?boóRõæžÞò»–°J¤’ }X^œ()Î8÷àpaú¹’{ÒŽ&Ò:·,,Nñ Xâá ÃGá r$@yI”|I‚$bâh—õå‘´K"þÈè1a`¯ylv‡æŠ_àýQúÅδNgùâ¼û 1 "W^y ({štß>ÝüïðÓÿ½ÁuÆ$¤±bwóÓ/QPÂÇÉ, ^ìÒ´ÿGh×:x¼ùýW¢²Jø$q‚˜IˆH ,ŽødînB ucùDë,å.1> stream xÚÍZÛrÛ8}×Wà1yX÷KÊ5µ¹¬'S;S•Š3U;ãøA–eGÙrIt.¿§) 2DŠ”mºjLb£qút£Ù)™`–iÁ“޳ȔTL ¦|`R3?i˜v·™Žh3QCŒYFJ1ÂTÍ‚€g=š@ŽZ‘ã)PüH¨ '!ªð²ˆôCàVjüc)x qné(õV€eL†XÄ|* p½Û"À^ÄR¬æCðD…à“Ð5‘ƒN´`@£…VLƒ¨€/­RÄ€£ù¡?zmFGG¬8aů‹O V¼c/VÓI9[Üpù’ýòËèÅgíþüg!Ä1]ft¹¡Ë]¦©[Òå]> #¨}—ViäU’ßH-èrN—ÿ&ùIRX ú¶Uô² øîn«f;²ŠÉé~ÿéÞ¨¸Ú§aË“Þ»îæ¹šÕ};ÊÄÄæ—­=—ið]nÙ$u35_?OÚ+ç|íÀEšqˆÔmAók®ašMÙî"!œ$:Ú‚fGQ5â¦h‹óÿHV9ÝóÜ[3ùÚÊHÝñͲÁñ]îØ]üû–hmiâßfï2_&ótã¢ó[Žð[4M‘´?VöÄ_ÛÚ\æ tÞNÚ`‘hÚ–åIÎͲ/þö˜·MB“$0k‰ïŸ=[Öʧ¾g§ñEšoÖâÏW B¹éË<¬yúíîÞLVÔ­ì1©eU½M“ÎóXœôÑ?n_2[5›{ÇývmDW-IcÚ–Wz 5]ÇizÄ-ó ¶-­V»ÿ2ÚÙ‡|}=ÂÐÛÙÌm]d ¶iü¿“†-ô.ã—y*ùÚ»+ùU\ׄû¾¥Ôšw`ž$£n(Ö&¹ÏOóñ¢ñ=؇°ã{÷!Û}ÂNQp¬žI£ª£æ£`ˆ"e«úG£ú¾l):j»çQ»Å•…ñŽÛ·NRÌÕs»®'N¥ÿgþ€¼JI§¹¾O£d‚}dÅñ¬<#½GG£âÓÏÛ)+>Œ¯¦£âí⦜ޔ+&¥'ÉQñqºZÜ-'ÓUuøPýôÇôb6~³øÁNiEË•w,ÉC<AÓ*˜Ôr-þúæf§tPC“G»nܺñë&¬›X5tD³neݪºÕukêÖÖ­«[_·¡nk}²Ö'k}²Ö'k}²Ö'klëÛq}÷l”1UÙ3*NîÎ˪ÿûìæë¨x³X^L—#â¬x_üV¼=•U‡8œ”ìT*̓ Ã©À½•L¡•}¹ÄÜkÖ}ö1 MÓ3c÷ð(ÔzîŒiGÑ<ЊFæ Óɹ†'Œ±Ü…ØE eã©xTtê*¸¦“Cüî½ìtŽžˆm%€JG ÂÚ’®õ ÎÑ!r:®Ô*€G'Ó<8Ù圣ç‚=]àÚÒñ°çÑèNçèá±–Óa©Ö0’³å1„>Fôs8Ç@k0LyDçæÖp¡U?”áCVk]e3ޤ£}.¼ï‡¢Ÿ!N°\” À¹Gä .mw~5ƒó¡¢GŒº*ËŠU8rmæ¢DʯmàN+@s I÷C>J(Pñäž[á*h*ÀÊðËX9É ª–ÜZ‚¦8¦ʱ Îaý”šR ‚‘rxú„ý´´mRåFÃ=0,*^àF…~jìðHjfnô¦Q;nü±ë†‡"5wð rô.öÊHñÃ#AYà,-dti¡h±îRÂð¹Vz䨏¦ÅÑÏ(PGÚÎlkŸÊ×@oHC]K¢DðÊwÂØ"mó ­÷V.ÖvôÖ -T+Æiz‹)¨r;K¦T–¯ŽªŠ×ÕÔÅIñçÇßèïÅõx6/¯&Øx'å?—ãr9>?Ÿ•üfþòÑè(ÍFÔtÚ O`Ëñ`t_Êòvõª(öÀº·£üÏ_³µ3óÓ[Ínîæó³½²f-+j:u¬áïrÙc0W¹ø˜>tP¢Þà’/Ôf·KŸ4(µéºéÐÛu³éhtì¦C üF›G'lî(tbÝ¡¯&ôzR*>,““)\€õ»cV|šþ(w7»[mm[m­³ÕÞ²Gßdôùöº¥!Üå—VaQüʃ„iAß•ìñbæÇi×ê„ûîqô¥CêÐçáI1²é‘øDqøBÙ^óf> stream xÚµYQs£8~Ÿ_á·sªb$‚yÛÚ\í=Þæmç*EŒSÁ|ÉÜýùëVKlÙ“¹yp!ƒhµº?uÝðÕÓŠ¯þþ»ë¯÷>Þ¥j%+ÒT®îw+!˹\iž1!‹Õ}µús­˜¼ÙÁùú~on6I¦×‡²nq”­«¾þ·é?Ñí]w“ˆu?öeËúcû…§~âæ_÷ÿøx—%«‚™Ìp!¾Úˆœ¥…¦%v]x‰&'z69ã,OSxÇÎ5of{ÍK&j=îoÄÚÐx×5Mw#óõkÝ>á­d=–ó›‰ÚŒ m]Ò£göîÕîP£©èÉÞôõþ„ºsÁäL©JY!V)˜‚Tû"?yg±;òûø}G« cÙV¤LEÊÔíËq¤‡õ@×m×¶fë4„]w~´KÓê¶lnÝÓòÅ7çåÅ ïèR—£Ûs¹ë®ØÕ]’ÊQ°\%߱˚ÒYµlgk·ñqï4œíLA“†±›üæªuS·fð¯ÍŒ ÖÇ/\$¦§›èíî$l$áA;»òÃãq·ƒ÷"À“LgÊOFH\7–,$ã2ÿs!(¤”´_8ÛH™¬w€t0Š^÷‡rtOº¶»±£ [Š•ÓÑõ.øì¤Þü zÁ½ÝsKÃ-º+n¿\“T† gvõÛC×? „å±_ìuãßßPÐ!)ÍAš?ÚÎù;‚ìúçbõ÷ÏâhOÈùÖUδÊüÜmS`üT¦à¢Ê´c >š©4ñoà.•†`UÃÆúØ‚%*(s–ŒÈ”)Ë Ü¸Id˜ˆ,È-ò «FwŸ K °ª ¬HÁHÀ`ôâÿ`•GÊ VKG†ª´^G&K™nâÙW:sæ‹èÍ9Ø,XùŽòBDu4VZLç8n©ƒù}ŠÙG„Á¹ÎåÒOÙ ž“ÖíÆ‚o#ÂÝ^Èøö®?Rd©ç'¶iÜm9BºD[)Ù¢[˜~´ùoËöá&†E‘%Œ÷¢Jl ^‹š)Ÿ0u¥™æj!)f¡Ìÿ9¸ *¥#'̵UDÖ&á ÓR.-HB£Úep(‚v׃„ÊXªÕD‰û›rÎ"Ã’Ç\VÚD¯ãàsÒ+†Z0n¦{½iJŸ›“lg£ÿÏ z¿µ£×o¶,F´@¢šÎjñ ¤Ö9‘šq'u‘;ÏœÁWÀ!×NiIzü÷šÆ¢B Ÿã© ø¤ÚOz2ãÃîØ4ÒGs€í\IKèn.Å<ØØK–lj<"}Á4|‡ž§³oc“}Œ´$Î$S*„©¥BÑü(5K ½þ#.ö•컎[N® ({! CýؘÀaâ±Dpž‘'¾àsŒ`ý0N.Œ“ã±IÔJ(Z8xCÛˆ˜{þr°äL$b ùˆÑ Ýq„crÕ¿ Ôé"ÂKâ¸Ç9ð…y™8ñÎvJ*b¦ø„V£H/$Æ©ì„ÎxŸsc4(GOr|ZY˜Ÿð…·<¾•‰5AÌ;Ñæ–E†´\BH“¹å¶®hK\Ñö¥A*¶ÒÕj´ Œî°hƒÊ{@ã¬k(=)Þ pâãpq pu~bðñ´Íî»Í&“ðd†HN¶tâm‰ÀÏðÍ'ƒƒ[8Á­ª£ƒi•ž9écy€áÐo?zÖOe:‡8`õ)š•̾3&)–q=%5ps 7¦¬ÿˆ(Ð}¢’<ô8ö޽ à—æ«'&’eú„}o»ÃKcÞ\*#Ñ`¨Ÿö…옰IbX„‡m ‰.x'a[¶Ó, =W‹l¡X¡R›(töÉ öæ æ•¸ý©Éô±)ÛçïZM^\m§åq|"C—+ÈÁ²˜ µíbÕ†br¢„(ãªëö­_Aºf!û[ÏÜα×,}yï; ÐÀ cŠ$Èè,ëÍòÚŒ¡<$_Ê'rÛj“s–&b>ÊŽ=Vp× À¦KUp Ö!þŽöôÀ(”ÞIÎa…º¢Û–'ÂõÕI”ZðÇÓB½¶IªijH6Ææ"Ô8†âŸÑˆús0p±¼CçÌbo$Î#qh9Í:0Uh·œ£¨HEúÝüF'LÊtAÔA(ft^8¥2_‹GéÓ:Äg›/ˆy2)®BÛ8sAp¬ä(¨2#v­¯d®'?Ê< ¿¢g–\Âí}Ùn|) på'Q¹²,N½0|­Ç=N½jonéHVX­ãÿÏœàß¾tR{Ë7 ý_"*0ÚŒI>µŒfOåxK7J/êÑý½0sp¤ú²XNs‰D0˜£òD×õ&ì.úæëòdÇjeÁxúU÷°mLÙ^I½P¡u8kûa÷Š~“ånèЉŒZf0JÑÇÑþQbÒã±nªwñl)NçÅ”Lž­«ššžtzáFÉü0QWœ;yRøþ…a‰”8i^\Y–Þs#Ž›:]t°ì1ºÜšÈ2Väù7Î%vkõBà•ÎB§¸PS“ÂjÚ›Áae‹½À ”ÝCD%B%ÕœPÁ?¯ÍÔÒÉ·ÊpÖ¯Œ‡xÕ±ßäwp_ªê¼{<ŽÙP…8i³MEì•Ï/Ql£U•ØPÈŠ´i`˜ÌÏG~˜bÁ¹ô$‡úF¿OÙTCÎkümxGÓÓ<ßäaÅò¨Ü­gD}ýâÐ䦹ZgþM¤µ½}Hó8Øà`êöûeÙo¡‚õç%+tñ# ùÊ׌‰,ûzüGýÔ–vÇœø´9‚>òðù9~VDð ñ%´PGã‰_Áó;„ šàK¾öWS_Ý'{úŒÈm„ÜÄò–?ïHʰìÇ %ýD£•‡Wú|£Z7ç¯Ò¨¤i¾Ãö¼)÷öƒ™6ÐÃÖ Ë.- z)Œ^ø<Þ–âjŽökýŸ²¯®~’q/¼£<ÆÏù{z¼J3>µÞ—°ZåQxbyîšCÙbÊo÷þñº9 endstream endobj 162 0 obj << /Length 2407 /Filter /FlateDecode >> stream xڥˎÛ8òÞ_áÍeÔ€ÍÔ;@ ™Áìì,Ú·¤Ñmv[ˆ,y$¹óõ[Å")ɦÝÉä`¸øPU±XoòÙÃŒÏ~¹âæÿçåÕÛOq4‚åq,gËû™˸œ¥¹€« |*õì‘ Ü·Èœ‹zãAWFѪìšÚ‡ 4&v#Þ–Z~È6ý§Á¦©Í©ÊÚC+å,‘î–~¡ßíAÆïÞuª¿Ã;øÂc?áá@ðœe0c>ž“hȳ<Ц²-QÃ0øÂER>åN ÇG×®ßV–¶Þï=Ô³Œå"ŸðÐt¢@=»½¾N˜Üé|¡•uE÷YÞ¿Ð*ª³ZÁ!(  „øgUimx¢ÏËîîu6 Çcƒbœ @”²Ôó)øÑàFZƒ;·ÏŽX,Ý5/ˆç¥¶}`ÇØ>L9Sd—øC΢,ÔfŸÅÙ?a±òð˜³(‰F<Ê4 nöø+„%Xí µy$C‡õ¼Vûžv¢rà×·`Y À}‰`C𿛪RmÙoêævÕ,÷°­×n %ÌÚ/º‘sš-ˆGÒÊ„8­ ãªËB#ü€Ì}Ö#Yæ1½ØÁœnwzn\oöÄp[ôä£:š×òÐj€’è  Bt~½2–Æ`YÜùn…^ÕXDaPá^Œ„3ˆôG$³öK&ŒåX22·’AÖx ú5£éÑ)`dNáq©ô^:o¡v½ˆeÔ‡ÝJµÓ´G½ÁiGÉàç4-Š¿À bÐÑÈj!®’ûí*ë šÿ"O=¤m–EÙe5â ×âÈ ¢ÓöE¨×E²tO¥Ñ®CGj"#LO##¬>ªúÈB˜¯†3°Ï4|50F¯GX?ƒÃd6v]Ðá%á˜÷“÷^À:6ïHðàýUe×Ï ¨êš†ßûâsÆÒÁµv¬+ÿ¾“£”ñAŒŒ,Ö†xƒö…ÀuSwÀGG£æžþ}‰Ÿ­¥rà¦ëž,æi[ô¾ µqÂø‘Š#ÛòFÐóØ%CäßzPÇC'-†EJ`¥Ô§Ä®ªª£Ù3–HÃÁþe¯^Õ¤1¥¢7„tº…sV°0 ‚Åœ–…QBÖ"Z”õcQ•íÔG„“Ôê â0ʸÆtïµ£øÐ%,ŽÆWìrÜ)[ÒfùxlÖÚ!HùÒ‡L29ØŠq1>á±,Ëݶ½Ž‚­Ï`c46‚0̓_15Ì@ï‹NÑ èü)‘X@ (_DÌÄàÀË·ŠÐ—ï®d–¢œ\á>£{qÌrîäht;Ld°)»u[îÊ$ÛÑ”‰>=¿§k[]áŠK hxÆDÙ5x.hlsBˆ®_gÙÿuhz&1úׄEp»“Ìë '!ËÒ‘i‹øXÁ¤&C¥Iuð¦9èRaˆ+€ó³¢€’FõЛo Ï¹NÉ3XôÒ/3B¿ŠË”•`®é¦ŒÃ°lú3 ¤0QçŠB9h>†°Ë«¿®ÐöùL¸†Cø$D½õîêó-Ÿm`ñ7¨^Â<›=é­»Ô ,øa5»¹úŸ …“vÆ”I‹<ÌÁ½šü V1> §1Ø –-:å:¬ð*âm±Zo”Ù9§µxnƨ ÷4×480ĬáµV 2躀BHÞlÔý¼¨[­üÈ«w´¸Ó˜€¹)[óx~Ê qKö‚–à 5š˜ÛÓͰTÆ‹O,é3Æ£8I³ÜA·æË"нÎd»EkJGGpgçͽ<ë“´GXOÀÏœ$?:ÝÁô06×+ ¤ö^Ïïéñ3¿µúä .ªC;ÛÁ;ê#[÷àÑôÅŸÃ!Â[#ë¶¾fŒL‹É)ÎY|ñwásj7Å— ø‹ÏEÉE’᧤£gùHíwÖ‡^äÝaÒ=B¤]¡&Žq‘@t{¥2J¶-ÍŒ~ï1g¹àª –‡¤#ÿWe;­§®IÆX\Æ®ÑÊ„mµbï´Ð½SÛcMl5 özá¤KñnÜ‚ýŽn럪Ç%'°íèºu;3G—‰"B#3¦ï']ßgÎõ+%¸¬dÈ1ÎfPt ©ã™Â,WìßV˜sË­iùË…Žáj<0íZ bÈò§¶¨HØô)z‚̱C¬"L†]-Ìör§"q µ,5¨`Á_¨ˆd •ŠzVí]§ztz®yJª½7në¬Þ:×ÞZÜÙ™ naiLŒÚŸ(…ä„V½ZL`QÈ%Y)ãwš ƒ}$Éå~Ád‹-ð4ZÓnj•©œ8Iÿ©¡€k(à`ÔP0LžØÈKY—}Yô•WD D¬ˆÓãfË æ”ù®9ôûC±Ë-Çp®O§nË}£Ÿ_Îô­Ü몘•mMóD÷ݸMŽp¢o<´"¨ 3w™ûtö•>ý´bf„{¹ëÐ Žþ«^÷eSÏ­¹qƳ£ç‘Võ‡¶6½žÄÛ(ˆ í“Î8öm³7½o}“Äѱâx$ à¡·%0­JIÝG“Xží“,´ª;T=5U­v)Ú~Gc·Ív×[·oGØÚH©t†>kiž zz5@ ‰=¼ètƒV]~E«Ê£Ø<#ˆ³©£ü¨#eÞBò öåÂuz1¢¶G £‡û4Rô´¶i†§ÁS7½m$¯›‡ºüÛ> stream xÚÍY[oë6~ϯ0Їã1+’¢.úÐ6ÉnÚÓ“Ý“ûÐSŒL;BdÉ•ä\ö×ï ‡’%‡q.Ý}0H‘Ãáp.gè`²œ“;í÷—_ŸFb’²4Ñär1á2eqOâ b\¤“Ëùä—éÁƒÃ_/ì×}}*ãÁ"Ûƒ K|¶8œ…\M×úP$ÓºÉË%DÓyu8ƒÓÐ|ÞÐpyȧUKýf“e¦i›‚h¾*¸ÍË9Í~‹2€¼r(o1ÅU·ùÕ§>~wqqvzvrLÔ#A#Áâ(ìˆ;?¢`ljÐêÖ¬LÙöR›ÉL€^DœNfœ³T)bÐÑ €"ê¥ÎKä£×›–íùE<½§‰öÆÐDaLMcV0”—ô­éÓÊâVÎí×&«–eþ_ǧ6…¹ÓV`˜G›H)É-PÉ(ƒ.ç4Z›vS—Ö½ðýÄë!2fA”vF¿¸úþóùÕåÙ§J0ôþÁˆB…KXQ™H Y¨$Q†L}xL2fM"Eñ Ýb7šV !Á·ÏÞ¨û„©4vaTúΰ0éB¼~…üZ^oZTñ3æaàù‡½dIÜŸ~QYbÙzíÓTÌ”Ü$¡¬ë e]Ž#èÜØ® 8Zø¡!‘$«ì§ÕÎÛÀ° ÊA"£‘[Xýáf M]Tv5tïóö†zÄ:Ù¦®m §øFýËŽBgm^•û°¡`:rj×Öûó2ËÁïiè÷MÞºn“S8Ð’…ã³h!®=q7BD)Ô6ÛÆ¯[c°`N¨GlÕ¦tCÏØ‘+ÉÁ_ïò²#=òpSÁñ¹×¹Xñ-+cÌú¢ý°6±‡°>;>Pv£Ë¥qGÒà Ñ$è5Ù£rf±ð(£ÄB”‚½ø‘ûUI“´9t¬S2êŸ-ÜJjè–ÁDªG£iÄÕûûÉ'ßíÂS&Uú–>g§N._%ö%b¡TCqfJ¨ý–†`B ­§í¬du.…bAºsÉY+¾Z·;" &Â`oNì74¹Þ€ Œ>uP½¨«õú• N·H3ìÝö,åÜynµräM[o²Öm27©ïܤy¤r·CÛ‚@Ôßì$,ã,'di¨ìµ“†ïÈq>êkÊeà˜sŸ‘SÆCñrÌt³‚r£jݘ„qjÁ[ÌâdZ¼°a’0¹µí[6tÛ5Ôš23~45ŽPº2Á-)ïªâޤM† A{\' !îÈlŒ'’Æu7í¦þsc†“hx»´6Íš$.焟´°ËÕt(!NÓör|(.ûQ…îz€~@¶ÕИçá·.šÊQ”´Š\2Ý8Föö‡H„Z¯ýx}&o@ÙËïæF»»jéäpr¡<.‡•L;áÝè.Ķêc;¦€7i,#Dè‰Ç"îXˆù3!7S“ˆ-€ë Nú\ÐÔ2 ºŸÏ¯>žÐýëóù'ÇWŸ}8—Ä, úXè}#K¦ˆØ¼‚†3>àÐã7ËêI¢!ÖÿÀ®Km$äc"Jž¦6Ú¹ê¢C[Xh¨_Ö9LÝôéq¥­ÝÕ$Cºiò/û,ÚÍ貃P“mZ}]¸}zµ±}8:#A¢ÆR)ߤ߹íõê:_B^…üøÚò‚ŒÑ›aõ¸®«ìµÕÅÅMµ)æÝ¥ÔÝ]q§ë½ƒ0Á´ÆÑêæEñ¢=¾ò6! ûÞ¦]ç´ŸÃm!EyaÛSw­?•R†÷NµY™ft³‡€#ÍNFÐcxÖî…ÎãÖ °EîÐïc<æ,I$ć"/骱ÈUcÿ„¼°èË1¬dl1æ²Åƒ•ÔÀøúPb6 ‡Û€¦LøŽß´b '¯(áœîñÂèŽÈ_òeIêYVºèt¨[‘xØ2K>k Ô`}¿AU8¤_!Jô©Wœ©Vî¦&Bzp×h¢KúZÈCòe‡pj©O—¼½âñààäòà÷t¤`ÂdÁ­1Iȸ“luð˯Ád“pYõ‘Lî-éjŒ ,@t/&ÿö1—HÁö0 œ9ö k\@EA¼S]Tœ•Pb?^€qÂ4zǾÿOe*`ÜòÈ~ îVSæ1–^Š„Ùƒ¾_øw³x*;D“PðdÿTµ{óçªrŠøbè>q”þ1„âüEA@jÀ1bâš?d,NÀ¾)À£«Z¾Ês³ Œ?>ûYøÒ[|wÅùÇoùQùè£øÊyi)÷¯„t|±oéîúà{]Ì4&0HÓØ·Á£Ç¾Ýá›»}þüSÌ à’ cù ;ø®V1¼WðÖ$/qáû˜ôÖûQ&âEùò˜=vòÖþi/ý)&ÀE¦•Éö){`2ÙÀdaÌ𳿯É:Ø}‡Í| ™îv÷0ÝáûØfø·@˜ˆž™õÈF–{o1ë¦!ஃZ×BÉœžô¢8„Üä—]qµxj3+[7(p±óT«¼ì <å( …„Né%=*W›)zæÃÜ®þ> £ÛMm>ÐÜ5f¬4³„Ý•Ý×>Ü÷’n4s¢FpʼnA‚ýâ.]…$¶•šÛئ´˜6çq$ÝkŸèjÒYÛ i×ÓT¿Ši³Ö6íÖ?·²6«êŽŠ/AO,C¾k{\C‰»}ï°»ûSæotcõéëá"”X»†Q¸Í¨:õ;®@VTEÿCÞß+P ÀÆ #ÛÒf) ‹MÙº?Dp­+.Ñž;ªx€Æó°£}L‚U®i¨”ßJEt~»Ùj¦fÏ<ÁŒ¢”ÉHaˆgÙd´âû7ÆUG endstream endobj 175 0 obj << /Length 1860 /Filter /FlateDecode >> stream xÚÍYmoÛ6þî_!4_l fù"JTQ´è€vk –omQ¨ •%ORš¤¿~GEK¶ìÄìƒ!J¤îŽÏ=¼™× ~Pwýåjòüˆƒ„$‚«eÀ¸"Œ‹ JBÂâ0¸Ê‚Ó«•žÍ…ÓeUÕŒ«ém^^›Gátcnk—j6‡ËB7]Uã’¦M[½ÖeÛ ”OTÒL¢,,u†òröùêÃów‘èÙÂ%Œ2°ÔZQè;]“Œ‰ïÖx†RÓÁ6¼©õ¢º.ó:{aDLÞ^Mþ™á4`°í(ÊaÛ”„J‹õäãgd0ù! D$*¸µK×KáʼXOþ+ åŒ$R:Ö2ìû!‚y²\9nl±Ùì[Ι$œýŒÒsÈØ7œKIX(‡†/3—=ó‹UâIæ÷qg"|¢ó"I’89ƒq™ $V *!2Šƒ‹Ù\r9Í—G\xÕœ3Â’¡êׯëöøŸ¬{:Êó@'c8Òl.³£èA{‡^_{‡ÞõÀ“ÕrB£óp/”$’Cîé¢ÑGð;ƒò¿¾rߨvßÉÚGàƒ­3vþ AbºÃ¿â(ýΠ¼ƒ¯¯¼ßQþ¬@Tž‡°•ÒÀ ö•‹â&ÓxóŒòìœg0¥ƒ³oŠ…°ÅC{²-#ÐÒˆpznÒ„@¤>ˆìKØÍ«#ÈžÁ’Ùž%£À0Å{²)ãÀRzRÒ«zQ˜L8QÒU½T­f/fóÒik*`3¨uÓâ¨ZBQ“$Û©m%c%ÛJØVÊf¾ÈK·2oÜõºÄ:Yg—ø¤©Ü`ÙÐæFߥëM¡/ÇjäD@½wµï†ˆÝí%$‚ZÞ­Y¥ÍvS°8€Ú ¶ gî°¶Ëští*gSª C׺º1%âÀ/Ö³$ÓcÆF„òÅ:A XÉ ˆ¶øódÕ™º£1TPbŠN”c+›½’z½)âŽ.¬ÊâõÜ4¶#ÑíJ—8{­K]§-v<0“‹M›.¹n.ñyZføBO¶Ïq‹Œ ’ˆp²÷?vJN©mˆ@¸Ñ‰háU"\^ø½2Däœ["š«%"çâxK6_…ÝŒyió™Æ[ÃL#¢Öébe¬2¿çéhw¦°oË*«¿ljmÚ;Ûƒíû ¡ÈT[‡ˆ…ˆz½«ê¶NKâ:Ÿisž@HƒñRã†}±`lH½±ÖúKZ¦Åý]17Žˆ ££æB‹ªB¿£MO ‘ŠvèÏ€ÿ!Äÿ}×Ý­¾¾GŽä?ƒýž<žÞ6ØØvÍ=XÊû–öç ¤r*>A‹½óÎÀX;êl}úbeºùÅ7ZSàºNó²…Ÿ¥1Ü·U·´òG!ÆClµ.ô÷´l”V¯ ã M€óÃõxàV%>€×µý¶í9ø»Ãg®Úƒמ¸?˜§Fw£Ç ´³g¤wòM³ú’ÅâHNõw,nC¼Úmµy@`Cáé{€â18Ø{kó LHPP‰°ÿ–/Ý©\‹½rÅDYÒÙ—?ÃHBz„2'Ä ¿9þ™OUà¸îƒSåâl»Âóz^›·–­®ÇB…B0 H¶àÚ„=•¾bñS!à‚ö à‚u˜ y¾±eIµq,Ã%•Ið¸ íäuç†ùçÒK)xÉ!(9‡ð’¦¾ó¼¹ð-ôÑ’`ü¸Ðíž/ºVr?pè;ùéùà¢ëív$ò þ8_Bÿ/ŸäÊß|bFbêG~`ÝVS¡ù¬]šÈªÒ ªõâ¦nrˆœ÷3>°´ìç7óÆRÂA«~Ѷ­oº²È¿™èÄž5bŸs.á´¨íá³=´ƒLà¬}é¢.Ú~‚~5–62sÞ©1‰!®a¸ÆÜB‡y : ³G¨ÙnfljÑà²e]­qäÞdh>ûŠGqéSe·p¬ä~«“âÏ¥SrÓ¢ât Ƶֺ§R¼lÝc+αÂô?ó™‹»ÿµç·åyW‘ »çuW”Y—αsù6¿øéñ>b?ðFÂAVO"WèÅ8÷Þ˜)e—î`tk> stream xÚµXKsä¶¾ëW0å˨2A[åÃÚ±6ë*ï&’ö´v¥(3B™CŽùØ•+>Ýh€CŽ8’b''âÑhôóëÃ`„Á»‹Ð}»àð ð(fi*ŒY&DPì/>ÿ%lþ„LdiðÕ’îƒHÆ£ÆUp{ñÏ&I1¥²ç˜9g™”ŽÇwwW×22–%Àúnð$b)G^  ,•ÁçÕÇÖìLW—¿ÜýxñÃÝäêHYÿ«ÿ<žŠ)ÉÂ(ž‹ÿ}s)øªmuÑëò©B*–EéŸÒaê™þ97J°G–ˆä’Å\9&áI€Yˉ_%g*äA’†,Ž$æÐ6»6ß_nd$W´L°‰B06NQK÷Ù–zKdo-ˆ˜@”̨ʆ(Ì·|ÍCâ¶D÷®:}–‹!&ßÒ‡/°I<›º4Û³|g|ÿjžè‰zKF€ë@Ãó6:Š#Y$žœ=Ÿ;ÿG‰`Q*^éïèUþ¯ô·xÖßâµþÏû[¼Þßâ%õÂ9Á_¶¦.uÝoÍã"sž_â6‰‹eíG±g¦Nž‰ H 2–áD%ñƒIWIÈâ‡çÆ¡>('|ÌÔ%h†«]å÷—®tU™z‡:]] 5‰H´qÊd¦è¬;¥þÄF±ú9”a«ëaï¶Úq§ÙÒ÷xªbŽ‹ñÊt´Y6µ¦‘©éÛƒ€«‡K¾ÒD¹mªª¹„ó_GÎ]Ÿït÷ƺÁ'è˸R`ž’ÈœÍi>o$¨~[äpWE«þAÓÀÔ‡¡§áP÷¦Â¡Xå´R4ûC¥{Gz@Y|Z"ÕPƒ°¦§ šƒL9Oî0d‹ý—¬.Å¢¬ï-–«ÑÍÐÛÅKGÛ-Þ~¢Ql5:#‡ô¸°$Ç»Æ)ÛŸ®×Z¡Ä 6ŠIÏsî=¤}œD«®Ùké¶µ ÜÒã¿%¤TÉÞÛÁ%Ìžºéýþ8%›*°ézº€Fvòº¶á…³¢<®‡¼7Míè!»5ɳ$<}Ƙƒ§ZO}¼Îa¬ÚÈNÂU~^i(bayëµÃ ¹ˆŠúWëEX%/ªC3åÑ –æîbtW·¦Í~¨çÝ®—Š•>§)´ÈQG+¡5Ú¸„HîpÌ}k{ŸWŒŽ¡çpc¢<­*Ä7”7·¹©P8<`± Pñè´5!ˆÌfÝMÈ¢#°YÏÚ _€@Î{JJ9äM`"Ær™ïàleTÉÜ<›ÍoƒnßXµtµp£JY Ô#P΃^ëÀj­Yr´hS‘¯uh¡ÕÌY`V7îÐ ‘úÄK]A~w„§D­ö¦+ ôòZ7ƒºÒä±§M´^¥»—Kößu gã‘5Íöè/ ºµ®hÍ¡ïh2†4N†¨hhÜ9]šÞFfÛ-9dàÙèlÝlAVh®¸‰r{¡»ÆCu9¿Õzà¨Íb0.ôN³èÚâªlŠŽ‡Ã‚ ð€ÆvË Â¨Ì_£<¤"-8™(¦½Ãžº L;ˆŠv½füŒîœ±!É׳-ÛCb/41Ôj>Æ(Ü õáÒã ±S,·ñ¬wõ¥Ù—Vˆnñ¹+8S=]­é´ïõ(îfÜ}>Öé¦>)Ž]¾»;(^Ì£W$@éie˜­8Õâ0=Þƒëc`àŽ©‹j(݉cLãl3H¹m›=môî0Å´û1B[6¥ü•ì¨ñ„Ôf´1‹\Л%αG|³à9€3™*ï¸/fÿ¯mÓöm^3PfÁsiàØ)ÚbÉÓYFÀt b¢‚O¯jzÝ•¿ƯÁ>d?tTG¹Ï9X#|XÌ9ÅY(äÓœë›å„‹ •˜$FÈßt¥Å5Þé¶úù}5{(Lš ³hÀ<´Ž™"ý”ÿª·¦Ò,?kŒä(؈â1ÐB¶Pɲ šx‚AOl)¥Ãð[]m ¢[}¨L‘³y˜ð\‰]ãmΖBÉÒdlаrÇ"q>êî!¿7<>À\¿»Í†¾¾_DºÜmåÕarŸW•ã‚ñíRnëc0dwCë Ó<óÎdþ> stream xÚÍXMs£8½çWP{rªl…›Ù±IÌ–Àɤfç€ ŽUVpRù÷ÛB-l™Ãžöúhu¿~ýÔQ•EUî¯T|ßFW7wÆT±ˆeê¦íM“™ª+SÕ$šn)Q¢üÄ×#}6éëµ/Ƨƒä´£Û,[ÛÍ1ü[¨eš^ÿŠþjâÜÜ™ÆeÕ ã±[µûCU½–ßnnÀÁÐíèz4Q…Û’°âå¦ã¯ Úœ’™iI€@"®jº‹O%"­r×Ép¿ÊHŸjÄÐ4e¤iÄšL„ŸmœeÂvÇŽUL%ŸYƒŠæè£¬âüW÷Lø»ŒbÉ“ôø"ÙÑÆYZ±h)Ö‘YÈ<[r£dÙøÒ‰Ì ?„MÎ+1$tÿ1ªóPÛ `Tà\kƒTŒó1¹'be‡nРbâÝ.68Øqµ‘.$a4$Ökœ/"Ö=AF+×0 ¤Å@8æŽ4ô‰A¦³©,å–±*‰+´l}¬‘ÙYCCL¥HÁ:A<‚ªÏAFº5!&¨[°ežc•U¿ö³ Xƒª®Ít6QñPSkã JVji±úÀÊJ¬²=ÚÐì’û©ÕxFÙH÷ôØG•>#†aHPpdO_NEJâ]O¦N¦æXa1+Ú˜cS¯i1Æ*±ÆcÀý4„¥ E×Tu0g¯×†6ø(èË¡ÂÓÖ…ž®ÍÀ–qGIz¬z€ã˺íXžBÎÇàË‹‚Î*>8ˆÅš(>¸ #C 3*”x,Óou[p¢«®4p©*ZÓÁLU'ß.¿úùKU؃ûA k¦¼×–9 ­iü\¦„Wß›îòÕ»î–íF†±&3“À…)S‚¥oÐÃôÉ@WµÉ&LùcÆ~L‹\”¿¦Ø –&¬èN0P›ÕôŒæYÝè¸ñ„èF»iBAßt{ª(;ŠcÐ Ä î|@q§d§b—v¬¶ôb¼gE^ÅøB‡©G¬8¯°SÕוr ‹îbŽÏÇFzåÙVõ ®§{£‰œU‡¸’£T‚È2ö^÷9>…;Pî·ì ÜDÉÓê[Ë;€FÄ~›©3Û&fÇéòT"¶"å7·ƒ3Þ²·æÌëù)4"«ó»sdÔv(]PQBB¹H·]§¯ø´vY =ª âw¯/¼þ;df]%|fAü–§ÿw"Úiqûå$lwʡŭ›s#ÅÎàsøù)hœ•}>_“×%Å}5AeX/¥çX“cœ§mBš­3ÉõôÀ²D?²>?µÓªü²<üGªÆÎŠRf’ئM[‘•`â0OÛÝhÊY•6N…..}'=UÙé®6J¶¯Þ›‹.»ØzMw¼ñÈ(´éUo9Ç‹T–ŸËqÑz£¥ ëп‹žìÀ3¹ºüGwá,°5?‹w´D³¹¿~Üûe$¦Kµp> stream xÚ31Ô35R0P0Bc3cs…C®B.c46K$çr9yré‡+pé{E¹ô=}JŠJS¹ôœ ¹ô]¢  b¹<]ä00üÿÃÀøÿûÿÿ üÿÿÿÿÿýÿÿ@¸þÿÿ0üÿÿÿ?Ä`d=0s@f‚ÌÙ² d'Èn.WO®@.Æsud endstream endobj 200 0 obj << /Length 131 /Filter /FlateDecode >> stream xÚ3²Ô32U0P0Q0R2ŒLR ¹ ¹Œ @ÐÈ,‘œËåäÉ¥®`dÀ¥ïåÒ÷ôU()*MåÒw pV0äÒwQˆ6T0ˆåòtQ`øÀB?@d‡„?üùüáÿ²ÿ€ý PP\ q¹zrr}s9¼ endstream endobj 209 0 obj << /Length 155 /Filter /FlateDecode >> stream xÚ36Õ32W0P0Q0T0£C®B.#3 ˜‚1D"9—ËÉ“K?\ÁÈŒKß(Ê¥ïé«PRTšÊ¥ïà¬`È¥ï¢m¨`Ëåé¢À ÇÀÆòPŠ ä˜*äØþÉÉø/g þÞÿùÿÿøÿÿa`þÿáÿ0±Ab 9Z^Èf"ÛÁåêÉÈŸ3z endstream endobj 215 0 obj << /Length1 2483 /Length2 13311 /Length3 0 /Length 14731 /Filter /FlateDecode >> stream xÚ÷T”ë÷ #ÝÝ( ÝÝÝH·tÃC Ý!Ý‚t7’ÒÒ-H§ ‚tw¾ã9çwôü¿o­÷]¬5̵{_÷Þ÷ó 5¹ª³¸Ø (vpefgaH*ih°³ØØ8YØØ8©©5A®vÀÿÉ‘©µ€Î. °ƒÀ’Î@SWˆLÊÔb¨vÈ»ÙØ9ì<ì¼ll66þÿ‚R¦î € @ìtA¦–;z9ƒ¬¬]!yþ÷@gN`çççeúË nt™›:”L]­öŒæ¦v °9èêõŸtBÖ®®Ž¬¬,¦ö.,`g+z&€ÈÕ t:»-¿Z(›Úÿi™ i rù[¡¶tõ0u ;9ÐÁââæ`t@²4ä*Ž@‡¿ÿ6`üC€…ýßpÿxÿ røËÙÔÜlïhêàr°X‚ì€EWOW&€©ƒÅ/CS;0ÄßÔÝdgj1ø«tS€Œ¸ÀÒá?ý¹˜;ƒ]]X\@v¿zdýB³´ƒ…$ØÞèàê‚ü«>)3лë?‡këöpðù²9XXþjÃÂÍ‘õÈÉ ('õ D„ü[ftp³±±ñ±q€N §¹5믚^ŽÀ¿”ì¿Äü|ÁŽKH@?%òÙÇÅÔpuvúùü©ø/BfgX€Ì]f@+òïè1Ðòo 9g'@Ÿ 2~ì¶_ÿ~3„L˜ØÁÎë·ù_GÌ*+¡(©(ÁøOËÿ*%$Àžfv37€ŸŸÀËÍðûoUSÐ?eüá*ç` ðÿ]-„¦ÿUìþÏÐý³ô€ÿÆRC û=çlÜlæöÿÏÓþ—Ëÿ¿!ÿåÿuÎÿoE2nvvééþ6øÿћڃì¼þ±€ ®›+d ”ÀUpø¿¦ÚÀ¿7W hr³ÿ¿Z9WSÈ2ˆ;XÙýK$ÈEä ´P¹š[ÿ=/ËßüÚ4;Pìúu·˜ÙÙØþ²^æ¶ûÃ2”©€íùoJis°Å¯5ãàæ˜:;›z!³Af‰ƒ›àÃÙG  ç_c `eq»B\öü–`gä_gÊà `ÿ%úñX%~#^«äoÄ`•úø¬Òÿ"^6«ÌoÄ`}ýq@fó7â°ÊýFì ¿$»âoÉ®ôA²+ÿFì*ÿ">HvÕß’Oý7‚äÓø¸¬š¿$û›ß’]ë7‚d×þ ùtÿEüéo©Ìì7‚Xšÿ‹¸!:s°äpÿ'áâú%±·ÿíÿëÔY-þ€ö€¿#@ªú{äþeþ—ÞÉ ²+¿] -[þ†Ë?à/%èw@Î_Ðýwö_‚ßÁ¸™ƒÝœÿˆ1°úB:°þÝ„Ck/Gk ÃèiÁæaÏö¡èÏV üÙÿÑ „›ß‘¹!®µøCéü»ˆ3ø?jH3Ž¿Õ`Ž'žƒÐò7Ÿ\ìÿHÿC3¤jGÈ þ}4\"íÜ\þˆ‘8ý 9!éÜÀËã?‘ØÙ!ŒýÁ';„žß1 w1« Ðôß1áþetÿƒUnHÈCáßb \¸Ø™ºXÿRòï´Û–ÕÕÚøÇ,Aúwõÿá‰áö„…ûR™ÇcñöüBÂ{ý!L{ÿ.ÉèüwªÿÜWænΪ]ÿz¦@.³ÿá¿Þ€@O 9òÂØ\0Ħ6¤í¦FœÄƒyk~u½#2^·?‚Û•æ[®µ"Búë)' ‹JÂáÕù²°É9_†£›1OƒîÌÀ•dÙW(éþM‰漡Ûón+ ©˜Øjœ7%rë8A톉>¬>m¢öÜC(oçϪíÂÇ—Ÿzüû{@ñ&y2‰k¬xvÇ>t´.9ÕºëW]Ì8lgýT7M¹7ãÐÑ ¸k‰¶¢[¯Mý¸´¯Ë˃™ý)œgù ½Õ<•a8D¸ÞòäÙÃï¿á%dÊ7¹@ÑHp_I–%rÏôBå…Ÿ:@õ3Së½PËJq‡‰„Aøl®C¼¯Õ˜tD¦ØƒHÌ'–¡÷6cyÂ`ën…-Xh‰«MÆäê'¥íÐ(,5ÃöŠ™¹àX“у.Àf³\ú™˰ÅMQ…Žá3 2$}“°–·’â»>BãéÃkƒó£³ñëÖODbxÉÂdÉQû®Rªâ ”˪à…/˜’–Ú?•hvøµ¿HGKòvã3^p?¨½pAi‡f;×>Љ˜r]["¼¸ +æäI}Uûõ%ÔËN¾£½²+}gWa’­Wb¾.Cî/k L¡Q¯Nˆ?üh˹2k ÒÎVÒÒX=u?w0º# À´Fs"y ĹRq(«"Ú]uÜVçªï(õ´¾_02rtÜ“¶dOBXÛ냹%=·²|ØWàVTê>°Wùîô³h7@À¾ŠVž”RÇàf‘mÓà¾û½. ™ÆËüÛ¤þ¨Ÿø¦ÂøP±Ö÷è$¯ˆµ`k˜Ê9&®_lsôò“’ñ@Î%Ʊ7O˜ŽLïüˆq‹|a@_·Ànv¸.9.ÜÊñÃÌÚsE˜åõ%“FiuLk×ÿàŰQ÷²‚FSbQdƒc1*q0럊ÊÑâ†}ƒ7èiZMѬîáÃ^lñ*KV-I6ÉÈB‰ÅïùwœÕ¤KñÙt7ÐÈKD¾ïŠK«?”ÿÀ€ûâø2t¥|ÊV~hÏœsÊÿøƒÞfþü±1üuâIÆ%¸,äNIm8Tº¬Š†ï:Hh‘M€-ÕSÙ‡¶ÅNßl$uEß5lƒˆû¢tÄ“à–]²é‰lÍù_&”|LÊÌUp"ML½à·:zæ®Bí›Ns5²ºüÄËá™æŒ&ºéÀ!ÄM×´k\€dèÁ"ߘ{á‚”,F 좽]"nœY¶' ó.±‹ƒÒQÈ÷͆°ëRÓŠˆÆ »øETC S³-:«§ˆÊë%†åmÓ¿1=úëS®C‹sâÞ¬9ÞáÞ\f½XÇ”{‘Áë¾Ðx¾Þ`¥49Øßžã£=jß!bk–±Rˆ¼¬‘'ðåÀ·ƒÞ ‚;xY‰ån  ˜dþôw$]©¹À-vêì•ôzgWÏ›>lâ]ׯŒs±puìoxq6zNàgW¸¡™ðª«†¼AîØ Nújß yëGð’E¶%r zèD‰ÐÕ*\°'yO4cS5õ<ÊÞ®ý@2…².&0Ýš'#?Ìh‰ål¤41Ú£ç:N%/Ëú;c×ÔçocîŠ$l¤egOç×+¹üS”-$ó ‰õ&yèó^áôáÍHE U²|¿ÝÁv{PÇ V¾Ÿa=„ª¤$`){U=ãÊ ÔÖçé 'ÅAUœì½sy}óœú>¡Ïy(NBkeoâ,RtÉG¢¥1òöœÏ‡÷eù˜ŒÖóH.’Ñõ{`žóø«øƒ<*¾¸#B}¯xn U1­ý€|9}{õ£µà´U Ò‡=¢:±pÇ?c#â]Hô¤t?¢ÕO‹×ìSõ×~-<šžCëZiâ3ônÞ0‡•Ó'+ï|\S¡µ‘Žï´ÄPÎ܃O+6ÈßHôã©*œ)éÕìN¨ò^0±Xº$r«õªp®ÖN™6bgg ›Àd¥_ÓFqè×™4›W9ßRóêüe¬6”ד.íá×êë†÷ƱCÁÛvëTú£ÞÑJÖ%Vò\x{Ö]†œc;zMÊ,[<ñæ„ÆZ Y{#Ó,Mo+–Ÿ„PžbÝ÷½``âQÀìw´ŠVˆËÂnÊÅ”®ÈL#Óx%^¹éÄs·ªšÓâîa8DŽ­´úTÙ¥X5¡Ãʺ#S4‡êØYâoU‹/ŒIsƒ·v‰Ú?µ ç;À}9Ɉ«;¨¥.Ÿƒú) ñ¼šNâÔM­v%xß×’qMÙMð.N»M§!üL6¨,Gnš)oN„îÀ욃€º/­Þ¸â§ß!qƒ ¯¼ r¾`Èåµ ÷÷"‚Ç%3w's¾ù-Ò,eµ"Ù¸ë²À¶÷uAÀLÛàÐ ¦ÝŠY#; ¯i`.ËP_r÷nÉJßiæà̶®úèˆT!øJ`îó¦úG¼€Ï–ẻN6cÒ•~‚È&Õý¼¸¾¾àŒN’r)š9 %¯ðW¨ÏJx#~~x5•Êã‰<§ù~¶6ÁO°3‹­k„noÖA¸U!W¯]‹Qê™:‡ t>L¨}È—ûže’iÓH€_¨šSçu^°\Û\(¹sóöaçH´zE¶Hµ”#¤Á˜ü¸çÄÖ )LeãB(Pb¥­©0¸íž@³|ê\us}»ÈÔø išŸUê2à—1)yÜÓZfî£ò1ãúœˆâÆ:]`.kªÛˆ‘WùÂuyý%jtàmy„ žî!ê@Ù¨¯|@)zCD“µdû ÜÍ W©¬`MÑÇir!Cë–Uø®-ØzõtŒB¯™Ã!žp—Ôqm_,³uׂŌs¬i z¯©V­´ÓªŒ³ ~8år Žk~Ï œ©™äiyN«U€úÜ?$ø™› r4Ù&“¹|딦2™ãìzzЃS ëãZÙMqVœÔ©ÆIñHINoº™•9aaŸÂT—æ¸ #ð%I×èý‚ëÏ=/Ìá;¿>¯øfÀ;#U)=òl¡²á9yMÅó€a§¸^ u[¡–¨Ô_¥9ùh?‘@ŒÄ÷ÔZÊÚÄýŸ!,²Ç2È«øsüZô>¿ûWš™ÝÛÁcª×÷ 2ûuYC)úÃ±Š‰=û–8»ÂؽuÉoU­T?áÐçn&Y7²MŒ(pPõHy hež¨ÖYûðfSD‰c„Ó†Á)=u¼™Ð§ê–aöÞå&•Žwš …7T3/~jµˆ”¥t$|“ÂŽƒ;Ê‹úô°û¿äÝÚY×FÓ!½NK芞~âD\_=m4r½RšûJçäxâ[„ $ôU™3Y[¥\Óg44ƒŸÝòé:Þ‹•5«Ø'û6fÊ¥/s¥ïü Ãd×O¨r‘R4,&O|âüÑÙ³ñjñdR_s‹M£˜V–~lŠéÐ+,]%fW5íz½ðV6SR #’ü=qÒ Kã©Ë†Ç­´'·hÛ܇ uÓQ"!^ vö1þúŲˆC:Û“ï¦{ýð(n>ï¬CœÓ»¯sŽiáßÓõ¸€a\ý‘ÅJoØ»´NÚ 'åæ™ÙŠ°FÌoXÌŠï²½=±ƒZáL÷î÷PV Î$O„’ ø·QOTývÃraLŸ¹®²ûgr’NÐíûcü=Y¤qzs¯ •Æî³<ÔÄ~ Ê›†· Ð''«¡gf®Ü¤´òO‰&atøˆò¢PsafÜQl~*ÂÒÜ+ùñºµ\àÈ& Êaþ©-Q²+ŽHq> L”ZWÍ|Y²’%Ø_ÁâHþ)w‹#=áø"BoV˜ñ†­mHNÅ{zÀU7›ø[¢ì,,‹aîlb²õÂæ^¹V·d…ÀO‚+l6ç+"¼­oæ5;©m?|k *ƽг3ö¡#Ô®9 åi Š®7¿ÔÓÝJ’‘š5ÚçÏâXQ´ªK1ŽÃÆA[· £â#ÒŠ=!‹VÌ‹µ=ÒȤ–«=<Š %„e(¿–òéuh”Äb£LšÑ©¯*am‰7ö2¿‰øÚ÷R̸ÌÐé% ÷Ð^šRËà$ì§¹bàÀèX;¯åy…¼ydS^øZ•MõcŽK¨-t? °Mô/¹TÊèËñN3AÅnŠIzØŸ·Y84Œ(S=_¸®f}AGO¤°¿6èHÙƒÛyîâyê!gÍì]ïÂ= D\’HÓiíN«¶F¬U­@t¡ª´#¬ÆMhÈ\=éáÞI~+ú#•›xí¶•àqgÔøÙ=Ó¢þ KÏl«È~JE¦U–Ó‡™&V­@ŽoÀ'2A=¨ÕÙ-ÉÔžBWró¸îOˆJÉI 1€®~ÛJ±õË·À,y7• ´ݾýSØ3kÛ3» ih†*¦OÏ=ˆ°ljÑHÂüþ9U—,§yO¯»“vЇ¯¸¨¡I‰Á îۤƭ-DªézÛÏ(^ob$`­ýË`¾’‘…ƒ“_åzËÀ è“í#Ù²g‘rð2¨uÈljc¢Pt¨‚é4?9ò#EÁF΋)…8"Ý&Ïm~ýéøñMƒ$w2=JÎ6Š~X¥dxO;f´É-ó;ÀÃJ‡ã™V‹ø÷£%·=ùl¡§ñŽ« | ÏbÛWwÄ–¼þêe4Fa«ß#W¿·†r„K/Wrðøâº_䉨O&ÞùrÍ–£Ì±oî±Bà¸R7Ñœ"šë(ÜÇÍ‘ºmaÍ"öó¡%Ô|<‰*KP6üÁ&MM”¶!=¦ÍyY ªhR)eSn›A]½×§°—ºh>у]﮿­ëy#ã?Y@2'ikù®Ö˜ 指^+RõÓD„v4DB!Õ†—Z†¯Ã0¯U‹,E1½ß9dþŒ©ÄÜ1Z²ÊÏí]Ò{Ü”Œºu×P=ެÚVÑ×XW8àééòȨí´h.EypÑsçÔp¦» Ÿ¦é ¢JëQ³Ètº/Ìì D'®Ï=ún©)M O”§Q›§&Ô4Žä"U§]#ÐEÕŸlŒ˜Ó(ãyün›j²'éwÀLYgÇn;R ŸmËY³ €ÄGsGóò¦ ÿÍ¡"ßñò>ý½4wn„ºªÄAÜöôä¶aºÞ«Ä+;Oï^ñ˜Ú³ƒu↲=鋬10€P›#@À¢´mz8÷Yû-Ãø*­j‚wôbmµ±Rÿã§„9øo{§{E†Î–L"’¬¾ä»¯É3ʘ¼W¤‚Q%âD¾McnÐe„¤œ¤~êz©‡F¬r•ÝÒ\-ÀÛ¹½M2*Á}G0Kû–žtRGTe×`Q½Ñ%ß‹ ƒ}KP‡¿t»ÆV5{-‘tžC‡Øú­Æ¥ó(ɬ»$A<äû³j•×Ѱ0Ó0åªi¾{£•|³ùgE7ùyÜ#…¿ÎáʼnÀÎG%j¡Û‰ÔpæÎÍ;”Ñ0½.MC3gÉ­›õõIONê}‘+{‡{fñ·„/Ÿ£HåíÊ ]J ‚eØ?+‹¦z<}á­¶…ñ­4FB>q¥§Š±¼ËóÁµ6È(ïñÏûá1›_o}=Ué×åß3Rqßoürÿ¤Uãɰš÷¥^÷ÌüÎѰ úëE^Þ4æn„­m3×yÔ:•%©k¦âw[]ŒŸ:}®r`¢ áy'«ÉS¥Å„qÉü~(«Ž×a¸»jj<¾… (á+JÄzì:ÆÈòXòß:Iv—ú9«DÇiŽtÝ¡†F8ˆØ5ýQãáI¼¼ÇøxíkjÛ»\…œÆÄ)[õÞ̽ƒ½TúRåòe4w9K‚#¬~¾OªýiDO¹ÂUÒ¥÷4ûÚÀø-^Áç_òÜh ãçkî‹Wü–%-ߨØ{ñø2\ã‘"óS¡2¶É{Ù<ÏwL|n_"Ç‹U÷Ü=°ó£ÄÔÙIsÏO%C0±Û>øÈ˜GO^Ò0 Ï‹ûäR>}Ép>FЗ~FlÝÛo†=nl¨ûYª§jï%…Ê‚¤xüG÷¦¸Œ ƒU0Ìw3H+¸£·$ˆÆ"ú3·@a ÿ§­)¤Ûñèã”A*sÏØú—`\EM€¼Þº0ölBj„Vìrî†ø‚Øe¬jý蜗 ?ïi3üS|"äm–²”˜“Þn¦–VM~.›Z=&а ²GªÆZoÚ÷;’ÒYíWˆ]söÿ¼tó´N{\XîÕ?©uU€­5öõå1 2u[RTÏ›mèôóן—hìL’z)š­Y?G¤ -ã}7°õˆ{T"îî m/ž<$Í<Bh½98x*‚•´¯²«é]˜¬®'ÆP+]ÜÖ¢}É›,AGÒ_•§\¿´¡®aßjxHa»i‚_LeÌÒÓCÒ— =9yÃ3E]=Žñþ§pº/6 V7E¼½ON?½­3Ó‰¬õ!‰;Þ'zP¯ìã¨'Q0ƒš¿õ!¦»ÝÔÕ)f³z\­by#ÃÒ\3/à7‰\déáC{í0Œ1ºP/XŒy£ÛIï³,OÝè⃲ݸÂÜZUûê­{BWTKËÍ Ú=ѽ/’·šÈö°¹—5í‰þÄ+žy–cFƼ‰_íHYÚ{4Œ5&ƒ$5¿}Q\s’(»B¸¹‚ôEÈ+zJ“f2_)eü2ûsÎ|4ŽUÕ‡¾ž½£!瘝£ÕfZÕ½k6ê÷C4ûCOñ^]/¨:0”-fÉâNƒ¸æz&%¦ÓdPp];¯_iײ,Š=xêUê!`Æ©3hŤٖêXí’N‡Z!÷ œîXv¾kÖWíJtMŸ>ÓÒIÜeN2²!Õ„áw«È‰¸b’SЧfJU¹È´Æ=ß½"íì„Q¶ÈXøÙiòhßàm&5ªÓ<œ!†9¹4²…~ÅS#ÛZFï,Lˆ‹=…£Më“¥:wóXÅ£'٠ε~æÁ—þ/Æ5—Õ’†-Ê%]iøZ_X0B  Ì;Ò˜>³-òù“ˆoç¿Üf3¬Û€³Y·,S¯€'øqç%na(Sn ¡%ÈSÓ±T c‘BLœ¥œ&̸`V„\äªgÛ]+§wïI8e+Q-¿V½ÆÛÙ¯y·T ÝöR•^Gx–þ8=}=¶Ó#|˜¾€Ÿz1ep ’Šºí;Ò~…ÿ$‹z»ä"ñT‰Õ/xØ]KöBú¹ÛÊ_;ámƒ7&©,¿˜i×aŒ;Ãé}iRd@7 '&’ðU­ÑHóHÔ—†‘îÑ‹ŒµY¡ µKp’lc—W£ÎtÃfô[Í“E§=¶¼Îäu‹p‹GK¹þ‰½¯€ÁÄ>‚ê0?Ðé×bÙãÖwƒ±£–R×õ?ȵÝK§ëEv¯‹}ƒMˆoákÈõœØ—ïÃ&é¸1ô’^ÀŒ­ Ü ±/{‰ÂvGØãZsW{¼°¦™óO9+¯üþ†5¿6Ûb·Ñaºo¹„ö[øÔýÙÉ(£~E‡˜±¼’ÉA+‘}i ¬åÔBd?))a}-çÔѰw¦+8u%¼ÇTîž6bŸd³A‚¶’"¯;Lêß;¿là®*|¼cθ(ÙÞáGA÷pe¹£‰gW¢ˆc\¤4;(S›ûa‚Âǯ`AÇ ƒ…E€%G¯Q‰pøi`cмýøÖpS ˆw©ÌOÛ¶Aë-Ãßý'e’sûù¥Uõ¶•ð—'pŽXæYÍÔ­Þ/ §Ç艈Žê¬D†4Ý¢:¸P£úûõß44Êz%aðÁÞk·<ˆcr9°ç­ž›çc¶m@LÍ-µ¯õô1@%…öeý@«(â~×±ÔrMÂ>/îM½ç÷R/i5…¼9¬<Ò¶Òay‡ŒP´i©«]‹ÄkãVfv}–¡}·©Ø¦VDq zÐ)½›µn‹ëÓm»Å°œ^ÃÈGsËí3ù•D7 d R-y¶ ‰ZጓîGIZµ€ºÌ,=ô}ì$ÍÚoT>\ý ƤÊh#{Î:6æï©Od‰µ¢::»^‹EhE„fÍíÈ[ÖÈÛÚëa6Ü2Õ1WtôІ²GCñ–­*=Œlm™lLº|ú«‡ÎJ$Ììõ°}dkÌJ¨ OÕŠEt[–Û=îJïUÃQ{o‰lãÃCjtü¥é6hžߋn Â5×F‘¸&ÒpBî=/¼;¦‰oÒT(©Þ<)°ã bh×j8C ÔTž¦?bß»S£î5º£šKyõºo!)cëÆÌ¢N9–C×I_¤_¬ÄàР_!Ø`¼ÀLpcŠw_º]”y=Þ’é#*sA!kžšo kÞ8D+i©”«EŒÕNá&#ÍÜ­ô=ÒƒÍ'VZ)ª¨âAöÇÕðï7ÛÔ=§¹7½2ÅxyÞÃbÊ-/]áñ5&ªÕnI¿ÎÅ?Ü•ßR­¨êcxì”`ا×W¸0$BNMòéô“ð{W#MOY?oKô+k.kò'‹WÝ]åƒg^Ÿâ+?ZmC3ñ4,DňáHû@]%·9öÞÊB4ŸÖzΰ_þ•ž?±ÒM©mè¥èR¼7AXTÅ9ÅIÞÚîb—ÞÃ+è6¥%&úŸ?$f?ûÖ½òñÔÌ}ˆœë}[‡dAeÖ×\Ê…ÓÄC}õBÄÕ¥i/Û h¾aÚ&Q¿$ªçVhÚ@Û(æiÎL8À+mGȼ2ºô®†×F$!H™:g4†/)¶%ÆÓsÉvËúÆ ”„LÆK„þàL*5}%ùˆå%õ­ºø~®™µøúà¢Öi¨[åŒëUö Ûwvƒù°ÙÑ7._/F_Àõ@_̈¢Uú!I/ŒhÐåÅë1\Ù·£×ó¡EÑÂ7äæ>jîš|‚nAõïê™ÕëZÉX*Õkém=7-Ûò*ée 9¿Oß8‰ÎõÐ6z¢`³­êÇë‰ÜÝvú ÒqÇÊñÓÊ(¿ºvIôk¹ÑA)ÌÂ=:¸'/«ÙIøYMtj{dNúhžž«YzÊ—µPQa|öô%#Ç-ø"<*:†Ö:h-™]ìºަŸàŒV ì“úF·E$na…nú™ë)éòL¨Ñ½x Fê!—]¬€‘šá+Í»º‹ð2ɽR©¸¾ów{™_?¶S×&ß¼ìÈoÆÊï…ò7Wœeƒ¶u»±_[“Öq%r+=»[Ás߈DàÉÖ“Æä¥ºs3 ³®Nšº!9›K ¼ $ݧØ@(LóÖÂäßpyڙΌé{7޼›,+SúrÞcÝT¹áÁ¾hBÃûçÈQL¾ß…ˆv¤º ‰nžâU|žË´_´ÕM‘[!Ü«0Aî(!%€ÉÜt#ý½î #\÷«Åö–š1q~Z…ü» VÍ[ôbôüüÙ×Fá`MD´:{­¼“&f€@}ÀqÇ‚¬M£xRŽ“ÖœG³Ùçăë§>?½]k·Ãç!Û»ÒÄ ™»»à¤¶FÅl"$<ë*?Z¯Ç¯&‰9Á(œ†isì•¡%~TjçãñÝGÖå50öúäÍ7ðø«á|i–œÆOÞĪì]=—.Ð ²ûM|5&núæõ±u«´‡˜QPøë2{Huöí†ö)Óüë/ÜX¯£ºš!ïøÆRwæ!"…ÙJjçòµ9ÛUã3Ê—D{iš×¾ÜÏÖG؇¬/ °·á†Ø®éG†§ÃàÕ’ä¨Ç°ÜãßÊÂ1´7‰ÕPÔZ±¯4 Ö¤>f^[÷Ûh¯&… œ—Jw?Æðg“mVß„îçÑ?‘¼¤aOÔ™àJ-[2°ãmØJ,ý|u—)nÏ¡õˆãŠ„{­ã“ÞqH߸y&#[¾uÉRU0‡"KÏî•ß»* \_¡\²&Ù!j9_”¿'a†M$ˆ}>ýö5¼­•þÓ8?²¢¤@ࢺ*ltæËÞqq)˜ëx 5Òqkƒ02›ªs˜ÐìXÑÆê¼ÞÄjÕ]RØŽ¸=“}.ÖGaxÌ´™¡üŒÝcw†¨¯°@mV¡-Š`Éú©ÕdzÐ<ö›ùˆ ä9:¿WÁÝ[r :²ôØ[æ¹Sºúå$ø‡±i©Á;FZ¾•£TÈ3TøGð/Þ<»ØX©œ.ã¹K‚q Œh†'Uïå±ð%‹¢  ±6JS ­á2RÁÇ.œ¢ö\®Hžñô_Öy?Ÿ«ÿHMt·£ƒ´`… ²„™’ñ\‡‰•cØôbÙQß3GP*}ÞëºsÙ¶åÈP@bqW3"‹õ`S^Gx“u.¶œpÇtŸsî´^è2òô>î=¹:ÌŒƒ–­Ì†Î8ÛRy„Ïb€n_ë¾Ëi4ä´“À=IÝófù€‹Ë3Ã];ÒþÐû#k£þçí€Ø¾W)ªc=ÏQª.²'îü=^UBÈO78ùëöÃÙ;=|èX†Ï?ÐõSh­aar)úb]—CwVúŸ þGÍÛÊÙ½ÂùÚÔÝieÆ‹iC*ÆŒ®Ç}ÆšÒ1 oÃZ¯Èåÿ@ò¬ÆþP÷v´XÀÞ`è`¹g@¿]Õ¨¾ƒÑ0Ýûž·›\Á³1ʹʺ¾àpФx1ŸR½ÏÛö¥<#šîƒæéb‡*thâë{\|1ÔǬ`Gÿò™EÜk¹×Ë]–™/áÇ úp~*SÀ´ÒgxÖH ˜ºŒÛÔ§êÏÈ\)ðŶmè llCúx«5ÔÖh<Â"ÓÄ:3^l8}fo‘öœZäíùœ:¡•gòõh×Ò?ˆÌ†Sw§²+éJ²ée‘§ë\kYƒ§´øÚ-®¢Â}æ÷uÕqç|ÛA Ž Q@ß#Ü Åø3Çô™ôÕ'"v×÷_@êÆM°;j””xÞÙ†¢¬gÁíæøZßÚj|a‹*×Rµ…I¦®L‚$åœg+¶ÈxjkBP%ܤe0ëù|Ȩ 4”$Ï WqÅô&Žý«ûã>™7|÷é!TX^gEC¦Tõ¡c鿍4½mw¡¢øž !*xpQeEŒ\.»?qàÄ]f–/báïÄûfm$Ø3—ÉúŒ@ÜX|%ìòùЍoÄ^áǪÉ걃uð£ÈÑA2Jîëg¸‹£/ƒü#Œ Wõª‘Æê9•°ßg.ëÂ|—É…o”^»á#¤b¤eÿMâ‚ BVTQ ø‹@gaÖß—°s `T !úšÚ^¨K£Ê#ƒKêñQMñé‚CÁK,‘êÖAŠPhîãõwÔ¶UyûÏl`P4]6ïfSä¸Èu|ö™ˆ~Ô$O?ùÅ&Û Ým®ý *0õ¾xì3wÙî[OI‚5ÃJêç!_Ôò¯ÁEÛ yxo¿Ì ®nâŒX…Œ|ˆmÄ„†tˆ.1/Û? &~óJ¤z8«‰«„¾Mz„ZÖß|vFRÖR¹¶©|µMC˜Ž‹?ŽHôîrúž¨S=ÈçèE¥ünzP=çd¡«/çg‘°ßÛƒ½'ô¥“O#iw¾$å/] ³>PU =-£”‘ŸMFÆ#Èw¦œs¾V)ìFO¶öo?¬u3F>ªCŸð vuѳ…ÒÄ_íÇÈ4sî° ™îû6v& rzyŽ÷Ìi!årNª1rfw[´Y)ß™ ÁØ·ÉÎöYÀ¾·ÃcÛÖÑâvp;œùS?m9+è‚:Åè"rª^ì×…ôáH»õ¨+|,¬é$'¶$°™ÊÙÈZã㡠͘2¤Š\ø‡ö€fDag‹S‰áaY1KàœÜÊX¦½ðü¶¿·¿GÑ5K3ÿc·ƒg<¿FÆrßö¨{Íí"oá²:ge Õ±ã!P¾ÇœÐöÛiZ—4Ðs0¦˜Ô¼ô¡UñgÕpe4•~S»<µ³*ó=C z{i&ÛÇL¸G˜O‚üûÈxV![cˆlW_iŠýÎÉþ8xøFÒŠH´°” bêë1>}£·ÑéJµØî3Ôx×Mví…EXGwð™ÞîÞêx2#6%Å–ú2A=‹qS ŠÃáj\”¡{Üݼ™$J" ñžÓãWú®«|‘éUì ¦nÐø9Õ°WH‚J7Rjú·”ªïŒ×bds©Yw0|ÜCÚú0ßËíwÓÑqÑ;]q¼ÌdÃ,¥ ßú†ÉuZÈ®$CŒ` p¢½M@‹£DÛ§2šº‰¡²ûq××N£ÐêT]Æ!O,Õ®p ÃZÚóHW,àUâ&D%J'X¹m@qÙ©/¿¼ôõ6¾"ÂY"!²Ažp³}ba¤jj bʾŒÈóUA¿ƒ$FÊ›ªfMh¸Óððΰ‰ãQ•ö±­W Ÿ2ð ÓúìqV¯ƒŒbHý+éyý®”sÒïß\‡.‡}6J—®Í<@Ã?áž³ÂSB!Ç""kýÀçgã0Ü> ÄYU'ÒËd˜¡XÉE…/šr­è(:ö®ýöD6áuÝ‚Þ!³BÊÀñ³½Ç4˜ñå«™)@þPL“¦hŒ¾µIÕƒþØ~çü>ÓË_ª¢ V`F‘Ûʹ™ ®;³/ÓΔø * „ªvðÛFDÂÛáR˜^$áH¢j´†@þ²p]DÍí’Ë侹LJy­ž;ûÖ™p¦“òã¿ú€Uå6´“w¼–Å¥?ŽU.´"6æJ*)"–·çÀ“ø²˜jzÌ}k¢DŽi(:šê-ͳ>Ϭ]›eC3QŒñiK†Ÿ|¯t#”û©ŒMÃÕ¢I_ñ³‚]Lž!R¹!lÄuêL8ò¼.Dk–¹›6ÍVÔŒ`[=o4VïIšrê+£Ž*ÖÀBÕœ\³®´æoHásPÏCü¶ª»^Z:Ífe]„Ñ`/ãiaÔwíåfcƒ¼Æb‘?ùõýª–îëÊ–QÁ`¹a›®ø©ÅÅ´Ûwû1_µb Ÿíøi5ºÇ† NÞÈ!ÇLh= v9ðÈÏ‚|5±HÝ€—IQrv‚v_ôò¨×|î¾LËæ@gÊ $J9bmØÄ"Ø=áO8#óÎÞÓ›%á¡ìPùõ¯æäúÆœ]‘ªKµ7GveÐÌ Ÿ‘ yU3ûMxq¸8^~®x͵ñ¶t“‘M›$úôƒ µu˜=(*aLz%šçÂU3},ï3nÃ×Íao‰”hmüTñDØ"¹’Æ(Œ¾ï¡•ÍÚφõ/U(rU´I)W { Ò›^ZŽ Ý¡¦”{1ÇWÕ![9–1Ð…s÷ßyŒíG@u|²Šz×Ç»¨2êz~ËÆ,ÔB Ûµ9ê<¨Ý’Ì…v¬BÇXõpŽ uŒÃ“ì ø‰ã¤BщWë ä.·ÔeÆ_´z@e„¡+%jF_5úØÜæláÑÕ:È”B|Ò¸8^R¾uõÏ}“¿×é8™ÜDì0t ³û4s†2û¤¦pÑ@]rxG ûÃë%“KvS€srº²ÓÈÝ…Ž_’Ïwã•´‘Ý1°0ncΆH:›\ê‡ÚÑRé¯Í{ÐKY nõD_>žµS7ëÊ;©R«â³žWò\nÈXËfŽ<ŽëÒÕ¡ÝwÜâÃ~$7nÑ;Ï ôÕ˜®ÏŒï—Ù<ð€ÂÅFâ8@¯ú~ްZ½±Q˜»«¥ùcµœ·â2³Þ;Ý~Ùr2âi oª³ïpƒ£öBR ½‚Váѵ¸M騯W}ͤ¼¬~3…³Mʾüûºr"¥â»Éœê´¨cëìU¡6ëRßÚ<·æËÍL±Yœ/"QuÓ×$ObNP6©4캬ÖÐ3PwÂ]#îŒf“äÏÛßQ˶žt *õ‡û°wµC˜…Ò%QŠ<¹.y¤4$)|n ¹lDE<ñ˜Júé ’çvsÖk¡m·x6ƒnûf²(X¦k?…ì÷Ð[^c0–/ðS|YÜݮ҇ޱ`ïáµ]–:®žY/ÅØ2Â-Qq‘›îŽìQ±D{]f^oµGÚŽS4tt>ì©Ùï%^Ï‹ùêD…7<Ú 0½çl‹ƒZôf9±Ö¹Jz(o¯®÷3nå>ãE.a3Ó ¼^UÅÇ(B”×Sc²ÖÁ«P\/X¥½—œYƒf9ŠV¯ÃY–+¦sŸŽKBª^ãŽJòÏä%ÛžÀ·ãh/ôdelÊôKjV4RLc UwéфѣRr4½­É™î|„/]ëD*€üø^qt@¿h+6¹ôT? ¡ö¬¼ŸsޤUÆÄâKâ2rŠKn…Db’¤¬=s…™Í n¦£6-FæšLÐMWyRЉ£ @åÂÔ(Q½èi +å×+X¸‰Ô©E-uÛü8(+çBg g^¶skÖ/à|V“脇(ó]ˢƳK fs“æy05‹Ï;;û8íé16t<"uæ(›–ço3´¯BÓä>@ÅŽòü‰è†¡ëEaYˆ>[EQÆnY/]³ŸÛ:îHü7éɯ«bf›BƒY®õ´O/.¿ô^G­YÞïˆY]ë&vÖs«¡¸ÔÂ»àÆ„kÑ­™\(fnËËÿVHñ endstream endobj 217 0 obj << /Length1 1588 /Length2 7634 /Length3 0 /Length 8680 /Filter /FlateDecode >> stream xÚµ4\ï.¬‹Þ{½DDï½÷%Ê`0˜fF'jôD$zMA":Ñ{ ‚ z "Wòëÿï[ëÞuÖšsöÞÏ®ï³ßád54Pr‚;€Õá0”€° P ¢gb",E@|NNSÊü—ŸÓŒ@Bà0é!T`êV§ BÝõà0€¶·@X ,.-,! D€@©¿€p„4@äqè ´á00ŸSî逸¸¢nóüõ àqäKIIðÿv(AÁˆ#С\ÁÐÛŒŽ € ÜFùÿ'¬+ å)-$äëë+‚"áy^~€/å 0#Á°àWË}ügk‚øœSWòƒ Üå B€· ˆ#†¼uñ†9€Ûì-]€'öX÷?àÏá„…ÿ÷§÷¯@Øog£#ê ‚ùC`.gˆ` ®+ˆòCñ@0§_@~ëòA<@·€ß¥ƒêJFÐm‡ö‡tD@²žÙsãöÁ%ÜRR°øé "¸ÏÌ`E\_“­'li%VüŽåË×®H¼dï D~#ÕÙÒ)s%œ©L"¡ô]±%(§JóÔ‹F¼•g8PRQ(f}HÍUéEŠ/­)3eÍ1Â"!Ûåþ޳y§œy#:%¾”[lìÑef/·Ñ%‚vxć´NmœÓ¿¢YÙ_j Öw¶nW›×É} ï²\¸ïˆwaüÙIøÙzkœ9æån£×úVàžÿû÷Á~ôÊ#ü êRfô“2¡Å|ËøZ-…>•k†ïësQ~F¤Ô£d. s“3¶2É i+¾íî=æ¶¢‡•¨®gÀ!Aéõ€>:1yü»¹Bpâ gô{âw95è®eÚKòœã¸1\TJ_ »—ÛPÉø¾ÌÂþ1‹WÒ@†Íëw[à‡}] óBݤ'lÝïñ>zþˆüHNg6; üÕ³%õóÊ£Ù•­KéjþZPÔ¯*Mä%!îôk” j„É+¿¶fñëU7¶úyŽ3®@œÏÄAŸ–úÃñÇ«mÞ¤ïû}æ¯Tq‰*Rd•BiÉé-Y¾kÏ5˜g¿ˆ}hßšŽ)ÞFÓ²Wù^]“åI\±i"af¡ìpì&xp·nbëS¨j¬‰©¶£MÒ+߬±}¶”‚/~{‹ÝsE Ø-Ù©Ê3QaèˆG…},FU6ÿ«u¤|ásˆžkk,²`15³ƒð84÷âÍù±IâÍýþw{sçî”2Ý<“ßœé”Úý´Ø±ïëØ4ºž˜ÓÛZ¿³E¾ Ý»OJøCS7Â/ÌE?µælœ ¬\õ·“ÍõîÁG»7Ù]¿ÜÍê¶ÚŸ‹#âH;'>uÅëïÝmó3?Ã¥â‡xª¦.¦€øèÔŒ‡Ft6üËWƒ×Œ˜giXÕGܱ1Y\ÇŸ>P†{ƒOJ”½uŒ#ô°²¬WÛ¾~Ÿé8ÖMònÛQ¿XÛŸ‚ó>3Ýi•àùk‘~ÇÅîê~qºà£ÍšŒJB«ÝŸ|âKeQ.hCžá•žQºª5kçã¡Ód@Ý(Ô˜P%ù Üœ·kƒ²+O½MXÙ·}ë§9¸¬w°BšÀô¤ÌŒÑåê õ×ôa/x™<´-®îg\—Ü[ˆl|¬ÇZP\jåùæ‡Ö²]ð2æM¶aŒYrQj)¥olÖýQËÄfÅmLÛÈQšF æè¾ÀÐîû惻_šz*!~W°ùÄ Œû}|üç9ýVÉá¶ÏµÖœìéqži3ÍCFÖį° ^r8Àõv¥A;\{É‹K:Š79òžÂ´ªSïùJÔ×Yžþð.ËÊöråòVk7Ï;ó˜ö½¨™Å’îýì„úx×(¦t:"kc>9Õ¸G?$úehÕÖ¤Ht÷&mİ-™£½§‘á­µ¼ÙÌKÆ}Étu—OñofÐÕ Ý?Žl£ÓóÃqÆ#}BÕFNŠH›() ü¤Ù®x%Ë/dKpL’ªÃ«zŠW&?¢±13è—ûÖ&Ä:SÜÿ,Ä2RíqýÔmŽå )Ñ‘p­êÈšÈTÀgK95tk½ 'ܧ8òЦM ‹:N[°Ii©¦ Q¼¶Ž“‘³Ì†æ<ÇâÛɘ¦™ÙÑþ |ïæQÿ’ÀCÞÕÖŠÙ_y_Û_ ™ËýÖÅDu)†„ð• ¿> T,tÑÞƒ[¸qü ðÂÌ”Éaé"Méë×ë™ UÔ>½ô^ü˜kgÚVÛyÚ{ƒ—Æ‚&yo¯ÿNϼ.‡ê7ôѱâø-´Ùºëé‡×¿¥ f4õ7rà뾡®÷i6l¶ Ž}Â,â¦V‘7²¯|´º—8°ôaóÍ+i«NÎä¼?+Vç„syy³`_ÌËeŠ®?ÓœÞ1.^Jð8GQçAÁpïOÆ´w¬¹c8\>èÕ%j¸eõ2ôØÂ®è$¿¿  ½ëÝ¢›Lé»ófé|õ®­Ëôü\ã|á°xKw›=³û´ñ—×kŠ#Òl§ï eÓò^íx;ªcL<ãÃ>+É«°ð\;¥¯°‹Š ñ.Fl [& ‰b£f)“ˆ÷1£l2Ø¢tŒëž’¯ö\/cÈñNW2V}Omº¦¼ŽÜ±SôMß=E¯•*˜ÝÇZùèì_¬ö,|ëúÎÔC…þŒ§2hU³Í—>3Sg¤ŽŠ‡È'z²ÜÝÉU N2™³‹CHN_ò»Y…¬´Ãß«G’Õä™ý¥_þ¾ÿ°´Á_Djv¥é6wZ¶ÕÐëOen° 'Lõ-tçíiÃ%«]n¼f ‘ÑWÍë­ÏÂbÄá˜cÐT¼±vì@PônanîØòÚ  U-;©P»4ÓÔŽe( Iö¤ëuK<8›1úDýy¾J´5qÌÕFóŽè›K¤zSAñ =~Ÿê›³VywŠh¶òu é¥{…-ý®f@j¹ûÉþ±ýi‹ÂÊEgYMOõ%H7\¹¤âr(·k°Oì~áÀ·:,[É:áQÂCxe?–øÄ¾2®.LÃðó,¤}TØB‰‹•ßXBr‚µ{ñ9?E‚ì6lªágöœîòrhÿj©‚“Íþ,åy‹ÓyÓŠu8¬Û>,&¢݃:ùÃ8§•sfpg')“2ÝSuèä„–´€Ä ’M©Ec\GT(¦.+ÒÙS¡¶¡+Î-÷Û€ÕÓ¦ÄÞœk|[|Wã®Ð®a«78¡Th´LŠß6…¿B[ÒCbòU0sÑ¿Êg~YM»\ãÒ¸léM.È<²Eóšß©=à ̘ŠkÏ(%Ñôqïìxo&^ÑÅl‘ê¾é<5ÿâkXáEÚAævÜ )×ðÙ##eE¼üŽžT*u§T zbì'XE(¿Vx6~_W¥^S¾÷{¶&šSdëì‰~ÖýZËñÏ]NäM*HÙ¯k˜±‡Ä¶D¥6Òã‚™[Ž„ÂvˆBÙZ¶ÕªõŠÚΩŒQ}«6­÷˶\:[»\Yµ§ö±¯–ùMYF;˜c§èŸ,Oø4<í·_Œ¬ß•èÞyé¼ïoÏ™(+fÎ5\"-¡×ÿôŠlóêJâ7ZæE&÷šž:…É·@…ÔmZ r™™›ŽjÓ§O?_‘ħ›JÄð¿QXëó­ççóNÎ"ó {?}¿²À¥žjˆÉQþŽ«ÉvPsµÎ”Ë£US’4­yÿ„»P‡¼’êÈšŒM|üÐsâÑjoMfí¤m"J.ZÇØSè=ôéÔ@J§ìÆØÒö¾p7ƒq{O;qÉw¥ø¢Èb…Áç§NZÞµcæÄ›'ãÃG1‰{®7ÎþÏxgž<øqQU‘ZöúÈ«švÔòÒ æ9ª!~‚ÏÓâŸTÁ¦ÊAµ«Þ¢•¸D¢ó¼zR£Re‡W¶¢£&”éGþÔ¦·ú³½¶tÆ,”=?iÅUtì#ôÂŽd,¥Lv5S§*=°²Ñ+}¹¦8°R#àmºèõ*‡l"0O9˜i(iãZ¼osd +Eǘ@æ`zžÞÞÆïŸýØù!q§n‹mMðÚ#3S!ì—µŠŒç!]°ÒÂ%q!Ùcßzèsoé2Ì-ŽqÓ2Ã!ùÈË5ÄD±guI”O÷£ðÝûR£8ÎËlÚðŠ>¨ò½^‡J6$Œe#íZ'è„M¯–´âüÍ@3¸EêŠ@Yùí»÷½€‡‘&@¬Ñ)Y/!B¯m´Ÿ3³¬»Ò?ºÄ2‰¢ò“k‹þ¹ܦqK¤Ú7 !KÍÞ‰ÍnÅ¢Nßµ*9}³‚6æ50%òèYt± IZÔIy\F؃Rœµáoÿˆžgh ¦’쬖§œ½¢ÖHƒùpJöVß±Ã1UIú«1O}¹öÄ<;bV9qœ½}:šš ”¤}`d¨~1Ÿ}1;š2¼íÉo½ôå)5 Ô-V^yg~*Qg UݱP•b$÷žQà¹+“Égd” †æ­Á%çIgõ=NBN+>¦§§Íy?£Xå`KtÐ8¯q×Í4o7*û¬ÑÈ´ðÓ>[ÔCƒ|maæ†o¸É­aI%y¼Î­N`½b<œfô¨ŽP{‚X¦lÿ à¾t›™¹<ÂÞG¯UÒÔ"BÕ€¨êæÄµpù‘éë/ {¥‚âråò¯‰çã¬XÂåD ¸ò(7úxÞ]9 }ls"tíð¬m~ÑêœÌä¯éꀣ!>Œ9þy4ãíú€ÈÈéîÕÛ‘w°çÛÓS=½j„É â¯s_ Å8(Z¿P2,K†°%­p5s§4®$¥W .ç_=@>VÇf§œRûjt÷™ðEÞ³£y:Ÿzû×­Ø6%@"-²´=ççÉ;ÐöÛ¤Ù/°pWúXº±»{¯ô_¹-Ðω ÞiÆl Ô-z;´Ì‰ö︨N%IÛ;Íó°˜öÈ¡µ@NŒ1Â.o]®0q &ê! ÙÔ|P—ëN°_`MöSÃøcëÀ"çˆ`wúöA‰]¯½Ž,©~XCôþT ¸÷اÈÝ`¤gÅu©“~%¥ÝDâÓÆ«Üêð¬Í}þžÔ(1e’ú'ÆFiÜìÐtþ¨s9òZ¦¦{c ¯³ïF³›†ù¶»²•ÝùÉFŸ/Y·4Ôyª‚Ÿ[³;\µÛ>÷¡t-„±ë¡X!3v|E¥û¹ å]ÆÝêfý-¹äz…óÚ¦Ÿßü¹±¬Zâ+¼¥ë®ý^‡M~ÿ™ÿéæqBÒâa´cp}Mú]Êϰ3 ØéS¤ ÷g•ásVîh¥¢€Ý+«_ÌóþWûÊ$éÖ'ó´Ñö©]mH2‡†®Ú¬|Cp4ÝÆº^ò©ß·¦ø+ÊœÞ@f³"¼ÎZÔÜJнWîæí +‰;gˆÝéIÕ½¥ÎÙ¾Žú²lb¼°»VÜx}tŽûQ^C«ü¥¿õŒ=0õoÙ ¥,}~z¾¼Y®rûÏÅ?ÊU½Ahm“uhfRÿ]ÄïæT•*búiKû2|qz`íN95fZÏ0¹¹ÛE?Çá—»…ù•£gŸF¬­µ—!k“ð‘î±!!«Ð}=ÚU®×F$;~ÖaÚž[RïMqDl‰¹>m˜žJ‹O£s[¤£O¸´:)oƒ`ü‹,Î'¯µù$ÚRi!¶S–í‡ÔåóËŸÝ >3þn®~ž»í/ú°‚ĦD%ùHÜœ[_†ú£ÐŸÏÎŒ>î£IÀ»fV;íÚèLõ>ÅvŒæà„Ì2™.H `BÆw ½x(—KÞ“¯’¡U½:·›$[ÝÃèZ\îÝh~·o*^ŠêÎv¢¤@OwöÙ ‘PSd¯4Ù™?°çÈy 1Ù‚Ž³/sÅ·kqw€g»6K7"ºÂhù’é^áÕB‡ÍLîÆ>`ÊÀ``ÛY™C´O©aû~¶x)Zfê}— ÿ»`w-*èíº[ó,ÔfÞ,§¨}ìÇPWíÂæO„—üKËB±ÜßÛêvY>Á©Â­0¶ô«¤BePKWJ†àæ|gÉÜòþjx`Ï“{Ö“Ú[ª ó¸s‘C€gæ ÝCy™ÍaNp*A:"ˤ5ÓSýèPBúgŒv™€P#2£0x¥Ô‹à*§ÅÒŠôì)¶§N>EÐIˆŽ@ùÈù\(“?/¤a3ù•ÔkÌÄ3Eè'BLŠmãpîÔ”jW˺Ï÷?•úRjÄZ&Ÿ‡ (^î×’qo™rƒÍlÉÃt`M gGßòôQ­ŸæH¨R5ñ³Ø% ¯âÌTö‰cû“#rz1íGÖúç/âRƒÝ&¼Å€Ý´QËÎÃp%r\ ¹§)[ ñ OZtÄçZØé¡»d}Š{ŠÎN»±Ñ!ޝd$!O´e“Vo÷ H2Ãa\Þƒ§Å‚D¼6î䂹ô5ü¦=5àÐ密KÓbž%ô¨kJÞm–Ø,zð9õýîL´ùX'Œ­©Á¦ùòJVàÙÖ@suïW£·zg]yΪâ©]KÃõ«éè âzXBo‡yÄi‰SØVUTY–â9GŽD+º’pŸ•i×ò•ó;ÅÈÔÞoï%tr)›ZÍw¤þ™»4Á²µ‹ZçMì´ñ¦£¸bF†b…¸‹Z2dN®TßÛeÓs:´ÿú²ªwWy­ƒ°!Lèäô½Sµ ê×Ý%ÂÂçÄH·áî AÔåYlß½°]õç, Œ$ß.#õÚ³GoøòjlY,Eß/Y?“TÀ%rùcP£'2É{[8¦›l­%ÐÊ=..ÉN^ED}ÊPœbšƒ ­~Â<Ý7SÆZà•:1éHÍ'°ýòL:p¨Ã"NŽ¢(b6GCQ™3d´äx™©º{ z“ûV¡Z•f¸˜ƒz—«ÓVf¾…õ)Û/žÃ‰/˜„dÞ}”~#,¿cðuGá#f«Ž)l¶Ð–¨5Za2Q^ºì~OxÝi LDŒBÃcé@«MIÞð­Ñnš¹Ü;‡K]»Œ}/žDÒ<šœ=%eM6_€¦•â¶"å×·ŠéÉØÛæüÙÜR¼)lfÙé¸U»Šº[)}£Œs£PbŠºgCÐr÷‘üëÄY¬gÑ1ÅZ!!ìNEthÎúSŸMC¶¹, ÇÃ4âK‘rn(òyšj)›H}Åb å?8‰{”¼©ªã߸ɆdpY×PO™:}¡­$E‘3PRå*Ie¸¾“h–²–ö3UÜ­EGÚïëùŒ3iáÛ‡ÄÙ—©Ð¤‚þ“pŠÍ®ö—b蚬X Ñ4DwܧûÞ¿É£Õ¶SxœðéPý¹Ô8²Ú'Iƒ¤ cfëlhm/"bÓ|'„˶c_Á–Ò¿‹Z‘.àÈ™÷y…DB2¸õê$C“u°¾Mô´”Å6äa6ç:Ã=ŽjŒ¹ž‰ê+û UÀÕÓ-ü$N¹w?Þ5mTáq°]ša*o¶¥IuèQ(±†”j$iìp½`¸„Tþ8f‹s©O}qT·ºõºC'¨³u­ÕÛøilïÎëܦÎäD¯ÎJ‹æØÂ4n"Q®Õ‡z‹d¯å “‚ ¸âUhçÍLÑŒ.øœˆú›O«;Ù½¸«¶úCù!7aÏkŒÚM?Žø|ßcnMé ô("µ 2 Ëò5jë<õõÌØ3³3$¸(ð”²ïúì¹F;ù•ÇIÃ.Ëè@@R.í%'ŒCd”tS^„úiý2°æÓ¶(ˆ÷~¶Oþ>Ö6šé|¼¦áZdQfKÓ›>/»1©Ð»ÍCì*ú©wH¿¦AÔk¶!óÅTâ*°VÃõiì}#vúfËxd»‰€Žu¦Äæ1Zöæ.{Žà¼ÖTJÒI<û¤HæÀº5ÿ¦{™}–ìØ1º1Œ°úkÍÎIÅÐåC/^Ñ|ûy˜Os=(ùêÕ@÷Å}­¬µ3…yÚlzÿ5°%æùXGíËç8Žh®³É8æAF]/vŠtö "§’ •œRãͱ2w `>è›1/"T`É !ߎŒó ƒA8ø¾*9$1bÃc á_¿X}ì@¬í¸z6â u®„íM d~73wo;ðŠ}B³'ôP!Ó["þuô"_¢þ,ßq 0μ=— Ï¢¢‘<¤q/|BJŽc[: —è eµïN‚íØ¡Qíÿ:~¼iÒá­ñ7y¹½´Ó¡EC¿ìòXÜèK9ºÐ×´B8-+s­ÀkÉmí+e|ïõÛp¼ûóì?â…Ü+4›Q?nÊ–ØŠ·Ÿ™HkR}|º=Z=JOa¸ù¸œ_åIír1‰6‘ýˆý^â3 &ëý[ªä™LŽ Â1Aʲ1Õwü¢ŽVËIØåpB RUàõ¡¢w¶Ki´vNnï™,Íksw3¾|ç²ùyç)n'àÆ"Ú¥"~Âb¹cxý´Ö· ÒÖðb˧S 6N:ëÝä ¯Ð=Xåç":_öÒ¼Tñþ*ØÒÊ4{6¯Kx_ ëzé!W¸~S˜èª0xõü‚%~ì›'‡ßν¢Ü IÓû1gãÌꥋ“Àé~7Ïc,:‡ÁÊAAYRÿ¢˜÷ 7×~Lœ«‡â˜âǹárÉcèÌ\4fF&FN£Y•‡s*7B©Q´EzÅá j6GÌë‰/ôÖMÁ¡d$ÃH2P@ë)›iê½'Ÿž kç™û’‡X Y?¥º·4ÀI\Co1y½—”wͯÅiù ˜ŒâWƒpR³t׿KÅó ÂzBæN^u#ðî&#‡ù¨ŒæR­õ¿ÂiÈx\*G/Ú«¯GOg±Ì°Îì·mŽPÀž6× ~7©bG‘}r‡šzLƨN¶»ï!,\½D<®—(y¥;Ñ›tÿz³|›z1—vÄ—dBQ‚”²õ85í”YÄvÕ®VæØkîcÈXx$g/­$yïXž”¨UR†.ߦ!ÍR±”£‡)niØOF-Ûdé…3àÊÄH§#Ýq ÁêGöR6ÆÔ—8ÅÁÖa®Ê|#œH|ª:É÷w“ÚÕJnMPb˜¶ìøœ­*Ð'Iö›Ä[”Ñä€Ú¨^8ìuŸ< Gך¡$ËVÐç&zw¢Ó§’üØÑÞäèù›ÿgÉ 5Òü¾7Û›Í~¸<Ä®´#Vk»*GŸõ+@ †¤9$fb?…¾ù]ᙟÍ4å>n„Fâã´nvª¹–h“»20ø>ÅÃðÁ]a[…ÞÍqQër?Öf瞎å.©8ÐEN98…Kµ…0¶~ÅpL´³xÞ|W¶“ÝÓi®p©3OgZ¢…AýWˆ’p.GÒ¯¶i i|â§â(º[ÍûG¸¯Í=C½Lp–ßPWœ]-œ#û<… "ˆ[XÆ×þŠxäþ endstream endobj 219 0 obj << /Length1 1493 /Length2 7123 /Length3 0 /Length 8123 /Filter /FlateDecode >> stream xÚtT”k×¶"% tÎÐÍ ]Ò tÇ0ÌÀÌ Ã „A# €t§4RÒÒH·JH|è9ç=ç¼ÿ¿Ö÷­g­çyöÞ×Þ÷¾îûÚ7ð¡>Ÿ¼Ê¦‚BbùÀü I€¢–¾>X  ñƒ@‚ll¬ì/?› ãŠ@!%ÿPÄÀ Ø+Ÿ{ÔB!ênN°,* “‚ Ä_@F yŒ°hñÔQH˜+›" í‰AØ;`¯ÖùëÀ å€%$Äx§äa‚hA°0ç«¡'€> Š€a=ÿU‚SÚ‹EK ¸»»óCœ]ùQ{.^€;ëЃ¹Â0av€_”ÚgØŸÔø Ø×?ú(8Ö‚®N( éz•↴ƒaW«ôÕ4:hò°æ^ÀŸ›óƒÿSîÏì_…ÈßÉ(匆 =H{áè¨hòc=°¼Òîâ䊺ʇ<† œ ¶W€ß­C*òºÈÃ?ù¹B14Ö•ßáô‹£À¯2WÛ¬Œ´SD9;ÃXW‚_ý)!00èÕ¾{ üy¸ŽH”;Òû/ Ž@ÚÁѰsC ".n05¥?1W.‚¿}ö0,@‰ƒD0Ìê ðkO4ìwüË}ÅÁ×BàW4`¾8ìêCàí y `1n0_ïþm€Á; °…Ù#W¿rÃàØWçAxÌAWò@¿žÿüY^)Ì…tòüþûˆTTäÍTMyþ¤üŸ ‚ÊàÍ'"à$„$bW†ï¿Ë<„ þlôwªŽHüÑíÕ6ýÕñã?%Àùç|pþ]Ku%\€óo[€D@Ыøÿ¬öß)ÿ?‘ÿªò¿êü¿;RqsrúçüðÿÄ!Î'Ï?WÂuÃ^ êjÿ 5†ý1¹Z0;„›óGÕ°«aGÚ;ýg#®*˜ÝCêð‡^þðþš4'öåŠøu·øÀ ÐÅ®Æ êxu¸^‰òwv5=ÿ^R EÙý3AQƒx€®´$("ð_Í£Ìã·ŒüHö*pEÏGa~©èJ9¿\¿­+a@QNWÍüåùÕ“€Ý?L0@öS `ÿS €øÛ_åþ£ø*êúS €ýmþ‹Ô ƒ¹ìߪ»¢û—ýûÁ<`P‚O(¨ÔÓGOŽËäéÜùÖn-,5…¼4íÁ²O¦{;hâ%>qQ°±+¦î‹8Uð|x‡Ž{çxÐâ%9`>N5 {M¹cEa/£çä ÅÆh‡¢µ‹Y!ÛÖe ±1Ç1çˆ5ž8{&Ö*ô¹d=û¼Éõ³™ÄÀûƒG‡OmÚºf d]ÂöšZFÞŘ'¸¨ßCD)4„Óœx®˜G¾é›ëNîìˆÚÏÔh+-~~†ÜK˜ÚÓEC¬^ãz]Aä‡b¡i«…ýœ÷ỉkR7»Rä6(mF´T$·pGH¢tõýŽ^ ]ëËSðº_ŠÊ3(†­¤5Ï÷|Z÷Ž“: õE2Ã<2M0‹ìÍ4ˆy¼ $ÎjÝ~W¥êáor hÕD\Öy´Ÿ~8ýôùªÏ«‡;‹7²BX.sI[ |ôl:¬–©O¸•ôl6ùc©{Æ¿™Kž‰¯Éçá¹ù¡"bý<}+&!J-g+)÷áã +£>e[7¯=R0¤¯£M„bó3EË¿Ù;À'òG<=¦Fˆö®1kWrúŒ”0W9èjgó(€Pè˜^æéýàŠÒÐÃZüP”'½U¶ í¡™âà³U!ºÑϊ׻{[ÐXåì9þÝǯTÞ²tºr%¥~ÓÝ÷ç÷ój>ýdH… ¾±ž#KÔ6ŒR=,ÝÉë]7*ìJÛðÉ&dø¡2Ý*ÇuZäÓŒŠó Þì{ôbÄ&ŽCZ>@æ.…8ÒErÎJ)zœ®µ¡íñ¤(«wÄÿ¼#×(ÍUQ6Þ §.‘àÿªós:þÃ!¦ê§[­–¥r :Úàî7™ŽÌÑûbŸ—nÆÚöÐvÊæÔ®¡9ÖdÇ..Y¸4©²ú žuC8Q†÷%É5‰SËœžº*Y:a•ˉ0Þ;8xËv~ªù½9[A ˜WG/˜õðö…,hzŠƒ4A™—gxÒ{úA°Ž„b ·d¿ŽÁaùkôÒM.yµJž Xßé5¦{Œ‹+óæg3yl<À¬Ä¥S¿¦ñg-ÉlwKórç;‹Nõ ªqó"j¦ãRc>QwW¥“ê;Bßg t˜¶ÊyÄ„5Ô_”Iß5ç Ð×›ozÍ%šjÀµ’ûÅ·ú~*Í®þw9Hcš™ï«¾ùRáÙ‡€¾ÓL-”–û\ ¾ •|puctg|Ý-´´íëLÞ‚s‰Éa¾‚îJ6/"³°ãl8VÍRqX‡¸®ÿ‚SåþT«üÐç‹s‹@wÿù±ù‰‰a“=ö³KVªÇ^_é…úmŸÅ—´í 5ȵ3¡³IÌ­l#<ø–ès!þLkC™o½O4î:»„Wn“0Œõºujò„%‚¯íÎJõT|JåÞå^§HÊ Íõ± gê” È¼mÏËyñ³ÿ ùóYÉKFc5‡äð <‰J|u8•FVCfÒ€RåšäR:žðË”â=6¹òšC· Kð™wð[ÆHô·mˆ¡ö=ÆÏRÛ°áO»µjÀM½Ìœ¶+G«`EevÚŠJÅF+×Ó±í#¡Âºv·ÇÃÁÕ#.¦+_?øùq¬$¦/øªFÆó"úøžÃý›¥œ$gâ*¾'$ÝgzNºœ#PÇ÷κ “Î_xùþçÒÐNóŒyÞªß+íx/‹™›™èÈÉ>~/`á3S†qpÔMZ†-*å:-æ ÚH è³Æ­-<胿žóVÜš*ý(Bdðþ×µæ\µÞEÀìî“}]r-¹5Oó“Îà‹¨&ÝQy£é·ë5Ò¾‡y['ØE¿»›ý-Ú¤ñƒj%%3 D»Ü-¡™—Qʾi~`*?ï½cÒʱ-ëâ®Z”—§nÙ 4‘ôcÛåŸ¼Ó ÙóÒoõÿ^ÔS[WÏ3£½¾ÛÜ“ò£rúš©'ûæ p?ä íU‹ùáÒˆP*W*HáæH¨q‘S´áÒE­Ãns[çÈ¢°YCšªfh zk®Ë~2 ˜TnCš¯DV`h\ø–i˜q%kRµ¼pkØ Pë0ËSšË¾½¸Ýá¬ËN Ý)×GÝb_zL5$Åòr녯ъßŶiéVH!‚ÖBœŸØè3"t^–â·¼æÇœâæüÅ’ñâí© òAb“6\úí}}S’K³PJ< ‘ãHlkØcmo¡nbã'è‡åŒ69âÐÛTLuw#­©ÍîÛ‡Òl€½Ê> 1@o˜ï¸Ä˜£³]~—Ë“dï&ŽùoØ’ÔÍJˆøe¼Ü’JÁHÔE=§‹˜øAQIZ¶sˇýU1ÃÑ šÈ¤ØZˆYhêÍ6×D˘#f.º&|?uÔLé kÉ„[{ѧ"^¡ð=%NâR&^F¶Ej¢Þ]š½e,1™m½ê½5á©ë‡£÷YËÄ¿E¼#jQ”ö‡ [è ¹v•šD$åâãÚÌ,uQ‘óåndµ® ˆK˜OL¾•(ž«:9ÚkÒÝ4™ ÞÆã*öP®f XkèÈõ•Ó4nJÚh›ìJ$ãü¤µÈP‰¨Qékg#M±m‡Å]øú°Ê‘˜*”9ùÓ$ ¹¢ˆ ÞõV*Ï÷”’—ÎïÇjˆ {žèíŽßýù‰bN˜Qö°üÞ\bý— ?TþØ­JËAÐyèHI€eˆ6½-('Ä見YáXxÑzàëIBÔ›уBLç„AyÒ”nßzðþAÀöyø³Úo[·³ÂSê)$ Yœªk ú‹ºcô™é«iÑ‘&›¸kxÆk”›z.eµŸqŠ»ŠÙ¿gYæòšj´»:¸Ç^æC›#Úä=ßh>ñ/€Ï ÓQnxÂ2‰*p-X7ÜÓwfÚ;4Ñž:(?}D%Üùs{pNŠôšÒ›ÀOREëb¥Šeq½ÆqsÖv~?q¯!p;«*µHÇç›Y³+ï’?di¨´±,>±ùLåªP%au(ßûLK$!†¸Áâ½u-U¼;èû]¹Ù™f*Œóë)îŒl°Ye@cú‚-3r‹RR(:»q(_tÚq®¯H{0¦ý$¤B®ª¼ø­g$Mº,PøÇºGc×@ãǯªLkiÑÖ—|âfâTƒÑðpf„\,hHWlG>𵊹Ø]‰uƒbňa_†¦-»»a>ÌÖ{ß?Xv'¬ÕYÛ™o:é̽‡ºme4]hg9_—’ŽÍe•LØ)Õö\ˆT±Så ñþÔUòNÑ÷DbcÆDpב†ºª”ƒ.Øñ¯|ý¤¼3ZÙÕrîŽVÑ7šêØêΑ$3c]rÍŸñ>ûZ ß8¡àdŠK?/Y²H§i[Ï•Üó“È:g* Šk¸¶€4Å›mQÕˆoωš¾¡IäÄTZ¡»jÄ}¬íôôU®—ý‰â°ýY¹„y=ÁI ûVÏÙÞÙuŸe®ñï‰BË»?ð|î¬Õ.Ï‹xà2DU_Ÿ[µÓ"¼ýx½°}úíÃþ‹ç§Šë‘Düm C×Î{šâH–}Â×%,isêµÊèqt¾ó"rî_§ÞTÐNÂÝ%ó)}bør fRÔ$}$nf¢dÓÓêçQñ÷†·Ft7x9ÝYHRmOÔ5µÎ 5ü:?µƒë!ì祦)Î\„ó ™ ÌÔ†ÒÈÂ]ãv»P>é£zM™«ß0Ñã¾Nê•Ë9“éGcNñ ÷¸‹yhû².98Ýp‹“<÷Í»©ÕËî÷ 5÷)¼K»¦Þg_žG¼ˆö8îâ©¡^Ô+ 8>e~i¦ÉšP_3AuÆDXøÐJXé0–6ò,OÙ%Œn\Þm#ÏVgÈÕi*k\¸ûÄük›\eºô£½A]ÞgÁ šQ‰÷&ï´>zA@³µqѬÀÀ=ê%å÷»ô<)!¼5ž"<÷ ŸÑ×Í€:[*ÝDÅj6üY5÷:P!1ãølDûÕÓÝu¥S°Âë3žø¼ôlІ6fó*–Ùp°ש2#ÌðW‚Dîè¹Ù%{­ßt{Ô§Áò*õ[É3ô}[Üýí û”Ñš[aÓŸÊä7Îç’ƒêÓ¶Å–m÷ØŸ¼PPßl!É-¨¶2€3¼ëm›\C¥*Çs:¿WÞ«å¯Þ»cÒŒõðVÐgâÛæÄ’ËkAüçËIÞŒcеQz´¾Cé‰Vs˜ý¶`c×]iõËTÈåA<¢ —7Ó9Ci™™–_SXVÒ#ª‡ù-¬-¹êxÅÜM˜Ø!8 -ð7ñ™"„C"ºÂY3øI£f•h†-KðÌ’åk«üÓLJ¬,ÀtªÊ$‹œ9Ê×A–ùçg]˜[ö_+Œ[‰’³gÞlx³]¦úeŸúÉJvˆþý}aFjvW>¶ý•^p´×Áf|øb=þcˆ^üHFâÖ4³//=þk´¹NóÍxIªß …¶±(Å;òx~Õ$[ÆÂêvVQR¼{J«{N²ûÁï§õ²Ú&§ï-ØFçµ8ÆÇ÷g¼€Q’ ¿‹ã¡em À­2fŸN0nþ!Os‚´áÇ¢WY^Å™q_Döõâu†ÈOYa:;o¡iüt³J–dfKì‰y7Š <ï=‚$ǽËt~:—Ú|Z±6ˆÜ&cS‰“I§Ï¤ 82·ÝñÚÊfŒ÷&Û%x;Ñ¢"‰öùväBMLÞ)Ëë"ïxî›V“‘žÌvÝ/ä)­ÜdòC˜âz#„KæjŸáò–=¯~™ÆKÈÇ{‹ê‰oiD“Þæ Ûñ iV2¥1à—‹LÃÖ´ŽUz©Êíæ¼.æ='ŸöXw I–æ1èÝ=›Ö¼Æ î½™X¦J_Áñ—Q7²”OOªÑ0^:š&*IKs郆bóÓRÎÚ‚ì –] Þ‰ ámñûw;íþDåõª÷×Ú€ØÕ‹Ù(ŠÖyŽlR”9w«ÈDÎÍܸÅÈåÂ|/ùõfòóƒ`7)J!áé­×·ÂYñreÍ»~e*Cä€Êë7LÓ_š]ß|y¡?©sÒéÿø™9|û@3ªÂ¹gåš^îXj^(ýƒÕø×KÅÍÁœ•~A\Ûi}‚.ïÔ3e7xü÷7¸á_W‘¸’!ª$=ÃÁYÞ7ðÙ”{óȈÞl^žÎxplK@)V6§„†²ˆóÛó¬˜Æ Y'°WI½‚ú‰º[fÉ÷ïÈŠ–a–Á:l!¬m³ß„Ü—ZsÄž¸q¬ã¾"]éG»GJ‡®§ùEú^öAÝTPû4xOÃCòú‰äÃo•*ðÕÏeƼ€‰Oí-3¿:øõ Ùö×íäÖÞáÖVqŸVUû,Ë€'Xè²ç§Ö¨]mWÄr4¾à@tÊ ëH[Z2`G˜ïÌ5”š, ]T¹^ð|Wßgåþ‹ÚÓôéHŸÁŸ[Ò)-ùüÊ…³¤}ÊtDëW£„êN•K º@—]«îNš•ðüh夦¦öPøeâ““Lsw²KH j“ö_žŽÅ…`¸f/ïÒ0šÌ<ÝÝ«k ¯ŸTo?}ÔæÐ²&,yÈBÛòB¿Eé™1|ÉÕDxmeеúe|r„É|Ðò¦êÖRaTS{$Û¿u Ùó%qš‹Âºª`LxM©‰¸ N«žmš/7ýçNËŠ÷T¥‘y¥]?¾‘|rW£Búå®He;ã°ä—ò-h^Ò¤ˆùI¶6Ö/rÁÊG\Ú“ñKtÉÐF¯êÛ¯õÑöÙ‘¿ææNŸ¦˜“`ا߹†áQß)žâð=Õæ§•ûÁ²€á¡Ÿ`±Ã¥×}ÊcÚpˆö£í™ Rª.±ßøHþFdoý½6wˇn¦Á(tc 1Ù[œâø -ÉšÍv«B}¹×ÑLS{wl_3U½Æiœéëãáú ×*¬×ñ0€¼ýüÒ¿š×•TÞAu®–±v&)÷úãðd^ðÌ}bBn3ë4Íu¸¢lôš£vwrŽð\ÿ 8‡Ãá•§²{è[‰?ƒ-´=éÔɆëIB?éÈ8&W£ÓãÆàðåit(j»÷«qš$[CÙ¯³ó\Ñ×§Á‰úìäg+ôà3Qnsö¬­~µ:!(q¿ø•ºwÇ7±ËÑÚd0Ά,<Ä_Ç»U8¶® z¡Qp7óãøÔ@gJWù¢cl÷CžÄG¿ô‚õ§õdýÚ__˜Ç*t¡-%ä(5ÚŽ9ké­ƒšX;Ô3_; ¼7áÉñ“ð©&z­ïç¥OÌŒE[/e&Û§”^òSñR½MLë•`GÑ=:4y³srÇ?¯ ΂+eu#ä©»Æ)`‹‹ÊŠÜ*Ð<ýüùÙéYÿ&¸i©ô½ hXƒP_Æ÷…¼ëޝ8MùQ>§Q5ei,ô«ùV/¦š@@ƒS 3×K; ÕΑHZüà¦öÎÛ|êÝÅ Èu_Ì-âÔm=¨¯š Xà£ãÎSW#m©sìF€(Ž˜þçSdi·ÎTËêô—³zkjT.©l⦵Ê9¯:°§x¢¦ s­Ún—õjÝÜîâ­û\xÖ:Š—êpzfвFž}C„¯èÊÎn•_Vþ0Ýî°šF¼±˜^ˬ53͘ ?H¢ŸÕÆÏÆÖôÖW‰z3ð…¿ËT¡;QÜ{FªŽ/Ò.÷hä[_H-«Êûâ¿ :ÂÿØó&D…¶Ïs4Êc0–ÕO•|„§ãz $K•5…œ.Ï´òv÷ú ´‚+ÈÚÓѬuN¬QæJˆ¾·‰ð›ãYó«ž ¶"‡èNÜc‚¯¢¾î>kü‰«Ù‰5ó ¾ösÁp“¾ç êt²©2*Y¤|©DzžOúByOª˜^r%Ö€ô–±¤¦U9[#O¸ìæ«šÅæ ©Þ7Öǩ޷&tεÇk/†ïÙçÆ[ ª*àú]±øÞq>O̰Ü!WL‰›ôؘ™¹©VB^Ž Ôk*ÛL-ÈšF½7QWê¹ÇØ!:ÓÃQ^ÜF+Ùƒ°JÐL_ñ~ñbzIÛó9¡˜S ^7 RŒŠš@˜~Lqñ„¨ÍfdÎ F¿Zö¯€uÙ9‡/¿vò¨5¼;ñ“~©cVÿván™Û[ØâlRJJK0¡(|Úìc%1PC×Ò5ZÂ~–æp«=™R4 p“üRhÜÒŸ÷e/;Rn*àô;0]>”¥e63Š ÅP4[`Obò^ܼM…)·‰®üÉ{Ûª‡Fý\ ¶öëjdä¦w“ßɈLW¿(èŒ!‰é§Ôe¡3 YœvAuuæ e:ïÛéÀæ€aó a–aæ˜ŸàŠ—ôá|<;i˜¨µÃ¡køSßyÊ3ÍÀ¡% Ï>ö~À Mÿƒ6Qtâ;0¼Ú¶·{µÉ¡ 43}%›fÔ)X¾Mƒ"ÓdŸñ>Z¼çýî¼ÜÝëë±}zî²Ô !ìaþÒ|TEBºH¬™ÿîM‰ É‚<§-ÿëVù,õ ¯ÃF$üQU_ƒ5Øg•è¾{òúÔ8¶³\ã>}àY+Êðv–÷ò,Ÿ °{Ζ8ýÖ-`Ævy—¼[šC+ð~›Êã‰×/ÚÛvžÄXô׳_iÁ°B!fSð¾š.Þ™'ÄÆÐÓy%S%¿ü«i„Ò‰ e:‹ >£¤¥êmÔƒz«ã,’à„Tmɰß’ùìR줫¸ƒrȾlfïgf²vÆh5©¼cG%ËAw4Úz~‚¹Îäu(%ß{º7Ù'pñ›Ë j9•°/³º]ÚGo…bÃ?]ÇSz±Eºîíh‰mI>Ò4n²P’Ø®T÷JÕU „‘¥¥D|½“ì0ûp(ê?}…ÁÊ¿t*s†m«ähJü´½v‡xÛúµÄ”[š  ¯^ ‚ü'"7¶Þðú>±:èP^–Â!ªÆ0°Î—5#°Çé”oò]ÅC¢˜Ý÷62ò¼Û2K¹æVÙ™ÀÍ*¡A÷½ï"Á¢ª&Q'%%¡.z(è¼ÙGþ¦st”ÍÌnÜáè†ÕÈGH;¯$w÷ËMË‘<Ê6 ©)øõüqÏ'O îèË~˺3:𤬢.6¤ ªÍ ÆÒSQ¾ÙŽj2_ª9l癕6ã5äøÆù¾Ä‡lõów'ÛVq¥¦“—⯛¼†³ÓÐ7gÝðF•vž²+€D1ðÈoãb¬9ž/kÄÙ[ßÏ“€®ÚfI(êÛ@?¿ô’jA›RzY|¡È·\«%ꃻ¤@YH0ÉIR.ªí†¸„ãÆöãÛ7g¾£ð‹µkƒ$'¢k¾DnöØ“‘‚ƒšºé0Fùwà€—§”àVþt6Ï_ïNºÞöh°ùï…Øm endstream endobj 221 0 obj << /Length1 2080 /Length2 10658 /Length3 0 /Length 11917 /Filter /FlateDecode >> stream xÚ·Tl6LKHˆt.ÝÝ)Ý%ä ,± ìÒ%)ÒŠH#-ÒÝ -!Ý  H ø­Ïó¼¾ïÿŸó}‡s`¯™k®{fî™{Lt:z\²¶PkçâãæÈkêé‰xy¸yyù±™˜ôÁpgÐ?fl&C; …ˆÿAwᛎàiB!5gŸ€OXœODœ—ÀÏË+ö"Ô] ôÛ4¹jP†Í$uõqÛ;ÀÇüç#€Õ† À'&&ÂùW8@Öä¶Bš@¸Èq¢ Рµƒà>ÿ%Á*釻Šóðxyyq]`ÜPw{i6N€îÐÁ@îž [À¯‚Z@Ðß•qc3ôÀ°¿ízP;¸Ð@œÁ6  á±¹‡ôT5Ú® Èßd¿ œ€zàãæûWîŸè_B`È_Á@¨‹+â†ØìÀÎ €¶’7ÜÎ BlÎ0("è ;­„¿2”dŸ€ˆÿ)fãv…øa`ç_%òü’AtYb+uqAà0ì_ù)€ÝA6ˆ¶ûðü}³N¨Äï`†ØÚý*ÂÖÕÇvó©*üCA˜°ÛìAp€//¯(/äyÛ8ðü’×÷qýåüËŒ¨ ÀÏê °C Û°ý`@Oîî ðûÓñß›` ¶¬Aö`öou„d÷7F\¾;Ø`Ê‹˜=>ﯟ?™#ÆË qöùMÿë~yžËiÊ«pü]ñ¿>99¨7ÀKXÀÅ/Ä àãæˆóþ[Fþ' Þß±ª;(@ìïlmúOÆžÿ ë?ËÁøo--(bjAÖßCnÆ+ÄkƒøÅ÷ÿ<ê…üÿMø/•ÿÛÿoBJÎιYÿòÿÜ@°³Ï?ÄÐzÀ   E¬ä©F ¿—Vd öpù_¯*ˆXYˆ½ó¿mÔÀÞ [0ÜÆáïiùÛnðkËœÁþõ¬¸øxyÿLJX-'ÄÓCŒä_.bsþûHEˆ Ôö׊ñ €îî@lÄ%#À±‹¶ ᅥÀà Â!Dy;¨;ö¯ð(ü2ýÄ<Šÿ"^Òo$àQýLí‘(§÷ xô#Ñ¿H €¿ÏC0ðßND2ֿ⛑ÂguFôé?AÁ_—ßr¿Ècûäð€~C~D–ˆaPø® È „í}^DQÎ@DÅ.¿!¢š?bÏô·:‚‹øVùÃÈÎõ·ëŠxÙ!Î »ß äûÇú÷VþkF˜»ýÝ;„¼›±ÿÅäãC”øGøõÀ~ë .æü_ýåCHÿGì?ÜÁô;mÄ\óÀ½  4<þ€ˆyþiyýq]ˆhï? BÞç/ø_;bãáŽ(þ×+†¸ÿÿ࿾“@ o ö§9¨D˜cmXëU,¥×öÆêz{T¢I_¤œy¾ÀÏAãA–ò”›œ•m%ÙHºÎBiÄÇ9Jö/WãÞf]9ÁŸÓTòáHŠ}›r§\…C×ߺìA4¶P û ‘ô¨ÍG'IO©ñ­LÑLY’ænÃEºv«v^ßµÃvŸ‰\o.èÒ(áq²yí‡(1&tŒëða3‚xBwÓ }Uƒ‰;”pü¥\k,ùµÏ¦i|æðÊÊ`N_ºÀ×"õžjáʈÇäD¾jty#/ȉ“rÔš`HÌrBò¥‰‘eó1hóîæºÏØ 3’í–Æ÷2“ÏŠÃ<Úü‘h:Bé=KvR¢—³;5Ϥý¸”ö¯;é?¤°ÿ|¢ä®ZY*lFWné¨c#K¤;ع¶—Cý~m8Îlj²X5é9R©ºnm8ž«f®¢P¯ôBÙ&˜`*·ƒ®=Ð)VžÐKòã‚­z”Óš£õž-Å–Ñ:}2hs_ñ>Òå3h¶Y²ƒˆ¦£—Îà Æ rÜùíÙÝô Wj¸"Ìnåfÿõ¸Wç4Å y–иD›jqÐ(_UF¼ ³]P§(L=ÅÁÖðåòÝ6zšÿjÖó©×ókvzgEÄi#,Ÿ¦‹o™¿›\Ë ÓçÝ”Ën’}ݨ>¢RѧËúš|¬•çînIuul5.³·aôT$³Ñߤ\žj¯JTµîÛªí.´ïKȯW6ß'©Û×9(/çX¢BÔàkõÚ£«B;¼•Ÿ¤]¾ô9Í0#Ydfò šüA¶hê;ż·Óp{‡’ÜíãMA?­6rB¡²êÄBN%ò>g ºâ’öbCJB.¿ñ°õK¢•¦ptí×fSFôÃ^ïº0` JÂW™ö^í1Î(l´}EöŽäÈkD4e¬ ¾Ÿ^HÍM‹½ÍŽÈbKøq!Ç’(îÊÿó²ò@î裬é$ãI á¢ïr‡Û©PjÖ׋2Çs¨ŠgxZ¡oͬ9ؾö<§é­£¦Þîx*ëÕ5O[›Ù&¦k}ÎyK–)$‡º[”j ìð˜)ÓˆŸ,Š}ÎÂÙ[­&Ïû#7“€•3~‚{Dß°uKì‚ÜSýÆw1U¿‚äŒM½ŽdRQ¦ï¤ô¶’bê,2 ;wµôCâËmÊÕª’ÕÏ™ xJ%Y¶L» Â70â~§šŠr¬®"0íJ|²‰âåS&Õ={cùk;ÂÐËÒF^PDÙ I-;”‘»m¢r«Œæ3þ—ávXó2W»ª›–#ŠÒA%YLïÕÓ‡œE#MMΛ ÞË&££?e>¶IÉzÇ…8’‰”)ËìX|ÄûŒÍ3Gò¹[_jV?iBs§liÁ®¿eO)ŒåtŽÿ"d"xvÖÆÖæp´rüTçyðxqíû­Å“}œÍ>äÑ´2O{&þGÃ=îçy[à’i¶%»¦¥eqõ—5Ê/±9G"}µyÓë¿gTPŸY‡øÕÕ˜ ±\Ê‹Wû¼5#r†p»` 6£!ðEe¥ÿQSd röÌE–ýq¿¸do,¡"•¾¾•×¹8C„Õb{âcù0¥>ì¶Üã¸ÁhOÁjA[ó2ë‹qƒz嚀ᢵýÑzÇku³徭ЙâãƒksÍÂh ЊúØ#Wéat •ˆI: A¼­¶hÑŒfûþƒÌ–½"ɃF7#’Æä§÷«V KœJCúªosbmnæ8[ßÛÈDs?º9ÏÙœÍþbŒtÖj§ÅWÆ1Û`IC®ó<åœEï…é©dŸ¿‚E!Xɧú¡L¤W¢1†%b:X¼€:FۄЋA¿†^ôúôÅñ¡C=GÓÔ¤¼ûìSùF/·Ì÷!Üãx”&»dýT D7W4„»oÕ0¤Ï²…µ&( ¯L=à 4Ö:9ˆœO Ñ[=ÔÍ„‹ã?Ø»{k¤víÉ—º³ñ¶“ŽŠ"Öõ þ`©7rûÆ´•Ú4”!J45Y¦<“é`B:KdiA†ÛUñ’¢PÒÁ4`+”Ô*ê}[©£uØS-±C.h»€¾…d "ÿS*øRÕö¤‰`&Öh|­Í“½à(ÈY ñ–MÛ›¹3³*èŽ1GúÓˆ”3àÙ"?O±‘¯Ãî|üáÊ Tdû…¯× Ëò\Ÿh«oüÞF‘¨B÷âù6»x1fý‹Çòýo&€øíd"³öï’©c°Î¤ ¬k_ð§ê´r„3|O¬Wl¦LP›Y‡F.chA8îJH ]Ö°ðËŸàNí„£ÆF™qYYÏzçbv2Ο-[œÌä‘Dåe(òø>l̽ãáJ¤bñc|aGé—JPò…ô–q3w´SlˆT°v®ÖŸ¥/‘¡ðžp½ïÄîºïùú¤£‰‚ˆÈM…¢º¡nû~Fô xóHeÙò‰•Gš#¶²ZÖЀ I,Ò|øHíöç[C3µ”šë·};†Š$;o¤ÍÜ”œæ­Äž?®ŠÓ5ã¿Xhb~ ÙŽ<—Γd›-§ª¸i&º´ÔVÑo%Ö ]Aͼ[}ÉœçÁÀÁÊÄObrE{ ÌËù¹w* ÔP̆ñ³jÒŒår¯’°Š¶¥çzÀcW ±Þ¥ÐrÑÚÒ½é¥Ó[¹#~uXvù½˜éCk)t_1®·éÙ¤LÞ+Ìg*F¥'²bì¬Ãl”úé,I‚†¦<`ÈAÁÏ󧯢¯®b?wÁ#lŠM_°Î´;ŽÌ¥¦DJsäLß«é ¶"Žœé¹g*žÃ’ßvð‹‰ú¨ÊÓJS*†öì½2(…¢Ð¢[rz²ÃŠ/ŽýíI5çÝÆI¹P\Lx +@„ò3Î6#·øÚ{œ¶Q²w§¦@K/ÚÈÊè ñÈöOàD³ý­¼-/ð!½´=ÛhožíèŒí.ËM ç‹Wòp€ª—œ¯|@®á8gHØf§‘rÞAŒ5Ø–z—Ù›‘ ©W 8ÞÅÆT ~¯]°že¨†cÞ®¬aurŽ:6  ¤ÆLd•2dµù·_£+°J·3Ý`5ô5SªBTRm[¬eæS´×û=ŽE•‚%¶vKDb V<ÊÛç{ñvö«²;ݺD•¢bÒÒ·C ´=þÛãØ ×¬¯û €v\ƒ`Zo|·ùUÃè@ «²§b—²näð]è¢yÖ…Aõ®¥IçÔ²Ì ˆ ÁÝ•ì&u“¬ñx}|É ì£ÿµú+ŠF²ìn½ªW1‹´b½«¾dY_§x¤Ai¶c•ˆs$IÓRYå*®–ùŒ¬—óæÓø=®n"·œz›–Xç$v¥Û“º®„z$¹†º¦ké)=˨üó”)/hÎêúõ°cO•ÎÐA§–*»Äñxy„Ò ‚!³(Q;016Íút*ÔVYÌèRñxrrÒ¹RÒ|7Žþ=]­'q•-„U›“?Wo¯£‹K9> öýbìø)[ò~ZýBXÛf”ÄòÉÝ–ù;‡†6ý†B­0é//§ÕÌý cØžÌéôµŒ»–z[ôaÌæã~w2‘Üh$ÖX€ÓD®5ËÀˆšwdí:æZMYÓ/ÑR‡ìÆ¥W†+]Ù?°ºÈÐᘨ‡èQmÜ6 !±›Aß •Ú¥uþÖS  ($oØ#K%ûLkŸ²õ‚0S½)"¸G¹[xÙ[á™fÅÐå7Çãrªï[Åkì@“ȯ¦êëÍÔ ÜyÒ:%)Íü&*!½vK¶ìܹ(‚ôŒikùþ¡ÀTQV…”‰}:*ì—_2c}„))ZµF[ïãbëÑuÍO¤CÙ¹«ÉþÞñ$=xåài@»ÆŽ7<ºÍ¯Ë¨Å {Ì‘Ò9IKqskZ†‚O°øl±¥²ƒ¿ôå)׳s!þ±EQ›r½Añ2š”>ÝȽRI‡_’6Å’@7£MüWòoÞ«êÒ=cîM‘—!׿Uºv§šúòöεe÷"¾!ƒ»Î>¤ž"m…Ã<2!Ôz;ëµu•®ûî‘+O­ò`9NbÑG›ôùö£ÕJßP…!×=ê¾*YÇÇé<]zÖ÷Z«‘ >P<—ø4âXk˜pp½Ô`m0öÓ5c+åöøû+ùÚ¼·èqÚ-ï`\ÍX‡ªÈߤ۱”Õó5ô˜¨ÃKÓ>ƬêåbMöªI[X8ãêR¡éW ìßèS<|HÇdýy[Ë“ÔÊI½Å¨`â)ðåÂC'Ø”ùE-?¡Ÿ¥ÖÓ{nœ»ƒ/Xö.ŸÃNåý“&w¤Þ&šËÁt]ú¶àźM ŽfÙ#˜YÉNýøå2=ã5Vpä×J;½Wñ›ǹèÚM0ñ„=lû4ÄY£ñKN³àõŒç¾¸ÿž}aíL‡«õI`1#w]ÒvýÅž†CW£qMû€P°c˜n>+¹ÔÍÞîtΠê.nfÙUÛ7®‹âj±c)wÙÙ“0ö­x: ú¢sÛ‰ûrÒ»|=k_ê¸ÿx„šlcíù?Hî= V!Á±v¾e+a_KˆûD›ŠÞÖΦ*­sujbúÓEi»9-àpߎßä¸ô@Ü+œî©“³ê|Ñ ^Ž—Ý¶IW–jœCñKÿ·JLÏšM©øìÂMIñ°•KfR6¤Þ*W³lÓoùu¿_#ËæÄäîi¾?ÈH>è¹´6WЦŸø,–-"žl‰:yÖøe[j;d7æ­$1KC12ÛtÚ’‘Éë‹9V]?í™ZÁÓwýž4‹’¡¸eGm1?¯Ë Ç”TbÚP³$ˆŸ$kdÛ[íá£/i§ð~F-â § Ôß)(#àÀé–—SŠ¡­h¥ðh ÄšO¾ ;Þ{]6¤»áîÈ®5ûÆþxÆÝ+_ Yg’¼‡°^ùçüW³snÙË-zhûÂÉq‹Óœ¦úx³¥V«‹Ñáü3ëošæ”(—Ïó…»]ü=[ÔÓňf~H›×O”1«QœÆA7ví½´a¾”öŠcBd5õ²*¦F8·Ì… þ¨tkŒ>g*¯k¶ðòHK€„ë|#/0ŒÏ^* ¨X°>Ø!ˆ_á± EÃ+áWË$68åR™3{¼Êó¦2 ÌöT>YGMÜs¿±\ACêÑY¬Ùîkô)aôs…Áæx™³ÖÞgɨ ì߈ Èç´côÄYT7h÷DzIÍ]ŸfšI$—vB•¬÷•³áýæ®P¨Bk íäé· ­u…r #¦>¥s‡¶Ï.¥Rù±³ÿÝ ë|iìõ̾ª°*×GB»¢£:$ˆÃ(”Ø&€ÇÖZËèN³`U¥ª|ž]Ü6ˆùV¶knå-!üÀ à„Þkz‡žbÙ“+áêñ4éäñ5·Ð;œ!ÉvSÀæFQÙFê³MÙ‹nlÎMA…(«Y“«:®™)r(¤·%oßñ§_Û†DkÍ @üæ6ÁË|ê/<¢]ƒ€qÌ È[Ic·ÙâO —d—ÍTƒÊHH *üùs¹Ã0ä»s#ȸ´u­+ÊŒ^Òg¬Ô×7u¼Ÿ¥œz,»O~é_.Þ6K]_”ë[AŦ¢¦)ÅÈ}.6ÐI*‹ÂS+Öð³I­iâ=âŸKŠÏ®C‡i·Ú‹JÏØW/3± Þýü E./…>+%)ð]«ôlàU 7ææF‡ª®]+øÀMþn9Ù±€§µ+z|ç-›s KX–î<î­&À'óˆ °¯~ŸÐ¶r䶈2´¶Èèâ‘Û 2æ]æÀSU³¶ÁÇê蔤¾´¼s²c‰½A û¸k†²œ°- ætâl³Æ!¿Z3þV>Äþ²çœG¹"E%¬“l`rÕ*«Çð»1ý—{T\L”¤ÝŠã¾É#µ¨ÇQ•,8Ù… ªŒ©¤QËóÞ¹‰STQß’—„]vE ¼1Ù¸9°³ÌJÆ.ƒ¿öª^pK"Ö"ÎÞ¤?¼!*Jw‰—äÍ—:rC{–¿ÓO½«ÆßW>|×´.†4‚´ïÚ¯0i‹fëYyLŒRUìRªÃìÖÛ§gUf³Jélò€`Ô£î•Ç*Šá÷µµ d(%m¥^Ëqrñ±3§h5òÚ0Nð7Nl·ÐñÏ_0ž ½Tmm;wÏW–âóaͲ#– ïÍ#PjæWº¯ÁBË”¹ÎeœGÇingïΜì[½ Ãn>œîÂʆQñÆȸOËmÓ …ßZµ???åõí/C´®Ôà™ôhä¯FÇ8´êiTªðzbÔßÔ:ên8 ‹£E‡^<·•xî=®wµYõ†ØsGÁDÅý5‡áÃ5á;Ë™‹XiVƒ<ydtÀ»9bþ„Ýèz¡Ò 9îÔæàôe&tvfüتâň¢ä13`ÿ%‰Y:¬xI²aûg½ÛGœÙ®,ÿ&¯¬¸Lb*¤Ïèsö©³¦czœ³ÎÖxÃÏKÑÃuªÃ¸áÓ9©ÄUU>> ÁB¾_ߺ˹V±ëˆ¾=Šn²TRckåoWÃ2úàø®³F;Õãó‰ö÷ûý =+ó/õ¾œáÉÖjªQÊöÔvMò÷M‚æž{çm¤ðWd2 ÎŒt‘y— : h&©âYî¼L¡N„I4/å*‡ØIH}iòî9ó5Ï4l8¹•2”µv¯ÆSá°?çÜlÇAÄóîËöÅ{£bY¥''Æ×¹äšh˜loVv¹˜¿<ûÙ\Ðlò¼¥Ö&;ˆ’OÏ&ÊZ\T[*Œ+€CÉ8Ëjm™R´nj¬Áwªª¡­Üéš*nò5à‹:’Lf8¡;óÂÊtd_øÊ´ìæö;§pçá`Í8È­—2 Ê'vzvªñ|î»ç¤Í‘©æ!p ÉÒe‹jÜ .oVå4ÉáÍÏ)âm1TDýYW­#aÆLé~š3Tà<>3ȬÇcÏj}¿,AY£©¶$'?ö7¾oéÐÇfÐCýÓHÝ×A…¤«¹1Öχ̗Qï$ï0ÝÜ;æŒÑb³>°Á]ȺUë¥~h&ΑԆD`ôé]Ïo­LjвN6ênb÷ºÇœzØÕÛò·ñl’öi¼×.© ã¼_.—¼ð»n"§â+I¨Æ6Á±‚‰âJ]ƼîÂÄÒÖ2¼·I¡ §ø´eBú9núaËå«­Éa(ðéƒë6'QÕUúÝVIågD)•j\eÃäÜ–-ädõ¨Îè©ý'¾€T’=iV”ð=»;ÕüJs– tK™8$ŠØ‘%Ðry¥á˜ó ¾•1ÏjGÜq…¤L#Ã4 Â*’[Xƒ©½‘h’cžþb Iø²7yjÏ»‚Bñ:­½ƒÑ¹ÒŠ<¥rfVÜŽ¦Hü«V?.’§lÄNöäÍE¿‡°rœ†f˜ŠMbÇ«NîIX+us Gõ8òûÝ.Ÿâj¹ÞRÕjKôû:»0*ßÄ`˜‡Œßã€ì¿}™lŸÏc9º¾iN%ÖÂ{&q«7ƒnðÍk³¥õíwë-E‘ð“•su £2  ë!͆,+G¯ãK” ˆòGö“8wÉáõš}=ÉW¾Ø„O?¸º‚¨~ Q®k¼{GÐñBaÚ<¬î*Pßi>I§÷2û"}ÔS\Áá3c“®ÍKñ€Îß_Í5^§ñä}RL'`½˜öÒ€$¤EÞPw-ÎëÑ’ÒˆÀNç.e%Þ‡†±Ãx±ºgeƒšß²Ñ÷¿tÙ%ž 6Ôúæ°¾Bï…ÝÕ‚H WüP¥_¬–K WC9j\TSÏpcv?)úIú³Tz²¼|¬ãüÐE×ç²6sDÁ‹$2r첆™çàu±˜â…­ç+÷ñ¨J×aïé1ªÒ²I3?¿g³t÷ Â•ðÕÑcË£°aK®ê¶DÛ†:‹çu>YHaOhMV†,‰‡>0Êdz…5~ªWlñ—½"Ô’LÆŽ°Ád‰h7àqÌ2m¤Ï^—`Rì½k ðÿAmžöôúSM°ÿƒ­š—*&öpë[ô4$)_™›9¤yódïðDßE¯ï—YV™Í±ã¯Ô4X„ט±%]ŠuP[ú/ ñù¬c?Þf^W3ǰÙ5‹œ4áÍÆµÌ³?ñ SAOÛÄþÜèµÔš­±L†”§Ê)'aþXî’Pã«vÌÃÕo&6˜aA? D>àÍúH2`Êd}îe» ŠºaaœvëoJÿ.n',æ:,8FËÑå+¿ñ¦fq¿ ư҈\¾¼à^Q–ÝO¾¡+ &Xоœ¹¾nï1"}ël$£ (=ªwXLwô„ÑÕ%—ZeÈ0Tªô£§î¥Ÿ–cºXÖuɧ@ (ÜÞòøó¶.Z׎ˆVX°é®¶œ‹2%5É¡\}ÁFKm,RSP£îdï½Æ{«~û~¯ó¨I>¯z¨¢¼ tVaVQèvʘ·Âãñ‘8-é…Ç)EM¿ËÑ›¹ñíÛ¸õ¡g‹$?3ÎiÁYÌÞ3o;\)V‡ nçYD8¾m9àCÍL ¨AR`9*Èoy‘Ii•ðÎÎaìÉZX-Ø18‚XÀ’öë©®³Õæp‹ðØ\";RÌ×çË©‹1Ëᙃn_€\®öïîü(ócEÈ¿¥ðï<¡nF°*¶xª˜Ð:¤µãÙž;8±_z—Y‹gç‚ÁjZ‚üf5i7VgðqŠ¢†`sØ ã˜¼|‹9O(õ½›À¼ây‰£JÔìa;m[íâFP4’çåƒcÁ¯q²”6+ a0¶¹µ¥wccଉü³È-…°ûY»>`FU4iÁ¬xæ@<ÃçœÞñÍBW{•¢×Uã|URÒ…­wæÕâåge ‡NŒÛXŠ)<Vý¢‡óîÝ ÎëŠFÁ ùU­Á(“¼£Íñ(ºN˜Öq©ø,Jwm¯[0Ù øL¯ŽšTí®¥Üm}N^˜þó= OÀ£œ Büù'ì…H¿ðGç ^Ea¹øž2ÐÀ[ÁâEï‡X•[o¢ƒ&Ë+È»Åm¦ùÑÕ(Ôó”“%—³ùB7G6G\ĶVÇ9QU>·®f(}죿}´ž*ŠÑßE¼IûºŸ]TkqÄqD9ØÞý 7–Ý&: Kf)Ü‹:ŸáSÊ04õž 4Kn:9ûÁ“î)|U]²¦šj ¬ÁrÔQH×HH>½~q±•™¦…ªP¥‰ý¡õUöíØó±]¡ç­fñMŒœœ~ žÉ0æíÑv±Ïtî[36¥”nG êqó¢=þlؤ4;SÏÑ+¦‰7¿›ýºÛœ¶~ç*D37çï÷œX'ÞB!²¨è&m¢Ÿ}œ]yºš-OëÚØ›jƹaP©†±ËkTOÖ?UlœØ_ éSJê'ˆ—Dý«fað‘Ê'¤¶EßPy43g윯ªÆß‹~ÔÀƒ•Þ(ÌD2‘¯†ïa [Mgåª=j0z¡æi8ذ|(¤ÊoliI’µõÌúêEz¨ÔlÒ`K¼¡nñëòLR>ù!HÅéwCÍÏ»½³ Nƒž £èy•gÚ»øª"@e@ëí5y“Î3œFÚ{Í0v[ˆà sÖA‰Ò¬*ÙæâœjÁéK÷‡þ{£,’uy7“©­Ë?C¢ÙmÕ¼ieŸÔe……ù\€†âÈüŸjÆç—Ïb|ªÈ k|ÑË@3‹p¬&È;¤{Ýä-‡^.ò­%09Mc.oW³í]’¸„ñSΨžYë.xÐ7dbì>\¨ü™P;©’gRÛsÉù¹4¼E 5¿çz*)À,jüvÌûݲ¤(ͤƒv~P½L-Ýw!Wö1)ëÐOçZ4‹±A¼úÚ…YÖÛCª „¢qT— ŠÀvò¨è†Æ%1]`ÄåÏ郴$¥eÙ#´É¯iÜÈ;;gÛâÂÑx­„5!»úÍÉO.?Qöçï”+ªƒ¶¦˜©=O+(>ÝâêPA4å6Xžy3`âãÅg{\~¶›"7qû¨Dæ¹ÉŸÅ~*¨Ö(üŽïÓp#>m>ÒîC×ü ™U»@ÓŽ¥wÿ ±8:ä¸-±ðBëϲ—vžµK›^Ȁͱ¤:Ù7Ù.æeX1¢LÚóí3Ÿ9ag ©nk”˜Èw¥|³2%>Õ@ÞŸé/sœ”ËÍÓÌFo|•¿°aºÝP t¢`Ð(¿ÎT˜ˆe{²Ï#š§EG$Oƒ¯:Žþ}÷ãù\ºÂ ©§9ŽžŠÔÜé3ÝäƉÂ@ÕêOváÇáЏRÀ5º¦`t½Ðµ6û“©ÔDF-®:ÌÉUÎcèÇNŠÕC,Zøu—J­9°¯¸6¦ö"Æ«F©Zñ8´feU?•„wt”ùñØ_ko#*sÙZ¸¬ÐsÏ ŽVÌÈœ¢/!ÁљҷïH³êŸ¨“žÑ5Í+YUš¨Ö’¦ÁßjR¹5ng|lQŽVƒ¬.õ$¼ø©—LJõêµ|Ž„K"Y çdM0ÕwÅ®hÏ£t‚ºJåš°2”ˆíúÆ™h†àïï¦Fs±>é®ËvZ®>j¥H‰xcˆƒZ=ªÌò£6úù˜Z°$ÅËyÖ¢"‹–6ì'Š}(æÐÍžCøF"¶Cí` ¿þòÛ´²ƒU€m½tµÚHÅ«:¨ñÙ!ÃÄ œK£ït‡’bm=õÉY´Oï‰-Ò0ŽŠÐ²nLŒXƒâq¸ôg=µ¬|w?4}‘¬.ÿÙÑ=±CoTÏjO¾¼¹&˜Ÿˆç¶EX¨{ëëÜߣÜg²[éí¾§»@9„eÎÉoR0C Šî}¥«Òì}_ý|WäÛk›@½BWYÏÀé—þlêÎü„€•‡i”4#,Ø>–>€G·ïE“oHÃú ZJ0ÑÆÀ/N툿øu•uìöj©ôM©Êñ>™–œPç´êû§U `™;ôØ/èu¬¯MÕVæLÀ¸Ùb¶̹%•?“âj3â˜ä^yÜ@%ÎiŸ’$i U …L¤BšökLéDòºÇG›qÚ§Cm§s+Ÿ¹lð¬îWîzÖTÀ|D:‹d&5?vÅøÅM]Û°+·¡Ýüè‰è;:^“zR«À-ÓŽöéÎ=²ÿ)ù [Ð^AŒŒŽæ,[ãIY(Ñ‘Qk¸sL ƒ)Þ¸ýÌ×3û†Ò>‰ÒHº?Ì›ö½~’ë ¡ÉÁ¬4戻wϧãûv„¶ê*é‹ûVI5¿”<,åR1ƒû'÷èeì°{Z–üçZºjŸ» ®Ã,̲ÎWwH-¶<´t2_l5âršb÷½Ï\ˆó©–an0Ã¥ÿg ¢.ýQ¦dRSýIçQª¤ú ™|éphVпNªÛ†›±éPTTÓ€"Ÿë‰~mPºZr\y®KÁkUE·l­Ã'èö´EïõÒ÷®J`×ã%É”¥©ô5éû·½ÀQ·ÞûF9õY'EjÈÞõˬA.3ë—­0^øÈ§%Ýîió¤É>Ù†Øô?LS}q¶‚#“˜DEy;7P㿤xX«†Jj>°Úæ[{³*C¸á&OñÑ纃þO#+â Ï@vàßÃN£HØèèTæ-öŸÛe®Çå}ѵ0³í ïR#›o?i˜Å[|å~ÐuÍ‚×3åS¦urݰϠÏ_ž6é»ZµK‘ª"hPÂG¶Áû¸F*”§0 %‡ ¥µŽœZ$""KiÚBƒEtÿí,–0ùœå«@/PúÙÜ].µ×J¸ÈdWÎU¾fÚèU¢!æ‡[û3uëùWÍ,Ð(.³ée‡aç·òÚ†íоä:–“¤¥ý„>-@ endstream endobj 223 0 obj << /Length1 1785 /Length2 8878 /Length3 0 /Length 9982 /Filter /FlateDecode >> stream xÚ´T”k÷M—t+C‡ÄÐ!Štw(%5 3ÄÐÝÝH§Hƒ€€JwHƒ„‚´tH‡Ô;zÎsŽÏó}k½ïšµfæ·ëþïëÚûfaÐÔá–Á-Àòp‚›(QÓÑ<@ ? ‹.ÿmÆcÑ;9Cà0ñ?dœÀæ¤MÖŒSƒÃÊ.PŸ€OXœODðbÿ „;‰dÍ]! €@;ã±ÈÀ<œ Ö6äcþóÀnÉàáú²;A,Ía5s„ ØùDKs(@n #<þ«»„ á ÎËëææÆcnïÌw²~ÊÁpƒ lÚ`g°“+øÕ0@ÝÜüWgß?åþÎþUûlni ·w0‡y@`Ö+ ÐWåA¸#¸æ0Я@s¨3™oîjš[ ~+7ÈKiÌ‘ þÝž³¥ÄáÌã þj‘÷Wä)ËÁ@2p{{0 áŒ÷KŸ,Ä l‰ ð|ÈÕ²´C¾:œ‘#ùÛFnÎ?Rf ýZ1~!a€¹““¹ò’‘$ðâCî"ìþ{ˆ¼<08™@¶ç°‚;áýºQ €Wþ—é/ð*ýC¢‚^ÝHLÀkþ/‰x-þ%1¯å?$ˆÌCî¾ý¿Ñ¿:ãý|^ðÈàµúä/R”õˆ¬nó xÿ Fª´û‘2¡ R§ý¿È‡Tû‘ªà R‡Ã¿M # 9¯ð?ÚàCJqú‘Rœÿ@dâD*sù‘Ê\ÿ@¤2·?Ž©ÌýD*óøÿuù–.NNÈ÷ßïõDNÆø÷Ë v[â}†[>¶}Ü|Q-EãÆ½6Œµ¸ÜoÐ.„`Éó²QÅÎP˜p”6UR¦j~) Ÿö¦áÜ¿q7îÈ XHQÌE Èõ¬Jpçº<î°Óà¬GER#VI~$h=$23Â0bKz>}"Ò)°ñvýÍM«ó†¡ØÀPtFÌBƒˆ‘ÊiÝA‹2``^F Ç’:¥¹è*éÞ EAbÏ¥›£ï_z¬ŦÌÏ÷gõö¤ ½V骮 %»Oî©Ì3˜ØwŸ"!Kùƒ3 «´Ð™Li’ÀÉ.”¼Á¬‰]|³“û5uDºêûf”% òÔ µh²”ï¾ÄT©y|·¥Ÿë•LV7¡„b„nM>ÝÇ‘#…ˆ[´ïL> ôtî¦ Ð¸¾®cB%GÉçYãÔ`}ƒÒ#Cð°Š@é ÓR[‹Ž­69£]ÍV`8ey([ÉÀ¶ûûïzÁrÓª`Uÿâºý¦º±·)-/JøY÷SÕékFÓuß×ðêtÆÒÈšcŽ ÛQ«¢’D-ÔHÀ¬Ý¥D™|GD:Fý;Wy)U7(¡ri}/‰Z¤Mtºçו2A%’GàÁïKLh¾g‹IO+(^3·MÂPå>ô,‘LÁnÈÊ«+‚ðc|±ù/·|sõvëw$ô [’Ç2LeÛX^¹±SuC®µ„ÔP¯ƒî)z·X]àXʰÕÄÑÕò~ÜQç”oœ#Á(éÿü7J†ÒqN~7¸y'ÿÍp¶|vÖñÑ™ô'±Þµé|£ø&˜S–­\&1çSVá¢Ç>±.^ƒ‚™‰v5;­Y¡ùCƒÝ²ÓwÂϺ~¨DQþ†ài4Ÿ'äÇýTü»Ÿ‡«äGi‰o‹¨ó8<´–LH}ã´x†’†šâ×BšC¦gy¥j´°¨É>ñê’˜/ª÷5ôpð±ÏuÞ|/̆@t6æLIì†Þ;‡,pb ^XZ¡­“9ƒS«ŽëΗGÁ|n$”^»³]IŸÜ-¤7¸$jrq:ôvR¾Âku.÷:x2bL}†"Š[µ®èª&`/ýÜ}Âuí–ëØ.ÒÛ˜ hBÓSö ‹Hïá3ƒhVnk6°,˱ ñ"mè7,!ãÛûž3´'UiœTmû~Žbã,î\KYvKûvP¬ÇG+irÙìYí-Í] FöÅ—îaÛ]§2n¬†å,£Òù§X‚ ©I&#yHÅBµ3-!ݼLøm–ÉËýö3æži™øO”D¸|{¹¸3/X¼QLÔ@Ñk;èßXv8XË&~€·1.Ruç ÈërE>jé®”~»£‰Xܵ*p­ãˆSßB‰O”ã|ö•r]n=–p6˜øJÀàØ‚»û+JH…Ëv[<=Mý…˜zK¨ùccS1B#‡½ô†ê”MŒ² Gªýw~ݹ…$Ø;_¤ˆ.ú'øÄBæ+¡h¯H¢ãDÉrÈCצ[¹ÎPútFÂìï].ì[0òûשn¨ê†T~h=2 :›oçÃ6ÿòŒqmåè€W!I§ÃØ1 ×çåK‰—oaÃŽ¡óXo Ú‹‡Ý×½·„"ëæŸl½ù„²XwBFvE˜ð:W,RÍŸö‘ðóÉDòbS´Ô7¥'”~[õ1TçW{$NÕǵ_æI ™[ÇË×ïÖ<^¬%Oå–ß'WÑñÉ¿$l¾ ÑØÍq”k’¿«ÞºRœîî — ˜žÇ­¶K"QHèYn·!nmÞ:xþ$ uáËý[Âýãdt< ׂŸ4"ÓEVÒ”&øwNGócå_ Wí×5Ïßµ›x)=W¬V=}m&ÐhÙBé;iý.v)cGzn£y…-—ê Z¼{;Å+ºÖói̬’CRÏlÚÃEÉëOk*s½Dp î—5/ zÑùie8±-5ÒÖi¥¨Ù-Zž¨Œ» äQ_.?`9¦óÈå2YVbmˆ½i6—œFßþÈÔ"¬3d_ó àâe]5Þ«+Ï©–¸ÇJVÃÉEŸSýàGeï™´i·+VüM2mðóëW!4”(îç†ë&E1kÅ÷7ï^´XNRýtwøÔm7Køó–"ÌÇ–"E­ýJÒ,©e–ñt ××’,2‹5¹>¹Ñnôs©º›OÎ\"fõý‰è©\ÑÜüÙ ÑIÕ&qÒ«%Ô×[—(œ¹î‚M´ ‘Ñ¢2†ŸÃÕ˜ošo³¢,Rxš<±Jf< È™ âyl ¢/ 9Kºê­ì¥9| ,)[((Gl¶J÷QTAÞ‘ŽÅÒÓç*ø¨V=&VÔ]‚ÎñèÄ%‡îê LÇò6íäþ!hwGpçCÔ±p¥ÛSŠFû9Œ©Î‰Np×9î)ënf€œ¾ÀQ2{ÑaE…@`nk±³¬£Î2›x¼P¡‡d4eßëÙ4lš‹Žz6±#O°dƒý”¼,:jRvtâxœD·Yß)^E¹&¾`gÈÄ<*3–²iu_Ä∫óvyªéøœè'£¾QØ’M› ­‡03õ<ª~]ö8\²Øe<™ÞÚ‹4±v¤4Ó]çKÛÕPôi Ž^¥0ŠàÈ@8‰„'÷žÚ&Hj5ú˰YÑQçÕ6'£?àæ2xâÛ¿zq Pa½Z_°â¯¯Ký¥uüBš´•ü©­^Þ0½-£õuý³ˆ+{§ãЏN©g(Æ’ ÷\ôÑ·ïo6.y.-Ëdb}[Yå×q¤«÷Ž)‚0dBÔ`ñR]ç!'óìÕ…H¦'W×鵞J ͪÊ$Œä8G½Jtíù.AüIê©Ïª;Ë\‰/›ÐW ¾·Q¾*t û8‘åé^­5ίQªÅá©·ùhòÁ€Gg\"-gR†âÞ©ìíz:óSÂCù)^§ïôŸÆUƒŠ9ò?' >q 1yš™ÓZbb[+¾~®PæO÷î«û C8w;ÅøK­•c\÷¹|Ì4 €Í¿LöUÚ:-|m´kfÓ¯ÀŽíÎ~šu•éeäïÚEÅ}¨üÞ%éa•V¡;¨!íÞûí’ÓevÁçÃ(>³3­D"iýM´t£a) Ûæû>é~$ó€ö£¨ú”c·ß{Ån6u>Ô^ß°‰Ò³ T}$ßáˆFêV”óÍv&Ô«<DƒŠÑX´)Øâ—æ½ÕD¿Ó‚o}j‚çˆj áØžÓ<)ŸhÚ™È(ãÓ&Ë'!H_}[pßì¬/¼œDªu¿š¨Œ Åö×qšÖÒ'~‚ Ñ‹¥êÊ÷UoøV$®došüª‘UÅú)ÃÕÕ«£S[¯N?{àT¸ZC¯  Ò•wp=&Â>B«> áî¨+D Ë¿°‹™Í¸w^–×uT®QáºÇé¾…g²6ÁÕ¤¶(¯¯’¥åS“ »äŽfh±¥£©äÓpSëœx};ðˆ8Žo‰ÌÛTu•b¶°s“Æ–Šu$·4G¶ò…uˉ[7Ù:jÑЖģLˆÚ†–Zɾã4š™†*ë{¼FÌ"¦wƒõa4ÕºÔü‡ö3ïH SQ­ÆËgÃâ 9í(:ÔOn‰=È j’øTéSœè÷Ô[æUJ~Øtà —^,26´‘üÈ}~ÔûtÈ¿Èü§ÔÖåKèýœ]à0Wi/[6íj[¯/ncí’ž½2t¯qÎL›»‰3k\¢GœéAºåSð…3JFà9Ê¥"Þ"Ìt+ü1ÍãŽ{¤‡n“MBÐ?_a›¼³´5š<§§ (Ò¸^zö†"žý‰›â‹& ˆF•“~úºÔrûrÊ#»vú­Vq®q ÏjûÌÚl¡ØÕ;L±1X3¦ñYHÝyCÉⶆÃ0‚йwÏÍ£p¡­5!!Yc¦ª{~‰€Ul~b©4|¹í„¯ƒ&9¨™¬¯häÉá€V 9ÿá'» Ó<~,ÑxöÌ“·”)?Yh_~%æCœ‡ƒ±Òti‚†Ûì;µÙ‚+óN¼¡öït5W#xuÇÃi‚–˜ê•†®ó¤$¡g0L·FyÕOæm †%ärØæ5q ·®·Ë ÅÓØp×ω±¨·uàDÚË@,x±c(„‘½â$¶,˜¤ ˜gÆþ@KÐMгôhýr{paúZ îf0óÞ‹2KcÈ9U´ž†ÖU˜ç*.Tï¹æÞI—€Î`oäÓ°'éC*¥´ühŒŽÎRë•Äw“ÁGUíÛ‰^ö솞« ˜3%¼(ôƒGr‹L1?9…ë·øÚæ˜x£œô1õ¾=í4Åþ̲rý8S—׳'ôÖP➢fçÃÔà›Ñà{˜’Fþ}‰ƒaºcŒËŒMë{r…ñWókýB³cjÏÆ[¼5³OfMÛh˜“ek»PËUÄ£HÿL<å§|âª19J6ÎÄb ºpc]3T™q$AVdO> ×»}S"ä4NŠúSû s‡åѹ>ùü2V›©”÷š¿ÌmsäóG[Þé¡àQ/tîÖ¨rŒô{am%"’Ÿž'Õ5¢¬Šâ5Nø°Úø?(±|©‹I¢<~hí½ê~&‰æIw,4`XÂw½n™Þ$ e’±°ô!ü¼&~Púv?+3ÛW¯G3•ºÇJ]å‡P¦„|‰ßû~-_2óÆÌVY\ÓÇoï¤åÂ&އßÈr™2Û­Øïʉ’o”B^LÒ~LŽ߯魽€l бú b3ϵB~jéß¥Ï öõ1eTÞijkú˜Ä©×0©âê/Ý;¦’ žfæ{H§º±‹Ý½{H¶~ÛLÆ€ÅÞZk×Ä/dsºcp‰ëèI¤‹ö-PWl÷óx“H(:Û—Äpkø’™¹ wb‚5 ùFHlLÔhbõ‰_ò9±#§Åý Ëž …¹¹Ž¯mXiY¿é².FKêËUª˜ ¥²cVèÌÄáM±D.P¸-éRâ#•Û¿®]iÅäÿn–ž¦}ìÜŠ¯HY%xDön´…Ò¼¬`”ƒ- ƒ=™­ #NQ ÆÝ ±4ÍXuþðE…ê’ièœ(âÈSÑc,‹È<8hZ+†dÖæ¤Ûnw6iÇÈ«xßÂß›jrÓèW¹©ø‡Ù^›Ù~šš0g/dØÓÕ˜ÖÎeõ¶â½3tQL\P÷Ù‰B½þ,ÒÇR_puYôNíº›xHf”Ë‚Rü”æë׈fš2x4|så‚@µPxì¡o¹SGç}‹˜3ÍUñîHï8÷r!ú4ýu=¥lbâX¹Or#d™òIõÙüRd‚ŠÍ£kPfßMŒÂ…F½sÓôu£- ÆÓ#ߣ‘ RQÓÚÿ¦C¤žå¶®í¼2Ÿ·‰ ¾Û–ëcî|‘‹ãäÝ’·9†JÑ„õÇmwÚWÀ ÜÅS bŒˆð‹‰·£XA¨µö¯ðßO ØtÞ~î_+¿h2õô¢@éS²ò™†á“P-ÌÏ…¬êVŹa­«ËÔ ˆù¦Cº ås;»U“Z±›ž°÷Ä“ê8/7•½:¢ŠEÖମ¶¯v’T „-ó÷»/Þ=’ñ~6<ò£ ½´zÑH1±vîAvÒ¬§Dbó<”7ôG öõ7™™E×[âGlÊ P²«|ÿ¯÷¿õ¿% ¿ÿúŠ£ûÉ8†Âob‘º;Ï… aY”ô…ÿ‹a·ð±¬v' ëõX®><ÉÊ‘§^Ž3¶ Ú¹.s:k¸Úô•‹°ÌËÝÉ… JÃ.³}óYt¬ÏX«Y²kÜiªíéoe)QÖÛD ’ÞdfóYs¢—ßw$ªbûfyôëLjÄ$W†ìHxkVëe<@+2ô^æªÓ*jÎkÚM–Ô‰$¾CÒtúYKj ™ }o¦oãÍÞÝjФ–cff=0Ûwê³âù`ú¢H0ÍáWB‡ÒΡLìå’Á, ±óu\êÐÕÞn¦„„~ÖçêÝzãÇþcÔÕ˜q#­E(¨Â¦oéýy5·{Ÿ¤Su27U¹Ï™‡:¯óê£?fÉjÈ:v›U‹1Àl©WÔC*)1‚´ò* <â É(r—8\׺ŸºÎL¿ÖT»¯‡â"œ3m˜•ÖñÈç£ÀÛA…]ÁjhoóWÀ¥SÕï]íh $Šìè»~)Ë8ˆÍžžÀÇLÞ¾7ÞËóêÌ`:ŽòÑ(?¼ÿ±/fx¶¸ã6tÜîˆâhçØ¨«ný½Ì[Âg[ õáÐC˜Â1~Ò`ŒA›æ¾!™a:î²Y`ì…+gyÄÇŠ™êEøvœÌŧy ‹‹Wiëœ&ÿsÜU?!йYFÛE.bõ‰Çúƒ˜¼L ›Ô0¿– ™íê÷V»:šlQÙc®9ß>漸kÏCDª.‰29“äÔ(q´wýV4Ú³^Xк&X’=ÊÎçyî Çæ˜}C²«·þF;”Êû©¥?N§`¦ÍÁ‘çP¹KÅ”ÃOg(݆ç8ÒÁ”daKëE!>e>ìïºøý•I¶8°Xãã=½Ÿ†ÄuúPHãÒžgð¼>¿à<ΓØþ‰bêöDälvë[ÁL‹5CÇ|üÞºU?/*`­eÚaÿ€¾ HR 6èw˜Ø rF¡ÔñÀi¸ln\Σt ,öD Å­½AÁaw|š †–Ñ Þ*ŠéÏïØ»8T_zN=ë­]ËðÅ‘ÙõµóÂ`{¶n?ú©¾ï!N|‘ð7Û¶Cð¡ž0Èlöú!iuᑊ$ëó]öx£‡ÙGšÞÂDŽ3T¥_ËŸ¬i|:ÍÏeÃ3ªâñ«Î:î5åËÎl·:¾AÝ+ٶ̇#T }ÈdÏ•8j+M£%;IôyZ4óÃSi-†¾…¤_؇3]à:oª{›pšOìüè©W;käjÂTeO¨")É¡Ów„fY ÑlÌN¨Yqåò;5®ñæº#7ÊöM¸äé¿æ¯0¬6½1^U·!97VÒO7<¿wåî¬ññ(Š‚¾ñÊCÞƒ%û“½rƒþ¡'UKˆY…œÑ¾&“ÐU쮀ÃCG߬ìØõ/`%k!œö!”ž<œãwS§ø»$B_-myùÕ%¯Ü|öŒcLë•,z¿ãšq“'zÿ  QÓZ­ÇZšop*1Ĭºíf³7îAˆ€^²_<\y:ÏfBÿâÕx0×'t<Â-thÝú=|:=ﻜ#Ⱥ`Û]zA öå̘.íÛ+ÂLá ³ÁI 9£+Èò©'zòò7.NÔ¼ÏÏüÒMX$†pHµZlê:0 ãôlâ¥} ¨DOªN ïÔÄEм}׎î<¿ºô2>ä³Èí¹!\…Í\t2O£õmd4º|Dƒþ4ä^Ÿ••Òïù?åàéZäWÞBA÷D¼;ó„S-‚A×ù£õö®µò"*EOêB>ÿ/ɯ{ÉÕÞ†ÒÜ Hغ >>œÛæclѳNJe–p"e˜¼c}¾c7CWù^XÄ9Ò[m’Ï|M‘j‰Óx®åûÑQ{E>ì¸oQ7Áz·í'9í{8¤ˆ€ h«\–U–0òyÉãÚ¸ˆ}ÌR~)×]™·µ¹IÌ<£î¼²ûóeTfa)¿~î~m¦$Ô¶–¥yÉ44e}¸*Ð^¯· ü„îkÐË * âÛ3¾ÌM|V‹:—]~ê~ŽÔN×Å#ê'›6ߊûÚ8¥ V!WrÆ»³¼?Ž1Dûg¸Y7 ]ZÆIðŽ:èò(ÎTñbÂ2‰ Ù‰‘Ž}¨ê߸è°/ÃÅñ‡¢ÕÃ576³ÑB3Ú·2~*òo †§3€Ý:=¦¤ò~&¨Â'c‚Ó§_~r%—s,}î}t¹Éóhì4#€}¢Ñ`ÚÎjû©™Ãšæ`–·^  e’²“OüM·V §XQV“”²Û“˜²¬4"p±×¯ŸÖeo¸7µYOë£á9‘ç @<;x+ÔŸ PŒ±d˜ŸL,ÃRz9OÎu”à@©(ÎÖW‘¡¿JZ,œ”gÊáØò ›ð† e&™àÏáÈz\GEÿ¦·Í€ê%°è 3ÿTg¡ffÿ»Þö¾ÈÉz'÷i(›˜TÂ.¨gi=}ØpÙí¡òO7”¹Pí¦Š×—YÒ\ó2èÔG=©Œ§ü¡ó¶n8˜û-{ÄšCzó&!dþ(f[H{æH@ðê›°)¦&T8^©@¹LÊMoŽ Ë¬bHä5±£Æ«Áî3aVä0«þŸoMr –LO,‡S—ñx¨÷XöýO4f!2Ý*ÑFA:Ïb®•l»Màpmžšük ›ó(/*ìšèŠP¿ÈÉd ±x›öÎüvlâôŽ ¬ÔüvîŠ~õÔ“Ó3膗œ¢½ZTucÏ•flá;ÐH½sÂýEU jÖ\zf5¶zäóô%ùÀrÚÉcÖÝsYϵ vÔ<_n!Z?Š… ÍÀmñâÊc; ÷°Z›•mÝ‘_ªõPØŽL %Å Ácÿ†ü‰û½¶ßâ_Á•=t!ql²®ÕܦükßsW%š¹D?]¿z$Óø”?æþfïÔ·ôâÅÁÔ‰¤WFõ¼K€M/š›†Þà7Ý=cŸ‹F²V{Kš³Š¯cøi•Ì<Õ aiŒEZ6Ýc×ÀðýÛWqˆ„÷-ƒë ŸQntºùÐCTµ³³÷µ¿-W[~e^6.æ¨BíUzI09½@¿ÔgsÔ}™¡5›¨yZO¹*vëJÖºýpÔæ©¹£Ž’Þn"ÍçßHØ0Ö,ü°ßæQÑ_d0«ZôÍ^}û¤ŒÚX}ãõ»:û4üæ…mol?GY^¡†i‘t\n’tWXć°h¤o1¶¼M ’ÔZ‡X”uhj†cpž7˜2Þ¥ƒo®ãjsŸ&™:©ÈW²¸Ð€ÅHNÝZÍ2ž­M»³ŸPœÈÖÛ.‘dÜÄF9.³q“I“öÔÂ7Èî¥Ä=¸ µ¼WÁ‰‚ÙK¢úŽE¡² îV¹7™¤LاpK_,‘ôQæËp$ø†¹ZÞæSá)aÄX!¿ÆFëHŸÛEg×§˜o“ªàÄ4ùQOqdò²m­ëcJŠ™88Ë!ÄYœ÷µÆžüí,û›Ÿ ÙÚ âœAóÍqKI âæ®CŒ® O “6НÙ:šâ)»j®RØ0@§w‰¦âAÕˆ/9˜Ž±B2]âÝ¡86Õçé'nb½Œ5f§Mñ¤é?k [÷ÞÚÂgíí( ¼4ýûd—³Pѯc&\+_Gdê]ç¥dàž$8t9¬¤ýÕ¼ÛáqW&Rû³¼RÎŽ6åŠxnºùåvÀ©šG¦GLKx ]Ü8iÕX°5VpN¹Ä$y p0o_%ñ–RŠnDtÆ÷Êž=¤†ð䪲LsD ›¦—“¿¶û‰çgÒà…ÕÈú¸â·}p§zg SOmÓy’ÅÿIJdKoý>oÌ~}«)éÕÜ6!¤Góc9'4TfŠz—9•ƒÇ¢}Z×—fUm‡òDJh­~¶‹Ý„qo¬Ù¢}J˜‚báÅnæ›å@Ù¹sq:F‚2±æ2ЬD·i‚ê¾¾ Œmµïïì,\ÆÇå|U3Æ-ÎXW¨‰È>¤ªloÏî¹÷ß5¥Àâ—8O’@ËiWp¯cr%gÜšž‘ð‰73/ø¹{ŸØ{ÚJò…ŽPˆN½àvùR1ÜÖB ÿ?—¯y‹ endstream endobj 225 0 obj << /Length1 2265 /Length2 13900 /Length3 0 /Length 15223 /Filter /FlateDecode >> stream xÚ¶sxœk÷«1OcÛvcÛšØv7Û6š¤Qc«±mÛhÎ콿o·ßïœ?Î5×5óÞkÝ‹ÏZÏ;äUè…Míöv.ôÌ L<Q9Mf&+ 9¹ª¥‹ ð·\èälioÇóGÔ hä’‰¹€¨röviW3+€™ƒ‡™“‡‰ ÀÂÄÄý_¢½@ÌÈÍÒ Ƕ·:#‹Ú;x:Yš[¸€"ý÷@eB `æææ¤ûÛ l t²41²È¹XmAMŒl*ö&–@ÏÿqAÅgáââÀÃÈèîîÎ`dëÌ`ïd.@Mp·t±(Nn@SÀ_eälÿÇ€@Pµ°tþG¥boæânä€6–&@;g‘«)Ð ŠP‘’(8íþ!ËþC ü§=fæÝýÇú/G–v™˜ØÛ:ÙyZÚ™Ì,m€ Y:€‘é_D#g{½‘›‘¥‘1ˆðwòF a%€¨ÆÿTèlâdéàâÌàlióW•Œ¹5ZÜÎTÔÞÖhçâŒðW~b–N@Pç=ÿ=bk;{w;ïߨÌÒÎÔì¯RL]Õì,]RbÿaD¿eæ@;èz˜X0þDÕÓø·’ù/1¨_o{€¨ ¯¥ôƒàílä¸8¹}½ÿTü/B`f˜Zš¸Œæ–v¿½ƒÄ@³0h œ,=:L !d0ýõù÷I4g¦öv6ž¿é4£¶’¬’¸"í¿Eÿ«±÷xÓs2èYØ™ÌLÜÜN.&€ïÿzR4²üO&ØJÙ™Ù¸ÿIÔ©ÿ&íöŸI úÏ¢Pþ×—¼=h‚ªß¯ËÄÎdúbþÿ=ö›üMû_^þ üÿÍIÂÕÆæoÕ)ÿ/†‘­¥ç8 vu태=h+ìþ/UøÏ‹ØÛ˜þ_”‹h+„íÌmþm¥¥³„¥ÐTÑÒÅÄ⟡ùG®ö×ÊÙXÚí-ÿºfôÌLLÿGÚ3kÐU⠚̿U@ÐýoHq;{Ó¿ö…`äädä‰:hbx3ƒÓèñ÷,ìì]@&Pq¾3{'„¿N•ƒÀ(ü—èÄ`ù8Œ¢¿€Qì7â0Šÿ‹8™Œ¿3€ñãoÄ`”üXŒR¿(ºÌoŠ'÷âÉÿF x ÿ"Ð3*þF Ê¿(‚ÊoÄ`Tý@ñÔþEÜ xF¿(žñoŠgò/béLìm@‡ô_É_gÅhúÕ üÍõñŸ1ù—ÀJ tzFÎ7ûƒB–¿}°þÝ~;eþK`ó[ÿÝÞÕéw ‚ùTúŸÁ@µ[þA)ZýA½°þ‚ ¶ù‚ºaû‚®Æ?ZºÖíÿ…l .èõ÷‡”¨Ão5ÈÖôþ±³šýnó¤NÿÓ56P’ ‹ÂþN3ƒÊú£hfPYο›òºgÇ¢;ƒnÔß Ÿ¿#€n%F 'àgJÐÅÝþPk\ÿ€ Ö¸ýAåºÿq† ë?‚±€Ü{þ.dêtúÇ÷ÿ¬±‰«¨x—¿/[Дüÿý=€&‹sö&¼ÁVuÁm5Âøîô»ã|Ðç)š,ôãúp.}âS›q*™K2e‹½ÌúVò"ŽYkó×Þ;߈ë=Ùîè‰%̉¿Î½ÝÏÄ{ßÌ¡4åj$‰ñ;õ)F v šš÷©£øPÖõ,Ä»S`–HpJ‡´É·wÖ”dÈbp«Ÿl)»4ªî²ß¼§ÌÞ² ÚŽÔ O–O#‘ákDˆs¯FÝ\Aë%ìŠv ܽ uAç$cƒ­V_ÉC~É.v;NC÷6þˆ!tlÚW¾èÙ’Á›ç¡Àž®ü­Kõ .–Þ»G¢{áY6Ï>©,Õ‚‘¸ûIÑ{tªk#ܦõôUVвžWbL„ùPÕÄ ×Ý\ƨ%ך*Ì—_óÀªƒŠ0^W® ÜÒc—lJ‰ë#Ñ«XC‘Ëû‚Ô)g)N\ÛN2‘Ž`¢4ka¢ùت¢Š[SSáþH=‰¨¦Éüæ9Ã-vÔÚªá=ÈeˆÖ6,I\›•<øŸ¤V£åý…ž™Äaü—Ü´•ç¨NÃkÝ 2ÒÔ³'ünn„ru6Ù»¬QL#¶ûhEÓvêîøÁáüƒÙã]Èh·ml‡â0t»PwqÓØ6,ÑžÁ·ðd9õ-ŒÓCECß5¨{bʃXœÆQreÚ?O*eH`Æ®#C/ž³!ÂîÜ{†…p’÷ÞT:Ns*ófó»1롊¶+%Žî½=ÁëfÑN¸M*yþH/ÿdhîcêê‡ñø¥ÁNÎ’—ÐPJÿÃÇ®æ´OVQ÷Õ‚Œü⯕)÷ÆA‘Mcޝ5‚ˆk áv¯°+ýÄ÷•™âÁ•{®s¸ÞÚ%äòq#»`t¸±¸¾~«Î4~5hæl“ÆÌ6ý§h+Ô‹}*…x®41P ÐÆ!G)T´zt¸àž…óGbÍF¯‰,•oó,æsHIûÎ6ÑÏ·®ßÚj¿ø3£Šé]yÞN]7bO ¦G“e$ â×áäðÇØOÍY—ççɰ©•’ä~©sÝZ›öÏRqÔäœÙg_vˆ5ý›àh*&;hÖòÐüžMe¦Vç u's·ø'ªRG¨£ö8,5Æú³hGÐ6¨ÁÏÖ“®D—éÕ‰Žûñµ4õÍÅøFq éŸ~¹ÿº ¶¹Š«Lçwa4FnšÒ®rì‹Ì„ùUvX%_覃«¡”…ÉjŸ¸³NåÊ[Ün‚V¥eÉbÝ÷1çê@(êä5B˲œüV´'XX%'ÎÍpœìºqÈ\›iÚI»ä´€ÃÙÔC§Ä;xÐÝh> ¥r9¬;‹»|…]ÏÇnÒ{nqØñ¥aê>—joƒ!‡a`?Ó`7¼»”4|ÂMy×ÝÀëE<Á£å>ŠF€gÚkD¦ìðêTº7;%`Ïf‹áZ±ñÒ#n4àäà€µ¿=À [8s ÜÇõZªØúÉá¯Î6¦³M"wt¯R¡×ë…ª;3½&{ ;Ab¥'ï”ÁæZÍæ¬(gÆ=ã4U~\õ‰•À>Æ&ÎMÛêÌÔ„DÒyc³SQàÙ€EúYéa;™ÖmGüôù… ¬È3t$ø¢ŽWŒã8AštÁŠøúþêš*9SÎcÞ†DYeôV•…ÿXœURÎu4´Ã<Éî×éÇݬàC=½•´„~†FôpoÛpAY¼ ûýá^UãÙŽ.“gDQ'þø­St/ý ŠÚ$i^Üh%/Ä£˜˜@€øÀCZæx -’Và·°9ˆñã:‚ÙtªÓïÓ|è©n)àM϶ëXrÔE³ÞÁ¸WF­ÛÁÔ?Ý“­–é!I=]Ú3hÍÆÂƒ‘.-´uRr×Éi(?tW4%¦¤þÚÈ|·D•„¼ý'Ž0Nwb¶¯Î½¨­]ÿÆÊ5ðòZbíÔJ…Øä›¼‘eRL¾ôXÿe¤N4ÂüûvÏPú˱öSð©Jú¢TR^—÷ùÏÚÓ)Th¥ëÞæ¨YùŒä|"]ï=ŠWa7__ {<‡Û”9˜Hg›#ÙlU @ßv±•´˜»EΕæq¡÷õÏÄÜö Ó]Cs’õ˜gÙÂ×*L›ë|IÌD¯l>ÌÛâ}Ânè+¨ÉÊ¡°Ð¢›É§åŸòôðUÉvr_§ÊT-V‰ØwÎð‚äÝ<·?j ß’˜Ö©¹°Ïž çoø^*DëÞõ !Öûtˆ×Û0F)ù'ض)!8`&‹C[^™ñv£†úê1o™ÈR ã32½ÄžÍÙ, oš˜Cã Å®O_ñnŸ ‘*¢•KŽ »f“œn¤¼tc§±DGc´ŽµbT¨½‡£”Ä¢Fûp[Uå"%˜sCj~f‡ÀœÞˆÈîSqŽ:y•÷lOŠ9¡wÉèPúæÕûG/yîÆÏOµ“JâbªNÔÓˆxˆÉChz+YßµõGE2ÝrOÃD•Tb:Ó™·5¯ÃeVË¡ð-L%ÚJ–y»G/G¶.¾8P˜HO%”–y§dõ†Ä²LN¤ •aJ¯¾Nþ¡x­ÀÊžˆ4¾Iû%­š¬È˜ÇSxŸ£4®’&3óT9'>¾CnÅÉ‘›Ï†$¡S·ûQ¼&f–f°ï ¹{}ë¼dÚÞ¨*E’vµ Aì}+ŠæIâÁHÈ_Çs’*$wþëÔ#Æ+²`¦››Õ™^=\Bcè‘Ü90ñ¿ZyT±Fˆuò"æV¸æxãà«CÌŒT‰rܳ™Ù©Fu"¦:a?–ÏÇvlÓa38iše¡ÿW9´© øï¾plÈݯŗ%‰¾4)Ÿ*ôÓ”¨‹*žå¦ÙØ×LÊ#RÇ¡·!Š®ÒäïÝ1ìu}rØ».~&>Ÿ‘ãùÙ¤Û‚å«Ó7ÇÏîHF©pòÃãP“fe31«Ú-—>†‹Êrp&¶g×"(Ãx7dJѦ{§·©¥~ês’”«ýJ žMFqŠkùq ó •¹>ûLá¦ÇùT3;6Ù¿Ç»a Šý) ãE;:=%@êNbÆä«êüÒ=k."FðúhÍóä©Ë‚œƒµõ È¶Iþ®š°Ë•æm†íŠÏš>ãE²:ÔÚ¤nÖRr)7Ä?K°ÂÇG©¸¥è°-&Í ¤~ƒåº, n¬E8”•~:Šùb€ôPu'#xUÿz3¤Ê‡àIAŒ=©®ëÆ ì›¾52*ånŠÓzU¦Ã*¯É»a©Gk]>:–°»ÈJ^svÝíbŸÁ±§×&–Û…]RÞ"ÍDíMc17OÝÞH9‹Ö]䮪h°‚Òµ°ÛÃá…F-é¥î±œ›Ï²õª³£°®Þ*úŠ©Wƒ^+Œ<€Šýu»Ñ¡¹‚ôè$âŒéóã³Í×}žö…ûø¬Ú%.SI É”ûž=K™9sÇù­Ûu’‡©¼ˆY ÓIw¥n) Q"ÜuOXÜ@¥ÆÎËÃc,cŠüjüZ޽éiÜ¡}Ćƒ Ì££ÔtŽpmkß¾«?¢*ØÊÁò`”ˆÕ÷¦œž¡ŠŸ½ê5u5-Pì.>›=7/_OzæÃ:/~zq1/”‘¡[¯Á'`¶¥ÜÀ `¦Áý¥#τå›O|IÕQiXžÁª…›’’¦F“pô‹ê&BªuŠõHôžTæ*¦m6*Ö{ðÚJãè|]'¿S \Àºû6rˆÎÜ𘖘LÍ·Ó=M¬-ç¬CëÛÇX–Nºä"S8ÝÒÀ9Êß]mìwå]Ålo») 9Ö@@—|Ý—K8YT>ޏóª~«žÓwävó¨ð.Ц^+˜0ŒðPêòÖóŽð œ‹TZê³×~?ÇåX”Ú»A†@´§ž@‘«²yž"ØQÏ·RÀCÎä69l¨GþóEÊ£p§]{!M›Ä7¸öÆûÝ¢F1erèž>Ö˜R¾‹àÎûy¬óëutîæûÂ„Èæ´•U(M£E`ýÇ~³‘*k“v“s,Œ& 9û•[ Uøf7e×ïeQ½S±ûë=z6O¸?îò cy°s"÷l”É€Sªüî*3×C]‡aäÅ­Qù¤Óì¼.-5HèÍÙ˘Y­A÷צö#ÞXl­KÁ»–Úq õÎÁªÍ–T#*ü…÷†ZÐbÇ$¼ˆt{ȯüo’l¯ȬÌÝt‘fÀEp+¡W9ÆP˜Ï’dž5茗åã>ãönõuK˜Ña/ÏÓþ¸v»y}]ù'®º8åøàüÇRÕ‚ (j|ó^‚JÅ=C&žŠóDfåsæÚ£Žgê –szôÎþŸI ·™% …öÕ…½-&2svÌ-&ö“_£ª ýw׳2éž- Í~ø61¹N·zý +¾œ‰+ðËFÃúÒÕD)hÂ0ö¶àlwT À@²ŽùV{² Ùµ`ä¢Ï¥TJ©!Šr¸e3(E4€£+Ö’?²`Pá™—H…áǦSå”á0T§§5eÞ¸å°o¦@›êû:;‘iYŽ‚Tåë=yCñ!Ñ×éP>­âÖO§kØl4:"l«þ:ék¯?y&üW§•®R èT¦0ErŸQ¼žM<›råÕýë¯JXl«f©žHšÞŸ§ˆ=&¯‡ð¼6QfÕ."WBÄŽg†òûšÀ‹‡Ž±’&ÝWðg'/¬ Ã=—o¹XnÐiK·}&QîÜy¾gwW¿ ¬ô6ÊT„à#`C°É6|Å |u^Âj¬ÀÑEÓÙ³»eè ÿ©›=˜ŽàäÛwt2¯f7š¼¼Ô…9‡ÏY6²bù°M^ÖÒ4!cÍmïU°k°¼gZÑ1÷žú—Â¥¤îÀÂiß¼’viUã‡óÏ’ö¡¬š¼GÏôƒ­»‘BŒ«³CÕ0((0˜®£A±ÜG:•eŽ/;79MÑœòœ”;ÖÐùGˆg½sFBƒCéÇD&Ù騂É¥¾³ÛˆÑ4i ¥¢Z™¾„¶ÓË¥½!Óm?h;I2`ð88úHhgÞ’P³úœeé8 }OKM^yd«ÜàqÃØ6YçÂXNZ³åâÈP¸Ì-øy–¢]8Ÿ`ÍèÈÍÏuÅ™V¥äfV]5æÞvÐA‰°Œ—A*2´Æù²dƒ®sJ‡ŒˆŸ£‘tŠ©ö GGœà§ÄK•ðZ¨¨#ÒŽq7ü´”o¢$%bí.¦©³ÒîeûÊ2ÓL ÈϰM{ZxìȺÍnöi’ñÒX_¬6 ˆR½Ñ{ÕDZ¨—Ðý/õµÌýãdãï¬Þ+xlp˜º=´ê·‡Ö>ªW±Ö‘âøLèÕpN–Û^LHè爘C1GâÃ|6ÒÒÐÂÊq·(úEéaNqi”Ì~÷$µð>»­¬3POI9©Í̸âf”¶%É1ŒÏ÷I¦“?ò4Šô8jNïõ¾z¶†¦~ǃÃðÈщç:·N&‹8Ø €!(r!jüxÌ¥R½¸sÛÕúÂH/9‘:ÁY}Ì6Ó©$ÇetЬƒÌ‘HÄÁÀâ=óŽû†X«×¯ý÷©¥’ëߌ>Þ ðÍó ÓÏCä±ã¿Ð*[ØÔ7ÉWGÚ†ª<ex<ÊÉ0aBtµ<Ý ¦ÿpÐo× ª‰˜)Ú·þp[GF‘íQlW •vp»ÁÓÑ;½uk–튥Pü„Téz++ åzŠH›^ðÉ$â£J8¶,º¶Ì!²WäþøsO¹¤öA†ôHì\¤Ô…™cÏ Š§-_¸o_ŸÊìáEëAs N?7ÿnØnò­{€{¡}JÈ»tIKñ8ä\•Ì¢ãvýº}á—ýg’vˆ¬ü¬A[š~Ž'rŠî÷5ÆŒu¬¦¿¸1…KwèÓõЂ¹ÆÇž¹CдÅ+ZÅ)ªW;ÂE$\¥xoDY‡S8ºZåN …•ÊxŠWE¯F1ï{Çk­«*YÞAuùóq5Ö‹ üÄg1ÄfåøX6pÞëès =ØÑ ñVSI]Y¯miì¼%,Ë®.Gv<÷;ÂDIQU¸{øôlš'Þ‘Xq­2X~,¨Þl¨n{.š”Ö†OÜÒbÌ0q:ö‚ºUuŠCþĘ ]d¢³G«[Gþ³”#kEC’bcy;áekK7YJ­wÔcDpµµJZ Wx°Íx(€ŽTlfi— Kb„UÌ×W½ßUZ4%j¯#6E —ªz¯³ÓîÛ–$!„wìW‡]”æQ wMrñA5š?sN³¾kA7ë*XTSÍ>Ê3T;PWˆ¹¶ÙàìZîÅùY­_èð³-ëL¸5Ž^<ÊÞ@P­DY1S6vQXôÍ›`&›wQ–•ᬤ²ß°yÎV1"\“Ú{¼‘+ó±%QüÁ_=,1RŒ¬æ²·w£è†_铜ñ"P%é•/z5qÈ\²ë°=8v_~MíZÙõŽÖš4Í1«ÉÒG»G ùŒ·âX·À”ûß‚%Äov[: ä뼺x5Põ7À š :^zÚœ(/wë®_äXL¼7Ⱦ9 QFèèjY _’qgéYÑl‘qå 8"yáx#~v©=4^ý!žBCtpùT‚l[÷Yþ[ãT¶0<ßg.àV}ÝÜ*úD:"Š!rügCw#ëW"5¸äÝé/jV°Q_a ÔEÔôN¡W +˜LÜ+F`¸‹iûÖ¸+Tù,Òz¿·kÎ3ŒŸéWN IgØbëyI^ñ-UÕÞ·ŒµŠ•”#=·?b PCÉ ÷A|î D—DFëÛú«Lgá”-¿?'u|ÞÈRIñ´ÆÅ¼ŽªÊç5í/NP |S¶±ÝÃæŒ)õ¾&6fkìBkº0èõöEÐe=•w GAðQ æ“7Ö¡@ æÐô—•ØÆÁƒª»ç]^¯qWÅзY!²v<¶”%ýî9™„{tó×jEƒÄæÏg¢ÇjaÃp‘‘/ó›àΦ¡û?KHý–b•ºÉiC¡„ºýÖ•âO10®Õ ä á]y0¤ íLÙßYZ³¶C]= Ø F ³ì ŽB8zQ:éEq(H~ÅÿDr- ¢,#æ±x6 ö²›‚mšH-Ý9Šú2ÛÐ õ3sù=Çþ|æíˆH€cl»'ÊÔ€˜ÊNö 0CšLtöp mF ®#[ô)¹Â€“áòê—  akÞ^ê !%É Ï'žˆ$øúÎþLÈw¡ñô;jcZ¥Í÷å=l¦ê°r&æ2rÝ•âA¥ùÙ@‹*ÙÏ›'JERH/¸”–ºòü˜LÈÝ༗:ÜíòƒºiŒèÚés,J™ÃBwºˆö…xÁ ÖÀÂf‡§ñ±A5Í{ #œg(a~ÝIN£ÇY ^>ð©$TÎ}ëkëUÂ2_5¶_°ôöÆmûGã¶×Y9MVX Çq(‚ ªÞ¹‹‰¸±rpì!Ó©íê'v]\bØœ©¡Çè_ãRp_A¾WºØ•^˜½ð^ × êžX‚´7yÿæbŒóXô~n`~7‡ŽKNì×”Ü8T%ð)­k›ï‡ØÍmT)eƒ©9ÝÇÞ@ƒ+ÝÒ Jú±ÃÚ=Šwâq7kpeýQm´ûõfÖI˜0êy…åg·rF‡æÚÝÁÁ#«ñ]¯ûPšê•F+NÚß_fÞF•|bۣ߫º*Ä8™¢$2»íÚÌØ¼0moÂùL] \ÔKIT¬G£¿ßÂ'ÿ¢†‹ÎÏe°¼$àP02_…§… 7É-«f4êžðF7ôË^q‹ñßJ”tÑ5H¥Ó*ôÒŒdóðØsúu}®Oõ3¦ïó è?*²¬w¬)ÿ!€ÂÏntöȰ„ç{¤Ùñhözˆš&¦]NTNÿÆ Ü‚Å¹ÖœÖŒ.¼oä@vÒ™ô‡Ì!j®ê$Wç…#FÕšUÑœ]ê^u€"Ê áÕÚÅ$ê›y陞.¥ËùGšôð­ž c„BÊ;ÿ!iJ̈9ø(‚Uµ\[X%¼™óüŸŸ¬atñ‚c¼¥ ÷a/RÓ¯rÊÂïQ…åkÂ\ûͱÝ{Ô›ò¢Mô5,¼ÎŸžÏ¾‰²b„øT OcE¨mùÖ†ÕÈi‚Ídr¿óWJ/ˈ?˜S¦_ø– Ä|±‰WÎ >REKÇ·SxAú½á³%K®ÉæøW;¤Jobî…g*Þà† ãü®_œ>¤T[UllÍê}ƒ!1tY^ßó]–ë®=á¯GiÆøÕkUÖæ7ÂSw¿íáÝB@/V¹¨OËÞÿ1ùVFÆ’¯ä„,躖Fe+°"PêP_,‚CNà´SÜúÝ@³4+ð]‘ 1¾t_:L»ÕižSXÄxÚwžºõýö§Úè9Ô@Ƥ½R±©¡Ÿœnõ£©C7_–žr¹ap²\¹P­±E×/¸p(ÔìS$ æd" ¬Õ’—¹·¾W.cpê+±Jü!ø†üfø “ÀñªÖ»/xqûÑ<'bï™ÔÅYîs‚f‰ìýø)îùãÓÂ7†ZÖmjÄX¼‡ÏŒ„€ð'$Ì—:ú~²öç»±kÙM¨Ež¥ŒÊ+çû¢pþ‹“êÐNš×¬HU&ïÉyš¥?ò*édwdŽÞŸ‰ó¸{9Oá`Çξ¾K×)²À±ch`J¨²öƒ['ñQ‘PפßÜÿ®MÇÚ™K4Šmþ®_h>0£ç.Aƒƒ±7oZ0e¬˜­½š—·ÝÑa$BÊJ€ œŸA-uk?*e‘%©ü]S ±‚÷SÝýÑ‘ï›ÛôGš\*š`1ªQ#¿RSñ{Hhn‘"aòå•ò²­Ö¡¡¤ÎGá£B™M[Eäñ ô»ß Ì<Å-E¸>ÜlÀµD#ª9iÞ>á¿¥ÈàfG¨µÖ5ñ0x\W‰ŸëÚû\ÇB¥ÿ¨m ¢ ñ(ÙÙWx béRÅÞí-ýP™ÛÌ Šj#eë-™ÒZ`ÿÝYÝoE›¡ìJ°×ƒ<á…%—`_—º_ ÉøGîάClëèÆ›Ya8ƒ$¾fû…°LÙl0^§½U¹eçfË’Í&ãŸòæ9VžÈ'¿éö©\†€Ĥc,;ËüšÂ”ùò±™w‡‰x±“¸—ð£Jÿt-sYõybÁÌäƒ9»Á¡úCu5‘B÷21Žfž,¯¤” GlЉ°cJñþuÜûݪ§ê÷*åõoøsCÝV®Q”Kð÷ŠÐc9¡ñÏÛcŸKüãŽÙ’‰áô]y q[U¾h‡ñŸDNöÎ 7[uW—/´mÆÓ¹·Äâ·¡?Xÿšdj£¢êÂôÇ]Ò‰Õ¯ˆæôŽÕMQƒ¨^`ôâ1‘­æ8XJ™^R¿`ñ:£*·ì—‹9¡flå¶eÞÛEÊa5e[¾ˆ±ã¸–,ƒÄIÈó—éN%½%vè0HˆAuÛ¾°«Ê61³©¢x„҃ư8(:J?Ξ/;ÑŸ•Ìð‰ž8™î:8ûS®eò»Rs¯†t±=¬¼’çàŽGkñ,«(%ˆ3üDvFÌöp8~Ç  ‰¹`±Ÿ¹ >OUU%ku“”§÷Ar›!¨D ()5?D›2ð£5Û%/¤x–e,£5‡¥¹—u{Ň·B„ÆÂöΑé'îÆgr:/ùUÅŠ ƒ˜ç¢Â ÂÆ¹IÉàWM<`µ1ª ŸžPš¿ëÚÚI!¹ü&3Ø v§¨í£}XsêAXó‚ÙtIº-8`âÎÚ(GÛÚ\áà­þ@1YúÕñWçë{Û BÍÚ…¤†uŽƒb¨ó5 ÕÜD§BDTóáæEeOηd“•/º"WÀ½vzB°×ö˱Žj€*†¶i¦¿4¸¿g—Yº—Ödg‹†?æ÷î:•ä”meZ;/÷cªjP·h>æfC@DÍ®¦tÎIîËÍyg"N¦œÚ÷:šõÆÔŸð4ž`eÕí³¶SÉ?ÉŽì>aQãH]°X‹w~#ì&w·#=ç÷ñt먳Á£r4UuÚIe¾í%á×—Œ>©Né§ü™Ñkë;ð¡åô,=aÁ·¾£‹ŠVIš¾ò•l‚¡ø!¡‚²æ½‘#ì6D_™ ÆèÊ냿weM§Þ_Ø™&u§¸Ù GëDêëx÷ýúýãÞRó«ºË K¾‡»¥«#âm˽Rû358àµ/2@Õu'ËþW^p¦ÓN<Æw#!úB, ©å4B)v“˜F(rG3ö/ÝBqžÎÂA¼ ìÞ2ÑÜŽ^p|jy¼Þ—‰_èú¼`Kcà´VnØ«+áw&£ÒÃìc…Rµ¤ ä}Ê7A6M+hŠž×÷†fIç6ë£Ì}|дcîö^[)±´BJÓÔ\AÄÀmÖs³ƒmÕ{8f6ÞãskÊ“>¦WfÛèîZm v牥¬Þö¬.ŒÏDmÓH_×Ý’hKÉc¤ÍÝ"½~9 ßG©Ñ¨ˆÚ«ŽÆÎU„ŒÐ#”³—c¬NNö:Ve{yrä–\ÞdCϲ ôQ¨) že[ mÉdØs“ŽìaTöX‚Ê|.ÅâPáËP_øÓŽî'›Q7¡Y‰=Ò„ñ0VÔ›Çæz=Ô2oU2¹dõñ¯Õ³ºëŒ"ÿ¬–³V¨W%‰ÛY%däHðaðA–õ–qÉ£¬—¯¥/~Åg0&|„̉Á߸ϕ׺é“Î2%U6Gð§VD«®×0UmNêe®xÞݵÙÂ, âó±×NZ ¾Ä›ÄŒÈù,I¨oJŽØ¦ä -ñxB[:‘ ~KÖå€~C(wog»üZïØ‡R ùÎ[5:Ù‹0ódïP›­´èÖ)Ò^ †×ù™s×»-hÊqÉ›~?ßò5 Â5a ùÍ&J7íõá±þåúƒç²„þ‡O¤è~ˆÚ‹d+AËEƒMTݤG*Š(ŠWj—s±sët“¼:ÔÔ÷ù| ‘ Yƒµ_J¡ü1Л|Èš.gÑ{˽TÀºŒUdçÝUMù}`‰ÝWtUx8‡vy=¬Hc—j5LK¢9¥d¢Õí£Eu»ƒ‘CÉ«K< % Ñž°ÆÙ¹XÀÇvV(¥Ï|Æ­îqÕ‡ ‘a2¾µ•uçgéYÿ,O÷ÞûÊTòÌ?$ÖKK÷|±ºôiêPsaöG€íˆŽ¾=ƒv–9%S0ƒb€O\Ò#܉ ¾vƒD’®ÿÑÏÅÒQØ*Ý5"H©@Õ™‡™pAã°y4sFŸ=;qºCAùÀ¹1ÞžAògu^› åÐDàOñ ôê±jÕÁ6¤ôtˆ49r-ÊÃ^ñýÕãÝ6°ïÔ€Ù±‡¨–eÅ‹¦)Éœv7²Ù.;Z½µAjR _´1ɳö1VÃ*5Íäwz°»­æ¾)æ5•-WIB2XLõ§!š!iÑ»c³ˆ$Hš‰ñTÉIgi!ýŠVÊü¬6!¤e&W˜Òådí,,`ýˆ]z n¹wOAëw R——0$`~è 2P‡^І±øÞŸô— ­¹>~Bz«©¬­Í5\Ÿ\|bšŠqîjïÍP»¦×¨¸ý–"ª'¢ÇúDŽoY“œ•%<ìÍ›‡»õÛ{ÚvkŠX´VƒŒgî°âÁQ9QŽ2Hºöi #½YM„AÃ*Æ&¼O¼‘¸ÈÔkµV÷Ìÿ´Y–º”1öYnŸ÷š¤Î'â'n“iyàD!5[ZqèjØËèìÙÀ8½¶<_ôž]°Öúý†«VÆgB›ä5ÑfÞ'î?˜"äí/•ƒ‡} •Q°:¬‰ÒLrÞíœæ"Š䛡ØvÃFˆÖ5 !×qâ¡P¶Ô3}ú£N{kMæÁ\#aÉbåÊ.å¼V®Œ “cî¤#pMÄŽN X†xKÂm¹t(ò7˜‰l»,È•måC¢ï½ÈšR-Éò¿»N‹õÑ«ü6š¦Žß*ékÎk}$Ì”nŠÌ^>1ˆÁj‘IíÛº? ­mòÄÆëÑ_ýÉ»:‚=ë¾ÑÈs|·­¹9HñQèZR,ü@)b¸jS#<÷æ»±ÎÊÉyÕÛÐA'mçö¥«_ËSBUþ’ÙWª×}[/ŸîVÝ ï\Kq ¬,¤l^Yq8óq’Ê}#ÇQïm3óøh†È 8ÏíYò¾ÃG8 Uó,o‘!yî¹!ûµ^6x§¦ v˜övvç=À•ðًݽ'ÐUѲ®W¸´]¶…%‡ǰ$ª–Ø)ïÅ¿8aHœê]ðMXlÐðáR‚HN,&‰¾ @ŠyÍ¥A„ïR< ž¥—‚×{…³%.Oø`×Içè7K0«å%Fî#$&<ŠåáWóÞÈ:ctS gÍ3¸3ãiÒl9FÍ)-aNÆüÅWô«)it ÉXÕ¤üœcï–öMCç³RøÙÅé ±,À:$“hyû|0Q´†¥˜ŸR¡ÿ*¾>o2¾Ô¹(;¿>‹1—Ìï ‡®¤1¬Šܾ"x.=lDîåÃø9v¶7k¤YŒÃîeÚæpëGD ¹o)Ä-µæYÁW¢¸ Æoç¦m¥K,²"|Jß9õ¨c‡,Ùj3'3^#&'.<àfõø>ç9q"2qéHqa…ÔÁEË 7øÂI_^bdM/'3†H¢çÝ7 E¸ö£‰­6U‹à˜“T½/6؉B–ù,F’“õë:蘒„T-ðîÞ%·<ÈàջpïðU–ð;‡Ä½š5âk£(Kh®È÷)˜»Rõ´t›Ÿ­3²A|„Ê쪀ßj0‰ãQ‡ÕÌãn‚ÒЧ«QÌ•^lVAݘ* ¼Os…yÛ¼>ÌXžÝó]Ñ•ó( qõS¸Ö>Ÿ¢+j@eéöSØ)‚ÿäàr-6_Êrv !€¬xZ£š˯Zin¼!XoHê:¡Hô\™ÔÜÊ4ñ ñk¬^@pÍ1½ØÂVU†…û$B½‡‘ÖÂ~*&áÙJãk‰o]#ª$?YFÛYKÕöôÐð–Y¦$N#¶_¬Ôú®ƒÑÇo5~/À'ĵ·.”oök Œ«9–òþ4íÑX!rµž3Ì< ÑÛ~¨þ¸ZùNß/ C¢ÇœŒDʈÜN.×3Å=xÖJœpæùÃ4³ùUÔ)·¤+~¤ÆQ8Ý~Û8j%Dy#»?ÂqìžDàhú TÇ'‡ ®ów(ZéÎ:Eü!fB}XÖélŧkòV›ÍØã;X)|ï݃o§‚(ï–=hg;¯!ŽI*òtRNy^*ûbõëhöÉâÀpä…>…©”ÏTµoªÍôü ÙʦoîüØd‹Øup`Ì’ÇÁ΂ḷÍ?¯!=ÌJ¤¶B¬*¹˜4(©é67°¡xa×t¹˜¤?„]%¶Ñ€«ŸO¿ç'ÅäÊýø²"G'áµ'(zhh3dqé÷,ŸÛGE§EÎÿu±›;ž+º‰XÃrJªZËø‚†Êاvî¤D%±ب9C¯Éu΂‘ÉT€ŠÛÁG~jcS®k»¦j¯câyóǾA¦ù)ˆ˜Q½Ò h&¤øØ÷}z’ «þ8ßè#tZu›´Ãù5(3_"Ù¡mÍ ½¡j»Á|2^š®ßH°$ì°T°ŠŸÂ„F(œÒ‹Ô(O©Ùdq7N„Q2Yé‚[ˆú¶Zßa´é61 «ÓÈjçu|mš`ãö`Iô¾Ÿ…º‘÷Ϩk^·“˜ê°mš1ÞÎL×Î!>EÐùŠãÉy™JÍ+}Ö[‰ªäY”Í@¦?íØ•c|«ñjÀ8ñÏԤ–MŒ¢TOðt\àþ!|g~¢Œ:®OñRz•Ãsßo§0Nyñ!ΦT_g1¢ê¶µm ißåN^•ù. où”t®e¬ˆÁÍw~©r²îUw5:îún÷P´Íûl¨™Z›ú!:ña‹."°ÿjkYeÌwÈ¥¤¢„)»â#5^ÄY`¬ty ê‹uÞ†ª¿Ë…Îè!>M6 å’Çÿ%ØÉy!o‰ þ‹Z±ª%ñA³ŸV†ŒAÑèËúx²akʾ5ÆJYšË*ñ6œFDU1A±°çe÷ºÅÇ}Ϻ¸<;"ÏöBhCX; ƒ'nì/Þ- ®íÛé|y g¶æ"HòwìÆšíì§")%MZBxð7Y_¥FÚÝ’yÃ{ä”9Ý‹À+C¨Ï™2+­ßÎu9F(·î‡(!²z y8ƒXè ëCž}é†ïÎ]‡ÃèL$OÌWO8ë§g¿¬N,S±¨8y|LÅÒ’Ñ[—v¿‡“j‚à©õšµ=Y†rÊ A þY®Å4,d„[ų¯’ E‰ œ¯ø踥ztµDác '¦ãG#ÀÃY&ã§y)À+M–±/sņéÓÆ<ш¤ªBû³­ßÎ ~‡‚\—?÷*Që¼O߯¹×³šaMY2e9¶ŽºÜe †n_*OVtPÕ:ª¹æM±Õ¸Üõ¯S¶IJ7mÒ‡”E½·ýôð›ÃÿŸèþ§ endstream endobj 227 0 obj << /Length1 1519 /Length2 7142 /Length3 0 /Length 8152 /Filter /FlateDecode >> stream xÚwT“[Óµ€ éMA €RC'é½÷&5%štDªH¯Ré ôÒ{‘^•Þ˽å½÷ýÿµ¾oe­äÙ3{æÌœ³ç$a¢×Ðæ´BXBåp7'H(­ª­­È ‚@¼œ €‰I†r€þí0éA‘.0\øi$Ô…¶ÉX ÐLU¨äêäær s ƒ@@üÊX¸Á¬€ªœ@%ê`’F8y"a6¶(ôB=Y O€Ü`° ûïp ¤# ƒXÀª([¨#zEˆ…PAQžÿJÁ"j‹B9 sq¹»»sZ8ºp"6OŸ°Ýa([ ÔŠtƒZ5 T³p„þÕ'€ ¨c sùã°F¹[ ¡@´ÁÂ]Ð1®p+(ˆ^¨­¨Tw‚Âÿ «üA`þ¹;@nNî¿Óýý+ þ;ØA8:YÀ=ap 5Ì T—SáDy Øp«_D :ÞÂÍæ`a‰&ü®Ý('© ´@·øgƒ.$Ì åÂésøÕ$ׯ4è}–…[I#¡p” àW}20$‚ÞxO®¿Î׎p‡{ý ­ap+ë_X¹:qéÂaήPE™?Ihà?6( È„ÐQPg ÔbËõk O'èo'÷/3º /'„ÐÝÔf E¼\,Ü @ÒêãõOÇ¿€›hƒ €–PðŸìh3ÔúŒ–æ4¡È ýzýýd‚™îàùúïSæR”‘Ó’Õaû«ç¿½RR XÈÁÃrƒ‚ü` Ï¿iXÀþ,䱊pküG½èú«f·?eÀòç<þ;—­^(å?bâAÐoÜÿgÉÿùÿ)ýW–ÿ]ìÿ]’œ«ƒÃoËŸŒÿ‡`ásðü“‚–¯+ = ªô@Àÿ›ªýc€U¡V0WÇÿö*¢,Ð#! ·AËšƒ›ç#ÌEæµÒ€¡ ¶¨æ»î¯‰s€Á¡دKý—=f{ôEâ‚–æo=Eÿ^TAXý7~ iá @5ñ½¸Ñsiõø-f 'B‡Ñ ú­HÀ¯s¹ä~™~#0Èùýª‡ËêÈýärYÃþáårý¢…Èÿò ¹œÐgŽøG:n´ õˆ^Ûý7üWƒW$=ï¿…ˆîþ/üûrB= Àä"dWôå´T’Úc¥_ûgò©G®).ª]vÈì{¬vzÚ”r¡Üd·œ©]£š”óiÆÜø×r9]…'ß1ܺ eôØÍ1ÆHœ×ÉC†1š[Ùú‰R´ÂùÈö[4DMwÅ­lÚµ™½™ËZ'âÜ“È *½ü¢ÖÐTZ¦Bñ¬·½¨…ªµìÒYá?¼Ïœ¹èõbéÕ³°$µTeц3@¬{ ÑBgO× qMsD€’[àÊî£`±¬H×C¾;%z3o .3óݶRI¼,åI%¶¬Ú?LÈ¿¾Ì¯³öÁ‰ 2OÅ©wø¹Ö³ÎPÔ,²ã}Ü} úâ!S¤ÁîVŠ‚=áµAˆÚyô¬vÿÎh(ÜHœ’‡Xªß½Å6hûSøJ{ŽØÄ ÁÔ''=¨jéÑˆÒø“ŒŸ†{v)±þɦé`¸rÖ¸µ†Ú[>†¤åÕÐð06Í÷uó§úSKÍ—BŒÉzº‹ì:iÊÌõ“kA¦,ãSé6LÌ1LËO!‹ “X(‚’h?Ò—}µÃqÈ;8ùy·ˆóp6g±îÝzèîòwù:>—ÆZËb`&A¼3äÒ· ûIxQÆŠ®®R5œŽ]Üxs4HÚ7ssÎ*Š_mçÎË%Pe/Àöt[žâ~–´ŒÓެqÄ5™ðÅ×wÀéÅ»^×2+ Ç©¶°ÈuG§fžx–NÉj±æà[üÌktà)¯˜aÊà«qK¸Ê ­2[^¥tÝžÅGÖ~:6n“6×7Ò&ÇNë§ÆÀ_ã?ŒxÞ¬œc¥ œ ›ÀÃzû|Ó8îd“—›Aú›XÒˆ[%AnfÓÙÓ$©ù³´¿jp4EÌ€²6X„ñÉá1!p—dÊJ$²z‹L‹sДMÿ˜š“ÌáÙWîµüºÁÚ¾Ú ¼~;û¯VÅ£>[NѺ˜_W@ Ñ"O ISºŠï–wöº|²gIgmsÂk”í˜ã>vå±û.Þ¼ÐÒfº3i™[qTp$µœŽð_£æì1£)‹XI{´T2,üL™‹žÿ`c%óø…í63i“›˜ë›wØ šªï šaRrΞܤyJ ÿˆ`Ó§jÈ{OÚδMÔÝ©/ ’­^j?š„æ¸h(ž%XP j{|~þ6žÕÊžs³>aõ ·4tx‹(tTìmrßK›ç!°W¡¸È¡“Ðb»/P:6ÞÜou{Z ÍFÍ÷p=L‚2Éôi7Q/œßVI”\p+Lª­cí$6!/ ÍÇû*RfÊ¢wQ¸ñÀw¶›SŸ|‰>‡ËVóíÙµÉ,Ù öRÌŽIÒ`ì«Xw÷ü¿´Tk—‰òètsYíÀ'¸­?Eľî?öT¶ºT ¼‹5ÖÃ0|l—)'•B$[Xï`©˜ ©˜5õ‡D:Qo¡ú8x9ÓÒµw‡÷±!·„sÀ1tã&Û)S©ªŸ°ƒ•k†«gv»¥­ £7_ ûÙvøèè«Î(ùÔ¹¯ÍŠTùkÞûÆã‘U”•…õD²Õl€\»ˆ7mûC9Ý Ey ÖrÁµÃéI#I¾¬hhž¤¡néçŠÝ— n<熈A3>/ìù‚vW=×—4T|rü2=MŽßfî0‡PàNöe|òy±€ÓÏ¥(„ÊÎZÏ…-¯’5žöŸÄÇ,¼šHO—Ý ï"â÷×î¬Ê¿H}Jj’í̬§Û5f4µlÅJÝ”Xa”V6’ÄË«7‘Š/—–ù(ø<F"Zò°g -1ýyóÊ…pŠ‘u[y}UæŸ*Fý~K÷M¯Ž«e%‹Xr{ã™B AòrÁ¡Œ(‹=¯0IFsîÄj í«ßT«Ax³ýk˜¨pÌ4j*µï¯ÙŠÖ >ÅÝÑ’Èg°wë ã=…¦ŽNgî“êç¾Ç¹fŽò}ûÁSÿéoäöÅ7ɰ4îÉÇk2ÄxrF²OÜ”(¾\|‰ß1£Îö@‰iÚ"F—ÏS²+rñC•ËÒÙQƒ1ë,8¡Á÷nùÈö˾MyF-Å‹rjÌov®íWÛà|õA÷yÇË[‘îßC%vZox%ï{=Øz6BÍqçó[;Vlô¿tý™°¬ð…Ï kÀ‘ŒA’ª]=¾|­ºþú¨ñEÕÊTþÕƒ¦‡ÌµX‰ŸŠaù4Y.HÀ†xÄ r®!ý´É‚.ærUòuæ§íÌFÂqÿ‹qŸ_>€%ýØ`÷q§ÔG›‹"«÷€s[‡}ÊM ©bW^7äþpKHÁ X9‹×Jb7–¥þ®Ò+ž}*’jNL&Öo˜YvvKûýêóíê–ò_$™E"t"R/È…Z7¾¡Â®d)aú¸Dïª(W.‘ óç3‡ä°»µY®B Ò þŠæêjÃqñ‡ùR·Á}îò{Ú›¢c( å/ï432-`Ö¶<ݱ0ø¼Áò‰5¢LÜ‚¸¥[š âÈ9%Ÿ[÷ LˆÑ"J-¾’‚ÌÚaÒ…³iþ}X9cxªIžÜ‹EXýU}]¶ô•žt/1¿œDr¬|B]øÁŒ+kWûƒ Ÿ«”h–4–8\D»1x+=ìjYÔSùVZ£®å,>}Xó#CÓÖ=k*¾OÔçý±|àT ´øx¯¬„UYûU;én <ñ8ɦ±bˆ’m%Êk2RR’v·Z^À[NÀííZfdeŠ6N[ÿ[áæ1¹Â™9ÐËQ›†—Ë´Å=wÜÚlÞ¿LõÝZ <#Äc …*É8`…XÄ@èËèÇ™°ÏK”µX_›= :W×Zôk4̙բ[‰gj°1¿eåÍ7 ééBÜN¨«¿2÷J¶­ß^¸Lx@®“‘ ml¶;=NÆU“iëí¼€·[]e9)$¥Q‹o“$"”‰}ÙQg¬¬«T´êINåðþòþ–ͪÛuÞó®£ühþ…zÍMCÇt˜F7Übœü[3£w×Á|úà¯+zI¤+;O²²ip€^*ñe½?@ºÞë.6xò¤qú`D¯K¦JNä7÷{c$«¤ýØP_À¨ ”ŒY{óÉŸüû§j{-X„ûÆÐS¿ÄbæÙåO¦?òØä/’5H=ƒŠì7,}N=Ë­ü®»òª‚¨ êý"ž/ÖÄ-­·ÈGP7µû[“˪c‡´ Û£H¦ðÎ(Ÿï“ÏZùYŒ;,¢‰÷°zÈ<ÄO'(óÒº?2a½Ï=ÅŽÁçÐÙÑé+þ~+«ºÆ°­…2áÞm=þ5ÑÐÁ›<¯YïÐËêo©²©Cß<<}‰Ú÷•P¸ÿõW?Áe=™¬-ÎYhmöë^‡bÇ:bO2õ´Ú/-jq,å[ÜÌÙ™ÏйÖo1ÕÂdã7#Þ$xÐ:¥«.ã_÷šTaI*£Äµòƒþcª\º/il(b«ÊÎÀÔD¿É]æ}Ú-;½R[Â[f¦ù¢Ýy~ «Ú¯÷Ó«ˆ’Ý7ùn^ ý<6º—VéZÉ!)ýP˜…a„—ÉVL9–nËø±~‚àÂÏ÷±†oû˜$*Xn×4‘ï6¥”®\õäl%yŒiIä|^mWµÞn}Xá9ªù\â.¾oµD#¸Y”©Û£«'Aš¶!íVW¢p‘Á òƒtÞ‹‘ä ¢1+¡#JÃÅRÆJÚmÛ²‹;Âüö@U‘z™jˆû¶{­Jéጽ`ò‚(„;WDF$y¯Ü‚áÉÚt½!÷2?(Þ£œJsŠŠuye/‘±pƒŒî jdΔd锈5ŒÅ'Áý[Ú£whqèTå[žrAí1NøôŽô[~`ièqñÎJÕ\ ¸µè§Ï#ª~8wC¢Š«ÞÔ*U<Õ=¯9òVZ:&œÒ|Ò )ÔÉ—y•½½1sò1ÑßE­b¹…ôRÏ%0’>à«à­Ž‡Ü\Ñ©wÏ„˜Mº©ýXÛÁâ²^1÷üÀhŽ­þÁWhÍ€?ç~ Õ9ñû~d™ƒ¶CR"¦_Õ­“éÃ[õ19¾0]°Yžh‘MðµìFÈ ]6Ë~žöÐÌ']dÝ}Á3¸•³6JóaSPâämBœ×ë™b¢D×~ÏE%¨‡Éýâz5é[˜ä0ábóE/›58ãa,õ]¾J§®OÄmbGÞ±+¸™gù×ξ>D;8´õýÀбÙi¶ív§wÇZ %GÐ3nA¦â "™Å¼ŸüÜ4O¢Ê™¬Xq«" soØ3 áù—Í!k=l»W¸ Ÿ,5Æ ´1ʰŒ€dvƉK†ƒüåò¨çNïL‡ç¢¿ oñCqØä>$´•gsû'*Ó¨ÅOSÊ¡Ž‰ï]/Ü$áQÊ÷ŽÜ;I¥æ’Å×ÚKKeUäk>™«Cž(EŒº&œWë?1PóóôNšÍ¤ òÊ—; JdΦXY8Ö`Ô =úöòëùhëlÀ&n„àíæ+)mþÝož-Äy²½O)™GGäPóʧ•c&,CFÕ§É„éÔ¶jç6µþ Č̪ä&÷ê¯5ÜÖTbÉ׈ÕvV/à¡É‡Ë¦MæbA²õyVO¡Žxziì 7ùÊÚj´ ‘¼ yb‘ÂãÄg 'ã_èbòÈþðtÀ;k{j&é#Ü<Íê:E¶}nw[®™-2y‰÷={ø÷™RWÛØÑZ½ýz${3U¸•ïÚÉ}˜³võ‹÷HéUö…~<ºÞø øQUB.ÆXƒ«†P8¤º;ËI7Qw¨”ó¤Èëù Ø@7Ð%)–ì§\½ÝÇgnl¯^‡ j’ÒäK³ÇÜŒô¶~3Ó²n¹K1ô– ƇY 2TZ‹Y£7×ÌÚ'³wd×·üç‚·Gˆ:΄¯nŒL D±y›¿¾¸ÄEÊ•§J,¾“2öµ]„妛“L;s_Ÿ~ñ=Îç)¨ïîŸj›É4ÉŸŠü"˜Rñ %–Ï<¹ˆ',¡¼oFÄ.qšÀ¸ÀLÅD®ëw‰íþa¥dÕc/ÐßlÏ¢º½Å/vßÿ2JàŒŸN9]i€#¾–t[”‡\I’]õÇ![»ÇGÄwN×&»vÑ÷¶ÌÁ¯öÎÎ"’n1© ÞéãæÁ!.ßV'WÚŸ~Þx dnRîN´ ¼ü¹ÚµÓaÄõ*$°½Ïï Ga##s*Ì-¶$˜ ¨è ÙË0“’êu#m9kÄôóàã©kó¡o8ËH…Ñ÷;kà÷=*¹ñÎæÐñØÓíw.´Ü=«Ž¾³¥‰!Ö`ƦXþÕÏ¡œ–%/ÞëZ™Þ€9ªJvßJÀÜS­D¼çät!?e!›Gý¥"“¾‘3UÅN³†`{Ù'œmï½Ó§·¬o… º’®‡+•z¬×§çôr=5_m²µ m4¤7€e{¥”¾ yBJ-ïâ2ÛoÇÏYH@BÖ¥i ¾uµÖ$´x¯3B9ºsx¤ÉÆßápdôÆ.¬~·ÚüüSŽ–<òÜbNà¼Æ‰Ûx»ÑÔ”âCèW Àq€a™öJ7 õ‘%Çí+€€-gvÞ¤kˆk±ê6ØHKçIž¸·†gÝÞ (+d¹qvó*Í¡¢ŒþûŽ=Ÿ ~ÍÙ%Ü£/®s&²MKìU…°–67//Y9…$rÜó¾ïÓQ ÜÍÉ)€{G)wxçÊ>K–ÒÍnø«\<Ö •@zí콘ã;YŸOã«Ó5ùÈB(’*8âüùŠxëd¯Þ2úé¡ËÀZ“áªpe‚¶X“•v͇Ø<Ç]Åó­$­öqvNkÓ8’&_³ÞÍ•¥XÜÌ 1$73k©°ÝÁ¦É8Hú³«´²»\Ì ‹ƒOùÄyéþ1ÏA¼i_îÆ…à“ºÈ ŒAL)Uê¬kU¦ˆØš ¶ Ï¾6¾`gÒecFIö›ŽÒO oË=»7vøâö‡ê~T;³ˆ¤$ÝŽæØÏ\¤N¬áÓQÔ Yù"Â{ë¨WoJ³Õý¹IŸ~ÔxéýŽÞþ(4Ál€Ítçîù ò‰Ý ËÒÓþ BÅgG;78$$gqa’s5†ü?[Ò-½[ÆZŽdÖ2ÄŸÉJß,µœ²Áê¼þjD¬T»Þ̺ýíºŒäXò4âî¬)ÃW6Ñ‘pKdPTõͳöxï…½g‘ †In eÓËÍ[yãçÓ©zÒÑ?ÅœY×£DfÔ¤Nî›YÉR¡\ ÆG;ÈÖèXÙäå̾†?0»U<È+ÿT9ìjͪhÆ•v”ç’U—}OeŸ2VA¿ñ©kˆìHïê~èlp yð†e´q5ã䎳ca1½wšßß#kF4zô¥§|Ýj_¤ÿD¢»õõl½Æò(ú’FÊày1…㣮´‰Ù7xû?è£täï‡è›*„Eß_ˆ né±ZËè˜t$æy94u–Ê®Ÿz¿ˆz1OÓsÿÆê.®-U@]7XZóÎS¹ü@{Hñ¾TÎõX4.õ5æXG0•ŸQT:kâݵ©Ñq²otŽßèã_˜›ó¡´ŸëÑ]’|ûÌó<›YC¤Fæn+ÞëâŸNÁù°Sˆè¾ô“NÕÔC¼Û1‹lKo´NîvH†b:íÆ+d·S`G=Bÿ~š2V™(cL¦—/XMÐ’pœ3ƒGÈûüýJpá+¦3¾äáÇ½ËØGÇ‚xWaÆú¸ Á{SUËT €Í帕iJrÐ*Ylê¾R\µº:GáøOB‰ÖÝDhá× V¦wyý>êܲ‰$#lŽ®Ö6_†!rC~#ŸšÀVgY ‚ÚÆ¢Îp,ëRJ †æ=èpï›Ñ:ðé„òHÖµ1ùløÝp ¤Ù,³U§XçÊæôÛœÞæm©9Œ´<âÙFö§mNñÖžxÉ’ž£]ŽÜù‡œÞ‚Ï7fRG<Œ?“Y¿²lS 5–J—ðqH² qǹ´Ò~•]PõÃqÊßï Æü’<µ%} Kgx8+Øy…?þè¬ýÇû#ØÞwe"Vääwú ¼®r +Õ–ñ‰Çà¥4I:›Ì, uýÌ}÷K^ZZ“Û·aÁ ùáKÎÌi~¢aEQ ¢ÝðBÌ=ÁR%ùG´âäÇy¤ªé%çOÒíÕÞøìût8¨»u'ï½êéj,ºÜÝ`ÜÿiDÝ]]ƒ %?T‡]J$ÀJcfŒo…ã\çGõ/b%ߨT<_=[Ö|h3ru<®Ù¼Ñý¾…ê.MüvÂãž—Ëz^÷n÷,ÒXP÷;;iÝ)1I#+6 ‚‰‡Ð7Ø+¬Óí´ßMa+Çv[ÛJŒöxTÁ–'{PD¨¶—ób‘ÌHâÎLsQu˜Á Ðë9Œ± XL ¦}‹½´/x>Ž÷±{xïùF¿ ¹jkãæNTy†ûµc™Ï—±eå£gŽSÝòUwºüâ´I^t0›ŠÐ²ÓVlÅ(–Ë3NÝ =ŠNú(–²kßtS+fø2gâÜ_ÕCÚK$°ˆ¤nnõ§éä õñÐÔŒ’Ÿ-Ø«X§—ã}V¨¹Ë ‘ÄÎþ|È‘´ì5ÿ(¦Â‹˜r¤"ê´/EðñhÝÓ·^뱓얱˜|ÉAsœÍ%‹„cÀOyÇe Ø½º,GÀ|È¿K;ÁO¬ƒ£ˆp]†Ú¶¼eâm…8,³ÒdÂDí²e^üzKm!XãÑsOŸ/Çkü&^C‘=‡%|°¸U"ÍDú-°›1TPa6*Wâ»Ôû öà,­f*‚åûÉŽ•Còž1ÖóN_Ýø<íIvfXK /u¸#;WJüdÇTÉËÞ5!nÒ UüÙ¬SÈcrê´·2cT|ôúPÄ—9Ìtð„”Æ¦îOmÑáξß[ÜKjLðì_V}J5À9y|®Bq|¼°_§þÊqG¢`­ú†od;ì¶6R~ã¡!yþ,kœødhèé„•þç×›ëï§R«}Ø,>8=dÿQ7”;öý…v¨ð‘‡£ñOaþÂô¾¸·B™¹ŽM:dÖi\:Ãz0­bž€ûîü~Sý»É>¨gq]Ìg 5ñ„*âŒ7v/3ãKª¥k(ôµ‘ú]lmäõ¹{O ËŽÁåÇ…fÛ¡ð7vFŒ¾ƒÈIîJ€ˆãÓ±7ïöcrÕÎë–ÉÀߦO$ ü‚ =à #@†"ç’ ô ùp…%ˆ(÷—¹.Ã,ã:9¯æ..2'(ú°#YzfŽM“/܈Þ=_œš<ÇcØ 0.ßrP fõÆG´Dèð±¤yLíù59yÑ«ˆø~ örÜ %ŸŒ=㼜©Óló¢J²q) ·‘ÉOx8»’m®aópwä››À[*ëàX@¾`ï¶¾Ò1~6¨”4ž.ãAî\H¼ÒRé-"œà£½Î#Ô™ÛœÇ|B^‹vó½Éºk#—æmM]GûÙ¾öµòÜæ›AVGftrØg3…E‰Uw1'¯îi~ÝÂŽ×Û¦/$Ãid¥¾œêuçÈ'gÝä«nLß: žò¨$ë2=xUëæÅ¼ì5ã©„ÄúÎOÿ¹sÎ&½Ç®L ^‰QzDšÔ»ÁÖ—äa?²»KÕp¸-T™ÿx 8¸bCyVꢂO¥­ˆ§(^wÜŽ¢»âõsNõ}éNÅÏzꌫúæ=Ù}ÁÐ3×X_ɘíåc¥>ó)[daMjv†d®"·Ò@B¨‡«q¯cŒ‚ŽÊTFIÆ`gÌê¼NÛWp;ÄR‡ÇlCKƒo$žG¯ã1¼ákIÕ‘«Jm¾‚«ïn²bL’°NDq/^<T/IY@•´iø;ŽÞä9ìPnO˜*õé0©þÛØcm*é'™‘D‹µË›ª!„ØåOôýj âÈi> stream xÚuT”k×6 Ò)!ÍÒ3t—t#]¢ÃÌ#0Ì#tI( ]Ò„" H(ÒÝ)Ý-ñ¡çœ÷œóþÿZß·žµæyöÞ×Þ÷Þ÷}]÷p² (A‘¶05$- $’(ëi @ AH˜“ÓŽv‚ý'@Èi sCÁ‘é@”Ý``ôµOŒ¾Fê"-w'€@H\ZHBƒ@R‘nÒ° Ðh!0!§2ÒÅÛ n^è¯O7„ $%%Áÿ; ä sƒCÀ€.ís¾^v!!pÚû_%¸eÐhi ÐÓÓSìŒDºÙËóð<áh€! só€A¿†èaÍ&HÈ 0v€£þˆ!íО`7àÚá‡À¨ëwæ¸^`¤©Ðw!þëüàü¹;!A¡ÿ”û3ûW!8âw2A:»€Þp„=Àîè«é¢½Ðü0ú vB!¯óÁ`¸Øöð»w0@Mé>|=⟢ np4Jwú5$ðW™ë}VE@•‘ÎÎ0Eø«?¸ r½ñÞÀ¿Î×ôD`þcÚÁP»_ƒ@Ý]€&¸«;LSåOе‹ðoŸ= @’BB˜+æqþZÂØÛö;øÛ}=…/Æé°»æ ·ƒ]¿1(° €vs‡ùbþø·Ex] ‡ ¶0{8‚ðïê×n˜Ýö5Üà^+Ð5… _Ͼ\“ ŠD8yÿ ÿ}Ê@5e=cM}¾¿fþOôÞ=¤# % Ä„b’ß2Ãÿlôw®& ú£ßëú«g?iÀý§Hxÿ®¥‡¼f/ Àý7Ù­Ab ÈõÐÿ™ò¿SþLÿUå'û·¤æîäôÀý'âÿ€áNÞB®é뎾–‚.òZˆÿ†šÁþ°. wwþï¨&|- %„ý5­þ:8J îƒÀч?Xó‡ßä—âœà˜ÿuÉ\§€@ÿ»–Äñú"A]Sówv­¢/ªŠ€ ¡¿ä&,&»¹½ A׌`„®u …yý&3(ˆ@¢¯S×úìn„¿ÎUtÍŸ_®ßÖ¯€Ð˜B ìoS´ƒÿ#*þúÎEüÃÑ¿Í5 qws»Öïob]Oó—ýû²€Á¼`±a$D&äquȇ“J%O¥ï²·¶SNÌ…¾çÙà£ÛTûÎ%e¤k—¨µ ©Ù<þ¤wÏõ$szd³XÃòÆ[ôH€EmÅžÅ6~øêèÆ`"昑m˜¬+Ûìù=féB·6,¦(ò&¨}›'Ù“»ÕŸG=¹¨ŠÔ$´ž~Ðklª,Jסa”2ݘ7D×Ùv/‰ÐÞ}5ï¼mñB/M[¶ñ”0Á³‚|¶½«c’¢•©9*PË#hi‡#M¡*ÓÁ¨"ŠWa:™CzþªÐc=í6ÆVR™ÆH7›ëá‹TåáðЂ¢¥²K¡&¶s–í’Ï=tÕ¸UUE¬›^áØqà†Ä³Ç((n.•9óbÕÓ|¬ï•Úã'¾`Vƒ¦å,Û}‡K#ñ¼lPÈ*dþ`ëL–!q#H{ô€"O¿r˜Ì·/’‘èéÑãçµ;o´?ñ·Àe.ea/g’ë€`æÓsaÞì¢ ™†ºÇz*iƒaž2ÛÌþ é–L…ý +˜çÛñÖfc’ÏüR1øk·yïˆaÓYúŒ9ÍŽ'hñtšœ“Æ"…\Þoeév¤À ã麫Gs†1ä”ÉDuóÄD«/%kxÑ3¯yˆ=%i¡˜Šá •¯4êK³VzÇÉšÜ :nòlJÌ(¡'D;µ ~Ñï/=ðw{•ð[wÂÓŒ)ê÷˜b§W÷'3É5ʰ ¾µGqšMƒº,¨›WTcº‚Pg~ÖÃE’±7vPÀ€ #•e³LX?UCf7;—‰]%–`(û\µ—üÆ*CÓY·ÖÓL?ÅÎ7[ Q¥îúw™â\#´øB²lµ³«êfÓb™³dŒ¦Ÿ ¿’?ꜪTŽÃ&㞎œð®fpyEºêW}¡‡³è_CõJ®EyãùÞ}æhÏ82Í$VÁ/lÌuºVÑôžawQ?xPØQêGPr^BLˆR=$ª,ª^”•À¸o㔉`$ÓŸ®Fd%4‹AIÓª÷?¦R<¡79Ïë"ÛT·? " I` 2ÄÐ'æég^A¥ÊF›ÆOê$ÚG[D'ü‡û†$¦¾àq‡½¾ä2/F%j—{H7ìòèc&½7E·: õ ­¯\¯VE ›¿Í9*Õ²í bð|Gj>8A…‰'•Ûñ&uv°ÌQ¢´ÌÚmý›^ĺu ÆŒÁ åÄFБْ3Wô% cÊ@‘(¼— ²Ë0Ùãy+§Å`r𦤜µ4Xc™2´¿Jš3Q2i556ìICòÉ?6¼/CØ >£ñrÕ%Æ£ ¨…Lë•*{E”óØ×Ë ¤V²À&ÜÃÞ'±åidªaSÕ˜°165 *ᡇªüås·ñä£ã>¨ Œ&±f…Q¨òl ±ë­KÒ^ŒÝ ϲÞ4'$âo™ã›Ý»{‹ô5ìir§ ö½¸ŸuóŸ—V–µ ˜·¦ÌàbäÁã_Õ åvÅ’o\’ ûUiüxgÏfHUm$ ç™_D2¦; ÍÅ©©yÍürïö™¡‰3“8àU<ÚÃöf8ÉR$úžÄÏü‚¿nÆÄ¦‡é.E<àý$«/Ûþi Ú,’(<5Ó|¾¸M0 …!©ëæ '¦ÌÍUšúÁYyI÷\բ߳Úˆ7ê~¤K bna Œîkþi×ö6 ÓβeÕ£lÀqÃõRY03õè}N3õŒ1ßÐ8Éš÷¯È{Ò«9ÓäO¯J¥4Vn¿ŸŸî¦4ºè{YO~§þ‡:ã1Ý)ºâ'Riy4ku+g´­íua®1¶C^°i±>àg‹i9ˆä'_Wu×—+£öåǘ€N\Fa£ýâ~)Ðî.aط圀>ÁoüAè"â–#Îm Ñ#7)"ZVÃd0Ÿ…‹CjÏÄ^Û%¯ÚÙáÇ•³u5>¢ÜXƒ~Ôy<ô°Ê!ªØ|°àZ'µ3K³<©–ËxÕbIHsçòÍ/šËã{æ£$-­9ìvÃênè Œ'Úô)Ç}Ú`]ÏaׯbÅ.tÈÅ;ïÓ2·™òŒB S€²‚K2™ýb–\*í@«Ä¦»½˜ÄV<Øó£*ÁãË'9Š3öõö]¬!-2Nvém³¡EÆÝ -TóÏoväœ* ÔgKBÄ/MÓ±Å7ç¶éµ˜D `j|ê‚Õ‡Etš¦¦º¢?Wå¾ng° bà„ òó’W6FëM®×źp·ÔNWyÃÔxŽ!‹yŹ' ñõŒ÷¦¶ƒÐGîŒ65µøòz_´jï…#õ3Òüý7F„Gäx–_™T¨^ÞÅYÕ;sõ<…?7-œÈ™XE¼Á]ªÍžV¾9rÈ$ê2Ð0¦¢oÝçœJ.@s"Âf#Õß³ÁfòQny(åà9Ÿ3“\0fWÜPÔOѸ“ Æ0çØ÷|d»a7ê@Áz¾»ä(L7¹éÜ9púc„6yêÙfú¤Ð[¢&«+Dµ…Ÿ>ð-3ÏKÆ©“ ´%q–Lg8ÇökÙ¯º-¸Òh%DÒºk}oÄíCî'‡ß "©±‹ ŒÊº²’Ñ¥%N&néµÛR7¦å…¬Êt]a÷”²8S7rÁóÕZC®þ#ÅÒ:¼¢ƒ}r+œ2ÂWØ` çxv ò?/ƒXÀZõy•Tû!Ö·5±j‡@FÉl:Œ3ìŠ v䨳Ž™DRû’îE~2D–v ”DSÖIëÃbü¾}NÇËêªúr>6\oñ¢·«š½‹^Å4Ð!ׯß*¡Ü‹ÐzoãΈhãDŸá êKÜaÆ!¿ˆÐzrQ÷Ô%$`=öµ„ó׺Ÿ‹À;¥?sõ <«ïÌpØêšæ³0"A㜟]ýÚ‹Bå¾{û¬eÝ -ù2çLMî¶§kåcÒðâ+J/Y–HñÀ:*ªqk÷ú’' ƒüð“-Câ)[ÆÓkÆ?ÂÓÞBçSW,Óh ñšP¸Õ2‰zJ|]Š.æiêÌòg ¬ qA¤ßV¿{ŸO·¹­îÛR•òi3l(ÜY¶8Ôí³ômC°à±W`ßÇ’ÎܺW~¬†Í­ îöOÙI–¸%\ÍÂr…٨ĄðXöh%å€ÐÌ1ÃÝaDc©‡àÒ;Î÷|¢Vž Í;Û}œØdk«§zËKŸø_á'jÜ"Xe"pÛ³àrˆ(m­ÔsyEAŠoB”[•EOsØ}’½C÷Xš¸†/¹µËè*uðaì½e·Um°ÝŠÛVöu$÷îÅzJáô‰KÞòÞb6â#ÞØÛu²eÁÛ ßQ±ïZ7bf„tfó'øy( 4àê­ŠvùÉÆ¼+\Á‡¤"¹ée@1ô…¨+ZÛ¥¤<´»¡;œ<*ŸšG‚H ,,§ŸœïK¾¤îY]ÖØí(nI}#¤Ð‰mÐ_ ç[“?Zx»—bJ<3g"ývE_™õUV,¥±ÃEìÇ9åÁŠofG¶Aß½L!¡Z&áz]žp’UJC+ϰ˜©>ZÅwîŒSAÙõÚ¶7ú<Ö5‚6Ð8åÔÞŠ’ZVö}OòVrȯòŽË¿·ó»ÉÒ¸0÷.ö(­FF¯e*^8áÐ) TO~/‘kN¢VLx= ö^ÖSå¶åù:7Xj²)•TÉÌ6ïÎuLžºy3Î<âΫ›]jq› “¯Õ¢'ŽŒ¸`ê ªbè=ެv[êD,ÃGLþ¼Vxôd⮢'±w|ùêaŸ!ís܃¯ß)hÙdÌ® d^Š’œäÍ«¸ U½žïè@ؤÙ>Ñ!|ÐIãÆ SãVGRì@¾òøX³ëŒP™`+î#ß{…윕ۓcGå’ÓÌu 4ON^‡¾+x|ʦ§#ApÿŽã·NÊÛû¬÷ÞI§IѬ•n‰/±ÝkÄôïZ'± /hN[ŽêÆÜä@&}«SMÔˆ_w57Vy˜¾ä»åÿ$óðue9­”ïhvì±` øàŠ¢ÑKá).V®ô]zÞ6M¸á±~­ÉÝ;+™ÞT£éê©LÝÄÅR®{êýIߎÕBƒ< n,怃‰¨ç}ef»Y§ÎÏúÂý±¶û5žß9³w»dúÑÅî_=µz>¬ÙR•‚Þå¬awVm˜Ÿ÷¡80hYÕ"±íxEnlãˆ1nÊDp« Ãî“íâð®[/…ÒûPŽ<8kq«¼b)pf§åI~.í;Õ¶Ì×ßW…¹6±ÍkE:döÛ¶N„9ø¾¥£2&DÓ¼ýÈÿh˧§/QûxÛý3m曎_ û»gͤ%Ù˜UY¿¾OÖk·CZ^jöK >,ŠNøßŸE+ìÜÌ9bÝwº'|¨·šžºeíÞ¦Pžþüæ#ªð;q©‘‚cŒbê²c~ŒÓtU¬þ‡þô÷[{Å´ÌLºgЪæ2ù}  éCç€i`AY.«YQ– {°PobÅÆñú9^ðÀ°°·Žê H¹»UN’f¼d_m ëD,î!^$_D§T•,ÈISr{þnm—ЙÚñ,«S…‰öeÓX¡ß£îo¢¹cöÁ@ú:uÅó ª^\r#Œ>Ðäܪ5ææºV]Ö},ƒÞý1[ï¢Á(€ªË€¿Ùƒ.•‡Šà…9Ã.ÑdT—N ûkãó(@ãNÞ¤ûv,zÊMØ…óú¡°ôpOÚ‹µeZÛÝ+9G x0ÏH‰ø8¥]1è­_%îM¾¬ÉAŒÊˆò±ý“-.l®Œ™àÌÉ9³Zßó“ÉÅ´;ÌkŸq'¹’‡ÇÏ÷bö·²s×nŽHŠONä£;áôIfъѬºÑ·›ÍVïòôHÏ=Õk³ëaò’o¯²Råúw6bÿ®ºú˜ö'ý—žÀgäË—ÛZzÜá;Q?ndÙš½ÊfþbÀQÒ¢5Ï_"Q…Sñ¤¥w ¥7qœ îk¥)}ÚJ°N¤íl;~•ôÊì±)ëDi<[#‘—]JBüôÙžî9ˆ6gKOý6)¿§ZžïoÊÿ<=aA%©K=û,ž?Øa¦'-k—¹`aa«BD>/)Ñsï4ö›†'_êÏú ‡};Wuî¾ê~ò>ÿ&•UX¼ Î\r}Õ›Ù6ju&ýZ’9¾ ›È¬ÄgåÙÄ2I.½÷oéÀx|˜Š3«diž"ꎸ(¶5d_PÌüÀ\[*ðXb«!^èrÇ%ël[½Ê£%ÞœÙÈ05ö=x—?]\ÌGCk-eE:ÔÁÑJzVÞ×g*žÜX 5'˜d:ç9Ú4A£¦5*_¨ûž|ùܬ?>¨PQ3.Zõ²½ú(Dûmq°ZL‹µz×{ÌÄØ»Ê^,¹Öh$²æjÏÕ¼²¿ºÜϬxQ é›ÍÞøáñm’„ùGþÝL&•{î¹/ƒènGuMu…G8TÍõ,\üäG´Í!Ýœ#¢¢.“07ƒÛóOù!©Â\©ñ‘5~O{¬V+í”æäPçýÁ‚±‘/s;bt7½ô}ä„4×9¶ñ¾…‹½GFsnÍ™¹¢ôTþü Ô–1oö娔?Ö«ÏÃÔ9Tû²1wšTt1y,"¥­®—ÂÅ9®`Þð¹`¾jW¬Cdaß+ßÅ« “[GŒÛ/o¾ç4R“‘lŒCˆ¢Û“mV!ˆÔã…:‚@>1O³C\)Xf“{ÉûvO(dOG,tRü{£2ßH¦çÇ@”}B:/©Ro¬âã%{:‡“á•T išÉ>øšs‹…Xq’¬K>ÇsÚc_–Š»¬YîZÐþIÌ2Kôøû@Súò÷w®O2¾²íõ"£iPŠ%Ôße)Õ,ŠŠ\èg¹ÎØ6ø79iY$,' ¬MÞ?TV®pÀJs«\ “m ck ‹$U›Pž:å=$?ȨƒÅ\1ñ …U3:Š_p$æ}Y™—ûÄ=ˆ-ç,þÊT@Ž+íò6íZuÉìay4ßætwVÑ]åhªÖñçl¸é#ÕeëCÃRË~taz;¹§?Zü·ð;ãk¶jþ¿'q endstream endobj 231 0 obj << /Length1 1435 /Length2 6567 /Length3 0 /Length 7529 /Filter /FlateDecode >> stream xÚtT”k×6‚J3t*Ý0C‡ÒÝ4ÃÌCÌÀ04JH HKƒ´tKƒ"!ÒÒ2JI(‡Ï{ÞóýÿZÿ¿žµžçÙ{_»î}훃EßH@†²‡«¢° H¨¤cd¤! DA a"cÆþ·žˆÃŽöD Òÿ…PBÃ!˜+2sÔA!š^®@°,. –€Â Ôß@Z¨ ñFÀ€:‚@MîIÄ¡„r÷C#0WyþþrCy€`)) þßî@78… :ŒÜí*#â 4BApŒß¿BpßuÂ`Ü¥…„|||!nž‚(´£,?ÐqÂ=áho8 ø«e .Ä þ§5A" ±Âó/ƒÊãAÃW WŽô¼rñBÂàhàUv ‘†6PÏŽü ¬ý€øçp€`AðÂýñþüí BQnî¤ét@¸ÂzªÚ‚_ ?‚„ýB\=QWþoÂbø]:¨ª`„\uø§?O(áŽñôD¸þêQèW˜«cVA”Pnnp$Æ“èW}Ê4zuî~B†ë‚Dù þ–H˜Ã¯6`^îB&H„‡\CùæJEôÎŽŠ@ I$î„ûB„~%0ös‡ÿ6‚©¯z pG¹®Ú€!àW¢Oˆ7ˆA{ÁƒþÛðo‰ ÂP Ðîˆ@ýýJ wøK¾š?á ´]Ñ ýzþóg}Å0 éê÷ü÷ˆ…ôµÔ ´ùþ´ü£¢"Ê ¾â¨€°‹ˆ%ÄÁÀ Ò‡ þúÇYé€JýUïÕAý]³÷pÿÙà¿c颮¨ rÿÃt+zõÿóý·Ëÿæ¿¢ü?™þ¿+Rõruýmçþ ðØ!nW¿?ˆ+êza®Ö@uµ Èÿ 5ƒÿµ»:pÂËí[50«uP@:^QZ,ü—ᩊð…Ãô¨Ó_œùKoòkÛ\H¸>Êñë~þžÓ¿mW+u¹ºC<¯ˆùÛ¿Ú 'UABQ°_«&,&„ Ñ?¢«A_IbÀðÕNÂ྿© D¢0W.À«ƒ€(4ѯ©þÊ)û¥û#‚BðDa â|Fþ—(ÂüÿUÔ ¾ZÏß̹*øoù÷]‡û¡DsÓ(¨L˜s]Xûi“ÀÆÈÝ_ÓOï ŒÚ`úTÞÛ®&eg}Ð*W{ VµqîÒUô8ÍYš9 X¯¿Óà'z,pGuËñŽ}ÂôåñµÉ¤€“[¬Ó€œ|³TEfétŽþíònB9˜cŸ «îÕl’'u©ª„fx»ngwMi–6í-)Ó†˜—öÆbGô\¹ÝâC×b­¢Òt3Xµîvž%úT“¯ô ,P¼¾ÝóPÓûÑÆ{†BEfà–²(~µéBÙyn‰÷ç Ê{5*%Z#|NÛ´gJÓ‘D> £§ø^ ¢#!d$ßùÁÎè—÷+S‚¬«­*9io¤+¸-O5­ŸÑÜW£<Éž‰Cfzý(¤§ªvg ½-¿gGdÑDÂòxq7E«Í¯…qþL§wjiÇ^c­%aiAƒ×¡Œ°\6Y‚ܱÎx)[ñ]ø1+vË k*Ò2­¶*øãa3sKÌÚžòC-ÓÄQïÞƒ<} °BÚuM)ÎÓ‚'Eó‚C£{bhÈ£t?ÈúL'Ž®¡³ùIn…7ù"bÒ ¾ôÆXøÑž™v&‘ªSÞ×â¦×ž+Å |oUãZf.y!½¬Û/lB T§îÕüÖ¾öé“bë`+¼ë êõ4K^ø¸Šf‚O$-¨dG€_wtÝîÏ.Œ MFÙ[Ö–ªV@?vMÞÞ‹¸k„žS–¼Ì*†Ý¨Ÿ+fÊ+îQ´¡+ËZTKN›M¶ò˹Èá"ð-Y4È_1ŸyÊÀW«hŠãšpóÜ×›À)a‹ç+›IÕó뛓Í{^Ó<©)-"µŸ]³Ï).DY¥¸3¸ÌÇÐéXbo›¾Gé|×*ƒæIi?e;ûËA™EÒrÀÊæ@¿l jÿë@ç"‚™î¯¥ã<†àT<v¦D»›¡®õ€}ä"©l«1T›\·kjA¤Æâ¦å[ ¸¯imä´RÎÒ,ŒR2ZòùVéüœ·*N10sâóõ®Ü/茸5Œ‰À{¾1.%qŠæqBØ·1U–^¦HÜ·ÊîðùÓ ÷ü_KÒºÞ *·£7ù”iϘ¬U¬ €~\ܪ‹3½‹šá]ж¢÷ìÀ„½r•äí÷o»DY¬öÍk}W¸Ä}š%ñöÀg”5qü@A;À,¡º2uÐõäƒ÷VLogaHúºz ®óÜs[²üVÿ×/Í!Ë0;#?aÊâî³ Óý ©Â£gÃí~¤Î šohÌcB¤u¦4Cùìnáñâö¸ÄíÐótÈøÞ’«ºmKôm*öF'yØ(ÌòKءޥ.WÙùnq@NBÿ8]"žµuÃ2²ø”Bãë¶!=5ÊæC ñîé-ïš]•!üéu¥i£Ç(iÿâÌòäÝ®ó{ ¶ UŽÔš‘ü®`˵iºáµÃ:ñ7¦ÛΜ庺ákŸ)>ø%óThò}Tü‚㞪÷˜¦ÞqÚzb¿*à}§emÇè§N‡õºe `lÖÍ9ßk˜©]5V…M"ÉxÃQ“!ûEöœôh9b Ô‡°‡Š8¦×“NéËí-–q&ÝôJcúÐ(‚j;û$^a*Ð#:A¥ª¤o\(Ø€Íï ÉRì$4â›K†¿k{±ŒÏé¦0«Æf¼à¶XŒµ3ôÉ«ˆêsaª Ov„ãe¥€hxzKù¤éh~¶±:ÍE³ÖÙ”¿þëž$A#^+EsÉQ‡½2õ>¾Ddê­œú Ș:>&,ŸÞG¹WõÙL4> ´“”zc©š¿H‚Ìó,çÕ©–¨Úׄ×Ç…^¼ËùfU§xáð½âž|›}É]¡½v“OÏ̉kPCŽâ—Wìs ðâ'1ÈúÀOD>ñjR¸[I×9xï¼Õ"ôñž!CqÄLU2ÁÂ"8ý£ø~nÄŠ™œÓ~…U¼ãWd¡‡Ù®Úÿ,5)’?rdî…±ûNÞ[á0”c”Zôão±î"/š°q:”f îV g¶;ÛSË„WDÚ’¬¡­µ4(#ÒŸDúýLù*Ÿæ®ÆÞdÅ9˜µÕ×>üÿpßþË Äc.9²u(f¸ñq¿&ÌùþEuŒ‰èhµ˜±f$ÇœOœG޹o¿¨Sg¦Ó@sFWÎÝÚnkE·pIÔæøPדÐQÔ†½‹În AþÃûÆ~«µÍ>¡Ú‹¬fÕ…@·˜ý;ïqíX"a¾јØ&JX¬˜'=Ó”•…ŽLÛÆêX¢§-íÏ¡{)R§pŠ2¯@ïÏšgCù+i8òàøp7SÐX–Ús²,îÝSÆ+¥±—Ô¢öx㜞x¤/E’i©½ž´¡À¦G}“Œ QÂB<Võ=Ûc%þ1Û €=«3Vòékþ’æ ŸOÔ®Zydñ¯h¿Ûgõ5«º…eÆñ)Î>[¬8¹lŠ‹¶Ý»ufyŠiž’2ÀÈxaæ6¥=Xk‰OAˆ¤kËéa±kYâqvïĶ{™:¢x„åb)çÕYÍJ}ï ÚMYŽš%öLÂv½'BUxê™Ù•üŒ¨†-ILÍøÀÉî£ÅbìλŸÕ×öñg8uâ `YåEy«ÚtÜ‘ò‚ tŽo}^ß}w_1 ï'K« Áe÷èêÅáÆ¨;`Óc"[ƒiÍÂ46|EúÉÖô_&Öµ_r´å¦‰ ö/jÇ$[5ú+Çt¨ŒÓlLÎuž³•sFÔ1À;¿yòŽÝ1 šE=klÊiàã/¾\õ3ÕmÅÎu7C«mÍ?ý˜‰Ãk¸aæiU.ÛOd0éËY¢ˆ_?;‘‰UzömžçoáØ“Õˆ?^8Qz²œkS>§ØLˆoÝÐ^o6½t1¼\ëì÷ û ë ÚWTã‰<ôÍø8ôÈ2cû§v|΂`úS þ¦+t爈³«»/­æÄ3lû¶7œq¢ 0÷!©/úU;ÄiUónüTWHU­9—.>“{:ôùº³Ñì;±ˆ³Š>£¦ä1ñºhÚÒGãMŽ1ñ:Q?€VO`sjÇŒÂrèŠ#Gâ-ùÆA(×Q®–…#I¶7GâëÖ¸˜¬ô/MŘ(¿ °{3®ÊæŠ#ŸE©·?v>ÇÚœ§»à/KÄE0§ó‘M®ª¤"ï¡1W9 YË9nÜïøí‡”ù!€ðc"€ ÃØTúŒœ4* fˆ¤Ñ2/¡ãåq7éŸ ÄÄþ ðçĽðuTS|o¸xª–»vŠE¾.𤱒;~ÖÛ'iwˆ÷ÒÂù®eúd´Âoö¬Š¤ób’›ô€¬Y5é`½ /¾u³=^ÛŽ (wZ·YTû¥àA‘úµ¼Èè‡Jš®±ßÙI‹l¯‹@»Eºí ·m7pxMr b? dn¿‚Ë[³ åh5àçdÓÖX4Gz6³C y«çêUÒljÖ5ÎÊ=sÚc¢õÜp4ï”®äxàտىȭaÿLo¯Ç‰¯^ªþ¹(î/À"›Jäá¹®.ËIf,qÄ¡K‡ë—9”þ†×vzª„™AðEf+)£k½ÎíW=ê÷¤”×ñbÌw#7\žƒ¤e~AÔS°¥t < „‡×&u“Q6Ì;7Üâóôpò¯¥ê­åYÛƒ¯‡öS,†v™X±y„U”1®Î} éQyp=jz•ê;äõ)«î"~K±ˆ#ˆXÀ“Çp=P§âz¯NÖ 9σ¶ÕôkÝ[’§/FäÈ´Úqު쾶 0Üô)¤C7¤iª•¤ÉaúÓ.¤Š2½V–é+úO1—š?W/aYu›¯Æ©ÕK_û¯äC N*Fr4ĺ¤¡BÇþú¡”ÂArèû Ùy0ÖØe³²¦âžÖ©X!5„Ð^WUãÅyˆþIû5ò3ùÀñ¢Nz¢·}¦Ž÷ÚYsrA`cäpwµkÜ'7a¾‰|,rúˆt·öô›ÑŠIÝdžäG?qÁÓD×BO…÷"u,¯Î¦œJ †õ|É´@fœÒ²‡Ÿ,ö$Þ“Æ›H‚[ `î¼ÞÆi)®–3§.É Nøöj•4¶‡÷ú½‹“`+ 5Üd‡¯Üp¸ ‡Î‡`ú­ÎV¤I朕­ðF‚W›¥Ç¼„‚¡5ý,ždÜñ™oŒ‹v©©vwd¼uØ×ì–‹àÍ`ôÇY—¢±ÙŽÍº•,Âka¼P6mØáIâÅÀÊ©Ÿ#‰œ3|%Úþ‰ ]“°\)íPšøD^Hœ[+§ºò•¢* ãs0‰’"ØGrÔL·‡Û/™Žß®=__ûŒ®'Êö²îj£ ¤8{`å -´È¿9™eF×ïrúÔÿ5ÉÃÓjÄî­Ç¢u1ã¯äêŽPï(G‚¨ÛýŽŽ¢ókÔ(º„%Å3R×Ö©Õ¼ÍO÷µ-‡Ù·åÃ6 š(_oá ïMn#z„­ëº¶n+$$kmÁÞ‹§]jêênõ|¬ðDznèñÃ’NÜð*ßÁìˆ~ >k[äMž—:1I-¬ø+ Öǰé>Œ@n|våqzk¶zÒ¸qvä?<>G.üž¾º‘Š’Kb#|ý°Òµè9Êܾó=±‹ê5ö7H0‹a½{G!»Üç˜ú2•¶¥öY¡‹t•wìQk[;ØKJ<Ùøfï­YXDp(á§fA|e÷†’gÎÀ  ©À—)åÍ ýa‹OG*L_u¢2ý aŸt(­5%¨çp÷± µ{{Þ?¾ jà~øø‹ÆW'*3G>p\ÛÀR£qÁd¼ ]¿hlÚË2&QñÅZö»JgÂý/\ ¥>íö³ä_ |TªÃ£¯eó3wmÙ—ìî¹II?í®Qyø˜=OUx ï¦æ‹ððiÅX«{mï,´D±‡ÈÅæˈOƒ7àFv; QÀWVˆ‘ÝÏáûû~#néR¥ß(™<8iM”B•’ fŒNm²©qFÎIU5'™òêýWqÈZofuPæûË…}•öÇmß¶ä·)&/–,£ÛûþYùÞ‹@i ‰KEo¦®ïÊÅ„5v9e ª´u¢³;õs=ÏvEuÖŸ¦'[•zyãóh‹(aÖ:z â7;•«l;Kåb{›ÊƒxÀ«­hùWŒŠöq½Ñѳ‹®fYîµ.9>Â;±øM÷%Ëæ›ã6ERÙF¹¨{¤?ƒŠË;q N’_ZÑË…kiqêK`–ù¤o—®õ@büœ¡ñQG}dk¡í £¾í¶E¹yá“8Üæ-Jò»òmQù”æ4Õ·Ûk T RVV$ÔßÖ'‘2%P}ÅÁNï46B$ã)žhiN‰ç“¶P>gʳßÈÞ}!r¾.¾õÅýI'¤ü¨Uš!ˆ¬öç›]jÛ™Þ9®»œVšlÕ&.dèi‚Ø5aFÜ~È»eݼ¶v`Óþém-V×¥¥Ý$8|'2=:Ôp— é3—Ó¨?o9§ÝeçøIŸånÇÚ(à‚µ—e íPðæÞÛ;ém³.zô%¯òú36ÜaþF’¬wýFïh‘ËŸ‡ß‚YÅÊ—,Æ8hµ¡  1¾#–e²Ì†‚ÖÈlçá·–“u7 в&±æ¸<ÐH¥¨¨÷Žy9Q”lÃÙµ#¦Õä@èfqÚKrœ_ò.·¥gÜË϶Þyˆ[£œ!bñÐO7¶ ©îçå ïË&Larãøsˆ‡9÷“¨¢Ff#†Aîz$XàW&>€´çæö:@@whù+|aç‹éê&QÔñ›:Ö–97äé±—Ä”,iï RªmÞªO¥Re!K•x:Ö!/óÂëº ÊâgFêÃ…³#l¹ ¨*Ÿï¹¡¿Ý]?PyÄhýlÞU•OÂoÿ*‡³yü1ˆTŽì( Óƒ?GÍ­o$j(XùyD(AEnµ} ŒKK øý;èH—Ä XºùpÝ„@$²Hž2ÞæÁÝOÚ¬ÞêX庚r«À‘W´/ÈàéŠÁ¬OTï3 ¼LgÕ´JÚó)Äš~þȇ’^5Y`c÷`¥•_Ç®û¾lñãĵ? ,w¼;ÚðCÒR0lw¥rÌ ¸æwZôÚß+Ê=ÈZx%2*aú¬PÓ÷Èœ‡Áb-÷}{ú÷÷&¶¹Òn4õ#/ß2ì ë¤ØD nøg;Ü.é¢ì¤7ñO#˜Š h¦ô¤î‘agnR–'»×ðç{¦:A´¶¥M3ò%£;3kX-pñÈ;åÃ\Ùœ2¤oízP˜m[+š)|;s2Ä\ÅA½)£L®îæ2³N  Ž)å ZêØ¢qä-?zn¼›|äæÜÑÈ3x.Wˆ O³Ñ{P¹I™«ÿšÒÝHŸâ‰½RÚ͹O.h&<‹ÞœÆ¦[Ö£ 7Ssï_³%ö|7åq䲘ü‚e@+Û<“Ú¡”y H VegüÂe–«z-2w<ˆaIKÅp;¸ØÞË!hÎ7T$´ái£¤-â)4%3¿<’UœayK¡ržr¤.·Ò;»mФ‚¹¾oYjsk‰ŸÆ™,óùÌ“ç’[miùßL¤×÷^³%|^N°×ªcKZ|Iº?klj°íƒZ^’óëÑÂÝcÿüÅŠÙ¯`°ãöøôVüJVwœðƒ1®æZUè¾luž‡lâ.v}’Æçëý ÷ÜBÅ`/ަ(]°Ú){ËÎÙy˜poMÏ.}(Ðþáãò(­Ç§ý[–É"MÏ]›†lÆ…ÂêäKô .½Ã¯Ž†9J)°w-ñÕ1é-Ò¢Ò¥E“›ºþ¦ç|ºŠ…°ÞÞ÷5î²&_ÓqÒ¶(”5|+ HnÄ–WÞ¯GxÆÖ5Øè*û:!ÆçcP‹ï_1K©§¦ÏMŒ-9á ÆÐéMçœi8Ì1qí/ÅDBW+Ÿ6² CŽ\WU½Né‡ÞÔDìµêÈh™÷7>Z¾ŒY0£¬«hsæz/@ä³员ò%5蛛݈Á@4ê sboD×—"â±Âôr8jIUKÍcó?±Š7hó< +¬ÎŠs°Doh©ç—Þjí‡ØØøÏHX ¹äISòœÚËEt;k‹Ù@Cã˜Ñ÷K‘uYõ€Rˈsî³;Fíp“ê/¦ü]šTÛÄ1Ò€ý‚Cƒ€ZØËÝ—`<²†iLéíCGkÙëö‘Ö9hÎ÷õFÃÅÔø–Ã!Y"Ïið¢£O´çÀrh ±høòX%@’sçd_´]óÿB¬¨@–håOÅ›?ùDÊ+ƒÉàº_·ÞÚI§ÿ6ãé«.ìd±Ûšz,óZõŒºƒZ‡Â ¯ØDm¨›©”üúBjƒ®` v¤.™äçs¹,f_fêOï¾X_ÝAØ(†%&„R$Gúžˆ‘k˜´Ê4]T•|xSQ‚ƒÊ”w畯ù2G¬e‹—–ÿHqã(ïfÓ‹øNíMÄ„pnõ¬t¢.á*]!ñæ{!r/-6øSÜØ®W®V•©ÏªIk}^y©^n0)U¯gg× Úø+¾Æs±FY®Ž6[1˜5Ίf©Þ¦„0÷Y]а¿œGS`Ê™^—ãÿD>3I£¨ €êŸè¬`‰iH™¬$Éo Ø-sþTõ,Æ2¥<§£ÿ@ ~f h;úúç¡n¦¼×AJFéOõ1mëk9K:#zæ,‘ÁEï‚~¤vÔÉÞ¦m Ûäê½è¹js=wì‹ê`‘RŒ«×T‰nUan?o®©ÌeXðN¸Òh«Ãÿ8NŠI endstream endobj 233 0 obj << /Length1 1536 /Length2 7385 /Length3 0 /Length 8403 /Filter /FlateDecode >> stream xÚtTêÓ>Ý%(,]»HƒHÃÒ’.°°KìK·€„„„tHw ÒÝ)HH·ŠHLJÞ{÷ÞßÿÎ÷=gwŸ™gæyç™—IK‡WÆiUD"P¼ > 8@N]G,òllºp”ô/;›ÔÉŽDˆÿƒ!ç… nmòÔ-Q‰¨¸Ø@ aqˆ8Åþ""ÄòW¸%@ ‚D@ ØäNpkêöœ¿þ8-¸ 11‘¿Ã2öP'¸P‡ `PûÛ- v¤ŠòøW NI å ÎÏïææÆ±wæC:YKq=¸ÁQ0€6Ôêä µüj ±‡þÙ@wþჴB¹Aœ €[ƒÜŠp¾ qAXB·§tÀjM(â²Ú„€?/âý'ÝŸÑ¿Á¿ƒ!H{ÂްXÁí ME5>”;ê‚°üE„Ø9#oã!®¸Äü–ð»t@Qæ rÛáŸý9[8ÁPÎ|Îp»_=òÿJs{Í K9¤½=r&øUŸ<Ü jq{ïü×tCxý…¬àK«_mXº8ð?EÀ] `ù?9·&‚¿mÖP@ŠÞŽê€º[Àø ëáýíý2ßöàãå€tXݶõ[Ao¼œ!®PÊÉêãõOÇ¿°„[ æPk8‚àïì·f¨ÕøvþNpw€ðV~ ð×ç?ÿLnf‰DØyüMÿ=b~Uu°ž˜çÏ–ÿ㔕Eº¼xÅļB@ˆ>ÿΣÿYðïX0 û£ÜÛ{ú«d×?5Àùç‚pþKy«\(€óo¡…€·_ ÿ³Ü‡üÿTþ+Ëÿ*ôÿ®HÑÅÎî·ŸóÂÿã‡ØÃí<þdÜ*×u»êÈÛ]@ü7UúÇêªC-á.öÿí£ ·Û ƒ°¾U4/Hà#ÜYîµÔ‚£,`HæûÓ_ËfG@µÎð_ÏËmø_¾Û ³°½}BœouùÛ½] ª€°@ZþÚ4!aÄÉ âAp;è[$ðÝ®¤%Ôý·’ü|$ê6pÛ À éDðkª"@¿â/Óo$&à‡üÄüÿA¿ªã·üø¡C¿ü^!ÿ? è6ñ(àwú¼%;ÿ øQÿ€¢~×ßð_[¸89ݾ¿õy{-áßêµ ˜FZHÙT5ŸVÊйñnŽJbO:5àÍ5ÅCõ(L˜­Æê¤§Í©+ÎvƒMmÚ4dO3–f½6jßyó2*nY3š¿ž¾9FŸŒó:¡gž&­GËÒO½/^àÔƒ¦ÅðЬÿ±¥u©7Gu×§87ö»…Š"*ÁÍ­í•…ij”ôbz_×´Q æýº›BGÔ™köÑëÆa‰)̪’­g±nd+}ƒý wº:^¨¸¾ØÜg}‰º£ ÑO//ˆ[¡·Mr™YປBîe®D!½kÙSòI)ê² %õK‰SÔ“+Zë„·´ f€@jö:;MòGw?IûÏ•»°2$‰ŸÇí@q?à>!õ2b")Ü'sÿÀ5áòq˜;¾L.–‚i‹I<ÃR5+d8kçŠ^SÆÒ¿rIÓÏÒD ŸáFš¯i)빇ƒkõL)¾:MÒÇz‘˜øÖèæu6|al_! ™àš9‹üÞLHïÿ.D½-v‘¬|Wèsuß<ÆçÊ~çcÍÔTšAw¯O˜5RŽƒé4­¬`» %ZÌñOð~M|]zo,Ïs^uÃÏ ÆA%Ї„â nêKþ=R9¦ì²4PÜ|\S—²×vwUÐøåF}¯½ØŒEV®ñÚ3=Ì«qðxç§Ø™pžº¾Ù‹EJüýaT·g¬rÒaCR7XÇöl< š5Û“ØÅhÛ=œV£+ݽ•©NgŸ~,¯»ãD &U{¿éãÀb©„mêà?" ùŒÅù‘vg¤(NöÍ7UÚ¡!éIœIíûG-Cö=󬋻 ï_pBæZ90>¨ò:¬0r^¥pRbà¼XƒSII™‘(ýãª]æ 凥”O@ñèJ͇)«'Õî@Öþw®Ø€ôUß1¼ºzæ2›ûFÝw‚Ûº$±¹¸¸§ˆ ÌS9VO¹7ÚïÏo³x²¶§¥Î~s7 ´¶bvÀ‘LêI(Ü\#ëª0Ü®HˤÍ.ÕÊthjC?Z—É;]õúm'öÙñéONÕ™aˆ E²¥M3Å-à£!u ±"›¯<àÚFU¤ed~2¹Þºí¶%xeµ,¯²nÆÄíòx¬«>iP¼ðó×ÀL~I°3% ÔBk̰y—w7;«»CÇHSy¡oìhJïÉÊAqûµGÊ•$¥w‹5¥2ô¾˜AØy)‹ß´4Çk®!k 6§Ÿ‚–0ð 8a­O 3IÕ{î¢[ù=ºí»ŒÙiÔi[°ŽÂT¡¢¬ÒÌ7êbò“U²tþº¯°îk˜î¥øLwÔ};™Í wÓ²èéÆÐ\øúESËUä,2h£¡ò¨Q”·D45ÎÂÚcôŒ8R¢OÃjÃu*3$iLíÞ2?Ó¨ ó:ÉãÑ‹À·g5ô^ÄûäLîáázÀº'Mx/jÃLÔ¡„rUcKêÈy^¾­½H—Ÿ‘¶<±Ñ—„bì £½w©4(a=MŸfðD­y‡ø/·–)͹½ØúïORDÂòÆÝÞÙÃ(ILC?:ôpRuFœ2­ ·-8 (E?Œ£v\LÇMìÞ—Y+\j`6©k×6­¢Nžñ2ÞA¡)tΤwcðyï«öÂŽÉy‚Éý'ŸT$jžT+I*Ý›RVÒ½xˆ—&Ìxd¶™Aó“¥âÅú4f —Œxävn0Œ”ÐŒÉ@JQÄž/ô¥”KÏx&hÍ,z¹ü1½ÀVˆlöoAQkšeæÄÞ‚¹Ù¨ÌO™©Y¹ÿFÔS°–CwàE«¾9³<‡‘ÊBe—Ûò‘¶s­˜Ký½èÛ‰\7Ñ’G²L¯@D/BÖœŸÐmªµÍv1uoÖ¿i/BTNš*5e]¯ƒèôÓB™¨ÌPÇžùNƾk–ÐH̘[”ˆJinj¸÷Ó?™‹õéàÿ Žn‘@ßÔÐÓgï€!ÌÃn`»Q¯MæcT#QXBòså´²¥R‚ŒzÁà „˜Êp?^zŠàòH8WGMòCÞ–wýÙ*ÉS #&|ÝŽW[o¯®«zJ–ݰskè«vt<§µ ìÎ0 ƒ&§Vò®K­(«prÓOç¾óʱOsîÃ4–ŒZáñù\’=Û¨{_œÙü‡Ÿæ+©=EÁøÇ ¹¯jð7»ý­ðŠÆ ÒÕNÏÅ­û›2Q–÷„>;="i¡¤çXN[ |oÀ-§Æ¯N_Ó»X-mý1Ix ý™çêèS)¾*DøÉ 2‡è,u^SWmáÞ¦£(¹²Gu¾ŽsÃA±Á‘†Û®¬W«²¨]a—v5q$ì1 á"Úœ¼oÜ(úún ’ØÎÌã2pþn{Çt“‘fvL®ògDñÍ–c o·Æ*²êþŸGoò$#¦÷7›³X`E›»ÊÉrʘ48'‘KúGü«%@ øyG¸™±D‹Æ›oüZ—-§‹†H7éµMñãBQ¢=Äݾå—Éz±jö2›M ðp{rÞS ^ êÅi°I¦þcËNàx‚6öŠ¢ãX‹¹ŒÉÜøFe®aeîj¿àì6¨ðc£6%Ýwô’H½Vè4Úæe¿ÿDß1ÅYßx5‹Pú|ò°È´\| §ö”·hUÛg/*ç±°´¸œ@,ký"ÞU23aN¢‹Ë‚µ¢ÍQCÏâˆ<äbVÿR mêüf³¡ÂÌ’LÈäyMÅo5‹( úñÍPÄrõèÁÒÃ/6½»?"JØV%‚Ì.oVá:æ'§JkñôBV.ÕIçC²“ 9ÍH j÷ HZ.Dz|~¢f„Ãkz:ƒ8g¤ÓrLD\ÏÖÍñÊë„e¿¥›jý„Ù^ngN6œ›3—%ÿì©Ôvõ];ÙÕW;hãõPWÈæ••eÂ×òÐïQ‹9lê²£¹÷F*E”ã“<2Y°;ßê–([L\Â&Vh3uP'1 I٩نֳ§3,‚ƒb2YꢻãüT*EÁGýǾ˜î3[Ò•¬x)÷o°%ö îX\Æ~ë–t#p´7¨JçŽéÈ¿£Ma_:„úç«T/›_<ü©'¶a §mÚm_‰aµG);‘`E…ôÅæ2ÿZf˜.wÚ¤­ôÑ«ù&V9·Š¡­a´c±¶ôÜ7«LÏicÆ™Ði`¬5KZYk áÝ¥pÆU„nø†Ð|k×ÓljC 3‰!½áy™á™!<ã8mÖЛ÷ÛÃw¤ÕªŠSg–Ë~$®,¨R“|Li¤2êVDV€˜–ã¯bI°¢‘¯gÝŽ¾Д~H™Ø#+#Üæ%^ïÙ7Ùð'™†\k«›¬šmºÞmaú¦fâ8Ò@Pü¶óiMöªoµÆ·²Ç‚gŽIªÊï&Œ#Íœ:|øRý¿}-uý‘l“¸Ò/Õïã&Gýãá9l*øÄºëù ÈÊ.ât'ä@ÒÆä¦U?ýS—YoÂ"æ—7dÒYdƒ¸LA*¬²‰s«¢c?…:Å™Ö톔<Øà­çLYŒ8òŒ¾›ž9âÊ«ÉhèpçLlµ2ßGŠðÇUªJ8—-[Ò˜¯žCE¶Çw”á0 FÃ~åµÛJ<;¬Ø‰c¤¿Í5›YiרÒ5‡>+è(¢„å…MY9éx¡#m¡µï ‚ž¬6 'l)#°Ã‰S×yh2=®dƒ¬“™pƒ-X,‡?)@².ù©6)6¨±xwî¬ôÉÜs×Zª^«=É€,Ì+Q#ù<,4 Ïõ&Ä žº)g^%‡P®hzä™w/s¸vu°Ï>çª jc.òÌW³| ¶"“”¼ûþuíÎ1Ì[¥f½`—‘ņùâÅóúç²PÇžž_Vq4žÜÅ{›…Ñ£+Ìü˜úm?b/´¡íÚåfü3ì½ÍFi+-íy'‡1´AMEêôÄŒÐw¹å:Íð/Ò`’CObß¹ÌéfE—tiûQ®¨óɬ%ãNS½íOšªŠ‡6µ”š*%?[î¼>© á—ÑQÐe¿ëWÌÅX8«wÑ⯨ÁÇâ1³ùÎ;ZÚôj+ã£ûû)^ zë/äz^ž¹bY¯±Š-cÙK¹/¦ŒÑ}jgÆH·†EéZ›RXÍg^ 'prN¥D¿ÝÓ 7iâ,v2D$Üø¶­Mí§h¤PÖTÐì’ oLüÅ}_‰ŒHsrºA¡›×¸×zo‚Áäæ[¥ÜæUƒáµ…ŸPò;{ñyºw`èò‚¯¬Êˆ*ƒ‰â_X{>aŸÇŒ‡ƒÃôa½Á°ü‰ÕƒRq î“Ղ̧Ý/û¹!-—8W»î+f[öù»‹ëÜìuôÄá£# ‚_îBŽBŠ?lá4³êÝt%`Åd ¡MµžÎÕ’ÑLÖ-ó£9QóæÉè¾ç‰— =ðt‡øoúvhv,I‘Ÿ,¬ú#ׯ9sõ™צ$¹rR™b§©¡ëUÖÈì=ùXiùþGûräÌÓC=é¡c¼\°¡q—°õŽQ0Éâkád=¶Ñ‹/&¨€1l.÷ì;®®$—·æÞD2à-_Ç/™V’*¯Á×gæÕó°ŽRŒZÉ«²"Ó†ìE ä®ò“¡ÖÖæw@㻾ßX¯§c…9%¨†Ðœ„ªà¤zº# ŠkOEh²±§O)çuÈËhý;iUž gìÉf ΄ñ¶%«û»Ý5ú%ªÞ“ØŠç£x£ošÚ½kâ–¾r£Y\„¤ËíÃ4& ©{!à°¨=ÌxGËXY–¤¡PƒP¡´ñПq|â9T°ïñÝâ¹’^)ì)Ì÷u¥k6]ÁSRU'hÍ<å«"ñÏÇ ëëØ #¸ØHº(4›  höÑÔ¯?´‚†tæqàt¥“¤+;†¾óá«4vL}§qG¿ù'Œ,åiA õƒ9sg©5Q÷%OF­¸uÙGÆ*“U3CYiUàͥ~Ùšû¹RHóŽ'kðiª¾_Tõ±¥RëõŸ×î<’i OOO(£«ƒì‰ù­ªR{p¥œ¾¾4Ö~QþŒ4%a@_Ë;o­«#‰5U§Yš*ÐW˜™³ÝK>ï–ƒ¦-ž‹’^1Y=«)þ•Z $"ä„ñ={ß3_á®çð´Š»‡¬™—²}þ‰Á`1 Ɔ¯Áý³ÄoÞžò}þº“w¾­pÇ;D~‚j“%€êJÙ¡ §“'­ £½ÜýEÈyÒYÝ"“x>{$íítD@ßÙþ•.-PqvJá5À½3åí•\ºrÙ¥©ŒOØjÖø¸ò…Òu´ü³Öô¬%ÍÃ\’´‘œm¤ÖF¦Ÿœ¬Ü¾B<\Û©:æA§+:êü&0‹ï;yl,m‰/ù+{úÀªãq.!qý]¯1{{²¹¢#º¹ÃUªGþÒ?ÁH¯Œ‰m€Äðá©ßÊU‡ -Þ9ªR4»|ðeIu~l<.uy%/TBzc‰öX]ư£]Bƒáذ¥_é»Ð(/v±DJz! ªññ¥À¼¡Sä³z®¾¨uêW\MN8IwiÚј(u5ïÔ…\²– Òå FznÛjËEsäã(ïz-‰w —`¦‹cÒ¾õÜ=6JÑÁ¾ê–Ï Ls§ fde~ ˆ›©]žÎç†wÞõx~ßzÿêënqb­èáÛ…°qÇõÀôKm‚2rù·jÌ{ÛëË6Ko •Ÿ]Rð;[Mòzøñ~(ù&Ú;Õ§i…ßû¬å¥;½ä#Ç}{ù(E@¾åPиêõì´Ψ·A4]ì.ÝšÌ#ÄÀjwŒÌ±û‹bQË&#Ä6)x¶“ms@R["Ñ$:égÂþ(ö²Üï¥)̰ѩ¯ˆÙÊ<ßÖŒæ¾wÊZãv·.›[GŠùË÷N?¨•×NV6Â’B¥’úë“öÞ1‘¬sÀ¯$îEŒ¿•ÃÞÔQ“íLÆï—úÑënŠ#.«¿•¬Ññˆî)G=ÓL›™Iò7@"N Ù¹ÀsšÐ#Ùæüï"eŠœVv|çó\Þ¯Æç¸–䉳>O;½2Dôጠª÷zføùÛgš…â>Ã}m’{ld^Ãr».ìç1w_&Ъ)¸à7°[3Dƒs­*\,§š »{$fèkl¼hÎÑ«²@—£Î\i­º'Å^˜dí{Yl²£ë×s¯õb—ŽCÁã1}ÖèsÅz¢Ç3ãm¯Ö¹®Á ª¸ÇQꦤtϫһROtúôvjRä{Ê6wÍ3"˜—,*xlD¾‚@téÚ˜!Ùp¥„Åš‡…X3†¾=éú¡s½Å›ÅK€iO”3±÷Û-¿„B~œTÚüyh Õ1Q—ÉpysFmŽ<¡û©¹ä‡îMSª~!ÜòÈo^¹•U$)³þ“$þyôåýaT/Wž6…¯]9oôÞEZZK¯¬gˆ…\¦zäHÉY §>sú‘® —sÂd!ßcý|$h°ILÓ1‹öàL˜¢E= ÷,'µ²+!-YPK9^ ‚ÓÎÞh¤ûÑWÐsuÓ†´ÙÃÃ=‡JµW/eqV\†é“~ï»î= 7-ÜM·ýº2›$qí‹u8ªÕÎ÷ZÄ×›¤rPînÌËŸ28—fÖê÷«úF>j±´]Ð)"û‹xßa 8èè^šé±gÕåBØX‹Ãß¾Ëyö-4¡_øÛ|[n_ÝwT<ÇßDM[#bålµ- ߈¤L˜²*Š-…¡ÑU£E¹ô@ NõøÐínšõ?7„^-ã¢ÀÃ}§W«ò½›T™ ] uO‰ÆÃ¹sºÀ„¯¸üMI€ˆ7h”û{÷ÆQóh×M×ûOümñƒ*±'¶ÏIÉ@›::s»w¥¦ahR „¬Jš,³Ø¹{ÕiY²}؛®|À»ÛYQœRXލ…¯V}Êt?±hN]—½+ø,qèᲜ*ºÑÍãì£ö¾·ý¼M)SINòy·óí@­ÈëÞHׯÔ<÷HRÿêü]ÔqöñAÓ@^¨p0W=p*gc$å¤DT2ZÑ·¡¹;š|g,òäÆ#l,#Áºû 8\™£Õûf½¤'%ãZ‰õÞ³¨»4H( ©—­FãFø^G¤È [þÔGSrÀYŸEžsÚpe®lôõc²ÐÇÞ÷2Ø@ü§þ#….AR_½LòÍ6! u‰øBW°01D:½K;j˜ÚÒEjç I‰7æz¿g:^¥‘(–ç³ M³ö2pQ,½Wu€Hk #(¨lÇÍÆ:.«&¯šŽ4v,˜Ý´ÕåžÁº0û©½Ær…ÿò¹Êr³äæÁx8¶ §mÃð1×¶ ×|CÛ¾e´/%éNžZ…w)ù×G«8 Fø€ÇR‰Jü5ÀYö3Œ«„ó·äꛯ–ù£jÒI¦kLîÈSL§ÉG[Ø‚i8”SD.^Åh`‹ûíeöòãnÓEí¤õÒ„É—–Þ<³ŸÃÕ+Scä ´¿é8öÁÜßͲ€e¨ó@–‰}~Ù–k&ñöó÷ˆRÚ-LnÆËbùLl»Ú½Úêû?="^áÞ„³l‘q/q²/Qž¡vÄ?éŠW À£„(&8XTåÏØLR{Ihð9ɪ5 ׾əS¬VÓÿ„:[ ^{ ik…–èFÎP¢;|5_ª-EKl%ÓèªMtÝ[öÎdï= ýrÃcLÉÙø¸í»ŸË%w©æx]ïÏN‚·)Ö†¢½˜5gE, ¿;Чu™Ju§ÇH‹r0eoNc“oäF+••r†¹=c°·µ·µÎˆÞ§òíKwÇy›²HnÒ "âh»?ÊætuJ*T§ž«ø½Ô†ýÞ‡úÐûH‘©Þž·|nG54pÖø½µòÖ¡Ÿò¹°»g÷_òº%h—zzÚÁm!,ßm${Öõè–Oc„E£ù…ŠŒ°òòÛñÊm^‰]œ“Çü`yÈÝ>¡…'ê<àZ·öð©âK3ö‹­¯fÙri›Þc4O²{™xŸk2<Á£UÕ²ýò¼n²²µ<§:ìÝ©@t2.c£ØùK=‘*ÊömLi\¡Ã~uKÁsðz²[ø°£L,~ägúËÒpë HVTÒ{Žq¥˜Ç0¦%Çî€ ªY/CEÁöUië– .ƒçhÍ[Ÿ[{8iì=eX ÛrîÁRg/9žØˆß•pèŒ&å>wš)ZcHiQŒì„Å, ÏU‘Sú4“à°æ#À]­­ÒB¼U1ôºµEÏ=‰˜º èNóå©ä&M^è]~ûnÚåFwŽ|šCsP=Ÿ1TqÚ{ZS¤ój§òoVʆ>ŽÖEVòiµ53w„“Œ‘¸x> å—kZGŸ}<çicHqûËÂîÅEHµŠVÂõfZ²ÆšMï[@Zã.j¿¸ä~Š.0¤Ó Ëœ'²JÄé²Ty½—qoj7Ôæy`š8ÿ¼?KE> stream xÚŒ÷P\ÛÖ cÁÝÁÁÝÝÝ-Xww·àÜÝ]ƒ»»»; xsÏ=9÷ûÿª÷ª«èÓÇšs®½¡ UR¥6¶5IØÚ8Ñ330ñDåÕÔ˜™LL¬ LL,ˆjæNV ÿÊ)>‚Ímmxþe!ê:eb@'°¡¼­ @ÆÙ ÀÌ `æàaæäab°01qÿ×ÐÖ t17È3dlm@Žˆ¢¶vîæ¦fNà<ÿý  2¢0sssÒýå¶9˜mò@'358£Ð  jkdrrÿŸT|fNNv<ŒŒ®®® @kG[Sj:€«¹“@ärp~S(­ASc@¤¨™™;þG¡jkâä tÀ+s##ØÅÙÆäg¨JËí@6ÿ1–ûàïÃ030ÿîoïßÌmþrÙZÛmÜÍmL&æV €¢„ƒ“›hcüÛhåh öºÍ­€†`ƒ¿J$„•@0ÿù99˜Û9928š[ýæÈø; ø˜ÅmŒEm­­A6NŽˆ¿ë3wÏÝñïæZÚØºÚxþ™˜Û›ü¦aìlǨncnï ’ûÛ,Bü#39Ø™˜˜¸XY {ÈÍÈŒñw5w;Ð_Jæßb0oO;[;€ ˜ÈÛÜþBôtº€NÎ oÏ+þ!23ŒÍœ† SsÄ?ÑÁbÉ0¸ÿæn&ðø1˜~þù¥ ž0c[+÷?浘ñ£–ЏŠ*íß”ÿQŠˆØº<éÙô,¬¬vVN7Àû£(Íÿ®â_žÒ6&¶îÿ >¥ÿìò÷Pý½Ô€ÿ¥` ž[€êϘbbg2ÿaþÿ<ì¹üÿ›ñßQþ_ÇüÿV$áleõ—žê?ÿ?z µ¹•ûßà¹uv-xlþ¯©è?‹+26w¶þ¿Zi' x„mL­þ9HsG s7±’¹“‘Ù_³ñ±úï=³2·)Ù:šÿ¾YôÌLLÿG^.#KðíáÉ¿T ðîüoFq#[ãßKÆÂÎ:8Ý™À“ÄÂÎðdo£1Èí¯!02ØØ:]`vÞ[Äß-å`0 ÿýqEþ N£èÄ`ûƒ¸Œâÿ N&£ÄÄ `”üƒXŒR+€Qúç“ûƒÀùäÿ p>…?œOñÄΧôó)ÿAà|*8ŸêÄ`TûƒÀÜÕÿ p-ÿ p-¸Í?\‹Ö?ˆl ü±³ÁãcîhùÇìnøË5tY‚À§?rÖäÿÙšà|Fÿ vp0#[+ðÀü““í·ÄÚúO¿'‰ÑøÈ ¦flketø—¸ П ` Ðÿ$åø­·woä?QÀõ'É hý¯(`º&¢€-LÌ]þö·ÚÖùßiÁ&¦ ˜‹©ð_,¿%àG(èßN`‚fè‚Ûfæng²ù—Xfþ/î‰å¿ 8Íà³±ú½Sôàþ)ðåÉø'6;8– xÿœ8—³µáï[Ðô_5€¯uFÛ?U‚cÚþË‹™ÌÌîœÃüìµùŸ`cþ[ú¿ÀîŽx¤lÿ´” |ŽvVÎÿ"~a´ÿCò7r9þu³üS9Ûo¡­ÈØðÏqüå÷[èhþ×µõ' Øú_M`Óþ“ŽLÏdmþ¿“ÈþÛäò¯Î°ƒƒ8‚ŸdÿÔ >MG+ £Ù¿ƒÙýá ~F0:™9€þ5Dà£rrµý—8†óŸíçüë¥ÅÑÈÖáß僛îò/.Øõduûguÿ÷ÊãOÍàH ‡ÿTð?·¯‘³¸YN= ÁWóñ_ï; ÈqeÑÖˆ7È¢.¨ý¾F˜À•þ`’Žâ@#…šÞsÅ¡Ãùî uuFÀ–ÃOá/#½èë{âT·B«$¿<ÏZàB¿&(·=y=ëǩ̴!.OãNœ ×!Ò« zý²÷úèo Ý Ù%C‘cïÌ…ª”‡uïÚ/éV?P¶6²x |XÍ!‹ô\6K¥ùÉ¿xž"×0s Ö‰žžóÒ mþöçföÔ+‰L-¢÷yk¡§ö6KôÂÇF…‹c7>9¾6ô-æøÌO‘ã$™·Kž%E‘[üKYLÔ [ã$^c]¤ßxtä¤1ß2Y9¬pKŽ“{·Õ3úkö!#d¨ØÑÔÙ¡.áÑš¸ºJHæ)¶õë‡"Ü…9ÐË»ÄÀ)¸{î¬ÀÜjÝÊž}«›ÒñÕ1ÙE@ÜÅYoÙûjï-KxsÈÕíU`‘^J^ëÙg1un7çvè¦Ú1X.þÝ®àK*:VAZ'ÅHÜm-Û'„jî6C„O=Ô:#ø«êk öW‡/lßrǵS¸dŸ<\] Ý­§Š¤Ù 1›I,Œâ¾iãT@¡¦†Ó%pf,Ž”ÉÖòÜ¿’Y3®ši“8‡œ=ºëÑ/Ë}2ÆxoJ[÷xÆß|,p3¯ ômiNÖ W¸Å—b×b\ÝãÓ®,8.È H€Ä%Ÿ(Ô›ü%ÔËv¼p÷%r6 ÏÌÎÒ¤9LA§2ƒWäydôºZ¢WÐT%U¶´^÷óD,ŸêœR@K÷+ZLE!ÿmÙ®Î8a_ŠnÍ{Ÿ”qí¹íe÷Q·áêȺÐÚ!b:qs'é0¾.ð’q¶+y?xwÆmuõÍo-ôMF嬎I‘4nØFé޺ƌÌÉ7ÏѸY·,àjU%c œ¯£08`UÄÚ™x2‰u{q•eŸdòêž2VwšyMM3Ü«ÃlŽÔÈÎC[gXýÔ[ÿ ±î÷6bcÈ“¸9ïò—µDÿ»‹r¢Ì†ä.‚Õ…ÔÖX YiÜBN!\5Náuù'E%ÔpÞèØH©QZóÍÚ,^ïºøû,ìC‹-Í[ñ%çr’ö|ö¡6»µXéö¢ÜpUîsi§rG“¤TêüÛ¥³Î9Š«VG_RZÖA&K»ŽÓôìÈhÒj~dC† ÙMjx‹aÆÎ Í ¹¢ñ`¡A89@)98ý3?:Y@ÎU)ut©—úÌÅ`éY¤É[؇r,±Æ§{ôyãäÞâþŠô ö‰í¾´Mß-8{(ÎÌ…^“qw±†1¨ñ!gÂÆÔ!¦íÃÞ©¯OKœÔÞŶ2':‰OÌ6oä ¡Ìäù½eÆï˯“ÐSL¢Ïü’yÝ[d§—Aú EÃlêzwÄÒËÆX”“ÝÂÚ%T¾û©†Óc èq:ÃLxBý¹™a;õò‡„¸[€å×á²»Sö0 #_~‹N–ÝŽØE#ìãXWfä¨çûñcV?ÃliÝÐŒð÷–:žèñ}“ÅÜÒõÓˆ„ƒÓ«¢§ÓsŠ.»Ü'>ó+Eb*JÏÒ˜…º1T×òÕCUP:%—ØëÕØ Án=ËÔd÷¡7ñD¥ŸÈB‰í\Ô׸oXz0=Éßµ‹²a‘ÎV^)¿ÄV† B*zÎH¤|îî¤k û?ÝOñ²od(Y ÏÓæ|\õØÍO7Â% Å3`ÕSCEÌVrAüð®¦f¯ç´"N÷NE%½L´PF¯šý÷ûáo;´‚C"gäGëCÔ§Bñu<ÅT”‡tС/"’eÈøôñãj¹!_pµÌý`ЂDè,3¡KŽ> ûN–‹“¥;_µ­hm?–\`ÌèC4P}©œ£„µN}$B’¥D“ÝC¡ÈÆÈßVR ã‘?ö We•dQAâø”½-H¹ ‡«Eé·v|ë+Ë`o–Ò÷æN‹ ûúÉ*XVâ:¾¢P¥n7QlPYy³›&Ï] »¯-c:kèJº›Œ<ÞîØï?ª6›Q)Ö m0£aOªëk>˜ëÚ–`ðz\P IyÐk°m¦Û‹¬¦#]n#õdµß”‡Ñ1}×—c€¹ñsqÏ?ÅïçÒ€²„Ø.l •Ц\‹¹õðgùçõ®™ŠÆsÅÇ7jˆÎ =ƒ¨ðdxDÏÍ'd¹óºÜ¤è±\vÅŸçÙÜôÙ‰ÃbrV¾>‡§õÓÝdïZ±SŽnØÓ%Iýd(&Ôs ì ((ØÜi÷K^¿³wž nª]”O„ê¼é1}:™7f„†b€³ýæCÓß‘„¹óµm´ „mw?ÖˆÈü½ÎÛÍOâœ*éÂSøÝ´£ü‘ 9«qÌÝ ó:³Dovµ˜êi•¹Ë%[RóyYØ"–ô#Ì@KvþÓÁéZ¹çæÄ+®?BƼޖàe†¸ˆVG(<ö$`j7£N $weàI»Ë_<s‡úòŨ¹ò…3œ h“'mOWNá«*Qü=° I½^|+4UÆGêH±0pÔ NÒ„föqK/aÄ4LÐ9ößý¾ÖúU )à ©# °’ Çls¢õûq+:5é°zE]²;0Aÿhµ\~yZæ‚Ûú¢‘Bh/&7ÐÑí¹þÍ ;aØØ5‘Àk)ERæÕƒ±9ãXвS›<èó Dê²üdWTÁvtÌ 6úxX4d<ç–gµœÝ&FßÝGj ,ÌcËÑuÖÀ óT5Û‚gQo6fíW‡áÏ6‡·=êÚ¯ÜâeÙ‹ó’U;Îqlܫ۶øöŒ;>'¨n»I1ªÁ^&Ü$K‚ÝšW ÎÃ"n&’†âÏ ®¼OÁ©¶tÝo Eä,-e=á¸MàMMŸé ­N¼Ê?´øÍâ¡ÊiòçÉ~&êry¿Þ$pΩ~ntâ;Ñ×WAÙ …jÓ¢€6:É™vT¤±9XþW²òúq¹4EÁ––ûu#Â]j¦÷ek ¥Ä¥·;œ¬ÒctÕV±W?Ñ«ÂHû…ÐC¤à0P¨YÛO˜d£óa[˜rK: 0Œ= ›Äùù:§Õ|ñ=cñíçµ"S‘+¬•(nõ_§2Õ‚d˜:vº½H«oFí&Í"—{r&»ãK®BÔ¡¸ü¦óËFðVÝ>æj¼RŒk&ÝÂ/‡ò¼5á¶ÛkÐ3N™$^”Q¡‚äСW£ùÆFš5ã®a@)ßø‹ ©¾úÛ¨ËéuÖ[éù<Ñ©'¯XÆ­þ ×Òðœ áÚÃÛOž£Î¯:8a$Å7'­¬=a1ÏÁœ½ŸlBdHO_"¦®SåHTZVÔ!Õ¿¹îT´èJîxWµµzHÛ§z·0íX*¿ð19‚ºì>%éGÏ6\™Ì•ÖÇ«±t®†ónæž_°Æïeä˜q±ä†±ÈÒ ‹Ç•{P /:[MŒš§ç²:ª‘øL­|¢.’ãØµªe§øýU®tÏŒ… üôáØ¤·žn×qO¯w¿FŒ[~$Üp>4Ý÷Mü•±øÝ›’ÍêËtâÐCu—¾¢ôV+'~ú£g¬Œ‡;½±ÃžŠ AnÇ8É#&§ÌÖÌâÕ}ÐÒ\÷]ƒjféeö;OüÖ3ÃÆÂ9#K%CxŸAˆeD¦ÜÚÞ¾û¢ ‚=é¹JÒ µÀ–•2ò9ºB‒sÆœcˆ‚ó]ÿâ)°\=õ©CÏò®êwçlÉË«ýtÛæE¡Z[­4 e]-Ú(ûù¸šæLŸ¯Ýë_ù6ÝýÕE§…B’µòC²Åt¿ŽmY;g†LråNú©Í %‘)$ºÚMZ¤ã$,˜i2ßÕóRÞ–L¿iÐ+²G㛢ºøáûØÃ.ÙâB×Nê!è#'ÓZ•«‘y›sÔè»8|T\ÃÍ ‡Œ5M:Ê(3 Ü2eLukË­Q˜ù68§Î"xm*ú[Ù¿û½¢·–4œ¬NÀÃ@]çÜpÊ…ŠÒ8 œ’¥9߆äABA,Êö™A˜Ó¤bX¼Ò`šÕxÌO5OšOLjHÄÃ"«9 9Èu‚o˜“íð_¿½È]6$j6Ô¢¬n>ˆ%`€þ˜ílK BøÆeÉ=‰G.ÕìØõP§_3ØA8ýb&*´ÍFüJæP¯Žåkšq\D/ióÓÖÖ~ik¼â•Õr§ýºR^•ª ½5µ¡Í€÷·Ã]p]Å—÷cD ÅG5ÝmƒheVG¨·u©{€á»’ë UT܇ðÃKPÁ÷ž.RVH?x-5SôØUØZo\µ\5`ÊdX@Xvù” Nú¼ivQÛüË¥f‘>­S"s. µð"ªçVÉýÅžQàRMN\y‰‡òXi²ê’Ê1 É‘•··Ë1†X#¡¥ØP®ÎúÅÐx„L[x¬…ú]Ö}üÐŒÇ[¾ÊW7õÎ&7»yˆW”Ò 0ym»‚#XöeW©Ôˆ£Ñgisu´YM¹Â˜C3DÓy»m¥¤¦E¹­Þxõq:Ôaþ| à ½–qxiâÛ¤*7•Ôëío¨÷©vS:Õó“ÝÝœÇÛ³­õ¨,6–@vß’HŽ-hÒÌIœ¼š¶åѯ9¶o{vÄúœA¹K« òâ¼õÉv»ç–èŒ_„M|ÁvF¿HI4߃7ƒ@äVpÂÀ'Šæhs67:tœØ—ñsE4ÒöjêÁ~C.:¬3Cl¾º Dš%»ƒxªÛîä}Çê%ç!±£ÅöSnY•Pj4Ef§8ë„Úç›"£ØP§ CQ°ïj€'[Å5t«uH¼’=_,KãÀËw¡Jšã{T¢&å'ãðcÙ‡Go–H|Oeaj×w2§NpšÛÑ8æ¬Î‘*˜¬Pjéöìq†^Ä>gñ|',OÝœø†ÂÞÁþÙ©ï å4ç9ŽžÑ)¡ xH¦æ¯: ºâJˆ¿Bâ\q™FJC’ßJÒ}y—7p÷–<-Êx;*Hm¿þfóGRÚ+çŽ,)—ÈhG´äÃ:2”í-ñnã‚s˜ ¢lsªà“6_Qûµ¼^–­8ÔÎâE" Ÿf˜1$‹¢ç3´ÝìG‹@ŠÚ¹Íg-ÙêånÊÄ-PÜ@FÌ|RôíS%h²Bº YÕcDDZ­9raÞåstܘK‚ ÒfébEîUi~wÎdowÙ¨ì1ã`»'õ¨VŸêâqu”>x [¹b‹1(•Þ¥|,ÿHY t»Ä!Fî¥Ù™ÀEÊ…ló‰?½Éû\•xË4KæFà˜>©*ZuÅß;ë>Šü¤3ÿ4¯ÇGJ_ÄL^Ã.—¸)!M/ð‚»(ý‚9Ôø}¦ ÷÷©Ò1ÐÁïkS¦Ñ[MF4m"´%•8ë6Æ!òÞS*ZΩ†JÐÍ•.iGF‚ú¦ò–ìÚ¶ý¶Øû„%Ùõ³&9!Ð>o·¾Iö Ì?/7žM„Ñe£çT¤ì™ZŽèB‰sa5 B§d/à ì`‹ÑŽ&wOXXÌ¡Kƨuú…ö¼xE‹¶ t{ š·(A-tPí¢áЏ??+ŸÖ2(92Ñ©Þ&6+ž·¿:ÁâB&åa¸ž"è¢éï’“¿«º8J7ìJ,’—ÅOzÚʦKŲ́Ù¶¸.˜]³Æ÷,DyÅ©tÚ b\–S>–¢Bª>.ÚJ/~üÔ·¦k¾¨f:¥£¿¥Ý¨nBX•ÿ’È^P]B©ÀåŠ&FG+Îã‰>JÝ2WvQ껓,rÃåÒBŽ6¨·F¾«E]_\”’:n›Û Ðõ¿Ó¶%ê+Ig=ìMSÖš.Û>á´øÉÏUš_³_Ö+ßTgSBïÊðY”±˜° *Ä7ò°ŠŠÆò*¢ºñùâ× rów͇ãçð†=±åÇÚ›~~ð–;´qÎ,òÅ+d[Ëþ¨3¾M˧lxZBîô³<–ù”¡É{dqh®Çhæ¹Ús¿œ/Ýåün½e wÜcñ&”ïiâ*ix:‚{Üv¯ÑŸ,Ã0À©)u4…Üýdºl1÷ã9@W# ¯wqv^ c : ãÖ—D©@$¾Yƒ†H[td0=\1ëTÕßጩþÄoóökÀäb÷WØÕ ZöÉ/wôÞœŸàçqWè{ÒiÞ¶H‹VÅx2·†‡§liÔïÃUá;(ÆQIÂ#½³IÁäØ#ÁnÉã6ßcß2Äû¥pWGBLé*׋‚y@‡YgAöåBÃ¥Þ]~ÒÐÄ%½µàðÝBˆ\UH úLS»¤N€Ið·~œ ¥JÝn- ¤1ñÒR_Ï bÌù©ÐÆ’sŽ=xt¼iä§‹03º ¹GÒV.UîJ7+ÏÆ‘s:ÄÐN_=f\÷ygÌ Œ ¹“ªO4‘U¹Î1=3ãP2µ*dØ,q[/)ÉhÓÒ~…rRQoYˆÓWžGÙ“ãL ®¬7ýé×ì²ô#n"®‰Œ!¬»ýÕ†.žþ‹f­æ­üèÏNÂê[‹wÖé)ÐÈe¤”E0]ج­nØý|:€ïûå0ß?çàŸÙÄnè¥:~áÉÖK–÷ìãOhÆž!„çšÙÙsâ[ÕxV¯á¸†ÀïÝ‹îè£;¥ ükÆç"zøI¢­ÛòuffœÕ~ ŒbŽÉ´é(øxÑxà#¦,ߜӚeœð±½F‘ü’îĨë} úšBúD›Éî_1t2šF¥mX°˜Ï‚Õ’ r 4:þT&È?($ Že ‘¦{hÕÏI[W(Åc¥»Ó–´)æ>n®vvÈÛÁæoBf"ð6ò’}¥ó¥бHWùœwƒg·X˜På ýÏÕú·ûiáuL§ ¾¦È•(‘šõѲ§e¹äBà ä^l¦ÜÚŒ”±q¡úŠ4(…Ö‡a,<ÐåÙàuZ¼=ì°'4PS£} )qòªPø—â4ÚŠñȉ8?ùR…Ÿ·I‘ß©5H@ùJ“ ÷¹˜®‡¤úZN±5õ:» –¸æAÙŒ\e!Xéyéz›lí3K0²É_qû.ûˆÃ5©Â)\ªk¬²eÄW¿™;™Õª)góB*æ…SŽÈ*Éÿ<º£yÒEuòj¿3‰ ?×=P³þ™‰w97À~øåÌÚ&9\ñjk“rƒ(o•8€ ;;(N “JÚ¹—¾ÍžJ¡o2TxîÊ@¸ÊàSk£ËMŽ×rl¨ÇÜEÙ/è\ ¯ ¢›ÂÆŽÚ_aEÞx“)2²k^E¦°£Ãœ†`éð1LÊØh/{ÿìºÈØEu.HÛˆ¢J©ÕëO½jìè°Ò&5bWà²f§–uÑK¬•/E_„ºT¡82ÆA¡ÅÊÞÈ"÷‘Ui!ˈQ¾ª¼k³eKÞîÏ·õé=T$© 0„P\-RzÖ©‚apVª{D>É ·\‡“祳– ÎAÙxŸßŸ8‰9 ’v÷œô'ñºš J,ØøB é”Uþ(:>„h¶š ?ŽÝÿÄ%EÐmưN¼óÏLe©n)Ø[m¿ï“·kÌ…œs È«ÎÍLãÌŽ»¯˜Âé\§}A¼¤Eƒò~ÒW¯ï_ }^7¬ä¢¿+25ˆ>íSˆ¨®«ÿº3R¢šüªSsà‹®“£9ÖÖªŽe„ðåÒ·Q‰"ãÛXtm”ŸÔŠ™KËVC…Ï|Fg°|1uЇõ&áeÀÜ,"<‡"ö(¢Œ€pD.{Õ¸q!yìVGP34›2ìŒûqÅHOΪe!äÓÞžÔeº]X®Þ'×2ßäŽ×ŸÂc×ÅRÇ­”#ù)jäãMªïγدOEðXÉmºªÉDkÂàt4—ûÅ›ˆ2g¼ˆä¡Q¼ˆE8¨Þ$ÍÏó¿ÒÂlˆÅh…mV߬¦<5¥-WÊÌ¡nb8XÁky¯(eT¤¶ñ´Èšö$ Õ¼""5ª.{ë£=ÇZôf«(3š›Jg¢i:T–í“5q ÙÅü[ÇB¯J2"a¶‡H£‡Råt¹Ï@=ÉkÎv¾/9MÈi—g<óš.+#vã“É%)Nñ¬ö¡àQu|ô 1Í+v?W­çÁPÝžÛ×ïmB£öW3u‰’þ°è§§)‚ÒpNóGeåÝdYöcµp3V¼6¡ˆªè,â>6RØDšfmË&›š8À­r¦^ËKœMŽÖ_å4M=U]C’öV…£Ýºâa0÷ùÐï\³;œ¾å햙̔ž‡¿mº«|·ÚÜœ÷2µ\CÑ;‘gëÍKu0¯¬ÑT¶È*ž¼È-9ÙúÕV ‡’°þÔï 0„o9îñ°ÿ$x3—éd=Rû½žÞ$’æN•‘!½B!ÿ)ñ3Äd%Ó2æ/úŒÆ{uE&’÷HMp[:nl!rx-ÞeŽi<¨¹¹ÄPHeí<ì·š˜!Ž<2ƒaåÂI[4Õ”9K¾ÀÃV©ü˜ÉOŠÙ¿†Jºn0/Ÿû*;Ó°úV8Øi€A·nZóóÀ«R=mqØñ ;¢—)*OGäY•Êù#`ΜÎÖ)XJ×f97 PZÁ%;çt >D“£5’l­[&nò½gôÊÊ,õÔF!=·æâ–nb£ž¯óÑ‹^Ž>XÃâþyçMä÷—ìñF‡˜ Þ‹é1TÄ¡M ªÿVýC0׈î#†ÓÑ‹:AH *ÛéÂU¡dÂt*4çãôƒ0¡È¦HÎáv¶ßŸÿìÎ_DV`ŽyZEy*Ш®~“_Ó_Ô„ò8»§ë=»ÙuóÞé…×ÂÆS¾F{TexMSÅ×ì CCAç›Ùmóæ¡óJŒOéíG7ð¸ÐÂî÷qljºm¼ë´WùŒyžOWìahì]ÃÈ!]ÁñäuŽ0Ñþø.© œñÝü&÷9+În eAhÍþî÷d!8-SJR»!_ àz (¢ß.j’*Èíè.Û Êv]2y|ÕJ¢<ÝŒiú”âs#ÛE>úNªÕƒ+˜”ü¬5^~Šâäô®f„¹œWÉg#—ÙiêÀSk¼MpTK¨‹\¹­Õñä¶ÚØSÏ4 ÀKÙ+¶0¯ZXW¡Õk¸j‘3Ãßr0ÿƒul,Ò#§ˆoÄT4,ç½úÙƒùúð®…j¼Tqm•¥¶×@ÜÝ_lN¸'ñ©}iµjGÂLýéTª©ðrûXáˆd×[–κVÍT B«œ×£é÷-ª*¥ñ!˜#ÕÀ‰Àõöñ:ú{†z¨,3´8ï|`gÖ]…Aá'Çý&˜QËþ .áªBQL”ÚF™î¥Ì9B[` Y¿]w@î “ŸM>|CIYÞcìåÔ‰Vu¬'È3u>6%T¨›çhpÎ "C–+aK‚eKCÛé#ÃÕšZ<æóP\¤6ò§™NÖìOïŸШ¼Žo²Fû’QÏ ¹Â3δwÃJÞB5.俏û.ÞUµAÅ%*6p9ýzë'k1Kÿ– >Š®eôg-w®(v´ÇýÕŒ,œvÓ4ÛЛ’ÓÞÍÚghj²|â 9µCè¢QïÆ®Â8?Fñ‹6òÁ[…_Kl¡@NÒž“8Ý«ù $SˆñEO5ÔÛ} ç™<(}3XÚ%"ǵغ})úF¯ÚW„¡Mtÿ;*qZNéJ†n-Ÿ€AW–Ñoõ:Uü]#ƒÇq«àÞµuGºö®¤ŠT©ñtNKgùö…žÕX…p[º®}ICª}¸ðÈÑ›–½P»¸ ´d’&çÊäÌ·sQ~£>çÆÍÌ/¸Q"—õråÄ91‡êÃÖ©±Í²)? O€þÅQÐâZkÚVÑ2å$„í&v•Çœ!ÍH¾,IäˆÍ>7o5Ñi6Çx~Å:¨š‚‰]¤œg]“ƒ˜¸1Û;æŽrU¸«½ ¹¼CEX-Ê\hFdÝë–Ì`ÙÒ«)Ûýæ‰@ó}(ÏQó¤d:N˜gˆß&ÒEël !ëö‹FÕvh—äɲ)ò ʉ”:ÅOº²;›žØ.:nüU×Ï#Œ³¨™×ß!l§7wæ»ä´ÖÜìHÍÚJ­ß÷’WjçZ— H|¹»x²\ÙyÁׂÌm`®„ 7ÜmEùeÇ=œw¬/ATª±8ÿu•éýõÒGÞÏ¡wÉM[›Õ/C)—» ›I„lït ´UÞömXÚì2Z4RkŽ˜fÔå˜êò—úúýé'ŒÞ¤n º2®O  &Fd¡ÑP¡ÁHlÖá ßÓّ‡/Ü'UÅÒ¯FQ'£RÚ…ØœúÃë2#Z¶É’eÃh ÖöigéaûØà&÷"zµ%½gžœÏÈ󰆜ª‹ºßøn_¿wtE™µy†øÆ{ÈRÏèfgž ùš”‘à™pVcþ~Ú÷—L=©õÏ &ë.÷§œÙ'ISçAŸ@â–¼ŠŠáoªºŠâ—®«Y¥µo§:G4smܵ€±f“Ÿq6•G wG9d–c®4ŸŽI«DžÖÏ}Ê•Œ$Ó‰Ú?æ'˜õA"÷£IýÈ‘Ç ”øˆ´«ÂòŒxÃÊ©k^æ„Å¡°LSò!1U ¿kÄb+žÇÎr"׋ÿW®rv›¢zÕñ‘÷PÌ·÷m.2L^—ãV9&ú2o5Å—‘3Xécðé{[ý¤«Šû\´õjšßI&ĶÁXH~ªEVÉçžeÅbu58ÛÐ@÷Ĩ…£ãï´~å,ËôZi#{ëË©ÐIFê—ý8°ÛY>´fˆ¦u3ÔŽ ƒí‰'ÄþøÎ9zË÷³1mh¸¬ƒÕ/D•'•L{{ ü |±¦€¦Uótñš&?BìPèÍɇ%ÛÕü9Su-œ˜T«ù¬G¯Ål¥á\XB×A9ĦxŠØx®˜‹3äŽæ¨È¨Ô>|o'ƘG·Esï”û wL!%·^‘|ý½£çÆ„÷Ù®Ôí]÷=iöòÓŽMÚnBhfTDäóˆÔ¦?â舸¨¿=*Ä@"”W-¿H¨5h2xoˆ‰ïœO×®ÒÂï›~>ðR]+ß+îôuŒwgݬ;%„VæZ‰â;¥ ±EYÙG‚GÍæG½ƒÇGA>ŒÛ6댼ÈMÚ‚Zbƒ1h¸<“Âý'g¤E^UÛ—"Aåä˜cÒH$î׳$;z 5/Š¡šÊ{¼U¶¶°7Ê•2Éj©ñ¹tò} UCD(vü!bTw4Ù7‡ÛÀôÇQ¸à2ÒlÁ¥9ʈ±¿.±ïyŠ¢P·7C,9f¨(þ½v2;ñ´Z‡?è^åjýŒ©#¹€ñ1!M9êá16}ø;¼Å@âöA“êãCjv¼ÅÏZfzoæ³J‚eTÜ‹¾!G)© ¿eüEÖ ëDB‡S÷#ÓŽËÈ)j ×/®ùý»ýñœ!¡Mðã“»Z¬¡P­¥©š¢5[‡C ¶E‡øË1ÎÔWa|¯"J+?Ã)!f¸-q‹³t‘l›Ú¢ãêŽ/u²µ$´Ã{/Gž´ò“×uËlÆó8|3¯·p‘û ï÷«8œ* ÄkàýXx;ÚÍP0XÔDÛÚâco*iOLz œobq,±mßñ»Æ7„(èKe5;àùNüx€+ hÃÓázF§÷×Ñq‘€ÒWVþ"Ù˜" ?ÆÝë¾¥XSÝ?9y¼]â ¤½‰ Dót½\hù¼õª­½ÅÕç$D>º˜ÈlŒcuÌS÷Ùé½[VœpߎaÀ`\¸ò™¾q{¾'we'5>a寺f˜È–$MñŽÕoG«ïXxóeIöœ¢«Çˆ¾ÔÎΙ@º˜,ÜWâX~}È.<Õpüø±ï\UÓþmI{Ž.¼ló¹'G\¢aN•œ$‹.‚K•OJ˜9…îȉCŸúÚNíx¡3pâÞÆÿÙ_Ÿ˜¦±8D «ØÀnh ½È™í/ÛÆëÔûKŽ(TQ…›qósý{5:¯ZnÉrǬPô·OJ4X”æ‹_z騒€y÷¯J:z>fè±ð}ðÜQ{ã@C"ƒ¬N‘ä@å)ÔŠæa¡m3+…ña…Òkà!’Àƒ’ÝÛ.rÖü`M™Üêj !Õt¾®H»¯]Òü®7¡••|>ëMüUZÆÓYR†>ýªÏ°€.ò4Ò(QËŸ6‰õtN‚ã d‚aj[ª^™þήû²"Ñ( 2šŽà «3E3g¨ŠÕˆ¥f(ƒ$41—]/W(ðhÕ”žÿû£®U¯)ÿŽVìå&,ºàN°qÁ§­÷F«YµwÙ ¦©ôRio¦aœà~n˜Š›ï,—zQ ëʧ%4b-g@ùÊÊ3—7piEUšžHLùÝÂU*æ´r$?yŠQhp[]ì†ú*ž;Ã:L2ÓßM o¯NÄÁ-×9¢m¯îƒ<ö¿ºu‹ Yô‹Î¼]XÑ{}Áz(…1q0Zåxª) 0òF+÷ÑØÞ|_Ñᇩeá ¤·ò²\…ëóÁ.z¹ú¾ß<åË6cMWP¿íOVû‰ÙõÓ¸wã& ŸJŸé+7LıÔ[T8‰nΣMO^­øOlÅèÖŽI®ËLŸ#ùïŒtÄ,1»¹4f\¦ûÍK/{ ̧¤å£Úæ|ÍyKÀTÉõ9¶ô_&¿¶Õã­Ô±v …rÄ*pÔ¯P•„I¶&êØ"ÎZo‰Ë=o–pí¯Ä3X]#l„[ïä>ì!íú0bÓ&¬È‡pš1ú f^µôW;á‰A$++v?3‘<2ûV¯P$‰YÐÒrbOòŠÙ;lFÂ{×Êþûdˆf¶˜™ø3ì­%ðÛû¶3FÆŒëwÅËÌi1µ‘ ­¯ N;! nÙ¹\m„Žf¸Üìä |>ï˾ f–°ÃÛ¶ÇŠ¥lcß;PM5|H¸tžÄZÓ©õÎä]ÄPR7Çn Q¡«ÌœdZ­–Vë¹ÈËcËg•±¸¼9~rÌ×Nß”ÀºŸþ‰m{ÁNgÙå+o—{ÂmtÙX¬k"[z‹¦Sf׫ÚT/) WZq‚OT}¹J®–˜_…=¯ôû`“¸á€¶ìñòö–¼ë;MoÀ ÙÆ%BdA7½p§ ¡”#¥7;s¹–¬G oMú‹ò¶¤F•ùb1žgå^µŠÌ¯p }MÆêÕ¤¡íº¹öÔ¬<¡¹¥ì5„êZ/T2Ò€›æãMãÑ—™ Æ”J–Tãx-1g¢ƒ®Ï-rø¢ËœN[G´ZNR¤ó©Pí²Óß Sài‚ãd×ñX´G£UGÃ'Š †CüÕ¥wÉÖÎièÌ•šùã­ m’‹7¤j˹YMQؘض ¾-ÜNDBºzE{½iè//ôPOÒ•‰o‘Ók êÔÒ4äï{“;ÔK¦ßǢѰû-A0M·ˆ öŠðLì–4ÒmT²«ßÄœISíúvÇÉÞ?QC~ˆÞååz‹0fáD2?ä: ¢"yáÅsûýè9Ö žÞ»tÙf²0tê0&W‰Þ­Iûª¤§ƒDá€Yrm?m¹ÄHV—^K8ÆŸËu°IuÕé Ñ*žUH™Äô21ÕÅw}W@®b@†W;£Œ›=£¬Á;´=ÝgVs~Uø ”1²îÌèñ¥Á= ׀ˣŒBzÕÐ&ý£Ÿ’Û}ÍÒÄÞ”0ì×WÐ\ÊÐÏ5hÄaWÑT©¯3w;$uvøèR…#ùä<*¯üDƒTNJ4ó)„ÂÞi,DŸ¹ÇLZU«›}qhHeƒ—|Š7zN ›+K S× Æ,Þ J‹$‹áû–S´Âù÷õ*øËœ?ÏlÂê£I~ɰâÕÍ>Ö!/0‘M—`1™%©ŸÉÖÃÿ‰þö3ÓÄųsË7? PðŒ$‘3'P¤ÎC/à>ü ÚL¸V,ëׂìF¤oÔItD(ùWióR3ŒPŸÖoÑ{Ðô‚jÇô=x£ýï'ìÉ;yYòÑÅj8^Ý×·ýÄ?×”ÆèÇvqNÙ§¬ /s¸I¥Zµ›´š@í…zÖ)ûHàìdŸs¢T¡~Zi[=Tý]ýu€¹ûò]cªER¬_W§Uº¢ÓÐ@IµZCœ#œ‹•<™aBÏ7Jfó$Šœx½—Ød—B*¥qÓÓ8ű3¢ó R¯ÐQ:*aù¬/WäÓ¤£–6Q¹¸¤@„e¡Ï&t¢±ìúÙzb-õpˆûmºEf•Š·É 1wVhì{Pâ¡—½dšõD¡€J8|ý~¬:{Œ  î£ïôìë¶ó³(|Œ¹ž‡ ÏŽš¶—]Œ¨O=Š!„]Í)Ãâ—›«­µ>Kf‹Q‘Ã%ĶUJ¿ÀÃÁÝ á׿52®¼ˆ‹kÀ5yf´ü`Í€p*g ¾E¶KÊ)7b5† ¾¼æ Í ð`;^š‚ÐÁó$ÍÉ«>;ð³h3s…fÉA*Ò¸¤”Ò-åþIRg`›=8ÂS‡e‚cÕªÄɼêÆ R Pßø•.ë*5‡Úü€§DeL) M ¡Ð¥æmOÊ¿¼üò!¤›=÷,‰Î‚†ß€ø¹ÿüGI·Jö'òÂo ›RF3öHô7èÌ*ÙAž¥Ì¨ÄiIn§ÊlFà3S™ªó •쯕^ŠÇì}zçÒ «u?Áb¡S¾"7x™Iê€×2­;6³ÿ ßNpiåÓÏ|ñÔ® •·Ï ß»ÓÈñ Î3h²ü&±MGg³ç×j‰Œ)—7âh‹’Qº=$‘R¨BèsÞ×SìçµÈÆC…Ó(²S‰Òe×¥ˆî 1d‘í'[€ôØÂ›Vk)d {¬rƉӜë'êVš0㪹ÃßV(ÓO3}'†ëÏBG ©²WiB¢Yf2„‘¯‡í×®‹'¦ e¢­ú*iM´˜ÊOÑÐÖS ~=Ḍ0_´§.“¬<¬TÇùº¹4u¸f– ý‰¹`ÛɉðÀîqRc0ü•Gq5 ²-`ti$¡˜-ËÒ>°Fsñó5ixÞ²iÊK[I1µì«Ñ+ëýêv|ï—ú²5:ª0#»[lKÀ«[n×òÒUõŽ\1»ç{¡N—Iª*þá¥3‰*¿³$,ùCéCds¢\'.þcïU —·^;by|5³ß¼Jyã:Ú:_üÌò½Ç ÅØÊGÅ&!ÅïQ&ëwED³Õ£…8k%¼´(Ç-º·2õÀìüdrN(æ• ôÉ#¼*\4ÈÉdÜËãÍ|”ã­P(Ò‘߈€?:¥t`²ŒÊ, §q ûÆr>!2pX!Q>¹áÐk’ÌyM^0!±C ÌüÊÙÓ»‡Áb eA¤ KS‡î­¶Ê3Ø»HÜlá®78{e\Øa¿0v'‚3'ÞÏ“^À/¾†êI¢ñÿÊš‹ðàEg‘•9lï®l+YlV#­\}G°ÛÎ]€¸Éþô k\[Ì ß,U¶E°TÝÔàK}Ê!•j†PTzüÃ^ÛIÁ™FÜTÞÛtîâò9}ðc’+òc¦¬¢‡3 ж=‚×$QÙ£Šb»}Å©)P`!¡‹1©е>03'Æ5Y4çM–"ռʣ„nRùMЏkÕÉÑù¸LcY{?Í«qKÆæè$®§é±ðÓö‡Ú-‹ŽÂ,H€!DšnÈlIïº[àôD§²á¹ÝEœ-ÀÏiÀʽÐ(\bê¾äqõû²>…7zAo­©[ıÖÇö¾£tÈ}ý1¶Ú¨CÊä|#A¥Wš3~‹á𢻒k¥–ŠÄl86ŸÉ°»Òò¨OÎVD”~S±ã€}‚ÐîxeÀ¾ïç¦ACw÷kÍ6~Mƒõ®Ù›{z5·M@b;&0ò0\ËëÈ#ŒPoL€w‹¼Û`ýòÊ”¼Œ~[ØNŸõ¦£UkQ)9ó6ÉÙŸ¤É®]6;¦ŠJëšú‡ Û­¶$x™+ÓИäkœt•Éh:bžÖðN¶Õ(ºJR)º‹}¸áRæ“לsÀ æBÇ{ˆqÕÊ6fÊ`Ì@e1ÝŠ/µ/0KLƒ‡²êÉíóßÕ¤ ÃN&®Ogž Æïè¶¾â÷¾ZÈ,™ :ª>—«=ä|ÁÁP£f2ÑP_¨\5S7Õç8'̶˜é†ËælÕ hÒж=»$O¾ÇR!™éÃ`ÂiKØtÝ<¥—5SoÇó…SЩåIz¼ÒÚìSyõЂ GÎíÊ’ÕÓ…Ã$RŒŠXä%ÐùlžEÿTÐ!W$÷@Ïãi|øi¥à)²ê× ìÔËëBLÇ—‘Ü×*è)IÕô‹-ým6Æôl¤H‡½Sã»Ú$šs"«‰?äê‡üöd¿†¾Y>ŸÚº.þžJ* ÀeâÔ&;*½‹ô4e 2Ó0¡¯Ù®˜Tß´n9×Õ8¡ËÒëI×j­ëEvÐ]Ã"Y"!t¾? ¢÷ÚX¡SP®¼»ÜÕ¢NטL˜½1Ö•+õ55g­åeš¾%ô3¦ë ~—ü^•!žN9¼Æ÷5,MWZ¸MW^¦'3ÈO&=$õ8ZéÇÝp§Ô"ÞÿïðÇÉRÙ½Ïz¹ ¨ašX¶”’³vŸÚÛ»„ìº._ãËën̈HÑzŒûÃtŠÛ§VÉv?0ÖY@Ñ·0nl»çÇÈYÅBÚŃúÛ=˜®­ææ˜×·‡–<„ˆ€$3p,ø…úϸ# L]ë¨Ú=³T¿«ùB2±Ç²þl*¦ÊTÇ|º½FX÷ŠP<¿ì[Î&?Õò×½×›b­˜Ü—€ôÑŽ+YÔÉ׿ YØ +šoV¸ó®Öá§ô$eò¸qŠ b~K|JÖBAÒSpzä E„M][Ùr‰Áð€lO‹S»"}DÄ¢û<éü› !Y´Ò˜éŸÞh™—Ò• /ÌÚ<Ò©Á“uA\´T7AS?îìXMíÍ–r®ñ“VJéîýÄÿ-¸f¨}Ö«JM/# þðâmZÕÈRÁC‡wÔó ]½/†Â†E w»Ôš| i+Md¢Xôþµ¶ÑE ŸÚMn-{­E$t¶Å,I„AÄ…É &Ö]­^ß¹ ÏÛÌž ûjÃ~l <î 뻚.lJp¼ŸÞ-Ö¤ÆE’++øçÓÜfÌB¤A—_zx4¾O™RJ-ðàì}¦ù/¯ÁíwRp'B¼Ùðd6%¡çè71ÔŠdô_N¸b:€ZÇmú{|EFfòЧ[.:’Zü‡*s’É0ãcu0o(2ó?àŸNLÄ躉6ý,9Š'¿ x4ÔüPÜsúKØdêú½a§oû}þf–ùPÙ–¸Ý¶|%a$G£Ò‡Ì.×Ú&G ÈMQ†x¥4ÒÂoš³ª(21U$†ÎQAÊEM¥ƒØh›áÛ|EâÔãÚV”Z"ð¾uáÕópzã«©«ÛyªòÃ!lk“ß×o]ôÓ÷/°`ùCšªŸÆÙIx¿>½Ðú‡²Á¬¢ i"©ÆTj?¾ô! ®E>ÁŸ“lMQ`Ïjö!]õZqÕËÖÅÊÎÙù ½ä× Àa ›Æ€õLÙ3ä[8\ºé¸Òwd]Mã]-dòƒTR@_H”Lz€ü§4KVsH¶SEÇÓð·{Ê/õs"„2-/ÿœš™“-··­($±e~{)€=:=P±·ÕŠºˆÀ„ùøÁhÀ1RÄ{•¼Û‹õŸû&_oÃ|ñjläÃnfsàO–Ù›ÞN¦_ÙÔ?ÞeÔUŒ¯Ì#©î\…©…Õ§ÃÀB_öKÉ~Øë_Ù7¥ÙÉŒpB¸¯ö{‹}!_Üq·Ž0÷@\É{Êã'éj¶ôÏ+ï©Õa!<ÝŸÃ,4Ü'5TÁÞŒEÆâÀ@ôŽ£vyJÔ~œ[†ÄJvÃ8Är±µ}€í¦ÅÔOÚdùàNÎ`ùë÷rÀSN÷EWw@¤C½>œ[QçÅÄ«X×®êöEb#Š[œ8cb^”Tý4OÆ<;¾/£×ocˆ³-¹ÿqŒ[\S^H° h¼ [‹ÙôÆ¢OU€`î]—·"6½žæˆ,BóÊí¢õÕ©aº›§m‘Ú#Æ|p Ä®*"¹î¶PRèŽO,ƒþäLqûxνÙZx£S”²¥Ðçk±¿Ÿò9â¤ö?nf­ Î):ÃÉy-°ñéŒqßÁ5Uº?oŠ˜nÿ±½‘¥M\%ͺ†¬ZU åLmèê³mö0wÁçPÁò0€<š·˜›Å_”r@cƒ|Ü]yî£Vù凪}¥i^EB¨ìç`‰kRŠcvÙÄ¥ˆ±Ý»\}cÿ’zóÊçÉaÓŽ@€Ä¿[nÝÖÿ;%=w\Ë_•Rt}vÐù)·Æ×j™ïòT<–Ùq‰tYG;Ü´HÎQhKsr^¬O²Kú௢[µ¿ëYœPŠ…°¡J”ÃËr^G4 7O}Îètå¼tPFŠ@̱ÊÔ‡ÚA6çîCyßLîœ2£}—q§A{ 95”MMé±JD?µ’Sr+³R¯ûààîÛf)uŸw.[˜¥U6úÒ8Ÿ~¬ Ý‹SrÕ]„T{¿ æ}fÆdA.œ¿fûR5mNæÔc…®Å(‘ ïýdOoµMïHÈüO¡F#T'0Æa*¹nMØš¦«+Oóiüx’e&ÁZójÜñ3¶®,”SÂ1þo«7ÄBÀBþ €&·•\¬Ö1KMfa~+ŠrsAPh¾þªÄ *´Å%iÄ•7ÿâ–Ñ[®@Žñü&´¨—¤ÎOE9Þ1²¤z¼dÿÄÐDCK“‚ô椾€1ëפüe7HQ°x;æ]³¼Ú+Œ¢ôX[€¤ëþ=%ÏðÑ„EL— öã”ï-Ô¶ö?;PdõàÕ¶Yú¦ ‘†é+T?ŽQ —̇ô£xŸÝ/ % ¦Q’·ë³:Ýa îËæµúÒ|,'Kžp‘² ÖÏÁ^4¶XÇÁ^è½Ã2Ý™oútFBíõ—ùÔ†Û%m!©Î£…AüA¸ñ /®ã 5ïßhÖFmd­Ïo*s Xäq®;Z¶”Ïgµo*#l¯çÏhÃÏb-Þ¹ÄÃàôROžÎšŒRÞc kv¿Ö7ÌF+2Rp2zÕ¥©a ¡ìËÆaÕ`°Œ•·¹-ÔbZQÀ,±ìþ itÍ/"±Ü»»u±³<·øòÑ,E´d8œÎ‰ÏÿË»¿ý†½§ñÅ4ñ]y½ìšKÛCx¢ð<Ï½×€Žº [H-iD¦u¦V‰O;LáOŠ\bOXi[JŠyˆÇÍŠd%ÌÛ¾ÃÅ ¡?¥ßÈ›¿Iû˜h¹ësµçÇûÆÆÉÓ,tT Ô›[=æc¤U.QFDΥ乿y¤—#ߤ¾§È—°yޝ©®ƒo$G}égE0ÞÛZ®ù ¦ !{8YÉ“IïIÍúC ¡žÐIÐŒÌru¦Ð×4 >Fp‚–Öni1‚Où¬·Ú”»Dö@{5xSŸáø¢ƒ,vjbß¹?ÄB¦X¡€ ßKBoJ?çÈú*xZ¦Q$-}Ì~Þ“/•3LFòÔa}îâ[ò°•Ù>ew±à >عI­Óƒlèé§ úו{AøôÞ0=wE¿æjÖlˆ´F¾?YmÕ‡1/•VË÷#¢H%ÝȨ%´’À¼(›¢M¾¥Ó³a‹J^+eU Ÿªùº°Î •ŽÆ:jR€²É²´ÉúTÊ¢ÒJ’Û#uh,=8F3ö¼{¶Hâf=˜ Hè\™ß^>—¶ž*P>‡`ýýõÉ‘†p“¸þV¼!9ize_ |L=Á#W6Æþ8Ÿ:©hŽ |ÑÎÿö±Ò–JõÛÇÅÛÄd ™¸ƒt½Eý¦YUˆ?‚¬Ù¤*Rz…*Úˆ™7Y¿©ö°Èq‹j‰ (¶»U{ãK8ó[±-ï+ ðxö „Oíw¸²æîMZý²*ô“ð»¡(qIq#>réé{½¾)üæõo“Ì‘$µIúÂ/ü=ð7†2j[Œl(Âì ùÈ  á f&‹-gU:ËçMÛºèÓ²ù»iGÜ.±¸@¹ç°•ìhƒfž¥O×αJ}ÜþÞenæÛÉk‘ƒ ³‚FóMEË ¥½,]¦¬hÃl9SèÜt>sÌÕqnT¯£ …ùÒhºo÷—0Þ!a~›-`P¾WnÏë3K}ö ÑTsct©ÝDúÚyµÔ¬Nº Ú??paÁTÍ @Ð}îþ¢­ø;Hö*üã’Ó$®¬’ lÆ[ËL“¿=X`õËtâ—\BIIÇÝ:D[áýôw…Y0Eäã ΞÖ,xÊŠ‘›GfÁËÑ8ـ̨  ž¢x؉źXQ#·hàw¼¨ý:OnÚ3l±’¸`O·Úp™úÆ;wtâWWÁ‚{†¶ßCÍ#xï¨K>™ ò 霘_µü5­Y¦ÑbbÞRÊ€¯)rRËf‰øLùÕ³§ÔÑ·é-î´øi&>iIA’ùçû£L¹&íU‘{ëÖÆ¼ØTl<ٸǃ qðÃ5b]ʧ:ÍÆ2òáãÁáãyþiヰ€ùJi¢ »ÿ­ý‚ ó©"ÂVÑL-vÊuÆÐÊ4¼?_øú[½g<B]¦Ö=ø‹2u #½´ÓPDÙšE¾ç{@ÎA',FËw¸ÂÍÌ{! ž”½qAsl‰deóeèå4_Ø·`õlàøRèµùè¨Ô[h—³´ã¢e §€š¨®I£õÀŸ>*µ-\›N{Õd̦™,·cû0ðNì„¢7Ë{õEjž˜‡—O?7ÞÄ\ùÑ   ä×mV Ýžò{då­0cº¼Žþ˜ ÖhŽãüù´}‡ )tøÓy¯›¼F ¯^•`:Ve +‹³ŒàT‰Õ¤šKŠ»* endstream endobj 237 0 obj << /Length 740 /Filter /FlateDecode >> stream xÚmUMoâ0¼çWx•ÚÅvHB²ó!qض*Õj¯˜n$HPý÷ëñ#xÙö?ŸgìÁÜýxÝLTÕîÌ$|äìÍôí¹+Í$ý¹=wwY[ž¦ž©L5ÎöOìµkËØ}ºÎÖM=ÙëÃP7ò{=,éÛyf‹ì¶ÈÜ¢_¦ëë¶ybâ‘sn yS¥í6ú`z‘¦£¸}ÝTÝEÛA] $«êr¸ŒÜwy´çÅ›Ï~0Çu³oƒå’Mßìd?tŸNãC0}é*ÓÕÍ»¿•f§6çÓé` ƒñ`µb•ÙÛŽÖÿóöhØô[WÎûçÉ0鯂t•meúÓ¶4ݶù0Á’ó[Å*0Mõß\B+vû‘šX*Ÿã+TÑ*XÊÐb£À-¶L†š s[ ‹#*X,caq¢\Áâ`™`2Iш ôPè¡×]¬®QA2•¶ÝE;XÆÑXJKªC kàá8¢8pLØõ¹ììÖB§Òõ$qŒÆ©/0Îü8Å8ÿ‡?rŠÛxÂy!ÎBÀƒ=ÉXú„óÀõ Øy©ã82ƒVA× pÈ"¡ºžÓZÇqÞxæ8t9¼çMDð/ÈWáøä)uœœ8˜|¸}¥ Û†~)é3à„0|‡ÔSRÏœÎHCOt‰Î$"NN”“_hˆ ò…ž1'>4$ÕÁOˆŸ¡OB:Ý]*N:qžJøÜ(és£BŸ5ó¹Q‘ÏŠ}nTâs£”Ï¢¬(èQù<©ü6Oª¸Í“æ·yÒâkž´üš'ú<é™Ï“Ž|žtìó¤Ÿ'=÷yÒ Ÿ'­|ž´öyÒ©Ï“Î|žtîó¤ Ÿ§”û<¥Âç)•>Oéìzgî—ï~éx›ð’^Ÿ½òÜuöEtÏ­{èðÄÕ¹¾È§ö„Uîãžòñ¿£—"ø ›tª” endstream endobj 238 0 obj << /Length 740 /Filter /FlateDecode >> stream xÚmUMoâ0¼çWx•ÚÅvHB²ó!qض*Õj¯˜n$HPý÷ëñ#xÙö?ŸgìÁÜýxÝLTÕîÌ$|äìÍôí¹+Í$ý¹=wwY[ž¦ž©L5ÎöOìµkËØ}ºÎÖM=4$ÕÁOˆŸ¡OB:Ý]*N:qžJøÜ(és£BŸ5ó¹Q‘ÏŠ}nTâs£”Ï¢¬(èQù<©ü6Oª¸Í“æ·yÒâkž´üš'ú<é™Ï“Ž|žtìó¤Ÿ'=÷yÒ Ÿ'­|ž´öyÒ©Ï“Î|žtîó¤ Ÿ§”û<¥Âç)•>Oéìzgî—ï~éx›ð’^Ÿ½òÜuöEtÏ­{èðÄÕ¹¾È§ö„Uîãžòñ¿£—"ø Õªž endstream endobj 239 0 obj << /Length 741 /Filter /FlateDecode >> stream xÚmUMoâ0¼çWx•ÚÅvH U„dçCâ°mUªÕ^!1ÝHDI8ô߯Ÿá-Û@ãçñóŒ=˜»¯Û™®Ú½…œ½Ù¡=÷¥¥?w]pw—µåùd›ñÙÚÊVÓìðÄ^û¶Üڑݧ›lÓÔãƒ#ošòx®ìÄúždìGÝöa÷ïö÷¬< ƒP³ý¹>Žu3ã@~¯Ç£#};Ï\‘Ý™_ôËöCÝ6OLýwÀè¥þe:ª· endstream endobj 240 0 obj << /Length 740 /Filter /FlateDecode >> stream xÚmUMoâ0¼çWx•ÚÅvHB²ó!qض*Õj¯˜n$HPý÷ëñ#xÙö?ŸgìÁÜýxÝLTÕîÌ$|äìÍôí¹+Í$ý¹=wwY[ž¦ž©L5ÎöOìµkËØ}ºÎÖM=—ÝZè”Bºžd"ŽñÁ8õãÆ™§çÿðGNq[O8"ÄYx°'™KâBŸp¸ž;2uçAfÐ*èY$TWÀsZë8ÎÏ‡î ‡Ἁþù*Ÿ<¥Ž“G“·¯tÛÐ/%]cœ†ïz*pBê‚Òiè‰.À™DĉÀ‰rò QA¾Ð3æÄ‡†$£:ø ñ3ôIH§»KÅI'ÎS Ÿ%}nTès£f>7*ò¹Q±ÏJ|n”ò¹Q”=êâÝñ3Ÿ'•ßæI·yÒü6OZ|Í“–_ó¤CŸ'=óyÒ‘Ï“Ž}žtâó¤ç>Ozáó¤•Ï“Ö>O:õyҙϓÎ}žtáó”rŸ§Tø<¥Òç)]ïÌýòÝ/oÞÑë«Wž»Î>ˆî±už¸º1×÷øÔž°Ê}ÜC>þm`ôRb©Ç endstream endobj 241 0 obj << /Length 740 /Filter /FlateDecode >> stream xÚmUMoâ0¼çWx•ÚÅvHB²ó!qض*Õj¯˜n$HPý÷ëñ#xÙö?ŸgìÁÜýxÝLTÕîÌ$|äìÍôí¹+Í$ý¹=wwY[ž¦ž©L5ÎöOìµkËØ}ºÎÖM=—ÝZè”Bºžd"ŽñÁ8õãÆ™§çÿðGNq[O8"ÄYx°'™KâBŸp¸ž;2uçAfÐ*èY$TWÀsZë8ÎÏ‡î ‡Ἁþù*Ÿ<¥Ž“G“·¯tÛÐ/%]cœ†ïz*pBê‚Òiè‰.À™DĉÀ‰rò QA¾Ð3æÄ‡†$£:ø ñ3ôIH§»KÅI'ÎS Ÿ%}nTès£f>7*ò¹Q±ÏJ|n”ò¹Q”=êâÝñ3Ÿ'•ßæI·yÒü6OZ|Í“–_ó¤CŸ'=óyÒ‘Ï“Ž}žtâó¤ç>Ozáó¤•Ï“Ö>O:õyҙϓÎ}žtáó”rŸ§Tø<¥Òç)]ïÌýòÝ/oÞÑë«Wž»Î>ˆî±už¸º1×÷øÔž°Ê}ÜC>þm`ôR~â©Ì endstream endobj 242 0 obj << /Length 744 /Filter /FlateDecode >> stream xÚuUMoâ0¼çWx•ÚÅvHB²ó!õ°ÛªT«½Bbº‘ AI¶ÿ~=~/íö?ŸgìÁÜ|{^OTÕnÍ$¼çìÅôí©+Í$ý¾977Y[ž¦~S™jœíØs×–k3°Ûô1{lêáÎ’›rªÌÈú?I›·ºñìÃn_ͯIyèûíÁ'ÛS½êfÂA­‡½¥}Á`¶Ì>–™[øÓt}Ý6LÜsÎm!oª´=ÀLLÏ‚Øt”¸«›ª;«b[h „dU]ç‘û.öT°xýÞæðØìÚ`¹dÓ;ÙÝ»ÓyLŸºÊtuóÆn?г“ëÓñ¸7Âx°Z±ÊìlO{?6æ_8½°^߆I7¤­l+Ó7¥é6Í› –œ¯Ø²(Viªs ­ØîFjb©|ޝPE«`)C‹eŒ·Ø0j*Ìm!,,ލ`q°Œ…ʼnr‹ƒe‚É$E#.ÐC¡‡Z\v±ºFÉ|TTþÞtgí<\`Gc)y ,©<$¬g„sàˆvàÀ1a×ç¼³[ RHדLÄ1>§~¼À8óããüþÈ)®kà çA„8 ö$`I\èÎ×3`çA¦Žã<È Z]ƒÂ!‹„ê xNkÇyã™ãÐäð"œ7Á¿ _…ã“§ÔqrâH`òáö•‚nú¥¤kÌ€ÂðRONH=CpB:# =Ñ98“ˆ88QN~¡!*ÈzÆœøÐdT?!~†> étw©8éÄy*ás£¤Ï }nÔÌçFE>7*ö¹Q‰ÏR>7в¢ G½;~æó¤òë<©â:Oš_çI‹ÏyÒòsžtèó¤g>O:òyұϓN|žôÜçI/|ž´òyÒÚçI§>O:óyҹϓ.|žRîó” Ÿ§Tú<¥³Ë¹_¾û¥ãmÂkzyøÊS×Ù7Ñ=¹î¡ÃW7æò*Û#V¹{ÎÇŒžŠà/zÞ®Ö endstream endobj 243 0 obj << /Length 741 /Filter /FlateDecode >> stream xÚmUMoâ0¼çWx•ÚÅvHB²ó!qØmUªÕ^!1ÝH $úï×ãGðÒö?ŸgìÁÜýxÙLTÕîÌ$|äìÕôí¹+Í$ý¹=wwY[ž¦~S™jœíŸØK×–3°ût­›zx°äuSΕYß“´y¯OÁ>ìþÍü™”Ǿ¯ŸìÎõa¨› û­–õ=Ù*ûTenÙoÓõuÛ<1ñÈ9·…¼©Òö'}0½¨aÓQß¾nªî"‰í 0’Uu9\Fî»<Ú#ÁâÍG?˜ãºÙ·Árɦ¯v²º§ò!˜>w•éêæÝÒfç6çÓé` ƒñ`µb•ÙÛ–ö ~m†M¿·y%½}œ “n,HYÙV¦?mKÓm›w,9_±eQ¬ÓTŸæZ±ÛÔÄRù_¡ŠVÁR†Ën±-`2ÔT˜ÛBXXQÁâ` ‹å Ë“IŠF\ ‡Bµ¸îbu ’ù¨¨ü»í.Úy¸À2ŽÆRòXR xHXÏçÀíÀc®Ïeg·:¥®'™ˆc|0NýxqæÇ)Æùü‘SÜÖÀ΃qìI&À’¸Ð'œ®gÀ΃LÇy´ º…C ÕðœÖ:ŽóÆ3Ç¡;ÈáE8o"‚A¾ Ç'O©ãäÄ‘ÀäÃí+Ý6ôKIט'„á;¤ž œz†à„tFz¢Kp&q"p¢œüBCT/ôŒ9ñ¡!ɨ~Bü }ÒéîRqÒ‰óTÂçFIŸúܨ™ÏŠ|nTìs£Ÿ¥|neEAºxwüÌçIå·yRÅmž4¿Í“_ó¤å×<éÐçIÏ|žtäó¤cŸ'ø<é¹Ï“^øO©ôyJg×;s¿|÷KÇÛ„·ôúî•箳O¢{pÝC‡'®nÌõM>µ'¬r÷˜ =Á?^¬¡ endstream endobj 244 0 obj << /Length 741 /Filter /FlateDecode >> stream xÚmUMoâ0¼çWx•ÚÅvHB²ó!qØmUªÕ^!1ÝH $úï×ãGðÒö?ŸgìÁÜýxÙLTÕîÌ$|äìÕôí¹+Í$ý¹=wwY[ž¦~S™jœíŸØK×–3°ût­›zx°äuSΕYß“´y¯OÁ>ìþÍü™”Ǿ¯…œìÎõa¨› û­–õ=Ù*ûTenÙoÓõuÛ<1ñÈ9·…¼©Òö'}0½¨aÓQß¾nªî"‰í 0’Uu9\Fî»<Ú#ÁâÍG?˜ãºÙ·Árɦ¯v²º§ò!˜>w•éêæÝÒfç6çÓé` ƒñ`µb•ÙÛ–ö ~m†M¿·y%½}œ “n,HYÙV¦?mKÓm›w,9_±eQ¬ÓTŸæZ±ÛÔÄRù_¡ŠVÁR†Ën±-`2ÔT˜ÛBXXQÁâ` ‹å Ë“IŠF\ ‡Bµ¸îbu ’ù¨¨ü»í.Úy¸À2ŽÆRòXR xHXÏçÀíÀc®Ïeg·:¥®'™ˆc|0NýxqæÇ)Æùü‘SÜÖÀ΃qìI&À’¸Ð'œ®gÀ΃LÇy´ º…C ÕðœÖ:ŽóÆ3Ç¡;ÈáE8o"‚A¾ Ç'O©ãäÄ‘ÀäÃí+Ý6ôKIט'„á;¤ž œz†à„tFz¢Kp&q"p¢œüBCT/ôŒ9ñ¡!ɨ~Bü }ÒéîRqÒ‰óTÂçFIŸúܨ™ÏŠ|nTìs£Ÿ¥|neEAºxwüÌçIå·yRÅmž4¿Í“_ó¤å×<éÐçIÏ|žtäó¤cŸ'ø<é¹Ï“^øO©ôyJg×;s¿|÷KÇÛ„·ôúî•箳O¢{pÝC‡'®nÌõM>µ'¬r÷˜ =Á?L¬« endstream endobj 245 0 obj << /Length 740 /Filter /FlateDecode >> stream xÚmUMoâ0¼çWx•ÚÅvHB²ó!qض*Õj¯˜n$HPý÷ëñ#xÙö?ŸgìÁÜýxÝLTÕîÌ$|äìÍôí¹+Í$ý¹=wwY[ž¦ž©L5ÎöOìµkËØ}ºÎÖM=Øý­4;µ9ŸNŒ««ÌÞv´þŸ·Gæßz¼rÞ?O†I7¤«l+ÓŸ¶¥é¶Í‡ –œ¯Ø²(ViªÿæZ±ÛÔÄRù_¡ŠVÁR†Ën±-`2ÔT˜ÛBXXQÁâ` ‹å Ë“IŠF\ ‡Bµ¸îbu ’ù¨¨ü³í.Úy¸À2ŽÆRòXR xHXÏçÀíÀc®Ïeg·:¥®'™ˆc|0NýxqæÇ)Æù?ü‘SÜÖÀ΃qìI&À’¸Ð'œ®gÀ΃LÇy´ º…C ÕðœÖ:ŽóÆ3Ç¡;ÈáE8o"‚A¾ Ç'O©ãäÄ‘ÀäÃí+Ý6ôKIט'„á;¤ž œz†à„tFz¢Kp&q"p¢œüBCT/ôŒ9ñ¡!ɨ~Bü }ÒéîRqÒ‰óTÂçFIŸúܨ™ÏŠ|nTìs£Ÿ¥|neEAºxwüÌçIå·yRÅmž4¿Í“_ó¤å×<éÐçIÏ|žtäó¤cŸ'ø<é¹Ï“^øO©ôyJg×;s¿|÷KÇÛ„—ôúì•箳/¢{nÝC‡'®nÌõE>µ'¬r÷”ÿ½Á_Ñ5«Ô endstream endobj 246 0 obj << /Length 740 /Filter /FlateDecode >> stream xÚmUMoâ0¼çWx•ÚÅvHB²ó!qض*Õj¯˜n$HPý÷ëñ#xÙö?ŸgìÁÜýxÝLTÕîÌ$|äìÍôí¹+Í$ý¹=wwY[ž¦ž©L5ÎöOìµkËØ}ºÎÖM=Øý­4;µ9ŸNŒ««ÌÞv´þŸ·Gæßz¼rÞ?O†I7¤«l+ÓŸ¶¥é¶Í‡ –œ¯Ø²(ViªÿæZ±ÛÔÄRù_¡ŠVÁR†Ën±-`2ÔT˜ÛBXXQÁâ` ‹å Ë“IŠF\ ‡Bµ¸îbu ’ù¨¨ü³í.Úy¸À2ŽÆRòXR xHXÏçÀíÀc®Ïeg·:¥®'™ˆc|0NýxqæÇ)Æù?ü‘SÜÖÀ΃qìI&À’¸Ð'œ®gÀ΃LÇy´ º…C ÕðœÖ:ŽóÆ3Ç¡;ÈáE8o"‚A¾ Ç'O©ãäÄ‘ÀäÃí+Ý6ôKIט'„á;¤ž œz†à„tFz¢Kp&q"p¢œüBCT/ôŒ9ñ¡!ɨ~Bü }ÒéîRqÒ‰óTÂçFIŸúܨ™ÏŠ|nTìs£Ÿ¥|neEAºxwüÌçIå·yRÅmž4¿Í“_ó¤å×<éÐçIÏ|žtäó¤cŸ'ø<é¹Ï“^øO©ôyJg×;s¿|÷KÇÛ„—ôúì•箳/¢{nÝC‡'®nÌõE>µ'¬r÷”ÿ½Á_î«Ù endstream endobj 247 0 obj << /Length 672 /Filter /FlateDecode >> stream xÚmTÁn£0½óÞC¥öÆ6’*ŠdrضjªÕ^pºH‰A@ýûõŒCf»êô¿™yã'æîÇën¦êö`gñ#govh/}egæç¾‹îîò¶ºœ­Ÿ­­m=Oìµo«Ù½Ùæ[׌ž¼uÕéRÛ‰õ=IÛÆú°ûwû{VÇQðÙáÒœÆÆÍ8ß›ñäIßž3d_ƒ “~Ù~hZ÷ÄÄ#çÜ W›ö c Ñü*…Í'qÇÆÕýU;€ºHHV7ÕxýÂwuö÷É»Ïa´ç­;¶ÑzÍæoþpûOÔøÍ_úÚöû`÷_¥ù£Ý¥ëNd0m6¬¶G_ÑÏÿ¼?[6ÿvÆçý³³Lâ·ºª¶¶C·¯l¿w6Zs¾aë²ÜDÖÕÿ%!ãpœ¨™§ò%¼b•l¢µËÜc€Ã¤ ¥¤ÀÈ ¤ÀPÀP«[ ßuªŸñ©_õgß_•ñxû4Ž$Oˇú<X^\NB8 ë\;c®‚šBbMx¹ ùy˜%ÆPÈ 3jok:E q:¹Œ/d4ˆ8ð€Q§4ÈA2="\¤ÂšYˆ+ÀË‹ÔÏsä(Äè5$ YŒ—Èú rŠÀ‘€ƒ~ì+A¿\HÈ•ÐWr߯{ÇNøxoËøŠ‡û• ¿”$¿TL~©ù¥òK¥ä—ÊÈ/¥È/¥ƒ†p˜1ðsòQä£*ÉGÍÉG-ÈG-ÉG“zA>ê„|Ô)ù¨3òQ/ÉG½"µ"µ&µ!uN>ê‚|Ô%ùh8ùhùh$ùhbòÅ,n~á†üá°nË£ºô½ß+¸´p]À¢hœ½íµ®í \ˆÓ†¯—2ú ¯M„Ç endstream endobj 155 0 obj << /Type /ObjStm /N 100 /First 901 /Length 4095 /Filter /FlateDecode >> stream xÚí[ÛnDz}çWÌc‚ ³ï·c’mÅBìılj ZK<¡I…¤gýYUݤf†‘’ö ˆ­ž™êêªUÕUÕM޲©’•r¡RÖ㪴•S•N¦r®2&⮯L4•òª²”Bª@ìµ­på}ê)/« ,žÆ*JŒò®J4Úƒ¯ ®Ri¥+3U)#5P‡¦¸0 WDbí©†Î¡ ž8!N ‰’>˜€DJ†®t¥%¦ÅdZ)ºaÐ*ÚJkIwðH[×SÑ£“ 246ÆUDj˜ešÄ%,H戎£IB¬´O ³Ÿ4ˆ6Iñ$9ÕSIWFZGUÆCeBe¡?î¸ÊC£=:@Y%<2 Ê¥XYKع“€Hit<”×ÐÔ%i{@¹¤ ¥ú ðiiÑ.Z:XÚAù*hîÝÓjà-©¥u•”$<$Ìb¨£Ð±ºG&¡ÀÜ“•ž­RäÙN9¢†¼ÒA+àˆ^„"<3p¤èY<Ñ#àÀCc$Š=mx~(© ©æ„7¡®µñ¤®'šH~hy„·D# ÂD-}SV+#h4œÁbÎx‘Ç»…uÄüÆzOü¨ aòH˳¢Pd=ONF(’È`(gœ¬"ݲ2ô"Q]Ep:Fä“Î% œ–ær˜e”X!D!‰ãååaE{ Ðd^Á¶OŸöÄÑd<¯ž>­Ä‘ Œ„¬Þâ‹‹DÎ$PȤÔ/‰Ð\ŒÑìuåB2"åÂ3(tñï÷Ä›éä⤞Wg•xóü¨§õ—yuÞÃ#’èôŸ›WuO<ƒtõx>#]hxO¼­g“ÛéE=ãðÀ·^×—ÃÁáäKuF2ÂGûE«ú1c¶Á,w"/³<¯Î(ú°|ïÿƒLÕpàL?ÁñÆ·£Ñù6∅”ïK,½ˆ­ÅÝ!¾ƒ¿…k þ¶aî@~(”`Ñ…Ò˽ ô¶ ¥WM…MFg”mâ{ \G¬]‚`f'(7»õ×€2­B¥8'àxÆù‹D¢üEÿ;0]OœÜ~˜óõ«áøÏž8œL/ë)Ï$ÏÅKq,ž)¾ Ù. Ò@‰Ôõ|ß aØè`$ºï¤?LN'°ÿîåÇÉdŽéê¾þž ú*‚ _õ=R›q¾¯þCˆôˆ¬Õ·ÒÜ#ˆi Âî÷XÃ]bò%od?!'íDl¬é‡ûh­ìs*¶¡oPìFlB?nòçV`ÝìÏ-·oÇì»0ýPOnÅÓƒydÐvÇ ±K’jÇÏ&b_Aû¨VµO\ç!|Íõm½é.ƒ±¼P0ZŸúu¦éÇ{•í.ª(÷XT]b²¢ÓºOæÝ‰˜BP\·×;Û·qWÎÆö‹;+Û÷fGFô²z7bT£}Øãâe$ð}‡jöqeB«0kÄ‚‡.€$W@Œ]qËXçñ()+u—HtèSá¤î{˜Â¤Ð‡a/ØÇöä|¹†x ‰ƒ§Oyqp1NÆâDüúö˜>ß]Ïç7³ÿbZßL'—·Ã£úɇÛáèrÖŸL¯Ä÷µ‘ö¨tÚÄ%á8 §ÔŒp;µ3G‘ ÊmôðñÒj­6 Î ØØ†€b uƒF‹}KßbÿÐF,[h@‡@´»È·3s_Ž…9~IžûØé‘T˜`ñš„ÛB“ùðSƒE¯K»°»´™OáÌUP‰„ÒIõF‹ ÚEul CÊù vlE¾<ØJc v»pTÅØãYá”û1q’$ÚÑHMpg®JJ‚±%†Mh "{Væ®×T+ÛÉÙ‹å}C!} ßoø‚JÄ…¯#ªX(šÔ¹5^CEìPIŠˆºè¾†-ò·Ïÿ»Ïy#þR$jÔtÓôÄOƒO5×U9T½̧CŠø}©è<ˆÃô]ÿáIË*Înh©qxÙåVZÍÚÑʶ1ѲÛÐEU¿5ŽbŸw(²¯–4Ñ·diYæû™¿Q´ ò^ÀˆP逅%øç¶Ì˜9„\ÁXîm—q—–¸0O–©Hð`KK)Φ‡/:¾u9-…„:òõЯÐEOøa?Hå¥-(þ;16Z¾Ã4AS8óhâl(ØaNOØzp B®?ÿ éšÓÄ·tý-]ß“®sä¸ÀÊ´V6Vqq†Óƒ[MZʰH‹~;=Àk @¥íƒÓƒÕì@%9Зíä@ßft’}¯±ˆèdK·Kr°Z ¬¾K –6yò.3ä˜f·Fóñ./È%:lG†çõìb:¼™O¦y‰ç¸ðòðÕ³W‡ÿzöúäDQ„ ®f•m'ø‰¦ä“¨¢/gfôå,v;X­ƒ›—õðêº\Ò,ô쉢«ãù`4¼8_ê ÜOæõ§wUˆ=ñ¾Œ}ó‚§Pò8‡â™x.^ˆ#ñ}û£x%^‹ŸÄÏâx+NÄ©øU¼¿‰ßÅ@|âb2šŒÑ~ú4—¢ÌVÔÝFâ£øˆ¿!þ>×â#®¾Ä•¸×ÿÜ\×c1ÿ+þ#ñIŒÅx8®ÅDLÐÞˆúòyTœçÞ”yÞÔÓáäRÜŒngâ/ñ×íd^çS1³úÓ0‹2«?ƒõløEÌFƒÙµ˜‹ùõ´®ÅüŸÅßâ‹øGüGü§žN¾Ï8 V®ùC—ûìöÇÉGoÞg»é vÓd7Ú†Sùo7¿ÑnGl“ÅuFzX 6XÕ:ì£õÑÑÁ/ÏZ‡õZ»X¼Õ¤½´v»hmd[ëlrò»+¨ ³‹y[»´—Mß¾~ö’µ‹Lê²r¨ùëžGÛ4†6Í«ð+VÝoXoƒùú%7¾$GÏKmÝ*Ën°ËâꮪÍ+¨³VûÀüöôäÝÏ sÚ³YÀŒ’#xùx˜Í–¥s xÁl)ƒI —jBØe˜›ù&,Ì^.÷Ë«_^¼a,ßoJA-à  »ÄÃÅûR@74C#è7ý°ò›±~OÌA}Ê7ñn0Ó{…ðãçGo_œ2öÇ› Oa}I¾O(I_”[|ñ"{ߣYb.þnk¹_È~öÓéñÏEË ™*Åœ©”tú1©ª¡å–"㨩c;^ë½âõ›_þRj§ã [a¯– ¨Œ{LÄn0mT­(ÖUËì|}üîÍqVkC€D(ZIû˜ÙÔÊn1Ø í˜9þ}në¸WÜ{÷ûÛoO ãé馥g¡¢¡# ÔüÉ74Tª¥!].5D¥¾!æù¦ÕŒÚòîjÞ_ZUï{®{±ÆÊœý‰(øa:¸ø³žs+ýƺiúr2 ¦¹þr1|âˆù¹^ÄÊ«éWÓz€YšiœÂ稞Íîêåñí§õt6¼ïW:×3þ1%gûˣܙ °½ªéÛñ%¦¿˜Lëm…µÙ•;G%0Éá`VóO*W¶E-GâÍø¨¢ñ[#Õü©‘n~›\~Áz:ùu ­.I¢°¿DÝ‚¿+QìJDkèN"eG/fU¢¸¿DÝb¼#‘–]‰(Ñ7$ò ‰Ö`”€Q»€î ¤WŒ¦[F3߇¥¬Ü_ N©ÙÈÞ#jx‘_H=¡•z¯+“ß$z[sE&½¿L+uPW¤¸]$•"¹U‘Ì\»[´tD2ò‘š?5\ƒ’Ý_¤n±Ñ•Hï!‘^•è1²['t%ºÇ»Ul˜-¬Jä÷—¨›Õ»­ú¶Ùµé…è‰ÖDmzáaFo<ÜRe°|m^0àá?/gÕYÊ/#ª\£Ð;å~WO¹rßÿ<ß2…Û4Åâ…ÇÅkb‹·¤/‹”w ¶ñ¦V˜™3»fÐÏ·ó²ÿ¬Y;ŽÕâíŽ ‹C”(U,Aõ ŠÅK]Ê“7Óú3*ÁÎy¨[Õ[†–…%~¢÷b\ÃG-ø„Øâ³Él‚_Âr¤Ý2R7kؘ%¹™ 6ë¤ñK(½ßÂF6Ùè5l–°ú6¬~è~‰Û‚ÝâõjžÓ7Cw回²¸ÈžòDµçrK´Ý´]íu"»%Ún Ú¶‰¶[ƒ¶]¢m×£G.þ?(‰». endstream endobj 264 0 obj << /Producer (pdfTeX-1.40.25) /Author()/Title()/Subject()/Creator(LaTeX with hyperref)/Keywords() /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian) kpathsea version 6.3.5) >> endobj 250 0 obj << /Type /ObjStm /N 24 /First 189 /Length 769 /Filter /FlateDecode >> stream xÚVÛjÜ0}߯ÐcRH×n!¡´´MK/O%nâ.†Í:ì:¥ýûÎÈ–‘eeSH°u4sΙymDQ ¬„¬¼PFHc…Ê  ?o mkeí RH¼pÂ8½Ba‰´N)º‘UH7.i)Á[ºÑB¢æ-V"9ÐVH§<ÝZ…L ‰Õ qJ†þéƒacžÒÉíèÕùùjý­í·@Me|Y­/q„»Ïõ¾ÙõçÇõ¾ùÍ5…ÅMó§‡Å›vèŽ[jZ¸jX\uOÄqæV©˜ŒbÊÍÅ\¢Eåñb–©ì”‰G2!q‰UFM4U‘&d– €™`ŽôIšÔÁ¬OÑ\èÎû¤2±i(0J¤fR(¦KWÌ Æ—™rê°Ä#bJãÒúF;C}£B¬2­i r>L”ÜÒã4SÊ ž$,Ó¦nÊraC¢I‹IÏôH¹¨å¦~hâÇÉuwwöµ¯÷ý)=¶Rœ¼ýÕuý®ë›×’P­rµ2G££H¨³ú®o¥ ”·d±}hûÌF »Í­œµ‡Gx dY§ (šx¬7CÊ@Å!"ãeî**NA Oaƒ=)б'LùÙ¦4760 ø°§üc™;Šz1¦lÈñ(ª„Ì30öäÐÜõm·{ús15G¸8=‡¨<°Eg$œD-ÌÅ-jf2Ô—AÔ’xrO?'‡ì±³Q¹À!”és·‰“ <03F7644AE5FB5A8D85A72D35DE676298>] /Length 655 /Filter /FlateDecode >> stream xÚ”»sMQ‡×ÚˆGDÿ&5¡äVñIKè¦  sÖ!Ž»UýR÷)šq«-)Ò!CŒzº·L-p2Ü­ù§R4 Œ2·¶FÕ0;xQ m k`]”»u}ÕÜ ì ì Ô‹*·¡uÑ1¤ž< Õn£ïÕEÂÀºu¸r ›-¢ÞmºN‹1'dI“ÛÂ;Õ0"0"0"ð ZÜWÔŃÀƒÀƒÀƒÀƒÀƒÀƒhs[z¨ÅxxxxínwçÔíp[YTÔéöᣢ.·ou»WþUTpo} ¨ÇýÑ‚¢^÷ç¯Ý߬*êsÿüVQ¿ûoW4à©pß<_æXÍ1\ž£Ô™cl9ÇÄ«SßsÌÖä˜ɱôLÏêÎ'==ùBšñO“qeW–qG¿ÕŒgÆmeÜVÆ]füƒd\TÆåeÕžÿÈ'?¶ÿ•礜 endstream endobj startxref 162637 %%EOF findent-4.3.2/doc/design/findent.tex.in0000644000000000000000000006037114566134066014713 0ustar00\documentclass[a4paper]{article} \pdfinfoomitdate 1 \pdftrailerid{findent design} \usepackage{color} \usepackage{hyperref} \hypersetup{ colorlinks, citecolor=black, filecolor=black, linkcolor=black, urlcolor=black } \usepackage{etoolbox} \makeatletter \preto{\@verbatim}{\topsep=10pt \partopsep=10pt } \makeatother \usepackage{upquote} % straight quotes in verbatim \renewcommand{\familydefault}{\sfdefault} % font sans \newcommand{\findent}{{\it{findent}}} \newcommand{\Findent}{{\it{Findent}}} \newcommand{\wfindent}{{\it{wfindent}}} \newcommand{\wFindent}{{\it{wFindent}}} \newcommand*{\thead}[1]{\multicolumn{1}{|c|}{\bfseries #1}} \hyphenation{wfindent} \hyphenation{Wfindent} \hyphenation{findent} \hyphenation{Findent} \begin{document} \frenchspacing \title{Findent: design} \author{Willem Vermin\thanks{Email: \href{mailto:contact@ratrabbit.nl}{contact@ratrabbit.nl}. Website: \href{https://ratrabbit.nl}{https://ratrabbit.nl}.}} \date{\input{date.tex}} \maketitle \begin{abstract} \noindent{} \Findent{} is a computer program to indent Fortran sources. \Findent{} can also be used to convert from fixed format to free format and {\it{vice versa}}. The program \findent{} became more complex than originally foreseen, that is why I wrote this document covering the inner workings of \findent{}. \end{abstract} \tableofcontents \section{\Findent{}: Design objectives} \subsection{Reliability} Assuming that \findent{} will be used in serious projects, involving large Fortran programs, the code of \findent{} should be as reliable as possible, therefore it is kept as simple as possible: \begin{itemize} \item \Findent{} handles only two files: standard input and standard output. The input contains the Fortran program to be handled, the output contains the modified program. \item The programming language is C++, a well maintained and documented language. \item No multithreading is used. \item Parsing the input is done with the aid of \verb|bison| and \verb|flex|: well known and maintained tools. \item \Findent{} mostly works on a line-by-line basis. (Exceptions: labelled \verb|DO|-loops require a simple administration, and relabelling needs the complete source of a program unit.) \item \Findent{} uses no configuration files: it is steered by command-line parameters and an environment variable containing command-line parameters. \item A comprehensive test-suite is part of the distribution. \end{itemize} \subsection{Usability} \Findent{} is easy to use, yet offers the possibility to tweak the indentation to the user's taste: \begin{itemize} \item All options have reasonable defaults, for example, usage can be as simple as: \begin{verbatim} findent < program.f90 > newprogram.f90 \end{verbatim} Furthermore, the \findent{} distribution comes with a wrapper script \wfindent{} that can be used like (to indent all .f90 files): \begin{verbatim} wfindent *.f90 \end{verbatim} Normally, \findent{} detects if the input in fixed or free form. \item All types of indentation (\verb|DO|, \verb|SUBROUTINE|, ...) can be specified on the command line, for example to use 5 spaces after \verb|DO|: \begin{verbatim} findent --indent-do=5 newprogram.f90 \end{verbatim} \item \Findent{} ignores white space outside strings and label fields. \item Fixed and free format Fortran are supported. \item Conversion from fixed to free form is implemented, as well as the other way around. \item All kinds of \verb|DO|-loops are recognized, even nested \verb|DO|-loops using the same label. \item \Findent{} has been tested on legacy Fortran sources, going back to Fortran IV. Hollerith's are parsed correctly. \item Unrecognized constructions are allowed and are written on the output as-is. Incomplete Fortran sources are handled gracefully. \item \Findent{} can relabel the Fortran source. The man page contains a warning: 'use this only on correct programs'. If \findent{} detects a problem (missing label definition; incomplete program unit; ...), relabelling is abandoned. \item High speed: \findent{} indents about 100.000 lines per second. \end{itemize} \section{Building \findent{}} \subsection{End users} Building \findent{} is easy and is based on standard tools: \begin{itemize} \item The distribution tar ball is based on \verb|autoconf|, a mature program suite to distribute program sources. \item The distribution tar ball contains the output files of \verb|flex| and \verb|bison|, so the user doesn't need to install these programs. (If they are installed, they will be used). \item On Linux \findent{} is built by unpacking the tar-ball, and issue the commands: \begin{verbatim} cd findent-xx.yy.zz ./configure make make check # to run the test-suite sudo make install \end{verbatim} \item For \verb|MacOS|, building \findent{} is the same as for Linux. \item A \verb|Windows| version can be obtained by the following: \begin{verbatim} a=i686-w64-mingw32 b=`gcc -dumpmachine` export CXX="$a-g++ -static" ./configure --build=$b --host=$a make clean make \end{verbatim} You need to have \verb|g++-mingw-w64-i686-win32| or something like that available. Probably, using \verb|WSL| or \verb|Cygwin| on \verb|Windows| should make it possible to do the build on the Windows system. \item If building as presented above does not succeed, the script \verb|simplemake.sh|, containing usage instructions, can be used. \end{itemize} \subsection{Program development and maintenance} The following is for developers and maintainers: \begin{itemize} \item The script \verb|bootstrap| runs \verb|autoreconf|, replaces the copyright statements in nearly all sources and generates the output of the \verb|flex| and \verb|bison|. This output will be contained in the distribution tar ball, generated with \begin{verbatim} make distcheck \end{verbatim} \item An esoteric option is \verb|--with-esope|. This causes \findent{} to recognize \verb|esope| constructs, see \url{http://www-cast3m.cea.fr/html/esope/esope.html}. \item In the files \verb|src/debug.h| and \verb|src/debug.cpp| macros and functions are defined to be used when debugging. There is comment in those files how to use them. \item \Findent{} comes with a comprehensive test suite, located in the directory \verb|test|. The tests will exercise every flag, and check if solved bugs are still solved. Testing is activated by running: \begin{verbatim} make check \end{verbatim} \end{itemize} \section{Usage} \subsection {Flags to influence the working of \findent{}} Options to \findent{} can be given on the command line, like: \begin{verbatim} findent -ifixed -ofree -i2 < prog.f > prog.f90 \end{verbatim} and/or in the environment variable FINDENT\_FLAGS, like: \begin{verbatim} export FINDENT_FLAGS='-i4 -I8' findent -ifixed -ofree < prog.f > prog.f90 \end{verbatim} Most flags relate to the format of the input file and output file. However, some options arrange that \findent{} does not output an indented Fortran source, but other information. These flags are marked in the man page with the string \verb|[NO_ENV]| and are ignored when present in the environment variable \verb|FINDENT_FLAGS|. Invalid flags, both on the command line and in the environment, are silently ignored\footnote{Since \findent{} only writes to standard output, error messages would clutter the indented Fortran program.}. Flags are read first from \verb|FINDENT_FLAGS| and secondly from the command line. \newline The flags are handled in the files \verb|src/flags.cpp| and \verb|src/flags.h|. See the man page for a description of the flags. \subsection{Generating documentation} \Findent{} can generate the following documentation: \begin{itemize} \item A text file ('help-file'), describing all flags. \item A man page, suitable for processing with the program \verb|man|. \item A text file, containing the ChangeLog. \item Text files, describing the usage in an editor. \item Text file describing how to use \findent{} in editor, for example \verb|vim|. \end{itemize} \subsection{Miscellaneous other functions} \begin{itemize} \item Print version of \findent{}. \item Print 'free' or 'fixed', depending on what \findent{} deduces from the input. \item Print dependency information, based on: \begin{itemize} \item Usage and definitions of modules. \item Usage of \verb|include files|. \end{itemize} \item Print a shell script to be used in combination with the dependencies. \item Print the amount of indentation of the last line read. \item Print the line number of the last usable line as a start for indenting. \item Print a report of defined and used labels. \item Print scripts to incorporate \findent{} in the editors \verb|Vim|, \verb|Emacs| or \verb|Gedit|. \end{itemize} \section{Detailed overview of the internals of \findent{}} \subsection{Starting the machinery} The main program is in \verb|findent.cpp|. The flags are read (\verb|get_flags()|), and if some kind of documentation has to be produced (\verb|docs.print()|), the program prints the documentation and returns. Otherwise, the class \verb|Findent| from \verb|findentclass.h| is instantiated as \verb|findent| and \verb|findent.run()| from \verb|findentrun.cpp| is called. \subsection{The main driver: fortran.run()} \verb|fortran.run| executes the following tasks (trivia are omitted here): \begin{itemize} \item If standard input is connected to a terminal, take appropriate actions. \item Read all of the input and store the lines in a buffer (\verb|input_buffer|). \item If the input format is not forced to be fixed or free, call \verb|determine_fix_or_free()| to determine the format. \item Instantiate \verb|class indent| to either \verb|Free| or \verb|Fixed| as appropriate. These are subclasses of class \verb|Fortran| in \verb|fortran.h| to define the free or fixed alternatives of certain functions. See \verb|free.cpp|, \verb|free.h|, \verb|fixed.cpp| and \verb|fixed.h|. \item Take actions if the user wants to relabel the input. \item Enter the indenting loop (trivia omitted here): \begin{itemize} \item Call \verb|get_full_statement()| to create full Fortran line \verb|full_statement| by collating the possible continuation lines to the first (see below). \item Call \verb|indent_and_output()| to determine the indentation and output the lines that define the full Fortran line. \end{itemize} \end{itemize} \subsection{Collecting a full Fortran statement} Collecting a full Fortran statement from the first line and continuation lines is done in \verb|src/fortran.cpp|: \verb|get_full_statement()|. This function looks surprisingly complex at first sight. This is because continuation lines can contain: \begin{itemize} \item comment lines, \item blank lines, \item \verb|cpp| or \verb|coco| preprocessor statements, \item \verb|findentfix| lines (see the man page). \end{itemize} Furthermore, attention must be paid if we are relabelling or not. The full Fortran statement is stored in \verb|full_statement|. \noindent{} In \verb|src/fortranline.cpp| and \verb|src/fortranline.h| functions are defined to handle lines with Fortran code. Care has been taken that for fixed format, a tab at the start of a line is handled properly (see \verb|do_clean()|). \noindent{} The call to \verb|build_statement()| has a different implementation for free and fixed format, see \verb|src/free.cpp| and \verb|src/fixed.cpp|, respectively. This function performs the following tasks: \begin{itemize} \item Add the input \verb|Fortranline| to \verb|c-lines| (a list of \verb|Fortranline|'s). \item Add the line, stripped from all non-fortran stuff to \verb|full_statement|. \item Signal if there are continuation lines to be expected. This is easy in the free-form case, but in the fixed-form case a look-ahead is necessary. See \verb|wizard()| in \verb|fixed.cpp|. \end{itemize} \subsection{Preprocessing the full Fortran statement} Once a \verb|full_statement| has been obtained, this line is preprocessed to make it suitable for parsing using \verb|flex| and \verb|bison|. This is done in \verb|Line_prep::set_line()|, in file \verb|src/line_prep.cpp|. An example may clarify this.\newline Below is: \begin{itemize} \item \textbf{s} - The full statement. \item \textbf{sl} - Spaces removed, except in strings and Hollerith's, and after the statement label. \item \textbf{sv} - Strings, Hollerith's, operators and statement label replaced by a space. \item \textbf{sc} - Strings etc. replaced by \verb|space number space|, the number is the index in \verb|sv|. (\verb|sc| is used for parsing with \verb|bison| and \verb|flex|.) \item \textbf{wv} - A list, length = \verb|sv.size()|. Each entry consists of a \verb|struct whats| (see \verb|line_prep.h|) which tells (\verb|type|) what this entry contains: \verb|invalid|, \verb|none|, \verb|string|, \verb|statement label| or \verb|operator|. In case of \verb|string| there is \verb|stringtype| which discriminates between Hollerith (\verb|h|), single quoted string (\verb|'|) or double quoted string (\verb|"|). The value of the entry is contained in \verb|value|. \end{itemize} \hrule \begin{verbatim} s: [123 call sub(5habcde , 5, 'f oo', 'ab c' .concat. "def")] sl: [123 callsub(5habcde,5,'f oo','ab c'.concat."def")] sv: [ callsub( ,5, , )] [0123456789012345678] ! these are index numbers in sv sc: [ 0 callsub( 9 ,5, 13 , 15 16 17 )] wv[0]: statement label [123] wv[9]: hollerith string [abcde] wv[13]: single quoted string [f oo] wv[15]: single quoted string [ab c] wv[16]: operator [concat] wv[17]: double quoted string [def] The other entries have type=none. \end{verbatim} \hrule \subsubsection{Parsing the preprocessed full statement} Parsing the preprocessed full statement is done using \verb|bison| and \verb|flex|. Things are arranged that one line at a time is parsed, see \verb|lexer_set(Line_prep p, const int state)| in \verb|lexer.l|. The string \verb|sc| (see above) is used for parsing. Parsing is initiated in \verb|indent_and_output()| in \verb|fortran.cpp| by a call to \verb|parseline()|. This function, returning a \verb|propstruct| (see \verb|prop.h|) containing the results, parses the full statement in two passes: \begin{itemize} \item The lexer is brought in a state that does not recognize Fortran keywords.\newline For example:\newline \verb| subroutinesub(x)=10|\newline will return kind=\verb|ASSIGNMENT|. \item If parsing does is not successful (kind = \verb|UNCLASSIFIED|), full statement is parsed again, but now the lexer is in a state to recognize relevant Fortran keywords.\newline For example: \newline \verb| subroutinesub(x)|\newline will succeed and returning kind=\verb|SUBROUTINE|. \end{itemize} \subsection{Keeping track of indents} In \verb|indent_and_output()| (\verb|fortran.cpp|), a stack is maintained containing the indents, along with the current index. The actions are in principle quite simple: if after parsing a relevant keyword is found (\verb|SUBROUTINE|, \verb|DO|, ...) the indent is changed as appropriate and put on the stack. If a kind of \verb|END| (\verb|ENDIF|, \verb|END SUBROUTINE|, ...) is found, the indent is pulled from the stack.\newline\newline Some constructs deserve extra attention: \begin{itemize} \item Labelled \verb|DO|-loops: if a labelled \verb|DO|-loop is encountered, the label involved is stored on a stack. When a corresponding statement label is encountered, appropriate action is taken, also in the case of nested \verb|DO|-loops sharing to the same label.\footnote{Shared DO-termination is flagged as a 'deleted feature' by gfortran.} \item \verb|MODULE PROCEDURE| statements: at encountering a \verb|MODULE PROCEDURE|, indentation if the next full statement is classified as an executable statement. \item An ambiguity: \newline \verb| MODULEPROCEDUREmyproc| \newline Should this be interpreted as: \newline \verb| MODULE PROCEDUREmyproc| \newline or: \newline \verb| MODULE PROCEDURE myproc| \newline \Findent{} assumes the last is correct.\footnote{This ambiguity arises from the fact that all spaces are removed in the preprocessing phase. In fixed format (where spaces do not count), this ambiguity is also present for the compiler.} \end{itemize} \subsection{Handling cpp and coco preprocessor statements} It was a design goal that \findent{} should handle macro's more or less intelligent.\newline \noindent{} For example: \newline\nopagebreak \begin{tabular}{|l|l|l|} \hline \thead{Input}&\thead{Desired}&\thead{Not desired}\\ %thead-textbf \hline \begin{minipage}{7em} \begin{verbatim} #ifdef DIM2 do y=1,ny #else do y=1,1 #endif do x=1,nx call s(x,y) enddo enddo \end{verbatim} \end{minipage} & \begin{minipage}{11em} \begin{verbatim} #ifdef DIM2 do y=1,ny #else do y=1,1 #endif do x=1,nx call s(x,y) enddo enddo \end{verbatim} \end{minipage}& \begin{minipage}{12em} \begin{verbatim} #ifdef DIM2 do y=1,ny #else do y=1,1 #endif do x=1,nx call s(x,y) enddo enddo \end{verbatim} \end{minipage} \\ \hline \end{tabular} \newline \noindent{} The following preprocessor statements (defined in \verb|lexer.l|) are recognized: \newline \begin{tabular}{|l|l|} \hline \thead{cpp}&\thead{coco}\\ % thead-textbf \hline \verb|# if| & \verb|?? if| \\ \verb|# endif| & \verb|?? endif| \\ \verb|# else| & \verb|?? else| \\ \verb|# elif| & \verb|?? elseif| \\ \verb|# include "..." |& \verb|?? include "..." | \\ \verb|# include <...> |& \verb|?? include <...> | \\ \hline \end{tabular} \newline\newline Note1: the rest of the preprocessing line is ignored, so, for example, \verb|#if| has the same effect as \verb|#ifdef|. \noindent{} Note2: the \verb|include's| are only used when generating dependencies, and are ignored when indenting. \newline \noindent{} Most of the preprocessor-handling code is reached via \verb|handle_pre()| in \verb|Fortran.cpp| and \verb|Pre_analyzer()| in \verb|pre_analyzer.cpp|.\newline The strategy is as follows: \begin{itemize} \item A stack is maintained to store the relevant items (e.g. the indentation level and the stack of indentations) (see \verb|push_all()|, \verb|top_all()| and \verb|pop_all()| in \verb|fortran.h|. \item The relevant items are pushed on this stack after \verb|#if|. \item The relevant items are popped off the stack if appropriate after \verb|#endif|, \verb|#else| and \verb|#elif|. \item Handling the preprocessor statements is done recursively. \item After a construct like \begin{verbatim} #if ... #endif \end{verbatim} the indentation continues from the state before the \verb|#if|, but after a construct like \begin{verbatim} #if ... #else #endif \end{verbatim} the indentation continues from the state after the \verb|#else|. \end{itemize} In this way, most of the times \findent{} will generate sensible indentation. If \findent{} makes an error, this can easily be fixed by inclusion of a \verb|findentfix| statement, for example (admittedly somewhat constructed):\newline\newline \begin{tabular}{|l|l|} \hline \thead{Original}&\thead{Corrected}\\ % thead-textbf \hline \begin{minipage}{10em} \begin{verbatim} program p #ifdef A do i=1,10 #else i = 1 #endif x = x+i #ifdef A enddo #endif end \end{verbatim} \end{minipage} & \begin{minipage}{11em} \begin{verbatim} program p #ifdef A do i=1,10 #else i = 1 #endif x = x+i #ifdef A !findentfix: do enddo #endif end \end{verbatim} \end{minipage} \\ \hline \end{tabular} \subsection{Relabelling} Relabelling (renumbering of labels) is done in the following stages: \begin{enumerate} \item Scan the input until a complete program unit (\verb|PROGRAM|, \verb|SUBROUTINE|, \verb|FUNCTION|) is obtained, collecting the defined and used labels. \item Regenerate the program unit, now with the renumbered labels. \item Indent and output the renumbered program unit. \item Go to step 1. \end{enumerate} \noindent{} If some error is detected, (not defined label, label spanning continuation lines, ...) relabelling is abandoned for the current and following program units, however, indentation proceeds as normal. If relabelling fails, one can run \findent{} with the flag \verb|--query-relabel|, to see the reason of failure. \subsection{Generate miscellaneous text files} Help files, man page, scripts for usage in editors {\it etc.} are generated in the file \verb|src/docs.cpp|. For generating the man page and the help-file, the function \verb|manout()| is used so that generating these files is based on the same input.\newline \noindent{}The other files are include files, generated from the original text files. For example: \verb|vim_fortran.inc| is generated from \verb|vim/fortran.vim|, using the script \verb|src/tocpp|. Details are available in the file \verb|src/Makefile.am|. \section{Self replication} \Findent{} has the capability to output a tar ball containing the complete source.\footnote{This can be disabled by giving the flag --disable-selfrep to configure.} The method used is to create an include file for \verb'src/selfrep.cpp' based on the output of \verb'make dist'. See \verb'src/Makefile.am' for details. An issue is to maintain a reproducible build (see \url{https://reproducible-builds.org/}), because the tar ball contains time stamps for the containing files. This problem is solved by modifying the standard code to produce a tar ball. Normally, the file \verb'bootdate', created by \verb'bootstrap' is used as time stamp. Most of the code is contained in \verb'configure.ac'. \section{Copyright} \Findent{} comes with the BSD-3 license:\newline \hrule \begin{center} \begin{verbatim} Copyright: 2015,2016,2017,2018,2019,2020,2021,2022,2023 Willem Vermin License: BSD-3-Clause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \end{verbatim} \end{center} \hrule \end{document} findent-4.3.2/emacs/0000755000000000000000000000000014566134066011200 5ustar00findent-4.3.2/emacs/Makefile.am0000644000000000000000000000322114566134066013232 0ustar00# -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. EXTRA_DIST = findent.el README findent-4.3.2/emacs/Makefile.in0000644000000000000000000003335714566134066013260 0ustar00# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = emacs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/m4_ax_prog_cc_for_build.m4 \ $(top_srcdir)/m4/m4_ax_prog_cxx_for_build.m4 \ $(top_srcdir)/m4/ax_prog_bison.m4 \ $(top_srcdir)/m4/ax_prog_flex.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_OBJEXT = @BUILD_OBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CPP_FOR_BUILD = @CPP_FOR_BUILD@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXCPPFLAGS_FOR_BUILD = @CXXCPPFLAGS_FOR_BUILD@ CXXCPP_FOR_BUILD = @CXXCPP_FOR_BUILD@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@ CXX_FOR_BUILD = @CXX_FOR_BUILD@ CYGPATH_W = @CYGPATH_W@ DATE = @DATE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CC_FOR_BUILD = @ac_ct_CC_FOR_BUILD@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_CXX_FOR_BUILD = @ac_ct_CXX_FOR_BUILD@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ make_include = @make_include@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. EXTRA_DIST = findent.el README all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu emacs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu emacs/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: findent-4.3.2/emacs/README0000644000000000000000000000135714566134066012066 0ustar00Usage of findent in emacs After following one of these two methods, the buffer is indented with Ctrl-Alt-q Method 1: - Put the output of findent --emacs_findent to the directory where you store your emacs scripts, for example: mkdir -p ~/.emacs.d/lisp && findent --emacs_findent > ~/.emacs.d/lisp/findent.el - Edit .emacs or .emacs.el or .emacs.d/init.el : - If not already done, add the following two lines to extend load-path : (add-to-list 'load-path (concat user-emacs-directory (convert-standard-filename "lisp/"))) - Add a command to load findent.el : (load "findent") Method 2: - Add the output of findent --emacs_findent to ~/.emacs ~/.emacs.el or ~/.emacs.d/init.el findent-4.3.2/emacs/findent.el0000644000000000000000000000460514566134066013156 0ustar00;;;; this file contains an interface to use findent within emacs. ;;;; the C-M-q command ("indent function") is redefined to ;;;; indent the whole buffer. ; how to call findent for a fixed format Fortran source: (defvar fortran-findent-command "findent -ifixed -Ia" "findent command for fixed format fortran source") ; ; how to call findent for a free format Fortran source: (defvar f90-findent-command "findent -ifree -Ia" "findent command for free format fortran source") ; ;;;; define function findent-indent-buffer: it calls the program ;;;; findent with the whole buffer as input and output (defun findent-indent-buffer() " Function that uses findent to indent the whole buffer. The call to findent must be provided in the string findent-command, for example (setq findent-command \"findent -ifixed -Ia\") Findent supports Fortran-2008, free and fixed format; indents correctly DO statements that share a common label; is in general not confused by #if, #ifdef or #else preprocessor statements. " (interactive) (let ( (lines (count-lines (point-min) (point-max))) (lpos (line-number-at-pos)) (first-window-line) (offset) (linelength) (pos (point)) ) ; this function tries to restore cursor and window ; position after indenting, hence the extra code. ; If somebody knows something better ... (beginning-of-line) (end-of-line) (skip-chars-backward "[:blank:]") (setq offset (- (point) pos)) (if (< offset 0) (setq offset 0)) (move-to-window-line 0) (setq first-window-line (line-number-at-pos)) (message "indenting buffer ..." ) (shell-command-on-region (point-min) (point-max) findent-command 1 1 ) (goto-line lpos) (redisplay) (move-to-window-line 0) (scroll-down (- (line-number-at-pos) first-window-line)) (goto-line lpos) (setq pos (point)) (end-of-line) (setq linelength (- (point) pos)) (if (< offset linelength) (backward-char offset) (beginning-of-line)) (message "indenting buffer ... %d lines indented" lines) ) ) ; (add-hook 'fortran-mode-hook (lambda() (setq findent-command fortran-findent-command))) (add-hook 'f90-mode-hook (lambda() (setq findent-command f90-findent-command))) (add-hook 'fortran-mode-hook (lambda() (local-set-key "\C-\M-q" 'findent-indent-buffer))) (add-hook 'f90-mode-hook (lambda() (local-set-key "\C-\M-q" 'findent-indent-buffer))) findent-4.3.2/gedit/0000755000000000000000000000000014566134066011204 5ustar00findent-4.3.2/gedit/Makefile.am0000644000000000000000000000325614566134066013246 0ustar00# -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. EXTRA_DIST = findent-gedit findent.plugin findent.py README findent-4.3.2/gedit/Makefile.in0000644000000000000000000003341414566134066013256 0ustar00# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = gedit ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/m4_ax_prog_cc_for_build.m4 \ $(top_srcdir)/m4/m4_ax_prog_cxx_for_build.m4 \ $(top_srcdir)/m4/ax_prog_bison.m4 \ $(top_srcdir)/m4/ax_prog_flex.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_OBJEXT = @BUILD_OBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CPP_FOR_BUILD = @CPP_FOR_BUILD@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXCPPFLAGS_FOR_BUILD = @CXXCPPFLAGS_FOR_BUILD@ CXXCPP_FOR_BUILD = @CXXCPP_FOR_BUILD@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@ CXX_FOR_BUILD = @CXX_FOR_BUILD@ CYGPATH_W = @CYGPATH_W@ DATE = @DATE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CC_FOR_BUILD = @ac_ct_CC_FOR_BUILD@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_CXX_FOR_BUILD = @ac_ct_CXX_FOR_BUILD@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ make_include = @make_include@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. EXTRA_DIST = findent-gedit findent.plugin findent.py README all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gedit/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gedit/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: findent-4.3.2/gedit/README0000644000000000000000000000431114566134066012063 0ustar00Usage of findent in gedit 1) as an external tool: Enter the following commands: ################################################# mkdir -p $HOME/bin findent --gedit_external > $HOME/bin/findent-gedit chmod +x $HOME/bin/findent-gedit ################################################# Make sure the $HOME/bin is in the PATH environment variable. Open gedit: ----------------------- (Edit ->) Preferences -> plugins : enable "External Tools" Close gedit and start it again. Tools -> Manage External Tools -> Add - rename "New Tool" into findent - put findent-gedit in the tool Shortcut Key: F11 (or something more to your liking) Save: Nothing Input: Current document Output: Replace current document Applicability: All documents Fortran 95 ----------------------- Alternatively, if all is well, it would be sufficient to place the command findent -Ia -i3 in the tool, but the script findent-gedit does some sanity checks to prevent "oops" experiences. 2) as plugin: Find the location of the directory where gedit expects the configuration files, we assume here $HOME/.local/share/gedit/plugins Enter the following commands: ################################################## geditroot=$HOME/.local/share/gedit/plugins mkdir -p $geditroot findent --gedit_plugin > $geditroot/findent.plugin findent --gedit_plugin_py > $geditroot/findent.py ################################################## in gedit: (Edit ->) Preferences -> plugins -> check: findent findent is available in popup menu (right-click) and shortcut i . You can change that in findent.py, look for the definition of 'shortcut'. Advantage of plugin over external tool: gedit scrolls back to point where you called findent. Flags for findent: Both the external command as the plugin pass the environment variable GEDIT_FINDENT_FLAGS to findent. Example: if you want general indentation set to 2 but indentation of do-loops set to 4, specify: export GEDIT_FINDENT_FLAGS="-i2 -d4" Use findent -h for a list of flags. findent-4.3.2/gedit/findent-gedit0000755000000000000000000000450614566134066013660 0ustar00#!/bin/sh # to be used in gedit to indent fortran source # in gedit: # Edit -> preferences -> enable "External Tools" # Tools -> Manage External Tools -> Add # - rename "New Tool" into findent # - put this file in the tool, or place a command # in the tool that starts this script # Shortcut Key: F1 (or something more to your liking) # Save: Nothing # Input: Current document # Output: Replace current document # Applicability: All documents Fortran 95 # flags="-Ia -i3" # flags for findent fin=`mktemp` fout=`mktemp` trap "rm $fin $fout" 0 # remove temps on exit restore() { cat $fin if [ "$lineadded" = "yes" ] ; then echo "empty line added" >&2 else echo "nothing changed" >&2 fi exit } cat > $fin # copy input to $fin # gedit version 2 has some troubles keeping stdout and # stderr separate when stdout does not end with newline. # add newline if input file does not end with newline: lastchar="$(tail -c1 $fin | od -a -An | tr -d ' ')" if [ "$lastchar" != "nl" ] ; then echo >> $fin lineadded=yes else lineadded=no fi if [ "$GEDIT_CURRENT_DOCUMENT_TYPE" != "text/x-fortran" ]; then echo "not a fortran file" >&2 restore fi FINDENT=`which /bin/ls 2>/dev/null` FINDENT=`which findent 2>/dev/null` if [ -z "$FINDENT" ] ; then echo "cannot find findent" 1>&2 restore fi fname="$GEDIT_CURRENT_DOCUMENT_NAME" # get the file name # get suffix in lowercase: suffix=`echo "${fname##*.}" | tr '[:upper:]' '[:lower:]'` # determine input type (fflag) from suffix: case "$suffix" in f|for|fpp|ftn|fortran|f77) fflag="-ifixed" ;; f90|f95|f03|f08) fflag="-ifree" ;; *) # let findent find out: fflag="" ;; esac findentflags="$flags $fflag" # run findent: $FINDENT $findentflags < $fin > $fout 2>/dev/null if [ $? -ne 0 ] ; then echo "findent reports error" >&2 echo "using \"$FINDENT $findentflags\"" >&2 restore fi # check if output has same number of lines as input: win=`wc -l < $fin` wout=`wc -l < $fout` if [ "$win" != "$wout" ] ; then echo "findent does not function properly" >&2 restore fi # produce the result echo $wout lines indented 1>&2 if [ "$lineadded" = "yes" ] ; then echo "empty line added" >&2 fi cat $fout findent-4.3.2/gedit/findent.plugin0000644000000000000000000000030514566134066014051 0ustar00[Plugin] Loader=python3 Module=findent IAge=3 Name=findent Description=Indent Fortran source Authors=Willem Vermin Copyright=Copyright @ 2017 Willem Vermin Website=http://www.gedit.org Version=0.1 findent-4.3.2/gedit/findent.py0000644000000000000000000002101514566134066013204 0ustar00# -*- coding: utf-8 -*- # Findent plugin # This file is part of gedit # # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from gi.repository import GObject, Gio, Gtk, Gedit import gettext import os.path from subprocess import Popen,PIPE try: gettext.bindtextdomain(GETTEXT_PACKAGE, GP_LOCALEDIR) _ = lambda s: gettext.dgettext(GETTEXT_PACKAGE, s) except: _ = lambda s: s class FindentAppActivatable(GObject.Object, Gedit.AppActivatable): app = GObject.Property(type=Gedit.App) def __init__(self): GObject.Object.__init__(self) global shortcut shortcut = "i" def do_activate(self): self.app.add_accelerator(shortcut, "win.findent", None) def do_deactivate(self): self.app.remove_accelerator("win.findent", None) class FindentWindowActivatable(GObject.Object, Gedit.WindowActivatable): window = GObject.Property(type=Gedit.Window) def __init__(self): GObject.Object.__init__(self) self.bottom_bar = Gtk.Box() def do_activate(self): action = Gio.SimpleAction(name="findent") action.connect('activate', lambda a, p: self.do_findent()) self.window.add_action(action) self._insert_bottom_panel() def do_deactivate(self): self.window.remove_action("findent") self._remove_bottom_panel() def do_update_state(self): view = self.window.get_active_view() enable = view is not None and view.get_editable() self.window.lookup_action("findent").set_enabled(enable) return def do_findent(self): view = self.window.get_active_view() if view and hasattr(view, "findent_view_activatable"): view.findent_view_activatable.do_findent() def _insert_bottom_panel(self): # Add elements to panel. self.findent_label = Gtk.Label() self.findent_textbuffer = Gtk.TextBuffer() global mesg mesg = self.findent_textbuffer self.findent_textview = Gtk.TextView() self.findent_textview.set_buffer(self.findent_textbuffer) self.bottom_bar.add(self.findent_textview) # Get bottom bar (A Gtk.Stack) and add our bar. panel = self.window.get_bottom_panel() panel.add_titled(self.bottom_bar, 'findent_panel', "Findent output") # Make sure everything shows up. panel.show() self.bottom_bar.show_all() panel.set_visible_child(self.bottom_bar) def _remove_bottom_panel(self): panel = self.window.get_bottom_panel() panel.remove(self.bottom_bar) def settext(self,text): self.findent_textbuffer.set_text(text) class FindentViewActivatable(GObject.Object, Gedit.ViewActivatable): view = GObject.Property(type=Gedit.View) def __init__(self): GObject.Object.__init__(self) self.default_flags = "-Ia -i3" self.executable = "findent" self.userflags = os.getenv("GEDIT_FINDENT_FLAGS") if self.userflags == None: self.userflags = "" def do_activate(self): self.view.findent_view_activatable = self self.view.connect('populate-popup', self.populate_popup) mesg.set_text("Findent ready for use."+ \ " Shortcut: "+shortcut+ \ " and in popup menu." + \ " Default flags: '" + self.default_flags + "'" + \ "\nflags from environment variable GEDIT_FINDENT_FLAGS: '" + self.userflags+"'") def do_deactivate(self): delattr(self.view, "findent_view_activatable") def populate_popup(self, view, popup): if not isinstance(popup, Gtk.MenuShell): return item = Gtk.SeparatorMenuItem() item.show() popup.append(item) item = Gtk.MenuItem.new_with_mnemonic(_('_Findent')) item.set_sensitive(self.view.get_editable()) item.show() item.connect('activate', lambda i: self.do_findent()) popup.append(item) def do_findent(self): doc = self.view.get_buffer() if doc is None: return ctype = doc.get_content_type() if ctype != "text/x-fortran": mesg.set_text("Content type is '"+ctype+"'" + \ ". Findent handles only 'text/x-fortran'") return # run a simple test to see if findent is doing what we expect srcin = "program test\ncontinue\nend program test" expected = "program test\n continue\nend program test\n" try: with Popen([self.executable,"-i3"], stdout=PIPE, stdin=PIPE) as proc: srcout = proc.communicate(str.encode(srcin))[0].decode() except OSError: mesg.set_text("Cannot find findent." + \ "\nTake care that the location of findent is in PATH" +\ "\nUsing '"+self.executable+"'") return if srcout != expected: mesg.set_text("Findent is not functioning as expected." +\ "\nTake care that the location of findent is in PATH" +\ "\nUsing '"+self.executable+"'") return xy = self.view.window_to_buffer_coords(Gtk.TextWindowType.TEXT,0,0) z = self.view.get_line_at_y(xy[1])[0] line = z.get_line() cline = doc.get_iter_at_mark(doc.get_insert()).get_line() srcin = doc.get_text(doc.get_start_iter(),doc.get_end_iter(),True) name = doc.get_short_name_for_display() suffix = os.path.splitext(name)[1].lower() if suffix in {".f",".for",".fpp",".ftn",".fortran",".f77"}: ff = "-ifixed" elif suffix in {".f90",".f95",".f03",".f08"}: ff = "-ifree" else: ff = "-iauto" flags = self.default_flags.split() + [ff] + self.userflags.split() try: with Popen([self.executable]+flags, stdout=PIPE, stdin=PIPE) as proc: srcout = proc.communicate(str.encode(srcin))[0].decode() except OSError: mesg.set_text("Cannot find findent." + \ "\nTake care that the location of findent is in PATH" +\ "\nUsing '"+self.executable+"'") return orig_lines = doc.get_line_count() doc.set_text(srcout) while Gtk.events_pending(): Gtk.main_iteration_do(False) hop = doc.get_iter_at_line(line) self.view.scroll_to_iter(hop,0,True,0,0) doc.goto_line(cline) lines = doc.get_line_count() s = "" for i in flags: s = s+" "+i mesg.set_text("flags used: "+s+" \n"+ \ str(lines)+" lines indented") if lines == orig_lines+1: mesg.insert_at_cursor(", empty line added") if lines != orig_lines and lines != orig_lines+1: mesg.insert_at_cursor("\nXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX") mesg.insert_at_cursor("\nXX MALFUNCTION DETECTED, UNDO TWICE! XX") mesg.insert_at_cursor("\nXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX") # ex:ts=4:et: findent-4.3.2/install-sh0000755000000000000000000003577614566134066012136 0ustar00#!/bin/sh # install - install a program, script, or datafile scriptversion=2020-11-14.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 # Create dirs (including intermediate dirs) using mode 755. # This is like GNU 'install' as of coreutils 8.32 (2020). mkdir_umask=22 backupsuffix= chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -p pass -p to $cpprog. -s $stripprog installed files. -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG By default, rm is invoked with -f; when overridden with RMPROG, it's up to you to specify -f if you want it. If -S is not specified, no backups are attempted. Email bug reports to bug-automake@gnu.org. Automake home page: https://www.gnu.org/software/automake/ " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -p) cpprog="$cpprog -p";; -s) stripcmd=$stripprog;; -S) backupsuffix="$2" shift;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? # Don't chown directories that already exist. if test $dstdir_status = 0; then chowncmd="" fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false # The $RANDOM variable is not portable (e.g., dash). Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap ' ret=$? rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null exit $ret ' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p'. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && { test -z "$stripcmd" || { # Create $dsttmp read-write so that cp doesn't create it read-only, # which would cause strip to fail. if test -z "$doit"; then : >"$dsttmp" # No need to fork-exec 'touch'. else $doit touch "$dsttmp" fi } } && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # If $backupsuffix is set, and the file being installed # already exists, attempt a backup. Don't worry if it fails, # e.g., if mv doesn't support -f. if test -n "$backupsuffix" && test -f "$dst"; then $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null fi # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: findent-4.3.2/m4/0000755000000000000000000000000014566134066010430 5ustar00findent-4.3.2/m4/ax_prog_bison.m40000644000000000000000000000527214566134066013531 0ustar00# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_prog_bison.html # =========================================================================== # # SYNOPSIS # # AX_PROG_BISON(ACTION-IF-TRUE,ACTION-IF-FALSE) # # DESCRIPTION # # Check whether bison is the parser generator. Run ACTION-IF-TRUE if # successful, ACTION-IF-FALSE otherwise # # LICENSE # # Copyright (c) 2009 Francesco Salvestrini # Copyright (c) 2010 Diego Elio Petteno` # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 9 AC_DEFUN([AX_PROG_BISON], [ AC_REQUIRE([AC_PROG_YACC]) AC_REQUIRE([AC_PROG_EGREP]) AC_CACHE_CHECK([if bison is the parser generator],[ax_cv_prog_bison],[ AS_IF([$YACC --version 2>/dev/null | $EGREP -q '^bison '], [ax_cv_prog_bison=yes], [ax_cv_prog_bison=no]) ]) AS_IF([test "$ax_cv_prog_bison" = "yes"], [ dnl replace the yacc-compatible compiler with the real bison, as dnl otherwise autoconf limits us to the POSIX yacc. dnl We also change the generated filename to the old one, so that dnl automake's ylwrap can deal with it. YACC="${YACC% -y} -o y.tab.c" ] m4_ifnblank([$1], [[$1]]), m4_ifnblank([$2], [[$2]]) ) ]) findent-4.3.2/m4/ax_prog_flex.m40000644000000000000000000000462214566134066013353 0ustar00# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_prog_flex.html # =========================================================================== # # SYNOPSIS # # AX_PROG_FLEX(ACTION-IF-TRUE,ACTION-IF-FALSE) # # DESCRIPTION # # Check whether flex is the scanner generator. Run ACTION-IF-TRUE if # successful, ACTION-IF-FALSE otherwise # # LICENSE # # Copyright (c) 2009 Francesco Salvestrini # Copyright (c) 2010 Diego Elio Petteno` # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 12 AC_DEFUN([AX_PROG_FLEX], [ AC_REQUIRE([AM_PROG_LEX]) AC_REQUIRE([AC_PROG_EGREP]) AC_CACHE_CHECK([if flex is the lexer generator],[ax_cv_prog_flex],[ AS_IF([$LEX --version 2>/dev/null | $EGREP -qw '^g?flex'], [ax_cv_prog_flex=yes], [ax_cv_prog_flex=no]) ]) AS_IF([test "$ax_cv_prog_flex" = "yes"], m4_ifnblank([$1], [[$1]]), m4_ifnblank([$2], [[$2]]) ) ]) findent-4.3.2/m4/m4_ax_prog_cc_for_build.m40000644000000000000000000001233714566134066015431 0ustar00# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_prog_cc_for_build.html # =========================================================================== # # SYNOPSIS # # AX_PROG_CC_FOR_BUILD # # DESCRIPTION # # This macro searches for a C compiler that generates native executables, # that is a C compiler that surely is not a cross-compiler. This can be # useful if you have to generate source code at compile-time like for # example GCC does. # # The macro sets the CC_FOR_BUILD and CPP_FOR_BUILD macros to anything # needed to compile or link (CC_FOR_BUILD) and preprocess (CPP_FOR_BUILD). # The value of these variables can be overridden by the user by specifying # a compiler with an environment variable (like you do for standard CC). # # It also sets BUILD_EXEEXT and BUILD_OBJEXT to the executable and object # file extensions for the build platform, and GCC_FOR_BUILD to `yes' if # the compiler we found is GCC. All these variables but GCC_FOR_BUILD are # substituted in the Makefile. # # LICENSE # # Copyright (c) 2008 Paolo Bonzini # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 21 AU_ALIAS([AC_PROG_CC_FOR_BUILD], [AX_PROG_CC_FOR_BUILD]) AC_DEFUN([AX_PROG_CC_FOR_BUILD], [dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_CPP])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl dnl Use the standard macros, but make them use other variable names dnl pushdef([ac_cv_prog_CPP], ac_cv_build_prog_CPP)dnl pushdef([ac_cv_prog_cc_c89], ac_cv_build_prog_cc_c89)dnl pushdef([ac_cv_prog_cc_c99], ac_cv_build_prog_cc_c99)dnl pushdef([ac_cv_prog_cc_c11], ac_cv_build_prog_cc_c11)dnl pushdef([ac_cv_prog_gcc], ac_cv_build_prog_gcc)dnl pushdef([ac_cv_prog_cc_works], ac_cv_build_prog_cc_works)dnl pushdef([ac_cv_prog_cc_cross], ac_cv_build_prog_cc_cross)dnl pushdef([ac_cv_prog_cc_g], ac_cv_build_prog_cc_g)dnl pushdef([ac_cv_c_compiler_gnu], ac_cv_build_c_compiler_gnu)dnl pushdef([ac_cv_exeext], ac_cv_build_exeext)dnl pushdef([ac_cv_objext], ac_cv_build_objext)dnl pushdef([ac_exeext], ac_build_exeext)dnl pushdef([ac_objext], ac_build_objext)dnl pushdef([CC], CC_FOR_BUILD)dnl pushdef([CPP], CPP_FOR_BUILD)dnl pushdef([GCC], GCC_FOR_BUILD)dnl pushdef([CFLAGS], CFLAGS_FOR_BUILD)dnl pushdef([CPPFLAGS], CPPFLAGS_FOR_BUILD)dnl pushdef([EXEEXT], BUILD_EXEEXT)dnl pushdef([LDFLAGS], LDFLAGS_FOR_BUILD)dnl pushdef([OBJEXT], BUILD_OBJEXT)dnl pushdef([host], build)dnl pushdef([host_alias], build_alias)dnl pushdef([host_cpu], build_cpu)dnl pushdef([host_vendor], build_vendor)dnl pushdef([host_os], build_os)dnl pushdef([ac_cv_host], ac_cv_build)dnl pushdef([ac_cv_host_alias], ac_cv_build_alias)dnl pushdef([ac_cv_host_cpu], ac_cv_build_cpu)dnl pushdef([ac_cv_host_vendor], ac_cv_build_vendor)dnl pushdef([ac_cv_host_os], ac_cv_build_os)dnl pushdef([ac_tool_prefix], ac_build_tool_prefix)dnl pushdef([am_cv_CC_dependencies_compiler_type], am_cv_build_CC_dependencies_compiler_type)dnl pushdef([am_cv_prog_cc_c_o], am_cv_build_prog_cc_c_o)dnl pushdef([cross_compiling], cross_compiling_build)dnl cross_compiling_build=no ac_build_tool_prefix= AS_IF([test -n "$build"], [ac_build_tool_prefix="$build-"], [test -n "$build_alias"],[ac_build_tool_prefix="$build_alias-"]) AC_LANG_PUSH([C]) dnl The pushdef([ac_cv_c_compiler_gnu], ...) currently does not cover dnl the use of this variable in _AC_LANG_COMPILER_GNU called by dnl AC_PROG_CC. Unset this cache variable temporarily as a workaround. was_set_c_compiler_gnu=${[ac_cv_c_compiler_gnu]+y} AS_IF([test ${was_set_c_compiler_gnu}], [saved_c_compiler_gnu=$[ac_cv_c_compiler_gnu] AS_UNSET([[ac_cv_c_compiler_gnu]])]) AC_PROG_CC dnl Restore ac_cv_c_compiler_gnu AS_IF([test ${was_set_c_compiler_gnu}], [[ac_cv_c_compiler_gnu]=$[saved_c_compiler_gnu]]) _AC_COMPILER_EXEEXT _AC_COMPILER_OBJEXT AC_PROG_CPP dnl Restore the old definitions dnl popdef([cross_compiling])dnl popdef([am_cv_prog_cc_c_o])dnl popdef([am_cv_CC_dependencies_compiler_type])dnl popdef([ac_tool_prefix])dnl popdef([ac_cv_host_os])dnl popdef([ac_cv_host_vendor])dnl popdef([ac_cv_host_cpu])dnl popdef([ac_cv_host_alias])dnl popdef([ac_cv_host])dnl popdef([host_os])dnl popdef([host_vendor])dnl popdef([host_cpu])dnl popdef([host_alias])dnl popdef([host])dnl popdef([OBJEXT])dnl popdef([LDFLAGS])dnl popdef([EXEEXT])dnl popdef([CPPFLAGS])dnl popdef([CFLAGS])dnl popdef([GCC])dnl popdef([CPP])dnl popdef([CC])dnl popdef([ac_objext])dnl popdef([ac_exeext])dnl popdef([ac_cv_objext])dnl popdef([ac_cv_exeext])dnl popdef([ac_cv_c_compiler_gnu])dnl popdef([ac_cv_prog_cc_g])dnl popdef([ac_cv_prog_cc_cross])dnl popdef([ac_cv_prog_cc_works])dnl popdef([ac_cv_prog_cc_c89])dnl popdef([ac_cv_prog_gcc])dnl popdef([ac_cv_prog_CPP])dnl dnl restore global variables ac_ext, ac_cpp, ac_compile, dnl ac_link, ac_compiler_gnu (dependant on the current dnl language after popping): AC_LANG_POP([C]) dnl Finally, set Makefile variables dnl AC_SUBST(BUILD_EXEEXT)dnl AC_SUBST(BUILD_OBJEXT)dnl AC_SUBST([CFLAGS_FOR_BUILD])dnl AC_SUBST([CPPFLAGS_FOR_BUILD])dnl AC_SUBST([LDFLAGS_FOR_BUILD])dnl ]) findent-4.3.2/m4/m4_ax_prog_cxx_for_build.m40000644000000000000000000000736414566134066015652 0ustar00# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_prog_cxx_for_build.html # =========================================================================== # # SYNOPSIS # # AX_PROG_CXX_FOR_BUILD # # DESCRIPTION # # This macro searches for a C++ compiler that generates native # executables, that is a C++ compiler that surely is not a cross-compiler. # This can be useful if you have to generate source code at compile-time # like for example GCC does. # # The macro sets the CXX_FOR_BUILD and CXXCPP_FOR_BUILD macros to anything # needed to compile or link (CXX_FOR_BUILD) and preprocess # (CXXCPP_FOR_BUILD). The value of these variables can be overridden by # the user by specifying a compiler with an environment variable (like you # do for standard CXX). # # LICENSE # # Copyright (c) 2008 Paolo Bonzini # Copyright (c) 2012 Avionic Design GmbH # # Based on the AX_PROG_CC_FOR_BUILD macro by Paolo Bonzini. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 4 AU_ALIAS([AC_PROG_CXX_FOR_BUILD], [AX_PROG_CXX_FOR_BUILD]) AC_DEFUN([AX_PROG_CXX_FOR_BUILD], [dnl AC_REQUIRE([AX_PROG_CC_FOR_BUILD])dnl AC_REQUIRE([AC_PROG_CXX])dnl AC_REQUIRE([AC_PROG_CXXCPP])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl dnl Use the standard macros, but make them use other variable names dnl pushdef([ac_cv_prog_CXXCPP], ac_cv_build_prog_CXXCPP)dnl pushdef([ac_cv_prog_gxx], ac_cv_build_prog_gxx)dnl pushdef([ac_cv_prog_cxx_works], ac_cv_build_prog_cxx_works)dnl pushdef([ac_cv_prog_cxx_cross], ac_cv_build_prog_cxx_cross)dnl pushdef([ac_cv_prog_cxx_g], ac_cv_build_prog_cxx_g)dnl pushdef([CXX], CXX_FOR_BUILD)dnl pushdef([CXXCPP], CXXCPP_FOR_BUILD)dnl pushdef([GXX], GXX_FOR_BUILD)dnl pushdef([CXXFLAGS], CXXFLAGS_FOR_BUILD)dnl pushdef([CPPFLAGS], CPPFLAGS_FOR_BUILD)dnl pushdef([CXXCPPFLAGS], CXXCPPFLAGS_FOR_BUILD)dnl pushdef([host], build)dnl pushdef([host_alias], build_alias)dnl pushdef([host_cpu], build_cpu)dnl pushdef([host_vendor], build_vendor)dnl pushdef([host_os], build_os)dnl pushdef([ac_cv_host], ac_cv_build)dnl pushdef([ac_cv_host_alias], ac_cv_build_alias)dnl pushdef([ac_cv_host_cpu], ac_cv_build_cpu)dnl pushdef([ac_cv_host_vendor], ac_cv_build_vendor)dnl pushdef([ac_cv_host_os], ac_cv_build_os)dnl pushdef([ac_tool_prefix], ac_build_tool_prefix)dnl pushdef([am_cv_CXX_dependencies_compiler_type], am_cv_build_CXX_dependencies_compiler_type)dnl pushdef([cross_compiling], cross_compiling_build)dnl cross_compiling_build=no ac_build_tool_prefix= AS_IF([test -n "$build"], [ac_build_tool_prefix="$build-"], [test -n "$build_alias"],[ac_build_tool_prefix="$build_alias-"]) AC_LANG_PUSH([C++]) AC_PROG_CXX AC_PROG_CXXCPP dnl Restore the old definitions dnl popdef([cross_compiling])dnl popdef([am_cv_CXX_dependencies_compiler_type])dnl popdef([ac_tool_prefix])dnl popdef([ac_cv_host_os])dnl popdef([ac_cv_host_vendor])dnl popdef([ac_cv_host_cpu])dnl popdef([ac_cv_host_alias])dnl popdef([ac_cv_host])dnl popdef([host_os])dnl popdef([host_vendor])dnl popdef([host_cpu])dnl popdef([host_alias])dnl popdef([host])dnl popdef([CXXCPPFLAGS])dnl popdef([CPPFLAGS])dnl popdef([CXXFLAGS])dnl popdef([CXXCPP])dnl popdef([CXX])dnl popdef([ac_cv_prog_cxx_g])dnl popdef([ac_cv_prog_cxx_cross])dnl popdef([ac_cv_prog_cxx_works])dnl popdef([ac_cv_prog_gxx])dnl popdef([ac_cv_prog_CXXCPP])dnl dnl restore global variables (dependant on the current dnl language after popping): AC_LANG_POP([C++]) dnl Finally, set Makefile variables dnl AC_SUBST([CXXFLAGS_FOR_BUILD])dnl AC_SUBST([CXXCPPFLAGS_FOR_BUILD])dnl ]) findent-4.3.2/missing0000755000000000000000000001533614566134066011517 0ustar00#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1996-2021 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=https://www.perl.org/ flex_URL=https://github.com/westes/flex gnu_software_URL=https://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: findent-4.3.2/scripts/0000755000000000000000000000000014566134066011577 5ustar00findent-4.3.2/scripts/Makefile.am0000644000000000000000000000352014566134066013633 0ustar00# -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. bin_SCRIPTS = wfindent man1_MANS = wfindent.1 CLEANFILES = wfindent wfindent: wfindent.tmpl $(SED) 's|findent-location|"$(bindir)/findent"|' $? > $@ chmod a+rx $@ EXTRA_DIST = wfindent.tmpl wfindent.1 wfindent.bat findent-4.3.2/scripts/Makefile.in0000644000000000000000000004475614566134066013664 0ustar00# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = scripts ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/m4_ax_prog_cc_for_build.m4 \ $(top_srcdir)/m4/m4_ax_prog_cxx_for_build.m4 \ $(top_srcdir)/m4/ax_prog_bison.m4 \ $(top_srcdir)/m4/ax_prog_flex.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" SCRIPTS = $(bin_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man1_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_OBJEXT = @BUILD_OBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CPP_FOR_BUILD = @CPP_FOR_BUILD@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXCPPFLAGS_FOR_BUILD = @CXXCPPFLAGS_FOR_BUILD@ CXXCPP_FOR_BUILD = @CXXCPP_FOR_BUILD@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@ CXX_FOR_BUILD = @CXX_FOR_BUILD@ CYGPATH_W = @CYGPATH_W@ DATE = @DATE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CC_FOR_BUILD = @ac_ct_CC_FOR_BUILD@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_CXX_FOR_BUILD = @ac_ct_CXX_FOR_BUILD@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ make_include = @make_include@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. bin_SCRIPTS = wfindent man1_MANS = wfindent.1 CLEANFILES = wfindent EXTRA_DIST = wfindent.tmpl wfindent.1 wfindent.bat all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu scripts/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu scripts/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) install-man1: $(man1_MANS) @$(NORMAL_INSTALL) @list1='$(man1_MANS)'; \ list2=''; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(SCRIPTS) $(MANS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binSCRIPTS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binSCRIPTS uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-binSCRIPTS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-binSCRIPTS uninstall-man uninstall-man1 .PRECIOUS: Makefile wfindent: wfindent.tmpl $(SED) 's|findent-location|"$(bindir)/findent"|' $? > $@ chmod a+rx $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: findent-4.3.2/scripts/wfindent.10000644000000000000000000000211614566134066013477 0ustar00.TH WFINDENT "1" "2021" "wfindent" "User Commands" .SH NAME wfindent \- Indents, converts and relabels Fortran program sources .SH SYNOPSIS .B wfindent [\fIOPTION\fR]... [\-\fR] [\fIFILE\fR]... .SH DESCRIPTION Wfindent is a wrapper for findent(1), calling findent for each of the files. The files are overwritten by the modified version. A sanity check is made before overwriting an input file. Files that are not regular and readable and writable are silently skipped. .SH NOTE The end of the options is reached when a flag containing a '.' (e.g. 'prog.f90') is found, or when the flag '-' is found. .PP See 'man 1 findent' or 'findent -h' for the options. Only options that create a (probably modified) version of the input are effective. .SH ENVIRONMENT The environment variable FINDENT influences the working of wfindent. If set, wfindent will use this as the location of findent. .br .PP .SS .SH EXAMPLE: wfindent \-i4 *.f90 .SH COPYRIGHT .br This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. findent-4.3.2/scripts/wfindent.bat0000644000000000000000000000207114566134066014105 0ustar00@echo off setlocal EnableDelayedExpansion EnableExtensions set t=%* set flags=--safe :loop for /f "tokens=1*" %%a in ("%t%") do ( set files=%t% set t=%%b echo.%%a | find ".">Nul && ( goto :b ) if "%%a" == "-" ( goto :b ) set flags=%flags% %%a ) if defined t goto :loop :b call :GETTEMPNAME set tmpf1="%TEMP%.\%FILENAME%_f" set tmpc1="%TEMP%.\%FILENAME%_c1" set tmpc2="%TEMP%.\%FILENAME%_c2" for %%a in (%files%) do ( if "%%a" NEQ "-" ( if exist %%a ( echo.indenting %flags% %%a findent %flags% < %%a > %tmpf1% find /v /c "" < %%a > %tmpc1% find /v /c "" < %tmpf1% > %tmpc2% set /p counter1=<%tmpc1% set /p counter2=<%tmpc2% if !counter1! neq !counter2! ( echo something wrong, file '%%a' unmodified ) else ( copy /Y %tmpf1% %%a >nul ) if exist %tmpf1% del %tmpf1% if exist %tmpc1% del %tmpc1% if exist %tmpc2% del %tmpc2% ) else ( echo.warning: cannot find file '%%a' ) ) ) :GETTEMPNAME for /f "delims=:. tokens=1-4" %%t in ("%TIME: =0%") do ( set FILENAME=wf-%%t%%u%%v%%w ) findent-4.3.2/scripts/wfindent.tmpl0000755000000000000000000001113714566134066014321 0ustar00#!/bin/sh # vim: filetype=sh # # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # in-place indenting of fortran sources using findent # example: # wfindent -i4 *.f90 # # A check is made if the output file has the same number of lines # as the input file. # If this check succeeds, the file is overwritten, # otherwize an error message is printed. # the location of findent, replace with correct location: FINDENT=${FINDENT:-findent-location} if ! "$FINDENT" -v >/dev/null 2>&1 ; then FINDENT="findent" # try if findent is in PATH if ! "$FINDENT" -v >/dev/null 2>&1 ; then echo "$0: findent not found, exiting" exit 1 fi fi # generate help for wfindent: # :r !MANWIDTH=72 man -l -7 --nh --nj scripts/wfindent.1 if [ "$1" = "-h" -o "$1" = "--help" ]; then cat << eof WFINDENT(1) User Commands WFINDENT(1) NAME wfindent - Indents, converts and relabels Fortran program sources SYNOPSIS wfindent [OPTION]... [-] [FILE]... DESCRIPTION Wfindent is a wrapper for findent(1), calling findent for each of the files. The files are overwritten by the modified version. A sanity check is made before overwriting an input file. Files that are not regular and readable and writable are silently skipped. NOTE The end of the options is reached when a flag containing a '.' is found, or when the flag '-' is found. See 'man 1 findent' or 'findent -h' for the options. Only options that create a (possibly modified) version of the input are effective. ENVIRONMENT The environment variable FINDENT influences the working of wfindent. If set, wfindent will use this as the location of findent. EXAMPLE: wfindent -i4 *.f90 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. wfindent 2021 WFINDENT(1) eof exit fi echo "$0 using: "`"$FINDENT" -v` # to collect the flags for findent, # scan flags until aflag, containing a '.' is found # or until "-" is found, this signifies that the rest of # the parameters are file names fflags="" while [ "$1" ] ; do case "$1" in *.*) break ;; esac if [ "$1" = "-" ] ; then shift break fi fflags="$fflags $1" shift done tmp=`mktemp` n=0 while [ "$1" ] ; do if [ -f "$1" -a -r "$1" -a -w "$1" ] ; then norig=`wc -l < "$1"` # Check if file ends with newline. If not: correct number of lines lastchar="$(tail -c1 "$1" | od -a -An | tr -d ' ')" if [ "$lastchar" != "nl" ] ; then norig=`expr $norig + 1` fi cat "$1" | "$FINDENT" --safe $fflags > $tmp nnew=`wc -l < $tmp` if [ $norig -eq $nnew ] ; then cp $tmp "$1" n=`expr $n + 1` else echo "***** wfindent: error while converting $1, conversion abandoned" fi fi shift done echo "wfindent: indented files: $n" rm $tmp findent-4.3.2/simplemake.sh0000755000000000000000000001055014566134066012577 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # this script tries to compile findent, without using the # configure ; make ; make install # suite. # # definitions: CPP='g++' # C++ compiler CPPFLAGS='-O2' # compile flags EXE='findent' # name of program to create # echo "C++ compiler: $CPP" echo "compile flags: $CPPFLAGS" echo "program: $EXE" SRCS=" debug.cpp docs.cpp findentclass.cpp findent.cpp findentrun.cpp fixed.cpp flags.cpp fortran.cpp fortranline.cpp free.cpp functions.cpp globals.cpp line_prep.cpp mylexer.cpp myparser.cpp pre_analyzer.cpp prop.cpp relabel.cpp simpleostream.cpp " echo "creating include files ..." echo vim_help.inc src/tocpp.sh < vim/README > src/vim_help.inc || exit 1 echo vim_findent.inc src/tocpp.sh < vim/findent.vim > src/vim_findent.inc || exit 1 echo vim_fortran.inc src/tocpp.sh < vim/fortran.vim > src/vim_fortran.inc || exit 1 echo gedit_help.inc src/tocpp.sh < gedit/README > src/gedit_help.inc || exit 1 echo gedit_external.inc src/tocpp.sh < gedit/findent-gedit > src/gedit_external.inc || exit 1 echo gedit_plugin.inc src/tocpp.sh < gedit/findent.plugin > src/gedit_plugin.inc || exit 1 echo gedit_plugin_py.inc src/tocpp.sh < gedit/findent.py > src/gedit_plugin_py.inc || exit 1 echo emacs_help.inc src/tocpp.sh < emacs/README > src/emacs_help.inc || exit 1 echo emacs_findent.inc src/tocpp.sh < emacs/findent.el > src/emacs_findent.inc || exit 1 echo readme.inc src/tocpp.sh < doc/README > src/readme.inc || exit 1 echo makefdeps.inc src/tocpp.sh < deps/makefdeps > src/makefdeps.inc || exit 1 echo changelog.inc src/tocpp.sh < ChangeLog > src/changelog.inc || exit 1 echo "compiling, this can take some time ..." cd src || exit 1 cp builtparser.hpp parser.hpp || exit 1 cp builtparser.cpp parser.cpp || exit 1 cp builtlexer.cpp lexer.cpp || exit 1 $CPP $CPPFLAGS -o $EXE $SRCS || exit 1 cd .. cp src/$EXE . || exit 1 echo "succesfully created: $EXE" echo "copy this file to the desired directory, for example" echo " cp $EXE \$HOME/bin" echo "or" echo " cp $EXE \$HOME/.local/bin" echo "or" echo " cp $EXE /usr/local/bin" echo echo "The man page can be obtained by running:" echo " findent --manpage > findent.1" echo "copy the man page to a suitable location, for example:" echo " cp findent.1 /usr/local/share/man/man1/findent.1" echo echo "To install wfindent:" echo " Edit the file scripts/wfindent.tmpl" echo " Replace the string 'findent-location' (around line 43)" echo " by the location of findent, e.g. '/usr/local/bin/findent'" echo " Copy scripts/wfindent.tmpl to the desired directory, for example" echo " cp scripts/wfindent.tmpl /usr/local/bin/wfindent" echo "To install the man page of wfindent:" echo " cp scripts/wfindent.1 /usr/local/share/man/man1/wfindent.1" echo findent-4.3.2/src/0000755000000000000000000000000014566134066010677 5ustar00findent-4.3.2/src/Makefile.am0000644000000000000000000002005514566134066012735 0ustar00# -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. AUTOMAKE_OPTIONS = std-options # checks if installed program runs with --help and --version AM_LDFLAGS = BUILT_SOURCES = # for selfrep: tarfile = $(top_builddir)/$(PACKAGE_TARNAME)-$(VERSION).tar.gz if MAKESELFREP tarfile.inc: $(MAKE) -C $(top_builddir) dist || echo "No tarfile available during build." > $(tarfile) @echo "Converting tarfile:" ls -l $(tarfile) export CC="$(CC)"; export CFLAGS="$(CFLAGS)"; $(TOASCII) < $(tarfile) > $@ else tarfile.inc: echo "No selfrep compiled in" | $(TOASCII) > $@ endif #end for selfrep AM_CXXFLAGS = -fPIC if USEESOPE AM_CXXFLAGS += -DUSEESOPE endif if MAKESELFREP AM_CXXFLAGS += -DSELFREP endif if USEBISON parser.hpp parser.cpp: $(top_srcdir)/src/parser.y $(YACC) -o parser.cpp -d $(top_srcdir)/src/parser.y if test -f parser.cpp.h ; then mv parser.cpp.h parser.hpp ; fi if test -f parser.h ; then mv parser.h parser.hpp ; fi builtparser: parser.cpp mv parser.cpp builtparser.cpp mv parser.hpp builtparser.hpp else parser.cpp: builtparser.cpp @echo "" @echo "********************************************************" @echo "*** At configuration time, bison (or yacc) was not ***" @echo "*** available, or it was specified not to use bison. ***" @echo "*** I will use the pre-built parser. ***" @echo "********************************************************" cp builtparser.cpp $@ parser.hpp: builtparser.hpp cp builtparser.hpp $@ endif if USEFLEX mylexer.$(OBJEXT): lexer.cpp lexer.cpp: lexer.l parser.hpp $(LEX) -i -o lexer.cpp $(top_srcdir)/src/lexer.l builtlexer: lexer.cpp mv lexer.cpp builtlexer.cpp else lexer.cpp: builtlexer.cpp @echo "" @echo "*******************************************************" @echo "*** At configuration time, flex (or lex) was not ***" @echo "*** available, or it was specified not to use flex. ***" @echo "*** I will use the pre-built lexer. ***" @echo "*******************************************************" cp builtlexer.cpp $@ endif MOSTLYCLEANFILES = CLEANFILES = findent findent.exe findent.1 \ parser.cpp.h parser.hpp parser_report.txt \ parser.cpp lexer.cpp env.sh \ $(INCS) MAINTAINERCLEANFILES = builtparser.cpp builtparser.hpp builtlexer.cpp man1_MANS = findent.1 #findent.1: findent # : | ./findent -H > $@ || : | findent -H > $@ || echo "Could not generate man page" > $@ findent.1: makeman$(EXEEXT) ./makeman$(EXEEXT) > $@ findent.$(OBJEXT): parser.hpp vim_plugin.$(OBJEXT): vim_fortran.inc vim_findent.inc vim_help.inc gedit_plugin.$(OBJEXT): gedit_external.inc gedit_plugin.inc gedit_plugin_py.inc \ gedit_help.inc emacs_plugin.$(OBJEXT): emacs_findent.inc emacs_help.inc readme_plugin.$(OBJEXT): readme.inc docs.$(OBJEXT): vim_fortran.inc vim_findent.inc vim_help.inc \ gedit_external.inc gedit_plugin.inc gedit_plugin_py.inc gedit_help.inc \ emacs_findent.inc emacs_help.inc \ readme.inc makefdeps.inc changelog.inc selfrep.$(OBJEXT): tarfile.inc DEPSDIR = $(top_srcdir)/deps EMACSDIR = $(top_srcdir)/emacs GEDITDIR = $(top_srcdir)/gedit READMEDIR = $(top_srcdir)/doc TOCPP = $(top_srcdir)/src/tocpp.sh TOASCII = env CC="$(CC_FOR_BUILD)" CFLAGS="$(CFLAGS_FOR_BUILD)" $(top_srcdir)/src/toascii.sh VIMDIR = $(top_srcdir)/vim vim_fortran.inc: $(VIMDIR)/fortran.vim $(TOCPP) $(TOCPP) < $(VIMDIR)/fortran.vim > $@ vim_findent.inc: $(VIMDIR)/findent.vim $(TOCPP) $(TOCPP) < $(VIMDIR)/findent.vim > $@ vim_help.inc: $(VIMDIR)/README $(TOCPP) $(TOCPP) < $(VIMDIR)/README > $@ gedit_external.inc: $(GEDITDIR)/findent-gedit $(TOCPP) $(TOCPP) < $(GEDITDIR)/findent-gedit > $@ gedit_plugin.inc: $(GEDITDIR)/findent.plugin $(TOCPP) $(TOCPP) < $(GEDITDIR)/findent.plugin > $@ gedit_plugin_py.inc: $(GEDITDIR)/findent.py $(TOCPP) $(TOCPP) < $(GEDITDIR)/findent.py > $@ gedit_help.inc: $(GEDITDIR)/README $(TOCPP) $(TOCPP) < $(GEDITDIR)/README > $@ emacs_findent.inc: $(EMACSDIR)/findent.el $(TOCPP) $(TOCPP) < $(EMACSDIR)/findent.el > $@ emacs_help.inc: $(EMACSDIR)/README $(TOCPP) $(TOCPP) < $(EMACSDIR)/README > $@ readme.inc: $(READMEDIR)/README $(TOCPP) $(TOCPP) < $(READMEDIR)/README > $@ makefdeps.inc: $(DEPSDIR)/makefdeps $(TOCPP) $(TOCPP) < $(DEPSDIR)/makefdeps > $@ changelog.inc: $(top_srcdir)/ChangeLog $(TOCPP) $(TOCPP) < $(top_srcdir)/ChangeLog > $@ INCS = vim_fortran.inc vim_findent.inc vim_help.inc gedit_external.inc gedit_plugin.inc \ gedit_plugin_py.inc gedit_help.inc emacs_findent.inc emacs_help.inc readme.inc makefdeps.inc \ changelog.inc tarfile.inc bin_PROGRAMS = findent noinst_PROGRAMS = makeman findent_SOURCES = \ debug.cpp debug.h \ docs.cpp docs.h \ findent.cpp findent.h \ findent_types.h \ findentclass.cpp findentclass.h \ findentrun.cpp findentrun.h \ fixed.cpp fixed.h \ flags.cpp flags.h \ fortran.cpp fortran.h \ fortranline.cpp fortranline.h \ free.cpp free.h \ functions.cpp functions.h \ globals.cpp globals.h \ lexer.h \ line_prep.cpp line_prep.h \ mylexer.cpp \ myparser.cpp \ parser.hpp \ pre_analyzer.cpp pre_analyzer.h \ prop.cpp prop.h \ relabel.cpp relabel.h \ selfrep.cpp \ simpleostream.h simpleostream.cpp \ version.h BUILT_SOURCES += parser.cpp parser.hpp lexer.cpp env.sh makeman_SOURCES = makeman.cpp docs.cpp flags.cpp docs.h flags.h parser.hpp makeman$(EXEEXT): makeman.cpp docs.cpp flags.cpp docs.h flags.h parser.hpp $(CXX_FOR_BUILD) $(CXXFLAGS_FOR_BUILD) $(AM_CXXFLAGS) -DVERSION=\"$(VERSION)\" -DMAKEMAN -I$(top_srcdir)/src -I. -o $@ \ $(top_srcdir)/src/makeman.cpp $(top_srcdir)/src/docs.cpp $(top_srcdir)/src/flags.cpp # env.sh is used in the test directory env.sh: > $@ echo export SRCDIR=\"$(top_srcdir)\" >> $@ echo export FC=\"$(FC)\" >> $@ if USEESOPE echo export ESOPE=\"yes\" >> $@ else echo export ESOPE=\"no\" >> $@ endif if MAKESELFREP echo export SELFREP=\"yes\" >>$@ else echo export SELFREP=\"no\" >>$@ endif if CROSSCOMPILE echo export CROSSCOMPILE=\"yes\" >> $@ else echo export CROSSCOMPILE=\"no\" >> $@ endif EXTRA_DIST = lexer.l parser.y tocpp.sh toascii.sh \ builtparser.cpp builtparser.hpp builtlexer.cpp findent-4.3.2/src/Makefile.in0000644000000000000000000010672714566134066012761 0ustar00# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @USEESOPE_TRUE@am__append_1 = -DUSEESOPE @MAKESELFREP_TRUE@am__append_2 = -DSELFREP bin_PROGRAMS = findent$(EXEEXT) noinst_PROGRAMS = makeman$(EXEEXT) subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/m4_ax_prog_cc_for_build.m4 \ $(top_srcdir)/m4/m4_ax_prog_cxx_for_build.m4 \ $(top_srcdir)/m4/ax_prog_bison.m4 \ $(top_srcdir)/m4/ax_prog_flex.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am_findent_OBJECTS = debug.$(OBJEXT) docs.$(OBJEXT) findent.$(OBJEXT) \ findentclass.$(OBJEXT) findentrun.$(OBJEXT) fixed.$(OBJEXT) \ flags.$(OBJEXT) fortran.$(OBJEXT) fortranline.$(OBJEXT) \ free.$(OBJEXT) functions.$(OBJEXT) globals.$(OBJEXT) \ line_prep.$(OBJEXT) mylexer.$(OBJEXT) myparser.$(OBJEXT) \ pre_analyzer.$(OBJEXT) prop.$(OBJEXT) relabel.$(OBJEXT) \ selfrep.$(OBJEXT) simpleostream.$(OBJEXT) findent_OBJECTS = $(am_findent_OBJECTS) findent_LDADD = $(LDADD) am_makeman_OBJECTS = makeman.$(OBJEXT) docs.$(OBJEXT) flags.$(OBJEXT) makeman_OBJECTS = $(am_makeman_OBJECTS) makeman_LDADD = $(LDADD) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/debug.Po ./$(DEPDIR)/docs.Po \ ./$(DEPDIR)/findent.Po ./$(DEPDIR)/findentclass.Po \ ./$(DEPDIR)/findentrun.Po ./$(DEPDIR)/fixed.Po \ ./$(DEPDIR)/flags.Po ./$(DEPDIR)/fortran.Po \ ./$(DEPDIR)/fortranline.Po ./$(DEPDIR)/free.Po \ ./$(DEPDIR)/functions.Po ./$(DEPDIR)/globals.Po \ ./$(DEPDIR)/line_prep.Po ./$(DEPDIR)/makeman.Po \ ./$(DEPDIR)/mylexer.Po ./$(DEPDIR)/myparser.Po \ ./$(DEPDIR)/pre_analyzer.Po ./$(DEPDIR)/prop.Po \ ./$(DEPDIR)/relabel.Po ./$(DEPDIR)/selfrep.Po \ ./$(DEPDIR)/simpleostream.Po am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(findent_SOURCES) $(makeman_SOURCES) DIST_SOURCES = $(findent_SOURCES) $(makeman_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man1_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_OBJEXT = @BUILD_OBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CPP_FOR_BUILD = @CPP_FOR_BUILD@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXCPPFLAGS_FOR_BUILD = @CXXCPPFLAGS_FOR_BUILD@ CXXCPP_FOR_BUILD = @CXXCPP_FOR_BUILD@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@ CXX_FOR_BUILD = @CXX_FOR_BUILD@ CYGPATH_W = @CYGPATH_W@ DATE = @DATE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CC_FOR_BUILD = @ac_ct_CC_FOR_BUILD@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_CXX_FOR_BUILD = @ac_ct_CXX_FOR_BUILD@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ make_include = @make_include@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = std-options # checks if installed program runs with --help and --version AM_LDFLAGS = BUILT_SOURCES = parser.cpp parser.hpp lexer.cpp env.sh # for selfrep: tarfile = $(top_builddir)/$(PACKAGE_TARNAME)-$(VERSION).tar.gz #end for selfrep AM_CXXFLAGS = -fPIC $(am__append_1) $(am__append_2) MOSTLYCLEANFILES = CLEANFILES = findent findent.exe findent.1 \ parser.cpp.h parser.hpp parser_report.txt \ parser.cpp lexer.cpp env.sh \ $(INCS) MAINTAINERCLEANFILES = builtparser.cpp builtparser.hpp builtlexer.cpp man1_MANS = findent.1 DEPSDIR = $(top_srcdir)/deps EMACSDIR = $(top_srcdir)/emacs GEDITDIR = $(top_srcdir)/gedit READMEDIR = $(top_srcdir)/doc TOCPP = $(top_srcdir)/src/tocpp.sh TOASCII = env CC="$(CC_FOR_BUILD)" CFLAGS="$(CFLAGS_FOR_BUILD)" $(top_srcdir)/src/toascii.sh VIMDIR = $(top_srcdir)/vim INCS = vim_fortran.inc vim_findent.inc vim_help.inc gedit_external.inc gedit_plugin.inc \ gedit_plugin_py.inc gedit_help.inc emacs_findent.inc emacs_help.inc readme.inc makefdeps.inc \ changelog.inc tarfile.inc findent_SOURCES = \ debug.cpp debug.h \ docs.cpp docs.h \ findent.cpp findent.h \ findent_types.h \ findentclass.cpp findentclass.h \ findentrun.cpp findentrun.h \ fixed.cpp fixed.h \ flags.cpp flags.h \ fortran.cpp fortran.h \ fortranline.cpp fortranline.h \ free.cpp free.h \ functions.cpp functions.h \ globals.cpp globals.h \ lexer.h \ line_prep.cpp line_prep.h \ mylexer.cpp \ myparser.cpp \ parser.hpp \ pre_analyzer.cpp pre_analyzer.h \ prop.cpp prop.h \ relabel.cpp relabel.h \ selfrep.cpp \ simpleostream.h simpleostream.cpp \ version.h makeman_SOURCES = makeman.cpp docs.cpp flags.cpp docs.h flags.h parser.hpp EXTRA_DIST = lexer.l parser.y tocpp.sh toascii.sh \ builtparser.cpp builtparser.hpp builtlexer.cpp all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) installcheck-binPROGRAMS: $(bin_PROGRAMS) bad=0; pid=$$$$; list="$(bin_PROGRAMS)"; for p in $$list; do \ case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \ *" $$p "* | *" $(srcdir)/$$p "*) continue;; \ esac; \ f=`echo "$$p" | \ sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ for opt in --help --version; do \ if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \ 2>c$${pid}_.err &2; bad=1; fi; \ done; \ done; rm -f c$${pid}_.???; exit $$bad clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) findent$(EXEEXT): $(findent_OBJECTS) $(findent_DEPENDENCIES) $(EXTRA_findent_DEPENDENCIES) @rm -f findent$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(findent_OBJECTS) $(findent_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/docs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/findent.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/findentclass.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/findentrun.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fixed.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flags.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fortran.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fortranline.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/free.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/functions.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globals.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/line_prep.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/makeman.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mylexer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/myparser.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_analyzer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prop.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/relabel.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/selfrep.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simpleostream.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` install-man1: $(man1_MANS) @$(NORMAL_INSTALL) @list1='$(man1_MANS)'; \ list2=''; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(PROGRAMS) $(MANS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/debug.Po -rm -f ./$(DEPDIR)/docs.Po -rm -f ./$(DEPDIR)/findent.Po -rm -f ./$(DEPDIR)/findentclass.Po -rm -f ./$(DEPDIR)/findentrun.Po -rm -f ./$(DEPDIR)/fixed.Po -rm -f ./$(DEPDIR)/flags.Po -rm -f ./$(DEPDIR)/fortran.Po -rm -f ./$(DEPDIR)/fortranline.Po -rm -f ./$(DEPDIR)/free.Po -rm -f ./$(DEPDIR)/functions.Po -rm -f ./$(DEPDIR)/globals.Po -rm -f ./$(DEPDIR)/line_prep.Po -rm -f ./$(DEPDIR)/makeman.Po -rm -f ./$(DEPDIR)/mylexer.Po -rm -f ./$(DEPDIR)/myparser.Po -rm -f ./$(DEPDIR)/pre_analyzer.Po -rm -f ./$(DEPDIR)/prop.Po -rm -f ./$(DEPDIR)/relabel.Po -rm -f ./$(DEPDIR)/selfrep.Po -rm -f ./$(DEPDIR)/simpleostream.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: installcheck-binPROGRAMS maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/debug.Po -rm -f ./$(DEPDIR)/docs.Po -rm -f ./$(DEPDIR)/findent.Po -rm -f ./$(DEPDIR)/findentclass.Po -rm -f ./$(DEPDIR)/findentrun.Po -rm -f ./$(DEPDIR)/fixed.Po -rm -f ./$(DEPDIR)/flags.Po -rm -f ./$(DEPDIR)/fortran.Po -rm -f ./$(DEPDIR)/fortranline.Po -rm -f ./$(DEPDIR)/free.Po -rm -f ./$(DEPDIR)/functions.Po -rm -f ./$(DEPDIR)/globals.Po -rm -f ./$(DEPDIR)/line_prep.Po -rm -f ./$(DEPDIR)/makeman.Po -rm -f ./$(DEPDIR)/mylexer.Po -rm -f ./$(DEPDIR)/myparser.Po -rm -f ./$(DEPDIR)/pre_analyzer.Po -rm -f ./$(DEPDIR)/prop.Po -rm -f ./$(DEPDIR)/relabel.Po -rm -f ./$(DEPDIR)/selfrep.Po -rm -f ./$(DEPDIR)/simpleostream.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 .MAKE: all check install install-am install-exec install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-noinstPROGRAMS \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am \ installcheck-binPROGRAMS installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-man \ uninstall-man1 .PRECIOUS: Makefile @MAKESELFREP_TRUE@tarfile.inc: @MAKESELFREP_TRUE@ $(MAKE) -C $(top_builddir) dist || echo "No tarfile available during build." > $(tarfile) @MAKESELFREP_TRUE@ @echo "Converting tarfile:" @MAKESELFREP_TRUE@ ls -l $(tarfile) @MAKESELFREP_TRUE@ export CC="$(CC)"; export CFLAGS="$(CFLAGS)"; $(TOASCII) < $(tarfile) > $@ @MAKESELFREP_FALSE@tarfile.inc: @MAKESELFREP_FALSE@ echo "No selfrep compiled in" | $(TOASCII) > $@ @USEBISON_TRUE@parser.hpp parser.cpp: $(top_srcdir)/src/parser.y @USEBISON_TRUE@ $(YACC) -o parser.cpp -d $(top_srcdir)/src/parser.y @USEBISON_TRUE@ if test -f parser.cpp.h ; then mv parser.cpp.h parser.hpp ; fi @USEBISON_TRUE@ if test -f parser.h ; then mv parser.h parser.hpp ; fi @USEBISON_TRUE@builtparser: parser.cpp @USEBISON_TRUE@ mv parser.cpp builtparser.cpp @USEBISON_TRUE@ mv parser.hpp builtparser.hpp @USEBISON_FALSE@parser.cpp: builtparser.cpp @USEBISON_FALSE@ @echo "" @USEBISON_FALSE@ @echo "********************************************************" @USEBISON_FALSE@ @echo "*** At configuration time, bison (or yacc) was not ***" @USEBISON_FALSE@ @echo "*** available, or it was specified not to use bison. ***" @USEBISON_FALSE@ @echo "*** I will use the pre-built parser. ***" @USEBISON_FALSE@ @echo "********************************************************" @USEBISON_FALSE@ cp builtparser.cpp $@ @USEBISON_FALSE@parser.hpp: builtparser.hpp @USEBISON_FALSE@ cp builtparser.hpp $@ @USEFLEX_TRUE@mylexer.$(OBJEXT): lexer.cpp @USEFLEX_TRUE@lexer.cpp: lexer.l parser.hpp @USEFLEX_TRUE@ $(LEX) -i -o lexer.cpp $(top_srcdir)/src/lexer.l @USEFLEX_TRUE@builtlexer: lexer.cpp @USEFLEX_TRUE@ mv lexer.cpp builtlexer.cpp @USEFLEX_FALSE@lexer.cpp: builtlexer.cpp @USEFLEX_FALSE@ @echo "" @USEFLEX_FALSE@ @echo "*******************************************************" @USEFLEX_FALSE@ @echo "*** At configuration time, flex (or lex) was not ***" @USEFLEX_FALSE@ @echo "*** available, or it was specified not to use flex. ***" @USEFLEX_FALSE@ @echo "*** I will use the pre-built lexer. ***" @USEFLEX_FALSE@ @echo "*******************************************************" @USEFLEX_FALSE@ cp builtlexer.cpp $@ #findent.1: findent # : | ./findent -H > $@ || : | findent -H > $@ || echo "Could not generate man page" > $@ findent.1: makeman$(EXEEXT) ./makeman$(EXEEXT) > $@ findent.$(OBJEXT): parser.hpp vim_plugin.$(OBJEXT): vim_fortran.inc vim_findent.inc vim_help.inc gedit_plugin.$(OBJEXT): gedit_external.inc gedit_plugin.inc gedit_plugin_py.inc \ gedit_help.inc emacs_plugin.$(OBJEXT): emacs_findent.inc emacs_help.inc readme_plugin.$(OBJEXT): readme.inc docs.$(OBJEXT): vim_fortran.inc vim_findent.inc vim_help.inc \ gedit_external.inc gedit_plugin.inc gedit_plugin_py.inc gedit_help.inc \ emacs_findent.inc emacs_help.inc \ readme.inc makefdeps.inc changelog.inc selfrep.$(OBJEXT): tarfile.inc vim_fortran.inc: $(VIMDIR)/fortran.vim $(TOCPP) $(TOCPP) < $(VIMDIR)/fortran.vim > $@ vim_findent.inc: $(VIMDIR)/findent.vim $(TOCPP) $(TOCPP) < $(VIMDIR)/findent.vim > $@ vim_help.inc: $(VIMDIR)/README $(TOCPP) $(TOCPP) < $(VIMDIR)/README > $@ gedit_external.inc: $(GEDITDIR)/findent-gedit $(TOCPP) $(TOCPP) < $(GEDITDIR)/findent-gedit > $@ gedit_plugin.inc: $(GEDITDIR)/findent.plugin $(TOCPP) $(TOCPP) < $(GEDITDIR)/findent.plugin > $@ gedit_plugin_py.inc: $(GEDITDIR)/findent.py $(TOCPP) $(TOCPP) < $(GEDITDIR)/findent.py > $@ gedit_help.inc: $(GEDITDIR)/README $(TOCPP) $(TOCPP) < $(GEDITDIR)/README > $@ emacs_findent.inc: $(EMACSDIR)/findent.el $(TOCPP) $(TOCPP) < $(EMACSDIR)/findent.el > $@ emacs_help.inc: $(EMACSDIR)/README $(TOCPP) $(TOCPP) < $(EMACSDIR)/README > $@ readme.inc: $(READMEDIR)/README $(TOCPP) $(TOCPP) < $(READMEDIR)/README > $@ makefdeps.inc: $(DEPSDIR)/makefdeps $(TOCPP) $(TOCPP) < $(DEPSDIR)/makefdeps > $@ changelog.inc: $(top_srcdir)/ChangeLog $(TOCPP) $(TOCPP) < $(top_srcdir)/ChangeLog > $@ makeman$(EXEEXT): makeman.cpp docs.cpp flags.cpp docs.h flags.h parser.hpp $(CXX_FOR_BUILD) $(CXXFLAGS_FOR_BUILD) $(AM_CXXFLAGS) -DVERSION=\"$(VERSION)\" -DMAKEMAN -I$(top_srcdir)/src -I. -o $@ \ $(top_srcdir)/src/makeman.cpp $(top_srcdir)/src/docs.cpp $(top_srcdir)/src/flags.cpp # env.sh is used in the test directory env.sh: > $@ echo export SRCDIR=\"$(top_srcdir)\" >> $@ echo export FC=\"$(FC)\" >> $@ @USEESOPE_TRUE@ echo export ESOPE=\"yes\" >> $@ @USEESOPE_FALSE@ echo export ESOPE=\"no\" >> $@ @MAKESELFREP_TRUE@ echo export SELFREP=\"yes\" >>$@ @MAKESELFREP_FALSE@ echo export SELFREP=\"no\" >>$@ @CROSSCOMPILE_TRUE@ echo export CROSSCOMPILE=\"yes\" >> $@ @CROSSCOMPILE_FALSE@ echo export CROSSCOMPILE=\"no\" >> $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: findent-4.3.2/src/builtlexer.cpp0000644000000000000000000070446314566134066013600 0ustar00#line 2 "lexer.cpp" #line 4 "lexer.cpp" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 6 #define YY_FLEX_SUBMINOR_VERSION 4 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #ifndef SIZE_MAX #define SIZE_MAX (~(size_t)0) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ /* begin standard C++ headers. */ /* TODO: this is always defined, so inline it */ #define yyconst const #if defined(__GNUC__) && __GNUC__ >= 3 #define yynoreturn __attribute__((__noreturn__)) #else #define yynoreturn #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an * integer in range [0..255] for use as an array index. */ #define YY_SC_TO_UI(c) ((YY_CHAR) (c)) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k. * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. * Ditto for the __ia64__ case accordingly. */ #define YY_BUF_SIZE 32768 #else #define YY_BUF_SIZE 16384 #endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif extern int yyleng; extern FILE *yyin, *yyout; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) #define YY_LINENO_REWIND_TO(ptr) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ int yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] /* yy_hold_char holds the character lost when yytext is formed. */ static char yy_hold_char; static int yy_n_chars; /* number of characters read into yy_ch_buf */ int yyleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = NULL; static int yy_init = 0; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow yywrap()'s to do buffer switches * instead of setting up a fresh yyin. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; void yyrestart ( FILE *input_file ); void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size ); void yy_delete_buffer ( YY_BUFFER_STATE b ); void yy_flush_buffer ( YY_BUFFER_STATE b ); void yypush_buffer_state ( YY_BUFFER_STATE new_buffer ); void yypop_buffer_state ( void ); static void yyensure_buffer_stack ( void ); static void yy_load_buffer_state ( void ); static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file ); #define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER ) YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size ); YY_BUFFER_STATE yy_scan_string ( const char *yy_str ); YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len ); void *yyalloc ( yy_size_t ); void *yyrealloc ( void *, yy_size_t ); void yyfree ( void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ typedef flex_uint8_t YY_CHAR; FILE *yyin = NULL, *yyout = NULL; typedef int yy_state_type; extern int yylineno; int yylineno = 1; extern char *yytext; #ifdef yytext_ptr #undef yytext_ptr #endif #define yytext_ptr yytext static yy_state_type yy_get_previous_state ( void ); static yy_state_type yy_try_NUL_trans ( yy_state_type current_state ); static int yy_get_next_buffer ( void ); static void yynoreturn yy_fatal_error ( const char* msg ); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ yyleng = (int) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 205 #define YY_END_OF_BUFFER 206 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static const flex_int16_t yy_acclist[799] = { 0, 206, 204, 205, 203, 205, 204, 205, 200, 204, 205, 199, 204, 205, 204, 205, 201, 204, 205, 202, 203, 205, 17, 18, 204, 205, 204, 205, 204, 205, 204, 205, 204, 205, 204, 205, 204, 205, 204, 205, 204, 205, 204, 205, 204, 205, 204, 205, 204, 205, 204, 205, 204, 205, 204, 205, 204, 205, 204, 205, 204, 205, 204, 205, 204, 205, 19, 20, 204, 205, 4, 205, 5, 205, 2, 4, 205, 3, 4, 205, 8, 205, 9, 205, 6, 8, 205, 7, 8, 205, 16, 205, 15, 205, 10, 16, 205, 12, 16, 205, 11, 16, 205, 13, 16, 205, 1, 205, 205, 205, 147, 205, 205, 147, 205, 205, 205, 205, 205, 205, 205, 205, 196, 205, 196, 205, 195, 205, 196, 205, 196, 205, 181, 196, 205, 196, 205, 196, 205, 152, 205, 151, 205, 152, 205, 156, 205, 155, 205, 156, 205, 156, 205, 21, 205, 23, 205, 22, 205, 159, 205, 158, 205, 157, 159, 205, 169, 205, 167, 205, 169, 205, 10, 169, 205, 168, 169, 205, 160, 169, 205, 169, 205, 169, 205, 169, 205, 11, 169, 205, 170, 205, 173, 205, 172, 205, 10, 173, 205, 173, 205, 11, 173, 205, 174, 205, 14, 16, 205, 197, 199, 17, 18, 18, 17, 18, 38, 74, 111, 19, 20, 20, 19, 20, 19, 20, 147, 135, 147, 135, 147, 137, 147, 135, 139, 141, 142, 147, 181, 188, 150, 21, 157, 165, 166, 160, 198, 39, 50, 103, 50, 20, 135, 137, 147, 135, 139, 141, 147, 135, 137, 135, 141, 136, 147, 139, 141, 142, 147, 137, 139, 141, 147, 139, 141, 147, 135, 142, 147, 135, 137, 142, 147, 135, 139, 142, 147, 134, 135, 147, 182, 150, 150, 154, 153, 166, 106, 28, 47, 71, 107, 87, 88, 109, 90, 99, 100, 137, 141, 135, 137, 139, 141, 147, 135, 147, 135, 137, 147, 135, 139, 147, 135, 137, 141, 135, 135, 137, 136, 137, 147, 136, 139, 141, 147, 142, 147, 137, 142, 147, 139, 142, 147, 141, 137, 147, 137, 139, 147, 147, 139, 147, 137, 135, 137, 139, 142, 147, 134, 135, 137, 147, 134, 135, 139, 141, 147, 145, 147, 189, 150, 171, 26, 32, 55, 59, 70, 127, 118, 108, 119, 101, 130, 122, 104, 112, 137, 141, 135, 137, 139, 147, 136, 137, 139, 141, 147, 136, 147, 136, 137, 147, 136, 139, 147, 137, 139, 142, 147, 134, 135, 137, 139, 141, 147, 134, 135, 147, 134, 135, 137, 147, 134, 135, 139, 147, 137, 145, 147, 139, 141, 145, 147, 144, 147, 185, 184, 148, 150, 148, 163, 164, 161, 162, 105, 114, 48, 116, 72, 75, 81, 110, 96, 123, 136, 137, 139, 147, 134, 135, 137, 139, 147, 137, 139, 141, 145, 147, 145, 147, 137, 145, 147, 139, 145, 147, 137, 144, 147, 139, 141, 144, 147, 183, 191, 149, 149, 150, 148, 150, 148, 129, 35, 124, 126, 42, 125, 56, 67, 68, 76, 77, 80, 86, 120, 121, 102, 131, 135, 141, 147, 135, 137, 141, 147, 141, 147, 137, 141, 147, 146, 147, 138, 141, 147, 136, 141, 147, 136, 137, 141, 147, 134, 135, 141, 147, 134, 135, 137, 141, 147, 141, 145, 147, 137, 141, 145, 147, 141, 144, 147, 137, 141, 144, 147, 144, 147, 137, 144, 147, 190, 34, 36, 37, 43, 52, 115, 69, 73, 117, 128, 132, 135, 140, 141, 147, 135, 137, 140, 141, 147, 135, 140, 147, 135, 137, 140, 147, 140, 141, 147, 137, 140, 141, 147, 140, 147, 137, 140, 147, 137, 146, 147, 140, 141, 143, 146, 147, 138, 147, 138, 137, 138, 147, 140, 141, 146, 147, 136, 140, 141, 147, 136, 137, 140, 141, 147, 136, 140, 147, 140, 142, 147, 137, 140, 142, 147, 136, 137, 140, 147, 135, 140, 142, 147, 135, 137, 140, 142, 147, 134, 135, 140, 141, 147, 134, 135, 137, 140, 141, 147, 134, 135, 140, 147, 134, 135, 137, 140, 147, 140, 141, 145, 147, 137, 140, 141, 145, 147, 140, 145, 147, 137, 140, 145, 147, 140, 141, 144, 147, 137, 140, 141, 144, 147, 140, 144, 147, 137, 140, 144, 147,16570,16571, 192, 25, 27, 30, 46, 49, 57, 61, 64, 78, 85, 91, 97, 137, 140, 141, 146, 147, 143, 146, 147, 137, 143, 146, 147, 140, 143, 146, 147, 137, 138, 138, 146, 147, 137, 146, 147, 140, 146, 147,16570,16571,16577,16578, 113, 31, 63, 79, 79, 93, 94, 95, 98, 133, 137, 140, 146, 147, 137, 140, 143, 146, 147,16577,16578, 29, 54, 58, 89, 8378, 8379, 33, 40, 51, 53, 60, 62, 66, 179, 180, 41, 44, 65, 92, 8386, 8385, 84, 45, 82, 83, 175, 176, 24, 177, 178 } ; static const flex_int16_t yy_accept[1568] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 6, 8, 11, 14, 16, 19, 22, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 70, 72, 74, 77, 80, 82, 84, 87, 90, 92, 94, 97, 100, 103, 106, 108, 109, 110, 112, 113, 115, 116, 117, 118, 119, 120, 121, 122, 124, 126, 128, 130, 132, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 166, 168, 170, 172, 175, 178, 181, 183, 185, 187, 190, 192, 194, 196, 199, 201, 204, 206, 209, 210, 210, 211, 211, 211, 213, 214, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 217, 217, 217, 217, 217, 217, 217, 217, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 219, 219, 219, 219, 219, 219, 219, 219, 221, 222, 224, 226, 226, 227, 227, 229, 229, 229, 229, 230, 230, 230, 230, 231, 231, 231, 231, 231, 231, 231, 233, 233, 233, 233, 233, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 239, 239, 239, 239, 239, 239, 239, 240, 241, 241, 241, 241, 242, 243, 244, 244, 245, 246, 246, 246, 246, 246, 246, 246, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 248, 248, 248, 248, 248, 248, 248, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 250, 250, 250, 250, 251, 251, 252, 252, 252, 252, 252, 252, 252, 252, 255, 255, 255, 255, 259, 259, 259, 259, 261, 261, 261, 261, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 265, 265, 265, 265, 265, 269, 269, 269, 269, 269, 269, 269, 273, 273, 273, 273, 276, 276, 276, 276, 279, 279, 279, 279, 279, 279, 279, 283, 283, 283, 287, 287, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 291, 291, 291, 291, 291, 291, 292, 293, 293, 294, 295, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 297, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 300, 300, 300, 300, 300, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 302, 303, 304, 305, 305, 305, 305, 305, 305, 305, 305, 305, 306, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 308, 308, 308, 309, 309, 309, 314, 314, 316, 319, 319, 322, 322, 322, 325, 326, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 331, 331, 331, 331, 335, 335, 335, 337, 337, 340, 340, 340, 343, 343, 344, 346, 346, 349, 350, 350, 352, 352, 352, 352, 352, 352, 352, 352, 352, 353, 353, 358, 358, 358, 358, 358, 362, 362, 362, 362, 367, 367, 367, 367, 367, 367, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 369, 370, 370, 371, 371, 371, 371, 371, 371, 372, 372, 372, 372, 372, 372, 372, 373, 373, 373, 373, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 375, 375, 375, 375, 375, 376, 376, 376, 376, 376, 376, 376, 376, 376, 377, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378, 379, 380, 380, 380, 380, 381, 381, 381, 381, 381, 381, 381, 381, 381, 382, 383, 383, 384, 385, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 388, 388, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 397, 397, 399, 402, 402, 405, 405, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, 415, 415, 418, 422, 422, 426, 426, 426, 426, 426, 426, 426, 429, 429, 429, 429, 433, 433, 433, 433, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, 436, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 439, 440, 441, 442, 443, 444, 444, 444, 445, 445, 445, 445, 445, 445, 445, 445, 445, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 448, 449, 449, 450, 450, 450, 450, 450, 450, 451, 451, 451, 451, 451, 451, 452, 452, 452, 452, 453, 453, 453, 453, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 468, 470, 473, 473, 476, 476, 476, 476, 476, 479, 479, 479, 479, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 484, 484, 484, 484, 485, 485, 485, 485, 485, 486, 488, 490, 491, 491, 492, 492, 492, 492, 492, 492, 492, 492, 492, 493, 493, 493, 494, 495, 495, 495, 495, 495, 495, 496, 496, 496, 497, 497, 497, 497, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 499, 500, 500, 500, 501, 501, 502, 502, 503, 503, 503, 503, 503, 503, 504, 504, 504, 505, 506, 506, 506, 506, 506, 506, 506, 507, 507, 508, 508, 508, 508, 508, 508, 508, 508, 511, 511, 511, 511, 511, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 517, 517, 517, 517, 517, 520, 520, 520, 520, 520, 520, 520, 522, 522, 522, 522, 522, 522, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 536, 536, 536, 536, 536, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 544, 544, 544, 544, 544, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 551, 551, 551, 551, 551, 555, 555, 557, 557, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 562, 563, 564, 564, 565, 565, 565, 565, 565, 565, 565, 566, 566, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 568, 569, 570, 570, 570, 570, 570, 570, 570, 570, 570, 571, 571, 571, 571, 571, 571, 571, 572, 572, 576, 576, 581, 581, 584, 584, 588, 588, 591, 591, 595, 595, 597, 597, 600, 600, 603, 603, 603, 603, 608, 608, 608, 610, 610, 611, 611, 611, 614, 614, 614, 618, 618, 618, 618, 622, 622, 627, 627, 630, 630, 633, 633, 637, 637, 641, 641, 645, 645, 650, 650, 655, 655, 661, 661, 665, 665, 670, 670, 674, 674, 679, 679, 682, 682, 686, 686, 690, 690, 695, 695, 698, 698, 702, 702, 702, 702, 702, 702, 702, 702, 704, 704, 704, 705, 705, 705, 705, 706, 706, 707, 707, 707, 708, 708, 708, 708, 708, 708, 709, 710, 710, 710, 710, 711, 711, 711, 712, 712, 712, 713, 713, 713, 714, 714, 714, 714, 714, 715, 715, 716, 716, 716, 716, 717, 717, 717, 717, 717, 722, 722, 725, 725, 729, 729, 729, 733, 733, 735, 735, 736, 738, 741, 741, 744, 744, 744, 744, 744, 746, 746, 746, 746, 746, 748, 748, 749, 749, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, 751, 751, 751, 752, 753, 753, 753, 753, 753, 753, 754, 755, 756, 757, 758, 758, 762, 762, 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, 769, 769, 769, 769, 770, 770, 770, 770, 770, 770, 770, 770, 771, 772, 772, 772, 772, 772, 772, 772, 772, 772, 773, 773, 773, 773, 774, 774, 775, 775, 775, 775, 775, 776, 776, 777, 777, 777, 778, 779, 780, 781, 782, 782, 782, 782, 782, 782, 783, 784, 784, 784, 784, 785, 786, 786, 787, 787, 787, 787, 788, 788, 788, 788, 789, 789, 790, 790, 790, 791, 791, 791, 791, 791, 791, 792, 793, 793, 793, 793, 793, 794, 794, 795, 795, 796, 797, 798, 799, 799 } ; static const YY_CHAR yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 1, 15, 16, 1, 1, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 1, 20, 21, 22, 23, 1, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 33, 49, 1, 50, 51, 52, 1, 53, 54, 55, 56, 57, 58, 59, 60, 61, 33, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 33, 1, 77, 1, 77, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static const YY_CHAR yy_meta[78] = { 0, 1, 1, 2, 1, 1, 1, 3, 4, 5, 6, 3, 1, 1, 1, 7, 1, 8, 8, 9, 1, 10, 11, 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 1, 1, 12, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 1 } ; static const flex_int16_t yy_base[1825] = { 0, 0, 77, 154, 231, 306, 4107, 0, 73, 380, 457, 21, 23, 22, 24, 26, 99, 55, 56, 130, 178, 4083, 4073, 4062, 532, 41, 261, 4060, 175, 4013, 51, 3961, 3960, 3978, 3962, 45, 100, 588, 0, 3947, 3946, 104, 179, 3928, 3916, 207, 210, 3918, 8041, 8041, 104, 8041, 13, 3897, 8041, 8041, 104, 248, 276, 385, 241, 257, 466, 239, 388, 251, 253, 259, 287, 252, 168, 484, 647, 243, 387, 649, 648, 131, 8041, 8041, 8041, 8041, 8041, 8041, 8041, 8041, 8041, 8041, 8041, 8041, 8041, 8041, 8041, 8041, 3903, 8041, 131, 192, 723, 29, 206, 431, 800, 479, 876, 8041, 147, 8041, 308, 351, 486, 490, 3871, 8041, 8041, 3884, 8041, 8041, 210, 3864, 0, 8041, 8041, 8041, 8041, 23, 8041, 8041, 297, 8041, 8041, 432, 53, 710, 488, 8041, 8041, 8041, 8041, 8041, 210, 8041, 8041, 8041, 8041, 404, 48, 3851, 0, 3836, 0, 478, 309, 496, 498, 507, 506, 652, 391, 650, 654, 730, 731, 810, 739, 816, 418, 660, 512, 733, 511, 3805, 807, 821, 651, 386, 734, 735, 864, 822, 808, 880, 834, 304, 736, 740, 3803, 818, 805, 871, 811, 876, 921, 875, 116, 3746, 8041, 552, 3754, 8041, 409, 104, 490, 573, 560, 294, 510, 694, 672, 486, 993, 554, 775, 953, 1070, 563, 3746, 698, 957, 779, 968, 3746, 576, 977, 910, 1147, 1059, 1014, 1168, 1174, 1018, 1042, 914, 1037, 1106, 156, 1025, 1172, 3713, 1184, 996, 1067, 1107, 225, 1185, 1018, 939, 3708, 196, 0, 567, 8041, 905, 0, 1095, 99, 1116, 977, 1134, 827, 747, 8041, 931, 1006, 1188, 1080, 1079, 1081, 1162, 1186, 1166, 1183, 1176, 1209, 1213, 1199, 1203, 1218, 1221, 1242, 1216, 1238, 1243, 1231, 1284, 1229, 1253, 1239, 1244, 1266, 1249, 1263, 1262, 1258, 1280, 1303, 1275, 1299, 741, 1296, 1309, 1337, 1316, 1084, 1330, 1306, 1334, 1340, 1347, 1345, 1349, 1350, 1351, 3694, 1357, 1358, 1363, 641, 1361, 8041, 980, 785, 1419, 564, 845, 1051, 943, 3672, 1428, 1055, 1437, 3623, 965, 1441, 1114, 3614, 1135, 518, 1450, 3606, 3560, 1123, 1385, 1454, 1464, 1400, 1486, 1541, 1404, 1490, 1492, 981, 1416, 1501, 1507, 1516, 3545, 1498, 1520, 3517, 1433, 1506, 1525, 8041, 1529, 1562, 1566, 3510, 1563, 1575, 1578, 3491, 1572, 1591, 1595, 3490, 3477, 1599, 8041, 1604, 1617, 3445, 1607, 1204, 1601, 1621, 1631, 1652, 1653, 1656, 1662, 1665, 1668, 1682, 1686, 1690, 1699, 1714, 1346, 1669, 1393, 8041, 1407, 1352, 1719, 1727, 1730, 1047, 1611, 1176, 8041, 8041, 0, 1529, 1653, 1733, 1734, 1754, 1657, 1630, 1744, 1660, 1686, 1684, 3420, 1733, 1749, 1754, 1739, 1747, 1763, 1767, 1555, 1766, 1768, 1682, 1617, 1764, 1765, 1780, 1777, 1787, 1775, 1794, 1795, 1791, 1778, 1798, 1805, 1828, 1802, 1804, 1823, 1827, 1796, 1806, 3411, 1840, 1819, 1834, 1851, 3397, 1855, 1693, 1853, 1857, 1862, 1843, 1864, 1880, 1870, 1872, 1871, 3372, 1882, 1892, 3359, 1889, 1883, 1891, 1899, 1906, 1900, 1896, 1901, 3270, 1925, 1933, 1927, 1931, 1945, 1946, 1944, 1965, 1967, 1973, 1977, 1987, 1991, 1975, 2002, 1988, 3278, 2006, 2011, 3275, 2008, 2017, 8041, 2020, 3263, 8041, 2029, 3262, 3254, 2033, 8041, 3243, 8041, 2035, 2038, 2047, 2043, 2052, 2055, 2064, 2060, 2073, 2083, 2104, 2108, 2160, 2112, 2061, 2121, 2125, 2134, 2069, 2138, 2070, 2117, 2143, 2146, 3226, 2148, 2181, 2185, 3220, 2182, 2194, 3210, 2190, 8041, 2203, 2212, 3208, 2040, 8041, 8041, 2216, 8041, 3190, 2225, 3188, 2198, 2221, 2236, 2222, 2240, 2249, 2253, 3170, 8041, 2258, 8041, 2261, 2262, 2271, 2267, 3162, 2276, 2279, 2288, 3165, 2284, 2297, 2307, 2328, 2329, 1273, 2285, 2338, 2341, 2342, 2350, 2358, 2359, 2362, 2368, 2372, 2371, 2380, 2383, 1926, 1970, 1972, 2162, 1888, 2240, 2390, 2387, 2395, 2413, 8041, 2417, 2429, 2230, 814, 849, 910, 1113, 8041, 2441, 2377, 2226, 2383, 2305, 2399, 2418, 2351, 2395, 2435, 2441, 2450, 2448, 2445, 2444, 2456, 2460, 2092, 2274, 2461, 2463, 2430, 2464, 2466, 2467, 2475, 2470, 2183, 2477, 3150, 2481, 2473, 2485, 2491, 3102, 2488, 2492, 2495, 2499, 2385, 2511, 2502, 2518, 3081, 8041, 2503, 2504, 2523, 2524, 2530, 2525, 2532, 2539, 2526, 2544, 2546, 8041, 3050, 2551, 2552, 2554, 8041, 2558, 2561, 2564, 2566, 2571, 2568, 2579, 2574, 8041, 3030, 2573, 8041, 2956, 2583, 2589, 2585, 2624, 2613, 2628, 2635, 2301, 1445, 2651, 2946, 2655, 2938, 2637, 2659, 2662, 2666, 8041, 2669, 8041, 2671, 2641, 2675, 2672, 2681, 1458, 2684, 2929, 2688, 2925, 2692, 2695, 2698, 2701, 2704, 2718, 2721, 2705, 2724, 2738, 1581, 2742, 2916, 2746, 2725, 2750, 2056, 2753, 2912, 2757, 2902, 2761, 2764, 2768, 2899, 2771, 8041, 2774, 2896, 8041, 2777, 2873, 2781, 8041, 2280, 2861, 2784, 2857, 2788, 2791, 2795, 2798, 2727, 2726, 2802, 2805, 2807, 2607, 2814, 2856, 2818, 2845, 2810, 8041, 2822, 2842, 8041, 2825, 2728, 2830, 2851, 2852, 2855, 2864, 2860, 2707, 2869, 2644, 2872, 2711, 2710, 2881, 2884, 2149, 2885, 2888, 2893, 2894, 2903, 2906, 2907, 2917, 2920, 2921, 2930, 2933, 2297, 8041, 8041, 2871, 2870, 2890, 2935, 2951, 2944, 2955, 2958, 2962, 2965, 689, 8041, 8041, 8041, 8041, 2935, 2974, 2693, 2946, 2949, 2959, 2969, 2975, 2976, 2982, 2984, 8041, 2957, 2970, 2987, 3002, 3003, 2983, 2961, 2998, 3004, 3001, 3009, 2617, 3017, 3022, 3012, 3018, 3014, 3029, 3032, 3037, 3036, 3044, 3048, 3049, 3058, 3047, 3045, 3068, 3057, 8041, 2594, 3065, 2580, 3078, 3086, 3076, 3075, 3083, 3094, 3093, 3088, 3091, 3105, 3110, 3118, 3128, 3122, 3125, 2528, 3130, 3119, 3146, 8041, 3103, 3134, 3173, 3172, 3182, 3178, 3196, 3198, 3207, 3194, 3204, 3216, 3219, 3228, 3230, 3224, 3239, 3236, 3248, 3250, 3259, 3244, 3256, 3268, 3271, 3280, 3282, 3291, 3294, 3295, 3299, 3308, 3311, 3320, 3305, 3316, 3325, 3328, 3337, 3333, 3334, 3346, 3342, 3351, 3355, 3360, 3364, 8041, 3366, 3369, 3370, 3379, 3383, 3392, 3395, 3389, 3404, 3400, 3409, 3412, 3421, 3417, 3418, 3430, 3433, 3442, 8041, 3452, 3473, 3474, 3438, 3483, 3439, 3487, 3489, 3503, 3506, 3507, 3516, 8041, 2476, 8041, 3520, 2431, 3528, 3511, 3532, 3529, 2403, 3541, 3543, 3552, 2400, 3537, 3555, 3556, 3564, 3565, 3568, 3574, 3578, 3577, 3191, 8041, 3026, 3200, 3275, 3386, 3587, 3187, 3588, 3592, 8041, 3152, 3155, 8041, 3358, 2331, 3533, 3576, 3566, 3589, 3578, 3588, 3288, 3591, 2330, 3530, 3580, 8041, 8041, 3262, 3263, 3545, 3432, 3598, 2317, 3601, 3608, 8041, 3615, 3610, 3450, 2217, 3640, 3628, 3613, 3619, 3634, 3638, 3639, 3649, 3462, 3636, 2214, 2193, 3643, 3642, 2150, 3664, 2136, 3659, 2097, 3646, 3662, 3654, 3667, 3668, 2089, 3670, 3674, 8041, 8041, 3680, 3677, 3691, 3686, 3687, 3693, 8041, 3701, 768, 3730, 3714, 3761, 3718, 3739, 3743, 3765, 2087, 3735, 3774, 3749, 3770, 8041, 3779, 3783, 3788, 3792, 3797, 3800, 3801, 3810, 3806, 3815, 3818, 3827, 2077, 3823, 3836, 3824, 3840, 8041, 3845, 3849, 3854, 3858, 3863, 3866, 2616, 3874, 3871, 3883, 3886, 3895, 3898, 3872, 3907, 3910, 3880, 3919, 3892, 3923, 3925, 3934, 2076, 3904, 3938, 3942, 3943, 3952, 3956, 3960, 3965, 3961, 3970, 8041, 3974, 3983, 3987, 3992, 3996, 4001, 4005, 4007, 4010, 4019, 4015, 4024, 4028, 4033, 4037, 4041, 4042, 4051, 4047, 4056, 4059, 4068, 2042, 4064, 4077, 4065, 4081, 8041, 4086, 4090, 4095, 4099, 4104, 4114, 4135, 4136, 4139, 4148, 4144, 4157, 4152, 4166, 2021, 4169, 4178, 4174, 4183, 8041, 4192, 4195, 4204, 4207, 4210, 4213, 4222, 4218, 4227, 4230, 4239, 2020, 4235, 4248, 4236, 4252, 8041, 4257, 1961, 4261, 8041, 4265, 4269, 4273, 4277, 4285, 4281, 4289, 3684, 3347, 3689, 4294, 4298, 4299, 8041, 4302, 4303, 4112, 4293, 4297, 3995, 4270, 4291, 4228, 4310, 8041, 1929, 1908, 3767, 8041, 4299, 3915, 4313, 4155, 4330, 4301, 4316, 4334, 8041, 4329, 4346, 4342, 4347, 4350, 4357, 3861, 4361, 4354, 1902, 1799, 8041, 4363, 4348, 4137, 4365, 4360, 4367, 4364, 4374, 8041, 4215, 4375, 4377, 4386, 4384, 4390, 8041, 4443, 1731, 4431, 8041, 4454, 1701, 4458, 8041, 4467, 1689, 4463, 8041, 4476, 1685, 4472, 8041, 4408, 1620, 4481, 4420, 4485, 1598, 4412, 4494, 4497, 4498, 4506, 4429, 4502, 1586, 4510, 4519, 1533, 4507, 4523, 4532, 1532, 4528, 8041, 4541, 1529, 4545, 1502, 4550, 8041, 4554, 8041, 4563, 1494, 4559, 8041, 4572, 1493, 4568, 8041, 4581, 1468, 4577, 8041, 4590, 1455, 4586, 8041, 4599, 1411, 4595, 8041, 4608, 1397, 4604, 8041, 4617, 1393, 4613, 8041, 4621, 4625, 4629, 4633, 4637, 4641, 3483, 4646, 3777, 4651, 8041, 4652, 4656, 4622, 1375, 4649, 1328, 4630, 4652, 1313, 4618, 4008, 4435, 4644, 4659, 1286, 1272, 4645, 4648, 4651, 1269, 4654, 4657, 1260, 4663, 4670, 1172, 4675, 4672, 4704, 4676, 4677, 4698, 4699, 1164, 4705, 1163, 4708, 4710, 4709, 1121, 4714, 4706, 4735, 4748, 8041, 4751, 1110, 4753, 8041, 4771, 4780, 1102, 4754, 1054, 1037, 1034, 1021, 8041, 4784, 984, 4788, 4792, 4796, 4187, 4801, 963, 944, 4276, 4776, 4806, 4757, 8041, 4773, 932, 4790, 4371, 4777, 4792, 4799, 4794, 4796, 4800, 4803, 4815, 4804, 912, 4801, 4824, 8041, 893, 4807, 4829, 4813, 4827, 4828, 882, 874, 856, 839, 833, 4872, 8041, 4887, 8041, 4890, 4891, 4899, 4270, 838, 4904, 806, 4537, 4802, 4909, 0, 0, 4864, 758, 4862, 4847, 4879, 4895, 4861, 4897, 4900, 750, 737, 4898, 4908, 4910, 4911, 4913, 4915, 4916, 4899, 670, 4936, 653, 4955, 8041, 4960, 8041, 561, 505, 494, 4928, 462, 4897, 408, 4930, 4947, 338, 327, 308, 269, 242, 4956, 4932, 4959, 4961, 4962, 4934, 4944, 4983, 4989, 4977, 8041, 204, 4976, 189, 4975, 4980, 4983, 165, 131, 128, 5014, 8041, 5022, 8041, 5003, 5004, 113, 5009, 5010, 4972, 4992, 5017, 105, 50, 5020, 5016, 5022, 5027, 42, 4668, 8041, 4701, 8041, 18, 8041, 8041, 8041, 5087, 5099, 5111, 5123, 5135, 5147, 5159, 5171, 5183, 5195, 5207, 5219, 5231, 5243, 5255, 5267, 5279, 5291, 5296, 5302, 5308, 5317, 5329, 5341, 5353, 5365, 5377, 5389, 5401, 5411, 5419, 5428, 5433, 5438, 5443, 5451, 5463, 5475, 5487, 5499, 5511, 5523, 5535, 5547, 5559, 5571, 5583, 5595, 5607, 5619, 5631, 5643, 5655, 5667, 5679, 5691, 5701, 5702, 5711, 5723, 5735, 5747, 5759, 5771, 5783, 5795, 5807, 5819, 5831, 5843, 5855, 5867, 5879, 5891, 5903, 5915, 5927, 5939, 5951, 5963, 5975, 5987, 5999, 6011, 6023, 6033, 6036, 6045, 6057, 6069, 6081, 6093, 6105, 6117, 6129, 6141, 6153, 6165, 6177, 6189, 6201, 6213, 6225, 6237, 6249, 6261, 6273, 6285, 6297, 6309, 6321, 6333, 6345, 6357, 6369, 6381, 6393, 6398, 6407, 6419, 6431, 6443, 6455, 6467, 6479, 6491, 6503, 6515, 6527, 6539, 6551, 6563, 6575, 6587, 6599, 6611, 6623, 6635, 6647, 6659, 6671, 6683, 6695, 6707, 6719, 6731, 6743, 6755, 6767, 6779, 6783, 6792, 6804, 6816, 6828, 6840, 6852, 6864, 6876, 6888, 6900, 6912, 6924, 6936, 6948, 6960, 6972, 6984, 6996, 7008, 7020, 7032, 7044, 7056, 7068, 7080, 7092, 7104, 7116, 7128, 7140, 7152, 7164, 7176, 7188, 7193, 7202, 7214, 7226, 7238, 7250, 7262, 7274, 7286, 7298, 7310, 7322, 7334, 7346, 7358, 7370, 7382, 7394, 7406, 7418, 7430, 7442, 7454, 7466, 7478, 7490, 7502, 7514, 7526, 7538, 7550, 7562, 7574, 7586, 7598, 7610, 7622, 7634, 7639, 7648, 7660, 7672, 7684, 7696, 7708, 7720, 7732, 7744, 7756, 7768, 7780, 7792, 7804, 7816, 7828, 7840, 7852, 7864, 7876, 7888, 7900, 7912, 7924, 7936, 7948, 7960, 7972, 7977, 7983, 7992, 8004, 8016, 8028 } ; static const flex_int16_t yy_def[1825] = { 0, 1567, 1567, 1568, 1568, 2, 5, 5, 5, 1569, 1569, 1570, 1570, 1571, 1571, 1572, 1572, 1572, 1572, 1572, 1572, 1573, 1573, 1574, 1575, 1576, 1576, 1577, 1577, 1578, 1578, 1579, 1579, 1580, 1580, 1581, 1581, 1566, 37, 1582, 1582, 1583, 1583, 1584, 1584, 1572, 1572, 1566, 1566, 1566, 1566, 1566, 1566, 1585, 1566, 1566, 1586, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1587, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1588, 1566, 1589, 1590, 1591, 1592, 1593, 1594, 1591, 1589, 1593, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1595, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1596, 1596, 1596, 1596, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1585, 1597, 1598, 1599, 1586, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1600, 1601, 1566, 1587, 1588, 1566, 1602, 1603, 1604, 1605, 1590, 1603, 1606, 1607, 1608, 1603, 1609, 1610, 1611, 1612, 1609, 1610, 1613, 1614, 1615, 1616, 1616, 1617, 1618, 1616, 1619, 1620, 1608, 1608, 1608, 1608, 1608, 1608, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1621, 1566, 1566, 1566, 1622, 1623, 1623, 1623, 1623, 1623, 1623, 1566, 1566, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1566, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 284, 1624, 1566, 1625, 1626, 1627, 1603, 1628, 1617, 1626, 1613, 1629, 1627, 1627, 1617, 1629, 1627, 1630, 1613, 1631, 1632, 1632, 1617, 1631, 1633, 1634, 1635, 1636, 1637, 1638, 1636, 1634, 1639, 1637, 1603, 1640, 1641, 1638, 1638, 1617, 1642, 1638, 1613, 1566, 1639, 1639, 1566, 1639, 1635, 1635, 1617, 1639, 1635, 1643, 1617, 1644, 1643, 1643, 1617, 1645, 1644, 1566, 1644, 1643, 1617, 1646, 1603, 1647, 1648, 1649, 1650, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1651, 1652, 1652, 1652, 1652, 1566, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1566, 1566, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1654, 1655, 1656, 1655, 1657, 1656, 1656, 1657, 1656, 1658, 1613, 1645, 1617, 1617, 1657, 1657, 1566, 1657, 1617, 1566, 1656, 1617, 1659, 1659, 1566, 1617, 1566, 1660, 1661, 1662, 1661, 1663, 1662, 1662, 1663, 1662, 1664, 1665, 1666, 1664, 1665, 1667, 1668, 1666, 1666, 1669, 1666, 1663, 1663, 1663, 1667, 1613, 1670, 1668, 1668, 1617, 1670, 1668, 1617, 1669, 1566, 1669, 1666, 1617, 1566, 1566, 1566, 1663, 1566, 1617, 1662, 1617, 1671, 1672, 1671, 1672, 1672, 1671, 1671, 1645, 1566, 1672, 1566, 1673, 1674, 1675, 1674, 1613, 1676, 1675, 1675, 1617, 1676, 1675, 1677, 1678, 1678, 1679, 1680, 1681, 1682, 1682, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1566, 1566, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1566, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1566, 1684, 1684, 1684, 1684, 1566, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1566, 1684, 1684, 1566, 1684, 1684, 1684, 1684, 1685, 1686, 1687, 1686, 1688, 1687, 1687, 1688, 1687, 1688, 1688, 1688, 1687, 1645, 1566, 1688, 1566, 1689, 1690, 1691, 1690, 1692, 1691, 1691, 1692, 1691, 1692, 1692, 1692, 1691, 1689, 1693, 1694, 1689, 1693, 1695, 1696, 1694, 1694, 1697, 1694, 1695, 1698, 1696, 1696, 1698, 1696, 1697, 1697, 1694, 1692, 1698, 1698, 1566, 1698, 1699, 1566, 1696, 1699, 1697, 1566, 1700, 1701, 1700, 1701, 1701, 1700, 1701, 1700, 1702, 1703, 1704, 1703, 1705, 1704, 1704, 1705, 1704, 1705, 1705, 1566, 1705, 1699, 1566, 1704, 1699, 1706, 1707, 1707, 1708, 1709, 1708, 1710, 1711, 1709, 1709, 1699, 1711, 1709, 1712, 1713, 1714, 1715, 1689, 1712, 1712, 1689, 1689, 1689, 1689, 1689, 1689, 1712, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1716, 1566, 1566, 1566, 1566, 1566, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1566, 1717, 1717, 1717, 1717, 1717, 1566, 1566, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1566, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1566, 1717, 1717, 1718, 1719, 1720, 1719, 1721, 1720, 1720, 1721, 1721, 1721, 1720, 1721, 1722, 1723, 1724, 1723, 1725, 1724, 1724, 1725, 1725, 1725, 1724, 1725, 1726, 1727, 1726, 1728, 1729, 1730, 1731, 1731, 1732, 1729, 1733, 1730, 1730, 1733, 1732, 1731, 1733, 1733, 1730, 1732, 1733, 1566, 1734, 1735, 1735, 1734, 1735, 1734, 1736, 1737, 1738, 1737, 1739, 1738, 1738, 1739, 1739, 1739, 1738, 1739, 1566, 1740, 1741, 1741, 1742, 1743, 1742, 1744, 1743, 1743, 1744, 1744, 1744, 1566, 1745, 1566, 1743, 1745, 1746, 1747, 1748, 1747, 1749, 1750, 1748, 1748, 1745, 1750, 1751, 1751, 1746, 1751, 1751, 1751, 1751, 1751, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1566, 1566, 1566, 1566, 1752, 1752, 1752, 1752, 1752, 1752, 1566, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1566, 1566, 1752, 1752, 1752, 1752, 1752, 1752, 1566, 1752, 1752, 1753, 1754, 1755, 1754, 1756, 1755, 1755, 1745, 1756, 1755, 1756, 1756, 1566, 1756, 1755, 1756, 1755, 1756, 1751, 1757, 1758, 1757, 1759, 1758, 1758, 1745, 1759, 1758, 1759, 1759, 1566, 1759, 1758, 1759, 1758, 1759, 1760, 1761, 1760, 1762, 1763, 1764, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1769, 1771, 1770, 1770, 1745, 1771, 1770, 1772, 1773, 1772, 1772, 1773, 1773, 1771, 1771, 1566, 1771, 1770, 1772, 1771, 1770, 1773, 1771, 1774, 1775, 1774, 1775, 1775, 1774, 1775, 1774, 1776, 1777, 1778, 1777, 1779, 1778, 1778, 1745, 1779, 1778, 1779, 1779, 1566, 1779, 1778, 1779, 1778, 1779, 1780, 1781, 1781, 1782, 1783, 1782, 1784, 1783, 1783, 1745, 1784, 1783, 1784, 1784, 1566, 1784, 1783, 1784, 1783, 1785, 1786, 1787, 1786, 1788, 1787, 1787, 1745, 1788, 1787, 1788, 1788, 1566, 1788, 1745, 1787, 1566, 1789, 1789, 1785, 1789, 1789, 1789, 1789, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1566, 1790, 1790, 1566, 1566, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1566, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1566, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1566, 1790, 1790, 1790, 1790, 1790, 1790, 1566, 1791, 1745, 1792, 1566, 1791, 1745, 1792, 1566, 1793, 1745, 1794, 1566, 1793, 1745, 1794, 1566, 1795, 1796, 1797, 1798, 1798, 1745, 1799, 1798, 1800, 1800, 1800, 1801, 1802, 1803, 1804, 1804, 1745, 1797, 1804, 1805, 1745, 1806, 1566, 1805, 1745, 1807, 1745, 1808, 1566, 1806, 1566, 1809, 1745, 1810, 1566, 1811, 1745, 1812, 1566, 1811, 1745, 1812, 1566, 1813, 1745, 1814, 1566, 1813, 1745, 1814, 1566, 1815, 1745, 1816, 1566, 1815, 1745, 1816, 1566, 1817, 1817, 1818, 1817, 1818, 1818, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1566, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1820, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1797, 1797, 1566, 1797, 1745, 1799, 1566, 1799, 1798, 1745, 1801, 1803, 1803, 1803, 1745, 1566, 1804, 1745, 1817, 1817, 1817, 1566, 1566, 1821, 1822, 1566, 1566, 1566, 1819, 1566, 1819, 1819, 1819, 1566, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1566, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1797, 1566, 1799, 1566, 1818, 1817, 1818, 1566, 1821, 1821, 1822, 1822, 1566, 1566, 1823, 1824, 1819, 1819, 1819, 1566, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1818, 1566, 1821, 1566, 1822, 1566, 1566, 1823, 1824, 1819, 1819, 1566, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1566, 1566, 1823, 1824, 1819, 1566, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1566, 1566, 1823, 1566, 1824, 1566, 1819, 1819, 1819, 1819, 1819, 1566, 1566, 1819, 1819, 1819, 1819, 1566, 1566, 1819, 1819, 1566, 1566, 1566, 1566, 1819, 1566, 1566, 0, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566 } ; static const flex_int16_t yy_nxt[8119] = { 0, 48, 48, 49, 50, 48, 48, 48, 48, 48, 48, 48, 51, 48, 48, 48, 48, 52, 52, 48, 48, 48, 48, 48, 79, 83, 79, 83, 75, 87, 146, 146, 216, 80, 81, 80, 81, 148, 88, 217, 250, 250, 76, 106, 107, 106, 108, 89, 124, 54, 48, 48, 48, 118, 117, 118, 119, 75, 87, 87, 253, 148, 125, 125, 253, 146, 146, 88, 88, 148, 76, 84, 85, 84, 85, 90, 55, 48, 48, 48, 55, 50, 48, 48, 48, 48, 48, 48, 48, 51, 48, 48, 48, 48, 52, 52, 48, 48, 48, 48, 48, 75, 87, 124, 90, 90, 253, 138, 144, 324, 253, 88, 149, 150, 325, 76, 139, 125, 125, 140, 89, 145, 145, 148, 148, 195, 54, 48, 48, 48, 75, 196, 148, 87, 201, 91, 202, 91, 91, 194, 195, 203, 88, 76, 1550, 91, 196, 1549, 90, 232, 148, 232, 233, 141, 48, 48, 48, 49, 50, 48, 48, 48, 48, 48, 48, 48, 51, 48, 48, 48, 48, 52, 52, 48, 48, 48, 48, 48, 114, 90, 115, 87, 138, 91, 148, 91, 91, 148, 398, 115, 88, 139, 180, 91, 140, 205, 181, 206, 410, 411, 410, 115, 207, 54, 48, 48, 48, 91, 148, 209, 87, 211, 246, 87, 246, 247, 218, 398, 260, 88, 260, 180, 88, 148, 260, 181, 143, 90, 141, 143, 115, 48, 48, 48, 55, 50, 48, 48, 48, 48, 48, 48, 48, 51, 48, 48, 48, 48, 52, 52, 48, 48, 48, 48, 48, 91, 90, 403, 148, 90, 148, 148, 148, 109, 107, 109, 108, 148, 110, 162, 148, 148, 148, 152, 153, 111, 148, 170, 148, 163, 54, 48, 48, 48, 112, 188, 403, 111, 148, 174, 154, 175, 164, 178, 165, 148, 179, 176, 162, 324, 155, 251, 152, 153, 325, 170, 148, 163, 48, 49, 234, 156, 234, 188, 252, 252, 111, 174, 154, 175, 164, 178, 165, 148, 179, 176, 177, 148, 148, 155, 57, 58, 59, 60, 61, 62, 63, 235, 64, 156, 309, 65, 66, 67, 68, 69, 148, 70, 71, 72, 73, 262, 74, 236, 177, 236, 233, 148, 237, 57, 58, 59, 60, 61, 62, 63, 235, 64, 309, 65, 66, 67, 68, 69, 238, 70, 71, 72, 73, 262, 74, 48, 48, 49, 50, 48, 48, 48, 48, 48, 48, 48, 51, 48, 48, 48, 48, 52, 52, 48, 48, 48, 48, 48, 148, 148, 148, 148, 144, 157, 148, 189, 201, 297, 321, 269, 158, 171, 190, 322, 159, 145, 145, 160, 172, 173, 161, 148, 191, 54, 48, 48, 48, 220, 221, 220, 222, 148, 157, 253, 189, 223, 297, 253, 269, 158, 171, 190, 159, 254, 254, 160, 172, 173, 161, 287, 191, 48, 48, 48, 55, 50, 48, 48, 48, 48, 48, 48, 48, 51, 48, 48, 48, 48, 52, 52, 48, 48, 48, 48, 48, 148, 201, 287, 202, 148, 149, 150, 239, 203, 239, 324, 242, 327, 242, 253, 325, 148, 166, 253, 328, 167, 224, 148, 168, 1528, 54, 48, 48, 48, 169, 1527, 182, 335, 240, 148, 183, 148, 241, 243, 336, 517, 263, 340, 259, 148, 148, 166, 184, 167, 148, 148, 168, 265, 48, 97, 98, 99, 169, 100, 264, 182, 101, 240, 266, 183, 100, 241, 243, 102, 102, 263, 259, 289, 291, 103, 184, 216, 104, 100, 194, 195, 265, 205, 349, 206, 216, 196, 264, 324, 207, 148, 266, 349, 325, 330, 331, 330, 332, 378, 1526, 289, 291, 333, 250, 250, 379, 104, 100, 126, 126, 127, 128, 126, 126, 126, 126, 126, 126, 126, 129, 126, 126, 130, 126, 131, 131, 126, 126, 126, 126, 126, 132, 132, 132, 132, 133, 134, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 135, 126, 126, 132, 132, 132, 132, 132, 133, 134, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 126, 148, 148, 148, 148, 148, 148, 1525, 148, 270, 209, 193, 342, 185, 148, 183, 296, 343, 490, 164, 186, 192, 267, 271, 148, 272, 273, 184, 1011, 268, 187, 338, 339, 338, 340, 362, 363, 362, 270, 288, 193, 1011, 185, 364, 183, 296, 490, 164, 186, 192, 267, 271, 253, 272, 273, 184, 253, 268, 187, 208, 208, 209, 210, 211, 208, 208, 208, 288, 213, 208, 208, 208, 208, 208, 208, 214, 214, 208, 208, 208, 208, 208, 256, 257, 148, 148, 258, 148, 148, 148, 148, 148, 275, 148, 148, 148, 310, 274, 299, 417, 417, 276, 281, 311, 148, 290, 298, 208, 208, 208, 256, 257, 148, 351, 258, 352, 282, 371, 1277, 372, 353, 275, 148, 327, 373, 310, 274, 299, 468, 276, 496, 281, 311, 290, 298, 208, 208, 208, 209, 214, 211, 208, 208, 208, 282, 218, 208, 208, 208, 208, 208, 208, 214, 214, 208, 208, 208, 208, 208, 148, 277, 148, 148, 1475, 148, 148, 827, 827, 313, 253, 148, 278, 148, 253, 315, 148, 148, 283, 284, 1473, 303, 292, 293, 502, 208, 208, 208, 148, 148, 279, 503, 280, 312, 148, 285, 286, 294, 313, 302, 295, 278, 828, 828, 315, 308, 416, 283, 284, 303, 292, 148, 293, 208, 225, 209, 225, 211, 279, 148, 280, 312, 218, 285, 286, 294, 148, 302, 295, 148, 148, 148, 300, 308, 416, 148, 226, 148, 301, 314, 304, 318, 305, 227, 316, 251, 308, 228, 148, 383, 229, 384, 232, 230, 232, 233, 385, 306, 252, 252, 231, 300, 307, 829, 829, 226, 301, 148, 314, 304, 318, 305, 227, 316, 308, 228, 148, 246, 229, 246, 247, 230, 327, 283, 317, 306, 148, 148, 231, 496, 307, 355, 356, 355, 357, 366, 367, 366, 368, 358, 285, 286, 1475, 369, 511, 1473, 374, 221, 374, 372, 418, 509, 283, 317, 373, 380, 381, 380, 372, 201, 253, 493, 324, 373, 253, 376, 494, 325, 285, 286, 341, 341, 209, 344, 342, 341, 341, 341, 418, 346, 341, 341, 341, 341, 341, 341, 347, 347, 341, 341, 341, 341, 341, 209, 414, 342, 407, 209, 408, 342, 343, 148, 376, 236, 343, 236, 233, 399, 237, 400, 419, 409, 409, 1419, 390, 234, 1419, 234, 341, 341, 341, 209, 414, 342, 238, 407, 396, 407, 343, 504, 505, 504, 376, 1419, 510, 399, 499, 400, 209, 419, 342, 500, 235, 390, 397, 343, 341, 341, 341, 209, 347, 342, 341, 341, 341, 396, 343, 341, 341, 341, 341, 341, 341, 347, 347, 341, 341, 341, 341, 341, 388, 235, 401, 397, 148, 148, 148, 389, 253, 148, 402, 423, 253, 376, 234, 242, 234, 242, 254, 254, 422, 376, 424, 335, 474, 341, 341, 341, 388, 253, 336, 401, 209, 253, 520, 389, 830, 830, 402, 521, 423, 235, 243, 515, 516, 515, 148, 253, 422, 413, 424, 253, 474, 341, 341, 386, 209, 386, 342, 341, 341, 341, 341, 343, 341, 341, 341, 341, 341, 341, 235, 243, 341, 341, 341, 341, 341, 209, 413, 342, 239, 415, 239, 209, 343, 342, 616, 148, 148, 148, 343, 148, 239, 404, 239, 404, 425, 148, 391, 616, 616, 148, 341, 341, 341, 341, 240, 393, 148, 415, 241, 148, 392, 148, 428, 324, 394, 395, 240, 405, 325, 430, 241, 406, 148, 425, 420, 391, 148, 426, 341, 429, 421, 427, 148, 240, 393, 434, 148, 241, 392, 148, 428, 433, 394, 395, 148, 240, 405, 430, 435, 241, 406, 439, 148, 420, 148, 426, 431, 429, 421, 427, 432, 148, 148, 437, 434, 148, 148, 148, 436, 433, 457, 438, 148, 442, 455, 441, 148, 435, 440, 460, 439, 148, 324, 148, 431, 148, 148, 325, 432, 148, 458, 437, 148, 456, 459, 148, 436, 463, 148, 457, 438, 442, 455, 148, 441, 461, 440, 148, 460, 148, 462, 466, 443, 444, 445, 446, 447, 448, 458, 148, 449, 456, 148, 459, 450, 463, 148, 451, 464, 148, 452, 453, 148, 461, 454, 465, 148, 469, 462, 148, 466, 443, 444, 445, 446, 447, 448, 467, 473, 449, 470, 148, 450, 148, 477, 451, 464, 148, 452, 453, 148, 475, 454, 148, 465, 469, 478, 471, 148, 476, 148, 472, 148, 148, 148, 467, 479, 473, 470, 481, 148, 148, 477, 486, 148, 480, 148, 603, 482, 483, 475, 485, 216, 608, 484, 478, 471, 476, 148, 523, 472, 491, 376, 488, 487, 479, 376, 351, 481, 533, 489, 216, 486, 480, 534, 603, 482, 483, 523, 485, 376, 608, 484, 543, 606, 498, 331, 498, 499, 491, 544, 488, 487, 500, 507, 508, 507, 607, 489, 556, 557, 556, 509, 498, 331, 498, 499, 512, 513, 512, 499, 500, 510, 606, 905, 500, 338, 339, 338, 340, 525, 367, 525, 526, 376, 561, 607, 917, 527, 519, 519, 209, 528, 520, 519, 519, 519, 376, 530, 519, 519, 519, 519, 519, 519, 531, 531, 519, 519, 519, 519, 519, 536, 356, 536, 537, 540, 363, 540, 351, 538, 533, 376, 376, 541, 552, 534, 546, 547, 546, 548, 376, 553, 558, 550, 549, 537, 519, 519, 519, 541, 538, 536, 356, 536, 537, 554, 555, 554, 537, 538, 540, 363, 540, 538, 559, 560, 559, 376, 541, 253, 376, 376, 541, 253, 519, 519, 519, 209, 531, 520, 519, 519, 519, 617, 521, 519, 519, 519, 519, 519, 519, 531, 531, 519, 519, 519, 519, 519, 561, 558, 526, 525, 367, 525, 526, 527, 541, 148, 378, 527, 562, 563, 562, 526, 371, 568, 565, 550, 527, 930, 636, 566, 1419, 519, 519, 519, 569, 381, 569, 565, 570, 221, 570, 565, 566, 378, 376, 579, 566, 573, 574, 573, 568, 383, 580, 576, 407, 568, 615, 636, 577, 519, 569, 381, 569, 565, 582, 583, 582, 584, 566, 616, 616, 360, 585, 519, 586, 209, 586, 520, 519, 519, 519, 519, 521, 519, 519, 519, 519, 519, 519, 640, 148, 519, 519, 519, 519, 519, 589, 209, 590, 520, 209, 253, 520, 591, 521, 253, 209, 521, 520, 209, 624, 520, 209, 521, 520, 618, 521, 148, 640, 521, 148, 519, 519, 519, 519, 593, 209, 626, 520, 592, 209, 376, 520, 521, 209, 376, 520, 521, 624, 623, 594, 521, 604, 209, 148, 520, 148, 376, 595, 519, 521, 596, 605, 148, 593, 597, 626, 592, 209, 628, 520, 639, 404, 598, 404, 521, 599, 623, 594, 627, 609, 604, 609, 612, 600, 612, 595, 376, 671, 596, 605, 253, 253, 601, 597, 253, 253, 628, 405, 639, 602, 598, 406, 148, 599, 619, 620, 627, 621, 148, 613, 629, 600, 610, 148, 611, 671, 148, 614, 148, 621, 601, 622, 622, 148, 625, 633, 405, 602, 631, 630, 406, 632, 148, 148, 148, 148, 148, 148, 613, 629, 610, 635, 611, 637, 148, 614, 148, 148, 634, 148, 642, 641, 647, 625, 633, 644, 148, 631, 630, 632, 148, 638, 643, 148, 148, 148, 651, 148, 148, 645, 635, 148, 637, 148, 148, 148, 634, 664, 642, 641, 649, 647, 650, 646, 644, 652, 648, 653, 148, 638, 658, 643, 148, 654, 651, 659, 148, 148, 645, 655, 667, 660, 666, 148, 665, 662, 664, 656, 649, 148, 650, 646, 148, 652, 648, 657, 653, 661, 658, 668, 148, 654, 148, 659, 148, 663, 148, 655, 676, 667, 660, 148, 665, 148, 662, 672, 656, 673, 675, 148, 148, 148, 678, 657, 669, 661, 670, 668, 674, 148, 680, 148, 148, 663, 683, 677, 676, 685, 148, 682, 148, 148, 681, 679, 672, 148, 673, 675, 148, 148, 148, 148, 669, 817, 670, 148, 674, 148, 686, 680, 684, 687, 688, 677, 690, 689, 685, 692, 682, 691, 681, 679, 693, 693, 148, 695, 148, 201, 148, 701, 148, 817, 148, 813, 702, 696, 686, 694, 684, 697, 687, 688, 690, 689, 148, 148, 376, 691, 327, 706, 331, 706, 707, 698, 699, 704, 327, 708, 511, 710, 508, 710, 813, 704, 696, 711, 694, 711, 697, 661, 510, 502, 707, 706, 331, 706, 707, 708, 503, 814, 815, 708, 698, 699, 712, 513, 712, 707, 713, 714, 713, 511, 708, 504, 505, 504, 376, 661, 711, 710, 508, 710, 715, 716, 715, 376, 376, 711, 814, 815, 711, 712, 513, 712, 707, 515, 516, 515, 209, 708, 718, 216, 556, 557, 556, 719, 216, 376, 721, 723, 367, 723, 724, 721, 727, 363, 727, 725, 561, 755, 724, 935, 728, 558, 543, 725, 723, 367, 723, 724, 728, 742, 552, 558, 725, 729, 563, 729, 724, 748, 728, 376, 376, 725, 717, 717, 209, 730, 718, 717, 717, 717, 376, 732, 717, 717, 717, 717, 717, 717, 733, 733, 717, 717, 717, 717, 717, 351, 148, 735, 738, 356, 738, 739, 736, 351, 148, 735, 740, 727, 363, 727, 736, 744, 547, 744, 745, 728, 550, 848, 739, 746, 717, 717, 717, 740, 738, 356, 738, 739, 749, 555, 749, 739, 740, 750, 560, 750, 740, 543, 752, 753, 752, 728, 324, 148, 742, 848, 754, 325, 717, 717, 717, 209, 733, 718, 717, 717, 717, 148, 719, 717, 717, 717, 717, 717, 717, 733, 733, 717, 717, 717, 717, 717, 755, 756, 745, 744, 547, 744, 745, 746, 754, 552, 816, 746, 757, 758, 757, 745, 748, 371, 148, 762, 746, 759, 760, 759, 763, 717, 717, 717, 148, 748, 749, 555, 749, 739, 750, 560, 750, 858, 740, 816, 378, 378, 728, 729, 563, 729, 724, 765, 765, 148, 826, 725, 148, 717, 766, 381, 766, 762, 767, 574, 767, 148, 763, 826, 826, 858, 765, 766, 381, 766, 762, 768, 221, 768, 762, 763, 767, 574, 767, 763, 383, 579, 770, 818, 765, 832, 579, 771, 773, 775, 583, 775, 776, 773, 779, 780, 779, 777, 782, 371, 776, 945, 781, 783, 792, 777, 775, 583, 775, 776, 781, 793, 818, 832, 777, 784, 785, 784, 776, 907, 508, 907, 849, 777, 717, 786, 209, 786, 718, 717, 717, 717, 717, 719, 717, 717, 717, 717, 717, 717, 148, 998, 717, 717, 717, 717, 717, 589, 589, 789, 789, 849, 148, 834, 790, 790, 795, 796, 795, 797, 800, 800, 801, 801, 798, 148, 148, 802, 802, 209, 998, 718, 717, 717, 717, 717, 719, 209, 209, 718, 718, 209, 834, 718, 719, 719, 148, 209, 719, 718, 209, 209, 718, 718, 719, 837, 803, 719, 719, 209, 717, 718, 209, 805, 718, 819, 719, 819, 609, 719, 609, 809, 148, 821, 806, 821, 804, 831, 148, 810, 148, 376, 807, 808, 837, 803, 868, 812, 811, 360, 148, 612, 805, 612, 148, 823, 833, 823, 822, 838, 809, 610, 806, 611, 804, 820, 831, 407, 810, 825, 807, 808, 376, 148, 835, 868, 812, 811, 613, 824, 621, 836, 826, 826, 833, 148, 614, 822, 838, 610, 148, 611, 621, 820, 622, 622, 148, 839, 842, 148, 148, 852, 835, 148, 840, 148, 845, 613, 824, 841, 836, 148, 843, 844, 614, 148, 148, 376, 148, 148, 846, 148, 148, 850, 847, 148, 839, 851, 148, 852, 148, 854, 148, 840, 855, 845, 148, 853, 841, 856, 148, 843, 844, 148, 861, 859, 148, 148, 857, 846, 148, 872, 850, 847, 148, 865, 851, 148, 148, 148, 854, 860, 862, 855, 863, 853, 148, 864, 856, 866, 867, 869, 861, 148, 859, 873, 857, 870, 148, 148, 148, 148, 871, 148, 865, 148, 880, 148, 875, 860, 862, 874, 863, 876, 148, 864, 878, 866, 867, 148, 869, 148, 877, 873, 879, 870, 148, 148, 881, 148, 882, 871, 884, 148, 883, 880, 148, 875, 885, 148, 874, 148, 876, 148, 887, 878, 148, 888, 148, 148, 877, 895, 891, 879, 148, 148, 886, 881, 148, 882, 148, 884, 892, 883, 148, 889, 782, 885, 957, 148, 890, 894, 327, 887, 893, 896, 888, 324, 897, 902, 867, 891, 325, 201, 886, 899, 904, 331, 904, 905, 900, 892, 148, 889, 327, 907, 508, 907, 890, 894, 216, 902, 893, 976, 896, 972, 897, 914, 867, 904, 331, 904, 905, 908, 513, 908, 905, 909, 716, 909, 908, 513, 908, 905, 713, 714, 713, 909, 716, 909, 209, 216, 911, 916, 367, 916, 917, 912, 914, 919, 363, 919, 916, 367, 916, 917, 920, 563, 920, 917, 919, 363, 919, 921, 560, 921, 920, 563, 920, 917, 209, 922, 911, 351, 351, 926, 926, 923, 148, 977, 927, 927, 376, 360, 924, 924, 929, 356, 929, 930, 209, 924, 911, 543, 543, 579, 383, 912, 951, 376, 932, 932, 954, 952, 924, 924, 934, 547, 934, 935, 929, 356, 929, 930, 937, 555, 937, 930, 939, 753, 939, 934, 547, 934, 935, 940, 758, 940, 935, 941, 760, 941, 937, 555, 937, 930, 921, 560, 921, 939, 753, 939, 942, 943, 942, 940, 758, 940, 935, 941, 760, 941, 947, 381, 947, 945, 948, 574, 948, 947, 381, 947, 945, 948, 574, 948, 949, 221, 949, 945, 956, 583, 956, 957, 579, 959, 780, 959, 959, 780, 959, 954, 956, 583, 956, 957, 960, 785, 960, 957, 961, 962, 961, 960, 785, 960, 957, 910, 963, 209, 963, 911, 910, 910, 910, 910, 912, 910, 910, 910, 910, 910, 910, 376, 783, 910, 910, 910, 910, 910, 589, 589, 966, 966, 792, 783, 378, 967, 967, 792, 378, 969, 971, 796, 971, 972, 969, 974, 975, 974, 971, 796, 971, 972, 376, 910, 910, 910, 910, 978, 979, 978, 972, 800, 984, 981, 987, 988, 987, 989, 982, 985, 209, 800, 911, 981, 999, 376, 756, 912, 982, 552, 800, 910, 981, 209, 209, 911, 911, 982, 1000, 756, 912, 912, 1001, 552, 209, 990, 911, 209, 209, 911, 911, 912, 558, 999, 912, 912, 558, 209, 991, 911, 800, 819, 981, 819, 912, 511, 1000, 982, 992, 993, 821, 1001, 821, 511, 990, 995, 994, 1002, 148, 1002, 997, 1004, 996, 1004, 823, 1012, 823, 991, 1006, 148, 1006, 1009, 148, 1010, 1014, 822, 992, 1015, 993, 148, 148, 820, 148, 1003, 995, 994, 1011, 1016, 824, 997, 996, 1005, 148, 148, 1012, 1013, 1013, 148, 148, 148, 1028, 1007, 1017, 1014, 822, 148, 1015, 148, 1022, 820, 148, 1023, 1003, 1027, 1020, 1024, 1016, 824, 1025, 1026, 1005, 148, 1018, 1019, 148, 148, 148, 148, 1028, 1007, 1021, 1017, 148, 1032, 1030, 148, 1022, 148, 1035, 1023, 148, 148, 1027, 1020, 1024, 148, 1029, 1031, 1037, 1034, 1018, 1019, 148, 148, 1036, 148, 1033, 1220, 1021, 148, 148, 1038, 1032, 1030, 1040, 1041, 1042, 148, 148, 1039, 148, 148, 148, 148, 1029, 1031, 1043, 1037, 1034, 1045, 148, 148, 1036, 1046, 1033, 1050, 1220, 1048, 148, 1038, 1047, 148, 1049, 1040, 1041, 1042, 1044, 1039, 148, 148, 1051, 148, 1052, 1057, 148, 1043, 148, 1053, 1045, 148, 1054, 148, 1046, 1050, 148, 1048, 148, 148, 1055, 1047, 1049, 1056, 1058, 1062, 1044, 148, 148, 1059, 148, 1051, 1052, 1064, 1057, 148, 1067, 1053, 1063, 1060, 1065, 1054, 1061, 148, 148, 1076, 1068, 148, 1066, 1055, 148, 1056, 1058, 148, 1062, 148, 1069, 1070, 1059, 148, 407, 1064, 407, 407, 1075, 407, 1063, 1060, 1074, 1065, 1061, 148, 1071, 1076, 1072, 148, 376, 1066, 360, 572, 1073, 327, 201, 1077, 1079, 1069, 1070, 327, 1082, 1080, 1084, 1085, 1084, 1086, 1082, 1224, 1074, 1224, 1087, 376, 1071, 376, 1072, 511, 1089, 1090, 1089, 510, 1073, 1086, 1091, 1077, 1091, 511, 1087, 1092, 331, 1092, 1086, 376, 1091, 376, 1225, 1087, 1093, 508, 1093, 1094, 513, 1094, 1086, 376, 1091, 216, 1219, 1087, 1095, 716, 1095, 209, 1100, 1097, 360, 1221, 1091, 216, 1098, 1102, 1103, 1102, 1104, 1225, 1100, 558, 376, 1105, 1107, 1108, 1107, 561, 1109, 1104, 1219, 518, 1109, 558, 1105, 1110, 367, 1110, 1104, 1221, 1109, 376, 376, 1105, 1111, 363, 1111, 1112, 563, 1112, 1104, 1002, 1109, 1002, 376, 1105, 1113, 560, 1113, 1115, 1116, 1117, 360, 148, 1109, 1240, 1118, 1120, 1121, 1120, 1122, 1115, 351, 1117, 1125, 1105, 543, 1003, 1123, 1126, 1239, 148, 552, 1128, 1130, 1131, 1130, 1132, 550, 1139, 1135, 1235, 1133, 543, 1240, 1136, 1137, 356, 1137, 1135, 1128, 1141, 1142, 1141, 1136, 755, 1003, 1132, 1239, 1143, 756, 552, 1133, 1144, 547, 1144, 1132, 1143, 1139, 756, 1235, 1133, 1145, 555, 1145, 1135, 1143, 1146, 753, 1146, 1136, 1147, 758, 1147, 1132, 1143, 1148, 760, 1148, 1133, 1149, 943, 1149, 371, 1139, 1151, 378, 378, 1143, 1360, 1152, 148, 148, 1154, 1154, 1155, 381, 1155, 1151, 1156, 574, 1156, 1222, 1152, 1222, 148, 579, 1154, 1157, 221, 1157, 1151, 383, 1162, 1159, 1228, 1152, 579, 1360, 1160, 1164, 1165, 1164, 1166, 1162, 1169, 1170, 1169, 1167, 782, 148, 1166, 1223, 1171, 783, 783, 1167, 1172, 583, 1172, 1166, 1171, 1171, 1228, 148, 1167, 1173, 780, 1173, 1174, 785, 1174, 1166, 148, 1171, 792, 792, 1167, 1175, 962, 1175, 1223, 1182, 1182, 376, 148, 1171, 1096, 1176, 209, 1176, 1097, 1096, 1096, 1096, 1096, 1098, 1096, 1096, 1096, 1096, 1096, 1096, 148, 1242, 1096, 1096, 1096, 1096, 1096, 589, 589, 1179, 1179, 572, 148, 1248, 1180, 1180, 1184, 1185, 1184, 1186, 1189, 1190, 1189, 976, 1187, 1186, 376, 376, 1191, 1242, 1187, 1257, 1096, 1096, 1096, 1096, 1192, 796, 1192, 1186, 977, 977, 1248, 1427, 1187, 984, 376, 1191, 1191, 1193, 975, 1193, 1199, 1194, 979, 1194, 1186, 1191, 360, 1257, 1096, 1187, 800, 984, 1196, 1201, 1202, 1201, 1203, 1197, 1199, 1211, 1427, 1204, 1206, 1207, 1206, 1209, 1208, 1203, 148, 376, 1208, 148, 1204, 1210, 988, 1210, 1203, 209, 209, 1097, 1097, 1204, 518, 148, 1098, 1098, 800, 209, 1196, 1097, 209, 1237, 1097, 1197, 1098, 1229, 209, 1098, 1097, 209, 209, 1097, 1097, 1098, 148, 1241, 1098, 1098, 1004, 1006, 1004, 1006, 1213, 1226, 148, 1226, 148, 1212, 148, 1237, 1218, 1230, 1236, 1229, 1215, 1233, 148, 148, 1231, 148, 376, 1214, 1232, 1241, 1238, 1234, 148, 1216, 1005, 148, 1213, 1217, 1007, 360, 1244, 1212, 148, 376, 148, 1218, 1230, 148, 1215, 148, 1233, 1227, 1231, 148, 1243, 1214, 1246, 1232, 1238, 1247, 1234, 1216, 148, 1005, 1245, 1217, 1007, 1249, 148, 1244, 148, 1251, 148, 148, 148, 1252, 148, 148, 1250, 1227, 148, 1254, 1243, 148, 1253, 1246, 1259, 1247, 148, 1258, 1256, 1261, 1245, 148, 1260, 1255, 148, 360, 148, 1251, 1262, 148, 148, 1252, 148, 1263, 1250, 1270, 148, 1268, 1254, 148, 1253, 1265, 148, 1259, 1271, 1258, 1264, 1256, 148, 148, 1260, 1255, 1267, 148, 1266, 148, 148, 1262, 1272, 248, 327, 1263, 1269, 148, 327, 1274, 1268, 1082, 1275, 1265, 1359, 1082, 1276, 1271, 1264, 1361, 201, 1273, 1079, 244, 1267, 511, 1266, 1080, 1280, 1281, 1280, 1272, 1091, 510, 1269, 1086, 1091, 1274, 376, 511, 1087, 1275, 1359, 360, 199, 1276, 1091, 1361, 319, 1273, 1278, 1279, 1278, 1086, 1084, 1085, 1084, 1086, 1087, 1089, 1090, 1089, 1087, 1282, 1283, 1282, 1086, 1091, 1284, 1285, 1284, 1087, 1092, 331, 1092, 1086, 1091, 1093, 508, 1093, 1087, 1094, 513, 1094, 1086, 1091, 1095, 716, 1095, 1087, 209, 216, 1097, 1431, 1091, 1374, 216, 1098, 1100, 1286, 1287, 1286, 1104, 1100, 1288, 1289, 1288, 1105, 561, 148, 1104, 148, 1109, 558, 558, 1105, 1102, 1103, 1102, 1104, 1109, 1109, 1431, 1374, 1105, 1290, 1291, 1290, 1104, 1107, 1108, 1107, 150, 1105, 1292, 1293, 1292, 1109, 1110, 367, 1110, 1104, 1109, 1111, 363, 1111, 1105, 1112, 563, 1112, 1104, 1109, 1113, 560, 1113, 1105, 1115, 148, 1117, 248, 1109, 1295, 1307, 1123, 1115, 1116, 1117, 148, 1296, 1109, 543, 1118, 1298, 1299, 1298, 1300, 1302, 1128, 1122, 245, 1301, 244, 543, 1105, 1120, 1121, 1120, 1122, 1304, 1128, 1305, 1389, 1105, 199, 756, 375, 1309, 1310, 1309, 1311, 351, 1143, 1125, 148, 1312, 1566, 93, 1126, 1313, 1314, 1313, 1132, 1315, 1316, 1315, 755, 1133, 1132, 93, 1389, 1143, 148, 1133, 1130, 1131, 1130, 1132, 1317, 1318, 1317, 1132, 1133, 550, 552, 1135, 1133, 93, 93, 1376, 1136, 1139, 1319, 1320, 1319, 1135, 1137, 356, 1137, 1135, 1136, 552, 756, 122, 1136, 1321, 1322, 1321, 1139, 1143, 1141, 1142, 1141, 1139, 1323, 1324, 1323, 1376, 1143, 122, 93, 93, 1143, 1144, 547, 1144, 1132, 1145, 555, 1145, 1135, 1133, 1146, 753, 1146, 1136, 1147, 758, 1147, 1132, 1143, 1148, 760, 1148, 1133, 1149, 943, 1149, 371, 1139, 1151, 378, 148, 1143, 117, 1152, 378, 1369, 1154, 1325, 1326, 1325, 1151, 1154, 1327, 1328, 1327, 1152, 1155, 381, 1155, 1151, 1154, 1156, 574, 1156, 1152, 1157, 221, 1157, 1151, 1154, 383, 579, 1159, 1152, 1369, 1439, 579, 1160, 1162, 1329, 1330, 1329, 1166, 1162, 1331, 1332, 1331, 1167, 782, 114, 1166, 95, 1171, 783, 783, 1167, 1164, 1165, 1164, 1166, 1171, 1171, 93, 1439, 1167, 1333, 1334, 1333, 1166, 1169, 1170, 1169, 93, 1167, 1335, 1336, 1335, 1171, 1172, 583, 1172, 1166, 1171, 1173, 780, 1173, 1167, 1174, 785, 1174, 1166, 1171, 1175, 962, 1175, 1167, 55, 1566, 1566, 1566, 1171, 1096, 1176, 209, 1176, 1097, 1096, 1096, 1096, 1096, 1098, 1096, 1096, 1096, 1096, 1096, 1096, 148, 1566, 1096, 1096, 1096, 1096, 1096, 589, 589, 1179, 1179, 792, 1566, 1366, 1180, 1180, 792, 1566, 1182, 1337, 1338, 1337, 1186, 1182, 976, 148, 1186, 1187, 1339, 1340, 1339, 1187, 1096, 1096, 1096, 1096, 1191, 1184, 1185, 1184, 1186, 977, 1366, 148, 1394, 1187, 977, 1566, 1191, 1341, 1342, 1341, 1186, 1191, 1189, 1190, 1189, 1187, 1566, 1378, 1096, 1566, 1191, 1343, 1344, 1343, 1192, 796, 1192, 1186, 1566, 1191, 1394, 1566, 1187, 1193, 975, 1193, 1194, 979, 1194, 1186, 800, 1191, 1196, 984, 1187, 1378, 1471, 1197, 984, 1566, 1199, 1345, 1346, 1345, 1203, 1199, 1347, 1348, 1347, 1204, 1209, 148, 1203, 1566, 1208, 1211, 1211, 1204, 1201, 1202, 1201, 1203, 1208, 1208, 148, 1471, 1204, 1349, 1350, 1349, 1203, 1206, 1207, 1206, 1400, 1204, 1351, 1352, 1351, 1208, 1210, 988, 1210, 1203, 1208, 209, 1372, 1097, 1204, 209, 1566, 1097, 1098, 800, 1566, 1196, 1098, 209, 1566, 1097, 1197, 209, 1400, 1097, 1098, 209, 148, 1097, 1098, 209, 1353, 1097, 1098, 1222, 1372, 1222, 1098, 1362, 1224, 1362, 1224, 1226, 1364, 1226, 1364, 1476, 1357, 148, 1354, 148, 1566, 1370, 1371, 148, 1501, 148, 1355, 148, 1367, 1353, 1356, 1358, 1368, 1223, 1363, 1225, 148, 1365, 1566, 148, 1380, 1373, 148, 1566, 1476, 1357, 1354, 1375, 1377, 1370, 1381, 1371, 1501, 1227, 1355, 148, 148, 1367, 1356, 1358, 148, 1368, 1223, 1363, 1225, 1379, 1365, 1382, 148, 1380, 1373, 1383, 148, 148, 148, 1375, 148, 1377, 1385, 1381, 148, 1227, 1386, 148, 1387, 1384, 148, 148, 1388, 148, 148, 148, 1393, 148, 1379, 1390, 1382, 1395, 1392, 1383, 148, 148, 1397, 148, 1566, 1391, 1483, 1385, 1396, 1399, 148, 1386, 148, 1387, 1384, 1398, 148, 1388, 1295, 1401, 1393, 1403, 1412, 1402, 1390, 1296, 1395, 1392, 1404, 1413, 1410, 1397, 1300, 1391, 1405, 1483, 1396, 1301, 1399, 1417, 1280, 1281, 1280, 1398, 1566, 1566, 571, 1401, 1091, 1566, 1403, 1402, 1278, 1279, 1278, 1086, 1404, 1566, 1566, 1566, 1087, 148, 1405, 1282, 1283, 1282, 1086, 1284, 1285, 1284, 1440, 1087, 1288, 1289, 1288, 1091, 1286, 1287, 1286, 1104, 1109, 1292, 1293, 1292, 1105, 1290, 1291, 1290, 1104, 1109, 1407, 1408, 1407, 1105, 1298, 1299, 1298, 1300, 1409, 1440, 1566, 1566, 1301, 1414, 1415, 1414, 1300, 1304, 1304, 1305, 1305, 1301, 1307, 1566, 375, 375, 1304, 1421, 1305, 1109, 1420, 1566, 1311, 375, 1409, 1566, 1566, 1312, 1309, 1310, 1309, 1311, 1422, 1423, 1422, 1311, 1312, 1315, 1316, 1315, 1312, 1313, 1314, 1313, 1132, 1143, 1504, 1505, 1504, 1133, 1317, 1318, 1317, 1132, 1319, 1320, 1319, 1135, 1133, 1321, 1322, 1321, 1136, 1323, 1324, 1323, 1475, 1139, 1327, 1328, 1327, 1143, 1325, 1326, 1325, 1151, 1154, 1331, 1332, 1331, 1152, 1329, 1330, 1329, 1166, 1171, 1335, 1336, 1335, 1167, 1333, 1334, 1333, 1166, 1171, 1339, 1340, 1339, 1167, 1337, 1338, 1337, 1186, 1191, 1343, 1344, 1343, 1187, 1341, 1342, 1341, 1186, 1191, 1347, 1348, 1347, 1187, 1345, 1346, 1345, 1203, 1208, 1351, 1352, 1351, 1204, 1349, 1350, 1349, 1203, 1208, 209, 1566, 1097, 1204, 209, 1566, 1097, 1098, 800, 1566, 1196, 1098, 209, 148, 1097, 1197, 800, 148, 1196, 1098, 800, 1424, 1196, 1197, 1428, 148, 1428, 1197, 1429, 1362, 1364, 1362, 1364, 1425, 1432, 1434, 1432, 1435, 1438, 148, 148, 1436, 1430, 148, 148, 1443, 148, 148, 1444, 148, 1424, 1445, 148, 1426, 148, 1365, 1363, 1447, 148, 1441, 1433, 1442, 1425, 1434, 1437, 148, 1438, 148, 1446, 1436, 148, 148, 148, 1564, 1443, 1566, 1566, 1444, 1454, 1455, 1445, 1426, 1449, 1448, 1365, 1363, 1447, 1441, 1452, 1433, 1442, 1451, 1437, 148, 148, 1450, 1446, 147, 147, 148, 148, 148, 1564, 148, 148, 148, 1565, 1454, 1455, 148, 1449, 1448, 1459, 1461, 1421, 1456, 1458, 1457, 1462, 1451, 1460, 1409, 1566, 1450, 1566, 1463, 1407, 1408, 1407, 1464, 1465, 1464, 1412, 1417, 1409, 1565, 1566, 1409, 1566, 1413, 571, 1459, 1461, 1456, 1458, 1457, 1566, 1462, 1460, 1466, 1467, 1466, 148, 1463, 1432, 1566, 1432, 1413, 1414, 1415, 1414, 1300, 1422, 1423, 1422, 1311, 1301, 209, 148, 1097, 1312, 209, 148, 1097, 1098, 209, 1480, 1097, 1098, 1428, 1433, 1428, 1098, 1429, 1477, 148, 1477, 148, 1478, 148, 1484, 148, 1481, 1479, 148, 148, 148, 1430, 148, 148, 1468, 1482, 148, 1485, 1480, 1566, 1469, 1486, 148, 1433, 148, 1489, 1493, 1487, 1470, 1488, 1490, 1491, 1484, 148, 1481, 1492, 148, 148, 148, 1506, 1495, 1497, 1468, 1482, 1566, 1485, 1494, 1496, 1469, 1498, 1486, 1566, 1566, 1489, 1493, 1487, 1470, 1488, 1490, 1566, 1491, 1499, 1566, 1492, 1464, 1465, 1464, 1506, 1495, 1497, 148, 148, 1409, 148, 1511, 1494, 1496, 1566, 1498, 1466, 1467, 1466, 1509, 800, 209, 1196, 1097, 1413, 148, 1499, 1197, 1098, 800, 1514, 1196, 1510, 1502, 1503, 1502, 1197, 1473, 1477, 1511, 1477, 148, 1478, 148, 148, 148, 148, 1479, 1509, 1512, 1513, 1516, 1515, 1517, 148, 1500, 148, 148, 1514, 148, 1510, 148, 148, 1518, 1566, 1519, 800, 1530, 1196, 1522, 1566, 1524, 1521, 1197, 148, 1520, 148, 1512, 148, 1513, 1516, 1515, 1517, 1500, 1502, 1503, 1502, 1523, 1473, 1504, 1505, 1504, 1518, 148, 1519, 1530, 1529, 1534, 1522, 1524, 1538, 1521, 148, 1520, 1531, 148, 1532, 148, 148, 1475, 1539, 1533, 1540, 1541, 1540, 1523, 1527, 1537, 1542, 1543, 1542, 148, 148, 148, 1529, 1534, 148, 1528, 1538, 148, 1535, 1536, 1531, 1544, 1566, 1532, 1566, 1555, 1539, 1546, 1533, 1545, 1548, 1540, 1541, 1540, 1537, 1527, 1547, 148, 148, 1542, 1543, 1542, 1551, 148, 148, 1556, 1535, 1536, 1528, 1566, 1544, 148, 1553, 1555, 148, 1546, 1552, 1545, 1557, 1548, 1559, 148, 1554, 1558, 1547, 1566, 1561, 1566, 1560, 1566, 1563, 1551, 1566, 1556, 1562, 1566, 1566, 1566, 1566, 1566, 1566, 1553, 1566, 1566, 1552, 1566, 1566, 1557, 1566, 1559, 1554, 1566, 1558, 1566, 1566, 1561, 1560, 1566, 1566, 1563, 1566, 1566, 1562, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 147, 147, 151, 151, 1566, 1566, 151, 151, 197, 197, 1566, 197, 197, 197, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 1566, 249, 255, 1566, 1566, 1566, 1566, 255, 261, 261, 261, 261, 261, 261, 261, 261, 1566, 261, 261, 261, 149, 149, 1566, 1566, 149, 150, 150, 1566, 1566, 150, 194, 194, 1566, 194, 194, 195, 195, 1566, 195, 195, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 1566, 249, 412, 412, 412, 412, 412, 412, 1566, 412, 412, 412, 412, 412, 255, 1566, 1566, 1566, 1566, 255, 147, 147, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 334, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 412, 412, 412, 412, 412, 412, 1566, 412, 412, 412, 412, 412, 255, 1566, 1566, 1566, 1566, 255, 1566, 255, 147, 147, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 709, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 741, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 778, 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, 787, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 791, 794, 794, 794, 794, 794, 794, 794, 794, 794, 794, 794, 794, 799, 799, 799, 799, 799, 799, 799, 799, 799, 799, 799, 799, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, 147, 147, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 903, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 933, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 936, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 944, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 950, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 983, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 986, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 147, 147, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 147, 147, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1119, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 147, 147, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1418, 1418, 1418, 1418, 1418, 1566, 1418, 1418, 1418, 1418, 1418, 1418, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 147, 147, 1453, 1566, 1566, 1566, 1453, 1453, 1472, 1566, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1474, 1566, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1507, 1566, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1508, 1566, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 47, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566 } ; static const flex_int16_t yy_chk[8119] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 13, 12, 14, 7, 15, 52, 52, 99, 11, 11, 12, 12, 1563, 15, 99, 125, 125, 7, 25, 25, 25, 25, 15, 35, 1, 1, 1, 1, 30, 30, 30, 30, 7, 17, 18, 132, 1558, 35, 35, 132, 146, 146, 17, 18, 1553, 7, 13, 13, 14, 14, 15, 8, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 16, 36, 17, 18, 255, 41, 50, 201, 255, 16, 56, 56, 201, 8, 41, 36, 36, 41, 16, 50, 50, 56, 1552, 194, 2, 2, 2, 2, 8, 194, 1546, 19, 96, 19, 96, 19, 19, 77, 77, 96, 19, 8, 1539, 19, 77, 1538, 16, 106, 77, 106, 106, 41, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 28, 19, 28, 20, 42, 20, 1537, 20, 20, 70, 235, 28, 20, 42, 70, 20, 42, 97, 70, 97, 248, 248, 248, 28, 97, 3, 3, 3, 3, 19, 1533, 100, 45, 100, 118, 46, 118, 118, 100, 235, 140, 45, 140, 70, 46, 1531, 140, 70, 45, 20, 42, 46, 28, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 20, 45, 243, 63, 46, 60, 1519, 73, 26, 26, 26, 26, 57, 26, 60, 65, 69, 66, 57, 57, 26, 61, 63, 67, 60, 4, 4, 4, 4, 26, 73, 243, 26, 1518, 65, 57, 66, 61, 69, 61, 58, 69, 67, 60, 205, 58, 128, 57, 57, 205, 63, 68, 60, 4, 5, 108, 58, 108, 73, 128, 128, 26, 65, 57, 66, 61, 69, 61, 183, 69, 67, 68, 1517, 152, 58, 5, 5, 5, 5, 5, 5, 5, 108, 5, 58, 183, 5, 5, 5, 5, 5, 1516, 5, 5, 5, 5, 152, 5, 109, 68, 109, 109, 1515, 109, 5, 5, 5, 5, 5, 5, 5, 108, 5, 183, 5, 5, 5, 5, 5, 109, 5, 5, 5, 5, 152, 5, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 59, 175, 74, 64, 145, 59, 158, 74, 200, 175, 200, 158, 59, 64, 74, 200, 59, 145, 145, 59, 64, 64, 59, 1512, 74, 9, 9, 9, 9, 101, 101, 101, 101, 166, 59, 131, 74, 101, 175, 131, 158, 59, 64, 74, 59, 131, 131, 59, 64, 64, 59, 166, 74, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 1510, 103, 166, 103, 62, 151, 151, 110, 103, 110, 209, 111, 202, 111, 134, 209, 151, 62, 134, 202, 62, 103, 71, 62, 1508, 10, 10, 10, 10, 62, 1507, 71, 206, 110, 153, 71, 154, 110, 111, 206, 337, 153, 337, 134, 156, 155, 62, 71, 62, 170, 168, 62, 155, 10, 24, 24, 24, 62, 24, 154, 71, 24, 110, 156, 71, 24, 110, 111, 24, 24, 153, 134, 168, 170, 24, 71, 211, 24, 24, 197, 197, 155, 204, 211, 204, 215, 197, 154, 323, 204, 197, 156, 215, 323, 203, 203, 203, 203, 222, 1506, 168, 170, 203, 250, 250, 222, 24, 24, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 72, 76, 75, 159, 174, 157, 1501, 160, 159, 208, 76, 208, 72, 167, 76, 174, 208, 317, 75, 72, 75, 157, 159, 1499, 160, 160, 76, 826, 157, 72, 207, 207, 207, 207, 217, 217, 217, 159, 167, 76, 826, 72, 217, 76, 174, 317, 75, 72, 75, 157, 159, 133, 160, 160, 76, 133, 157, 72, 98, 98, 98, 98, 98, 98, 98, 98, 167, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 133, 133, 161, 162, 133, 169, 176, 177, 184, 1490, 162, 164, 185, 298, 184, 161, 177, 260, 260, 162, 164, 185, 1489, 169, 176, 98, 98, 98, 133, 133, 1481, 212, 133, 212, 164, 219, 1077, 219, 212, 162, 1077, 321, 219, 184, 161, 177, 298, 162, 321, 164, 185, 169, 176, 98, 102, 102, 102, 102, 102, 102, 102, 102, 164, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 188, 163, 172, 180, 1474, 163, 190, 617, 617, 188, 259, 165, 163, 187, 259, 190, 173, 179, 165, 165, 1472, 180, 172, 173, 324, 102, 102, 102, 1463, 182, 163, 324, 163, 187, 1462, 165, 165, 173, 188, 179, 173, 163, 618, 618, 190, 182, 259, 165, 165, 180, 172, 1461, 173, 102, 104, 104, 104, 104, 163, 178, 163, 187, 104, 165, 165, 173, 189, 179, 173, 1460, 193, 191, 178, 182, 259, 181, 104, 1459, 178, 189, 181, 193, 181, 104, 191, 252, 193, 104, 1453, 224, 104, 224, 232, 104, 232, 232, 224, 181, 252, 252, 104, 178, 181, 619, 619, 104, 178, 1449, 189, 181, 193, 181, 104, 191, 193, 104, 192, 246, 104, 246, 246, 104, 326, 192, 192, 181, 262, 1437, 104, 326, 181, 213, 213, 213, 213, 218, 218, 218, 218, 213, 192, 192, 1430, 218, 332, 1429, 220, 220, 220, 220, 262, 332, 192, 192, 220, 223, 223, 223, 223, 320, 257, 320, 351, 223, 257, 1423, 320, 351, 192, 192, 210, 210, 210, 210, 210, 210, 210, 210, 262, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 227, 257, 227, 245, 230, 245, 230, 227, 263, 1420, 236, 230, 236, 236, 240, 236, 240, 263, 245, 245, 1419, 227, 233, 1418, 233, 210, 210, 210, 231, 257, 231, 236, 407, 230, 407, 231, 325, 325, 325, 325, 1417, 329, 240, 329, 240, 226, 263, 226, 329, 233, 227, 231, 226, 210, 214, 214, 214, 214, 214, 214, 214, 214, 230, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 226, 233, 241, 231, 266, 265, 267, 226, 254, 303, 241, 266, 254, 1415, 234, 242, 234, 242, 254, 254, 265, 1410, 267, 334, 303, 214, 214, 214, 226, 256, 334, 241, 341, 256, 341, 226, 620, 620, 241, 341, 266, 234, 242, 336, 336, 336, 1403, 258, 265, 256, 267, 258, 303, 214, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 234, 242, 225, 225, 225, 225, 225, 228, 256, 228, 237, 258, 237, 229, 228, 229, 409, 268, 1399, 1397, 229, 270, 239, 244, 239, 244, 268, 1389, 228, 409, 409, 272, 225, 225, 225, 225, 237, 229, 271, 258, 237, 269, 228, 264, 270, 383, 229, 229, 239, 244, 383, 272, 239, 244, 275, 268, 264, 228, 276, 269, 225, 271, 264, 269, 273, 237, 229, 276, 274, 237, 228, 280, 270, 275, 229, 229, 278, 239, 244, 272, 277, 239, 244, 280, 285, 264, 283, 269, 273, 271, 264, 269, 274, 281, 287, 278, 276, 279, 282, 288, 277, 275, 287, 279, 290, 283, 285, 282, 286, 277, 281, 290, 280, 293, 589, 1386, 273, 292, 291, 589, 274, 289, 288, 278, 1383, 286, 289, 1379, 277, 293, 296, 287, 279, 283, 285, 294, 282, 291, 281, 284, 290, 1378, 292, 296, 284, 284, 284, 284, 284, 284, 288, 299, 284, 286, 297, 289, 284, 293, 295, 284, 294, 305, 284, 284, 300, 291, 284, 295, 1372, 299, 292, 302, 296, 284, 284, 284, 284, 284, 284, 297, 302, 284, 300, 1369, 284, 304, 305, 284, 294, 306, 284, 284, 301, 304, 284, 307, 295, 299, 306, 301, 309, 304, 308, 301, 310, 311, 312, 297, 307, 302, 300, 308, 314, 315, 305, 312, 318, 307, 316, 398, 309, 310, 304, 311, 342, 403, 310, 306, 301, 304, 1367, 342, 301, 318, 1350, 315, 314, 307, 1346, 345, 308, 345, 316, 348, 312, 307, 345, 398, 309, 310, 348, 311, 1342, 403, 310, 352, 400, 322, 322, 322, 322, 318, 352, 315, 314, 322, 328, 328, 328, 402, 316, 360, 360, 360, 328, 330, 330, 330, 330, 333, 333, 333, 333, 330, 705, 400, 705, 333, 338, 338, 338, 338, 343, 343, 343, 343, 1338, 722, 402, 722, 343, 344, 344, 344, 344, 344, 344, 344, 344, 1334, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 344, 346, 346, 346, 346, 349, 349, 349, 350, 346, 350, 1330, 1326, 349, 357, 350, 353, 353, 353, 353, 1320, 357, 361, 354, 353, 354, 344, 344, 344, 361, 354, 355, 355, 355, 355, 358, 358, 358, 358, 355, 362, 362, 362, 358, 364, 364, 364, 1318, 362, 413, 1314, 1310, 364, 413, 344, 347, 347, 347, 347, 347, 347, 347, 347, 413, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 365, 368, 365, 366, 366, 366, 366, 365, 368, 432, 372, 366, 369, 369, 369, 369, 370, 372, 370, 737, 369, 737, 432, 370, 1307, 347, 347, 347, 373, 373, 373, 373, 374, 374, 374, 374, 373, 377, 1299, 384, 374, 379, 379, 379, 377, 382, 384, 382, 408, 379, 408, 432, 382, 347, 380, 380, 380, 380, 385, 385, 385, 385, 380, 408, 408, 1295, 385, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, 436, 419, 386, 386, 386, 386, 386, 387, 388, 387, 388, 389, 414, 389, 387, 388, 414, 390, 389, 390, 391, 419, 391, 392, 390, 392, 414, 391, 418, 436, 392, 421, 386, 386, 386, 386, 389, 393, 421, 393, 388, 394, 1291, 394, 393, 395, 1287, 395, 394, 419, 418, 390, 395, 399, 396, 423, 396, 422, 1283, 391, 386, 396, 392, 399, 463, 389, 393, 421, 388, 397, 423, 397, 435, 404, 394, 404, 397, 394, 418, 390, 422, 405, 399, 405, 406, 395, 406, 391, 1279, 463, 392, 399, 415, 416, 396, 393, 415, 416, 423, 404, 435, 397, 394, 404, 425, 394, 415, 416, 422, 417, 428, 406, 425, 395, 405, 420, 405, 463, 429, 406, 426, 417, 396, 417, 417, 427, 420, 429, 404, 397, 427, 426, 404, 428, 430, 437, 438, 433, 431, 434, 406, 425, 405, 431, 405, 433, 442, 406, 440, 446, 430, 439, 438, 437, 442, 420, 429, 440, 441, 427, 426, 428, 445, 434, 439, 443, 444, 454, 446, 447, 1260, 441, 431, 450, 433, 451, 448, 455, 430, 454, 438, 437, 444, 442, 445, 441, 440, 447, 443, 448, 458, 434, 450, 439, 452, 448, 446, 451, 453, 449, 441, 448, 458, 452, 457, 459, 455, 453, 454, 449, 444, 457, 445, 441, 467, 447, 443, 449, 448, 452, 450, 459, 460, 448, 464, 451, 462, 453, 465, 448, 467, 458, 452, 466, 455, 468, 453, 464, 449, 465, 466, 470, 472, 471, 469, 449, 460, 452, 462, 459, 465, 469, 471, 474, 478, 453, 475, 468, 467, 478, 477, 474, 479, 475, 472, 470, 464, 483, 465, 466, 480, 482, 484, 1259, 460, 607, 462, 481, 465, 1238, 479, 471, 477, 480, 481, 468, 483, 482, 478, 486, 474, 484, 472, 470, 486, 486, 486, 487, 488, 492, 1237, 492, 489, 607, 487, 603, 492, 488, 479, 486, 477, 489, 480, 481, 483, 482, 490, 491, 1209, 484, 493, 494, 494, 494, 494, 490, 491, 493, 495, 494, 499, 496, 496, 496, 603, 495, 488, 499, 486, 496, 489, 490, 497, 501, 497, 498, 498, 498, 498, 497, 501, 604, 605, 498, 490, 491, 500, 500, 500, 500, 503, 503, 503, 506, 500, 504, 504, 504, 504, 490, 506, 507, 507, 507, 509, 509, 509, 1202, 1185, 507, 604, 605, 509, 512, 512, 512, 512, 515, 515, 515, 519, 512, 519, 520, 556, 556, 556, 519, 522, 1165, 520, 521, 521, 521, 521, 522, 523, 523, 523, 521, 524, 743, 524, 743, 523, 526, 533, 524, 525, 525, 525, 525, 526, 533, 537, 539, 525, 527, 527, 527, 527, 537, 539, 1131, 1103, 527, 528, 528, 528, 528, 528, 528, 528, 528, 1085, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 529, 1064, 529, 530, 530, 530, 530, 529, 532, 1058, 532, 530, 540, 540, 540, 532, 534, 534, 534, 534, 540, 535, 639, 535, 534, 528, 528, 528, 535, 536, 536, 536, 536, 538, 538, 538, 538, 536, 541, 541, 541, 538, 542, 544, 544, 544, 541, 800, 1056, 542, 639, 544, 800, 528, 531, 531, 531, 531, 531, 531, 531, 531, 1054, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 545, 548, 545, 546, 546, 546, 546, 545, 548, 551, 606, 546, 549, 549, 549, 549, 551, 564, 649, 564, 549, 553, 553, 553, 564, 531, 531, 531, 1051, 553, 554, 554, 554, 554, 559, 559, 559, 649, 554, 606, 565, 567, 559, 562, 562, 562, 562, 565, 567, 1050, 616, 562, 1039, 531, 566, 566, 566, 566, 568, 568, 568, 624, 566, 616, 616, 649, 568, 569, 569, 569, 569, 570, 570, 570, 570, 569, 573, 573, 573, 570, 575, 576, 575, 608, 573, 624, 578, 575, 576, 577, 577, 577, 577, 578, 580, 580, 580, 577, 581, 761, 581, 761, 580, 584, 590, 581, 582, 582, 582, 582, 584, 590, 608, 624, 582, 585, 585, 585, 585, 704, 704, 704, 640, 585, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 626, 813, 586, 586, 586, 586, 586, 587, 588, 587, 588, 640, 1032, 626, 587, 588, 591, 591, 591, 591, 592, 593, 592, 593, 591, 1022, 1013, 592, 593, 594, 813, 594, 586, 586, 586, 586, 594, 595, 596, 595, 596, 597, 626, 597, 595, 596, 629, 598, 597, 598, 600, 599, 600, 599, 598, 629, 594, 600, 599, 601, 586, 601, 602, 596, 602, 610, 601, 610, 609, 602, 609, 600, 623, 611, 597, 611, 595, 623, 625, 600, 661, 988, 598, 599, 629, 594, 661, 602, 601, 984, 630, 612, 596, 612, 627, 614, 625, 614, 611, 630, 600, 609, 597, 609, 595, 610, 623, 615, 600, 615, 598, 599, 979, 628, 627, 661, 602, 601, 612, 614, 622, 628, 615, 615, 625, 643, 612, 611, 630, 609, 631, 609, 622, 610, 622, 622, 632, 631, 633, 636, 635, 643, 627, 634, 632, 633, 636, 612, 614, 632, 628, 637, 634, 635, 612, 638, 641, 976, 642, 644, 637, 645, 646, 641, 638, 648, 631, 642, 653, 643, 647, 645, 650, 632, 646, 636, 652, 644, 632, 647, 654, 634, 635, 657, 653, 650, 655, 658, 648, 637, 659, 667, 641, 638, 660, 658, 642, 663, 667, 668, 645, 652, 654, 646, 655, 644, 662, 657, 647, 659, 660, 662, 653, 664, 650, 668, 648, 663, 669, 670, 672, 675, 664, 891, 658, 671, 675, 673, 670, 652, 654, 669, 655, 671, 674, 657, 673, 659, 660, 676, 662, 677, 672, 668, 674, 663, 680, 681, 676, 682, 677, 664, 681, 684, 680, 675, 685, 670, 682, 686, 669, 687, 671, 689, 685, 673, 688, 686, 694, 691, 672, 697, 689, 674, 690, 875, 684, 676, 697, 677, 699, 681, 690, 680, 698, 687, 774, 682, 774, 873, 688, 694, 701, 685, 691, 698, 686, 1115, 699, 701, 698, 689, 1115, 700, 684, 700, 702, 702, 702, 702, 700, 690, 854, 687, 703, 710, 710, 710, 688, 694, 718, 703, 691, 794, 698, 794, 699, 718, 698, 706, 706, 706, 706, 708, 708, 708, 708, 711, 711, 711, 712, 712, 712, 712, 713, 713, 713, 715, 715, 715, 717, 720, 717, 719, 719, 719, 719, 717, 720, 721, 721, 721, 723, 723, 723, 723, 725, 725, 725, 725, 727, 727, 727, 728, 728, 728, 729, 729, 729, 729, 730, 730, 730, 731, 734, 731, 734, 730, 833, 797, 731, 734, 796, 792, 730, 730, 732, 732, 732, 732, 733, 733, 733, 735, 741, 770, 769, 733, 769, 785, 735, 741, 770, 769, 733, 733, 736, 736, 736, 736, 738, 738, 738, 738, 740, 740, 740, 740, 742, 742, 742, 744, 744, 744, 744, 746, 746, 746, 746, 748, 748, 748, 749, 749, 749, 749, 750, 750, 750, 752, 752, 752, 754, 754, 754, 757, 757, 757, 757, 759, 759, 759, 763, 763, 763, 763, 765, 765, 765, 766, 766, 766, 766, 767, 767, 767, 768, 768, 768, 768, 771, 771, 771, 771, 772, 773, 773, 773, 779, 779, 779, 772, 775, 775, 775, 775, 777, 777, 777, 777, 781, 781, 781, 784, 784, 784, 784, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, 782, 778, 786, 786, 786, 786, 786, 787, 788, 787, 788, 789, 776, 764, 787, 788, 791, 762, 789, 790, 790, 790, 790, 791, 793, 793, 793, 795, 795, 795, 795, 758, 786, 786, 786, 786, 798, 798, 798, 798, 799, 801, 799, 802, 802, 802, 802, 799, 801, 803, 804, 803, 804, 816, 755, 751, 803, 804, 747, 805, 786, 805, 806, 807, 806, 807, 805, 817, 745, 806, 807, 818, 739, 808, 803, 808, 809, 810, 809, 810, 808, 726, 816, 809, 810, 724, 811, 806, 811, 812, 819, 812, 819, 811, 709, 817, 812, 807, 808, 821, 818, 821, 707, 803, 810, 809, 820, 831, 820, 811, 822, 810, 822, 823, 831, 823, 806, 824, 834, 824, 825, 835, 825, 834, 821, 807, 835, 808, 696, 843, 819, 836, 820, 810, 809, 825, 836, 823, 811, 810, 822, 837, 844, 831, 832, 832, 832, 838, 839, 849, 824, 837, 834, 821, 840, 835, 841, 843, 819, 845, 844, 820, 848, 840, 845, 836, 823, 846, 847, 822, 850, 838, 839, 852, 846, 847, 851, 849, 824, 841, 837, 853, 852, 851, 857, 843, 859, 856, 844, 855, 858, 848, 840, 845, 856, 850, 851, 858, 855, 838, 839, 860, 693, 857, 861, 853, 1000, 841, 863, 862, 859, 852, 851, 861, 862, 863, 864, 869, 860, 868, 865, 866, 679, 850, 851, 864, 858, 855, 866, 871, 867, 857, 866, 853, 869, 1000, 868, 874, 859, 867, 870, 868, 861, 862, 863, 865, 860, 879, 878, 870, 876, 871, 879, 665, 864, 880, 874, 866, 877, 876, 883, 866, 869, 884, 868, 882, 881, 877, 867, 868, 878, 880, 882, 865, 656, 896, 881, 885, 870, 871, 884, 879, 886, 887, 874, 883, 881, 885, 876, 881, 887, 893, 896, 888, 889, 886, 877, 890, 878, 880, 888, 882, 892, 889, 890, 881, 897, 1009, 884, 1009, 1010, 894, 1010, 883, 881, 893, 885, 881, 894, 890, 896, 890, 651, 583, 886, 579, 571, 892, 899, 898, 897, 898, 889, 890, 901, 899, 898, 900, 900, 900, 900, 901, 1005, 893, 1005, 900, 563, 890, 561, 890, 905, 902, 902, 902, 903, 892, 903, 905, 897, 902, 906, 903, 904, 904, 904, 904, 555, 906, 550, 1005, 904, 907, 907, 907, 908, 908, 908, 908, 547, 907, 911, 998, 908, 909, 909, 909, 910, 911, 910, 543, 1001, 909, 913, 910, 912, 912, 912, 912, 1005, 913, 917, 517, 912, 914, 914, 914, 915, 917, 915, 998, 514, 914, 918, 915, 916, 916, 916, 916, 1001, 918, 513, 510, 916, 919, 919, 919, 920, 920, 920, 920, 1002, 919, 1002, 505, 920, 921, 921, 921, 922, 922, 922, 502, 485, 921, 1028, 922, 923, 923, 923, 923, 924, 925, 924, 925, 923, 926, 1002, 924, 925, 1027, 1020, 930, 926, 927, 927, 927, 927, 928, 930, 928, 1020, 927, 931, 1028, 928, 929, 929, 929, 929, 931, 932, 932, 932, 929, 933, 1002, 933, 1027, 932, 935, 936, 933, 934, 934, 934, 934, 935, 936, 938, 1020, 934, 937, 937, 937, 937, 938, 939, 939, 939, 937, 940, 940, 940, 940, 939, 941, 941, 941, 940, 942, 942, 942, 944, 941, 944, 945, 946, 942, 1220, 944, 1012, 476, 945, 946, 947, 947, 947, 947, 948, 948, 948, 1003, 947, 1003, 473, 951, 948, 949, 949, 949, 949, 950, 951, 950, 1012, 949, 953, 1220, 950, 952, 952, 952, 952, 953, 954, 954, 954, 952, 955, 461, 955, 1003, 954, 957, 958, 955, 956, 956, 956, 956, 957, 958, 1012, 456, 956, 959, 959, 959, 960, 960, 960, 960, 424, 959, 966, 968, 960, 961, 961, 961, 1003, 966, 968, 381, 1030, 961, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 1038, 1030, 963, 963, 963, 963, 963, 964, 965, 964, 965, 376, 1048, 1038, 964, 965, 967, 967, 967, 967, 969, 969, 969, 970, 967, 970, 375, 371, 969, 1030, 970, 1048, 963, 963, 963, 963, 971, 971, 971, 971, 972, 973, 1038, 1359, 971, 981, 367, 972, 973, 974, 974, 974, 981, 978, 978, 978, 978, 974, 359, 1048, 963, 978, 980, 983, 980, 982, 982, 982, 982, 980, 983, 989, 1359, 982, 985, 985, 985, 986, 989, 986, 1023, 356, 985, 1014, 986, 987, 987, 987, 987, 990, 991, 990, 991, 987, 340, 1029, 990, 991, 992, 993, 992, 993, 994, 1023, 994, 992, 993, 1014, 995, 994, 995, 997, 996, 997, 996, 995, 1016, 1029, 997, 996, 1004, 1006, 1004, 1006, 991, 1007, 1015, 1007, 1018, 990, 1024, 1023, 997, 1015, 1021, 1014, 994, 1018, 1019, 1017, 1016, 1021, 339, 993, 1017, 1029, 1024, 1019, 1031, 995, 1004, 1033, 991, 996, 1006, 335, 1033, 990, 1034, 331, 1037, 997, 1015, 1042, 994, 1036, 1018, 1007, 1016, 1043, 1031, 993, 1036, 1017, 1024, 1037, 1019, 995, 1041, 1004, 1034, 996, 1006, 1040, 1044, 1033, 1049, 1042, 1045, 1046, 1040, 1043, 1053, 1052, 1041, 1007, 1059, 1045, 1031, 1047, 1044, 1036, 1052, 1037, 1061, 1049, 1047, 1055, 1034, 1057, 1053, 1046, 1060, 327, 1055, 1042, 1057, 1062, 1063, 1043, 1065, 1059, 1041, 1069, 1066, 1065, 1045, 1070, 1044, 1061, 1069, 1052, 1070, 1049, 1060, 1047, 1072, 1073, 1053, 1046, 1063, 1071, 1062, 1074, 313, 1057, 1071, 247, 1079, 1059, 1066, 1076, 1081, 1073, 1065, 1079, 1074, 1061, 1219, 1081, 1076, 1070, 1060, 1221, 1078, 1072, 1078, 238, 1063, 1086, 1062, 1078, 1082, 1082, 1082, 1071, 1086, 1083, 1066, 1083, 1082, 1073, 221, 1088, 1083, 1074, 1219, 216, 198, 1076, 1088, 1221, 195, 1072, 1080, 1080, 1080, 1080, 1084, 1084, 1084, 1084, 1080, 1089, 1089, 1089, 1084, 1087, 1087, 1087, 1087, 1089, 1091, 1091, 1091, 1087, 1092, 1092, 1092, 1092, 1091, 1093, 1093, 1093, 1092, 1094, 1094, 1094, 1094, 1093, 1095, 1095, 1095, 1094, 1096, 1097, 1096, 1361, 1095, 1239, 1099, 1096, 1097, 1098, 1098, 1098, 1098, 1099, 1100, 1100, 1100, 1098, 1101, 186, 1101, 171, 1100, 1104, 1106, 1101, 1102, 1102, 1102, 1102, 1104, 1106, 1361, 1239, 1102, 1105, 1105, 1105, 1105, 1107, 1107, 1107, 149, 1105, 1109, 1109, 1109, 1107, 1110, 1110, 1110, 1110, 1109, 1111, 1111, 1111, 1110, 1112, 1112, 1112, 1112, 1111, 1113, 1113, 1113, 1112, 1114, 147, 1114, 119, 1113, 1117, 1122, 1114, 1116, 1116, 1116, 1256, 1117, 1122, 1125, 1116, 1118, 1118, 1118, 1118, 1119, 1125, 1119, 115, 1118, 112, 1127, 1119, 1120, 1120, 1120, 1120, 1121, 1127, 1121, 1256, 1120, 94, 1132, 1121, 1123, 1123, 1123, 1123, 1124, 1132, 1124, 53, 1123, 47, 44, 1124, 1126, 1126, 1126, 1126, 1128, 1128, 1128, 1129, 1126, 1129, 43, 1256, 1128, 1242, 1129, 1130, 1130, 1130, 1130, 1133, 1133, 1133, 1133, 1130, 1134, 1135, 1134, 1133, 40, 39, 1242, 1134, 1135, 1136, 1136, 1136, 1136, 1137, 1137, 1137, 1137, 1136, 1138, 1140, 34, 1137, 1139, 1139, 1139, 1138, 1140, 1141, 1141, 1141, 1139, 1143, 1143, 1143, 1242, 1141, 33, 32, 31, 1143, 1144, 1144, 1144, 1144, 1145, 1145, 1145, 1145, 1144, 1146, 1146, 1146, 1145, 1147, 1147, 1147, 1147, 1146, 1148, 1148, 1148, 1147, 1149, 1149, 1149, 1150, 1148, 1150, 1151, 1231, 1149, 29, 1150, 1153, 1231, 1151, 1152, 1152, 1152, 1152, 1153, 1154, 1154, 1154, 1152, 1155, 1155, 1155, 1155, 1154, 1156, 1156, 1156, 1155, 1157, 1157, 1157, 1157, 1156, 1158, 1159, 1158, 1157, 1231, 1374, 1161, 1158, 1159, 1160, 1160, 1160, 1160, 1161, 1162, 1162, 1162, 1160, 1163, 27, 1163, 23, 1162, 1166, 1168, 1163, 1164, 1164, 1164, 1164, 1166, 1168, 22, 1374, 1164, 1167, 1167, 1167, 1167, 1169, 1169, 1169, 21, 1167, 1171, 1171, 1171, 1169, 1172, 1172, 1172, 1172, 1171, 1173, 1173, 1173, 1172, 1174, 1174, 1174, 1174, 1173, 1175, 1175, 1175, 1174, 6, 0, 0, 0, 1175, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1228, 0, 1176, 1176, 1176, 1176, 1176, 1177, 1178, 1177, 1178, 1179, 0, 1228, 1177, 1178, 1181, 0, 1179, 1180, 1180, 1180, 1180, 1181, 1183, 1264, 1183, 1180, 1182, 1182, 1182, 1183, 1176, 1176, 1176, 1176, 1182, 1184, 1184, 1184, 1184, 1186, 1228, 1244, 1264, 1184, 1188, 0, 1186, 1187, 1187, 1187, 1187, 1188, 1189, 1189, 1189, 1187, 0, 1244, 1176, 0, 1189, 1191, 1191, 1191, 1192, 1192, 1192, 1192, 0, 1191, 1264, 0, 1192, 1193, 1193, 1193, 1194, 1194, 1194, 1194, 1195, 1193, 1195, 1196, 1194, 1244, 1427, 1195, 1198, 0, 1196, 1197, 1197, 1197, 1197, 1198, 1199, 1199, 1199, 1197, 1200, 1271, 1200, 0, 1199, 1203, 1205, 1200, 1201, 1201, 1201, 1201, 1203, 1205, 1234, 1427, 1201, 1204, 1204, 1204, 1204, 1206, 1206, 1206, 1271, 1204, 1208, 1208, 1208, 1206, 1210, 1210, 1210, 1210, 1208, 1212, 1234, 1212, 1210, 1213, 0, 1213, 1212, 1214, 0, 1214, 1213, 1215, 0, 1215, 1214, 1217, 1271, 1217, 1215, 1216, 1232, 1216, 1217, 1218, 1212, 1218, 1216, 1222, 1234, 1222, 1218, 1223, 1224, 1223, 1224, 1226, 1227, 1226, 1227, 1431, 1217, 1233, 1213, 1229, 0, 1232, 1233, 1230, 1471, 1241, 1215, 1246, 1229, 1212, 1216, 1218, 1230, 1222, 1223, 1224, 1235, 1227, 0, 1243, 1246, 1235, 1247, 0, 1431, 1217, 1213, 1241, 1243, 1232, 1247, 1233, 1471, 1226, 1215, 1250, 1245, 1229, 1216, 1218, 1248, 1230, 1222, 1223, 1224, 1245, 1227, 1248, 1252, 1246, 1235, 1250, 1251, 1253, 1263, 1241, 1254, 1243, 1252, 1247, 1258, 1226, 1253, 1255, 1254, 1251, 1266, 1257, 1255, 1262, 1268, 1265, 1263, 1267, 1245, 1257, 1248, 1265, 1262, 1250, 1269, 1272, 1267, 1273, 0, 1258, 1439, 1252, 1266, 1269, 1275, 1253, 1274, 1254, 1251, 1268, 1276, 1255, 1294, 1272, 1263, 1274, 1300, 1273, 1257, 1294, 1265, 1262, 1275, 1300, 1297, 1267, 1297, 1258, 1276, 1439, 1266, 1297, 1269, 1305, 1280, 1280, 1280, 1268, 0, 0, 1305, 1272, 1280, 0, 1274, 1273, 1278, 1278, 1278, 1278, 1275, 0, 0, 0, 1278, 1375, 1276, 1282, 1282, 1282, 1282, 1284, 1284, 1284, 1375, 1282, 1288, 1288, 1288, 1284, 1286, 1286, 1286, 1286, 1288, 1292, 1292, 1292, 1286, 1290, 1290, 1290, 1290, 1292, 1296, 1296, 1296, 1290, 1298, 1298, 1298, 1298, 1296, 1375, 0, 0, 1298, 1301, 1301, 1301, 1301, 1302, 1303, 1302, 1303, 1301, 1306, 0, 1302, 1303, 1304, 1311, 1304, 1306, 1308, 0, 1308, 1304, 1311, 0, 0, 1308, 1309, 1309, 1309, 1309, 1312, 1312, 1312, 1312, 1309, 1315, 1315, 1315, 1312, 1313, 1313, 1313, 1313, 1315, 1475, 1475, 1475, 1313, 1317, 1317, 1317, 1317, 1319, 1319, 1319, 1319, 1317, 1321, 1321, 1321, 1319, 1323, 1323, 1323, 1475, 1321, 1327, 1327, 1327, 1323, 1325, 1325, 1325, 1325, 1327, 1331, 1331, 1331, 1325, 1329, 1329, 1329, 1329, 1331, 1335, 1335, 1335, 1329, 1333, 1333, 1333, 1333, 1335, 1339, 1339, 1339, 1333, 1337, 1337, 1337, 1337, 1339, 1343, 1343, 1343, 1337, 1341, 1341, 1341, 1341, 1343, 1347, 1347, 1347, 1341, 1345, 1345, 1345, 1345, 1347, 1351, 1351, 1351, 1345, 1349, 1349, 1349, 1349, 1351, 1353, 0, 1353, 1349, 1354, 0, 1354, 1353, 1355, 0, 1355, 1354, 1356, 1373, 1356, 1355, 1357, 1366, 1357, 1356, 1358, 1353, 1358, 1357, 1360, 1370, 1360, 1358, 1360, 1362, 1364, 1362, 1364, 1354, 1365, 1366, 1365, 1368, 1373, 1376, 1380, 1370, 1360, 1381, 1368, 1380, 1382, 1371, 1381, 1384, 1353, 1382, 1385, 1356, 1377, 1364, 1362, 1385, 1387, 1376, 1365, 1377, 1354, 1366, 1371, 1388, 1373, 1391, 1384, 1370, 1390, 1393, 1394, 1559, 1380, 0, 0, 1381, 1393, 1394, 1382, 1356, 1388, 1387, 1364, 1362, 1385, 1376, 1392, 1365, 1377, 1391, 1371, 1395, 1396, 1390, 1384, 1392, 1392, 1392, 1398, 1405, 1559, 1400, 1402, 1401, 1561, 1393, 1394, 1404, 1388, 1387, 1400, 1402, 1406, 1395, 1398, 1396, 1404, 1391, 1401, 1406, 0, 1390, 0, 1405, 1407, 1407, 1407, 1409, 1409, 1409, 1411, 1416, 1407, 1561, 0, 1409, 0, 1411, 1416, 1400, 1402, 1395, 1398, 1396, 0, 1404, 1401, 1413, 1413, 1413, 1434, 1405, 1432, 0, 1432, 1413, 1414, 1414, 1414, 1414, 1422, 1422, 1422, 1422, 1414, 1424, 1436, 1424, 1422, 1425, 1440, 1425, 1424, 1426, 1434, 1426, 1425, 1428, 1432, 1428, 1426, 1428, 1433, 1438, 1433, 1441, 1433, 1443, 1440, 1444, 1436, 1433, 1442, 1445, 1450, 1428, 1446, 1448, 1424, 1438, 1454, 1441, 1434, 0, 1425, 1442, 1456, 1432, 1447, 1445, 1450, 1443, 1426, 1444, 1446, 1447, 1440, 1451, 1436, 1448, 1457, 1458, 1455, 1476, 1454, 1456, 1424, 1438, 0, 1441, 1451, 1455, 1425, 1457, 1442, 0, 0, 1445, 1450, 1443, 1426, 1444, 1446, 0, 1447, 1458, 0, 1448, 1464, 1464, 1464, 1476, 1454, 1456, 1486, 1482, 1464, 1480, 1483, 1451, 1455, 0, 1457, 1466, 1466, 1466, 1480, 1468, 1469, 1468, 1469, 1466, 1484, 1458, 1468, 1469, 1470, 1486, 1470, 1482, 1473, 1473, 1473, 1470, 1473, 1477, 1483, 1477, 1485, 1477, 1487, 1491, 1498, 1488, 1477, 1480, 1484, 1485, 1488, 1487, 1491, 1492, 1469, 1493, 1494, 1486, 1495, 1482, 1496, 1497, 1492, 0, 1493, 1500, 1511, 1500, 1496, 0, 1498, 1495, 1500, 1509, 1494, 1513, 1484, 1521, 1485, 1488, 1487, 1491, 1469, 1502, 1502, 1502, 1497, 1502, 1504, 1504, 1504, 1492, 1514, 1493, 1511, 1509, 1521, 1496, 1498, 1525, 1495, 1520, 1494, 1513, 1522, 1514, 1523, 1524, 1504, 1526, 1520, 1527, 1527, 1527, 1497, 1527, 1524, 1528, 1528, 1528, 1534, 1532, 1529, 1509, 1521, 1535, 1528, 1525, 1536, 1522, 1523, 1513, 1529, 0, 1514, 0, 1549, 1526, 1534, 1520, 1532, 1536, 1540, 1540, 1540, 1524, 1540, 1535, 1544, 1545, 1542, 1542, 1542, 1544, 1547, 1548, 1550, 1522, 1523, 1542, 0, 1529, 1551, 1547, 1549, 1554, 1534, 1545, 1532, 1551, 1536, 1555, 1557, 1548, 1554, 1535, 0, 1556, 0, 1555, 0, 1557, 1544, 0, 1550, 1556, 0, 0, 0, 0, 0, 0, 1547, 0, 0, 1545, 0, 0, 1551, 0, 1555, 1548, 0, 1554, 0, 0, 1556, 1555, 0, 0, 1557, 0, 0, 1556, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1585, 1585, 1586, 1586, 0, 0, 1586, 1586, 1587, 1587, 0, 1587, 1587, 1587, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 0, 1595, 1596, 0, 0, 0, 0, 1596, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 0, 1597, 1597, 1597, 1598, 1598, 0, 0, 1598, 1599, 1599, 0, 0, 1599, 1600, 1600, 0, 1600, 1600, 1601, 1601, 0, 1601, 1601, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 0, 1621, 1622, 1622, 1622, 1622, 1622, 1622, 0, 1622, 1622, 1622, 1622, 1622, 1623, 0, 0, 0, 0, 1623, 1624, 1624, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1651, 1651, 1651, 1651, 1651, 1651, 0, 1651, 1651, 1651, 1651, 1651, 1652, 0, 0, 0, 0, 1652, 0, 1652, 1653, 1653, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1684, 1684, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1717, 1717, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1752, 1752, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1790, 1790, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1803, 1803, 1803, 1803, 1803, 0, 1803, 1803, 1803, 1803, 1803, 1803, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1819, 1819, 1820, 0, 0, 0, 1820, 1820, 1821, 0, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1822, 0, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1823, 0, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1824, 0, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566 } ; extern int yy_flex_debug; int yy_flex_debug = 0; static yy_state_type *yy_state_buf=0, *yy_state_ptr=0; static char *yy_full_match; static int yy_lp; static int yy_looking_for_trail_begin = 0; static int yy_full_lp; static int *yy_full_state; #define YY_TRAILING_MASK 0x2000 #define YY_TRAILING_HEAD_MASK 0x4000 #define REJECT \ { \ *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ \ yy_cp = (yy_full_match); /* restore poss. backed-over text */ \ (yy_lp) = (yy_full_lp); /* restore orig. accepting pos. */ \ (yy_state_ptr) = (yy_full_state); /* restore orig. state */ \ yy_current_state = *(yy_state_ptr); /* restore curr. state */ \ ++(yy_lp); \ goto find_rule; \ } #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; #line 1 "../src/lexer.l" /* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #line 31 "../src/lexer.l" #include #include #include #include "debug.h" #include "lexer.h" #include "line_prep.h" #include "parser.hpp" #define YY_DECL extern "C" int yylex() #define YY_USER_ACTION line_pos += yyleng; std::deque start_stack; std::string lexer_name, lexer_stlabel, lexeri_number, lexer_rest, lexer_string, lexer_lr; int lexer_lrpos; std::string lexer_include; std::string input_string; int lrlevel; bool lrreturn; Line_prep pline; int line_pos; #line 2960 "lexer.cpp" #line 57 "../src/lexer.l" /* double [ gives problems in lexer comments */ // following are keywords starting with c #line 2969 "lexer.cpp" #define INITIAL 0 #define state_identifier 1 #define state_keyword 2 #define state_esope 3 #define state_cidentifier 4 #define state_lr 5 #define state_lrb 6 #define state_skip 7 #define state_skipall 8 #define state_skipnoop 9 #define state_error 10 #define state_findformat 11 #define state_scanfixpre 12 #define state_scanompfixed 13 #define state_scanompfree 14 #define state_incfilename 15 #define state_char 16 #define state_labels 17 #define state_iolist 18 #define state_startiolist 19 #define state_calllist 20 #define state_startcalllist 21 #define state_skipnos 22 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif static int yy_init_globals ( void ); /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int yylex_destroy ( void ); int yyget_debug ( void ); void yyset_debug ( int debug_flag ); YY_EXTRA_TYPE yyget_extra ( void ); void yyset_extra ( YY_EXTRA_TYPE user_defined ); FILE *yyget_in ( void ); void yyset_in ( FILE * _in_str ); FILE *yyget_out ( void ); void yyset_out ( FILE * _out_str ); int yyget_leng ( void ); char *yyget_text ( void ); int yyget_lineno ( void ); void yyset_lineno ( int _line_number ); /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap ( void ); #else extern int yywrap ( void ); #endif #endif #ifndef YY_NO_UNPUT static void yyunput ( int c, char *buf_ptr ); #endif #ifndef yytext_ptr static void yy_flex_strncpy ( char *, const char *, int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen ( const char * ); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput ( void ); #else static int input ( void ); #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k */ #define YY_READ_BUF_SIZE 16384 #else #define YY_READ_BUF_SIZE 8192 #endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ int n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(yyin); \ } \ }\ \ #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int yylex (void); #define YY_DECL int yylex (void) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK /*LINTED*/break; #endif #define YY_RULE_SETUP \ if ( yyleng > 0 ) \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ (yytext[yyleng - 1] == '\n'); \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { yy_state_type yy_current_state; char *yy_cp, *yy_bp; int yy_act; if ( !(yy_init) ) { (yy_init) = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif /* Create the reject buffer large enough to save one state per allowed character. */ if ( ! (yy_state_buf) ) (yy_state_buf) = (yy_state_type *)yyalloc(YY_STATE_BUF_SIZE ); if ( ! (yy_state_buf) ) YY_FATAL_ERROR( "out of dynamic memory in yylex()" ); if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = stdin; if ( ! yyout ) yyout = stdout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_load_buffer_state( ); } { #line 70 "../src/lexer.l" #line 3220 "lexer.cpp" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_current_state += YY_AT_BOL(); (yy_state_ptr) = (yy_state_buf); *(yy_state_ptr)++ = yy_current_state; yy_match: do { YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 1567 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; *(yy_state_ptr)++ = yy_current_state; ++yy_cp; } while ( yy_base[yy_current_state] != 8041 ); yy_find_action: yy_current_state = *--(yy_state_ptr); (yy_lp) = yy_accept[yy_current_state]; find_rule: /* we branch to this label when backing up */ for ( ; ; ) /* until we find what rule we matched */ { if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] ) { yy_act = yy_acclist[(yy_lp)]; if ( yy_act & YY_TRAILING_HEAD_MASK || (yy_looking_for_trail_begin) ) { if ( yy_act == (yy_looking_for_trail_begin) ) { (yy_looking_for_trail_begin) = 0; yy_act &= ~YY_TRAILING_HEAD_MASK; break; } } else if ( yy_act & YY_TRAILING_MASK ) { (yy_looking_for_trail_begin) = yy_act & ~YY_TRAILING_MASK; (yy_looking_for_trail_begin) |= YY_TRAILING_HEAD_MASK; } else { (yy_full_match) = yy_cp; (yy_full_state) = (yy_state_ptr); (yy_full_lp) = (yy_lp); break; } ++(yy_lp); goto find_rule; } --yy_cp; yy_current_state = *--(yy_state_ptr); (yy_lp) = yy_accept[yy_current_state]; } YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 1: YY_RULE_SETUP #line 72 "../src/lexer.l" { D(O("ERROR");Y;); return ERROR; } YY_BREAK case 2: YY_RULE_SETUP #line 75 "../src/lexer.l" { D(O("lrplus");O(lrlevel);Y;); lrlevel++; if (lrlevel > 1) lexer_lr += yytext; } YY_BREAK case 3: YY_RULE_SETUP #line 81 "../src/lexer.l" { D(O("lrmin");O(lrlevel);Y;); lrlevel--; if(lrlevel == 0) { D(O("state:");O(start_stack.back());O(lrreturn);); BEGIN(start_stack.back()); start_stack.pop_back(); if(lrreturn) { D(O("LR");Y); return LR; } } else { lexer_lr += yytext; } } YY_BREAK case 4: YY_RULE_SETUP #line 99 "../src/lexer.l" { D(O("lrbla");O(lrlevel);Y;); lexer_lr += yytext; } YY_BREAK case 5: /* rule 5 can match eol */ YY_RULE_SETUP #line 102 "../src/lexer.l" { D(O("lreol");O(lrlevel);Y;); yyless(0); BEGIN(start_stack.back()); } YY_BREAK case 6: YY_RULE_SETUP #line 107 "../src/lexer.l" { D(O("lrb+");O(lrlevel);Y;); lrlevel++; } YY_BREAK case 7: YY_RULE_SETUP #line 111 "../src/lexer.l" { D(O("lrb-");O(lrlevel);Y;); lrlevel--; if(lrlevel == 0) { D(O("state:");O(start_stack.back());O(lrreturn);); BEGIN(start_stack.back()); start_stack.pop_back(); if(lrreturn) { return LRB; } } } YY_BREAK case 8: YY_RULE_SETUP #line 125 "../src/lexer.l" { D(O("lrbbla");O(lrlevel);Y;); } YY_BREAK case 9: /* rule 9 can match eol */ YY_RULE_SETUP #line 128 "../src/lexer.l" { D(O("lrbeol");O(lrlevel);Y;) yyless(0); BEGIN(start_stack.back()); } YY_BREAK case 10: YY_RULE_SETUP #line 136 "../src/lexer.l" { D(O("skipLPAREN");Y;); start_stack.push_back(YY_START); lrlevel = 1; lrreturn = 0; lexer_lr = ""; lexer_lrpos = line_pos; BEGIN(state_lr); } YY_BREAK case 11: YY_RULE_SETUP #line 145 "../src/lexer.l" { D(O("skipLPAREN");Y;); start_stack.push_back(YY_START); lrlevel = 1; lrreturn = 0; BEGIN(state_lrb); } YY_BREAK case 12: YY_RULE_SETUP #line 153 "../src/lexer.l" { D(O("NOSKIP");Y;); return yytext[yyleng-1]; } YY_BREAK case 13: YY_RULE_SETUP #line 154 "../src/lexer.l" { D(O("NOSKIPNOOP");Y;); return yytext[yyleng-1]; } YY_BREAK case 14: YY_RULE_SETUP #line 155 "../src/lexer.l" { D(O("NOSKIPNOS");Y;); return yytext[yyleng-1]; } YY_BREAK case 15: /* rule 15 can match eol */ YY_RULE_SETUP #line 158 "../src/lexer.l" { D(O("endSKIP");Y;); switch(YY_START) { case state_skip: return SKIP; case state_skipall: return SKIPALL; case state_skipnoop: return SKIPNOOP; case state_skipnos: return SKIPNOS; } } YY_BREAK case 16: YY_RULE_SETUP #line 172 "../src/lexer.l" { D(O("SKIP");Y;); } YY_BREAK case 17: YY_RULE_SETUP #line 176 "../src/lexer.l" { D(O("IDENTIFIER");Y;); lexer_name = yytext; return IDENTIFIER; } YY_BREAK case 18: YY_RULE_SETUP #line 177 "../src/lexer.l" { D(O("TIDENTIFIER");Y;); lexer_name = yytext; return TIDENTIFIER; } YY_BREAK case 19: YY_RULE_SETUP #line 181 "../src/lexer.l" { D(O("IDENTIFIER");Y;); lexer_name = yytext; return IDENTIFIER; } YY_BREAK case 20: YY_RULE_SETUP #line 182 "../src/lexer.l" { D(O("TIDENTIFIER");Y;); lexer_name = yytext; return TIDENTIFIER; } YY_BREAK /* to be used in '#include ' */ case 21: /* rule 21 can match eol */ YY_RULE_SETUP #line 186 "../src/lexer.l" { D(O("INCFILENAME");Y;); lexer_string = yytext; BEGIN state_char; return INCFILENAME; } YY_BREAK case 22: /* rule 22 can match eol */ YY_RULE_SETUP #line 192 "../src/lexer.l" { D(O("EOL");); return EOL; } YY_BREAK case 23: YY_RULE_SETUP #line 193 "../src/lexer.l" { D(O("BLA");Y;); return yytext[0]; } YY_BREAK case 24: YY_RULE_SETUP #line 197 "../src/lexer.l" { D(O("ABSTRACTINTERFACE");Y;); return ABSTRACTINTERFACE; } YY_BREAK case 25: YY_RULE_SETUP #line 198 "../src/lexer.l" { D(O("ASSOCIATE");Y;); return ASSOCIATE; } YY_BREAK case 26: YY_RULE_SETUP #line 199 "../src/lexer.l" { D(O("BLOCK");Y;); return BLOCK; } YY_BREAK case 27: YY_RULE_SETUP #line 200 "../src/lexer.l" { D(O("BLOCKDATA");Y;); return BLOCKDATA; } YY_BREAK case 28: YY_RULE_SETUP #line 201 "../src/lexer.l" { D(O("CASE");Y); return CASE; } YY_BREAK case 29: YY_RULE_SETUP #line 202 "../src/lexer.l" { D(O("CASEDEFAULT");Y); return CASEDEFAULT; } YY_BREAK case 30: YY_RULE_SETUP #line 203 "../src/lexer.l" { D(O("CHARACTER");Y;); return BASICTYPE; } YY_BREAK case 31: YY_RULE_SETUP #line 204 "../src/lexer.l" { D(O("CHANGETEAM");Y); return CHANGETEAM; } YY_BREAK case 32: YY_RULE_SETUP #line 205 "../src/lexer.l" { D(O("CLASS");Y;); return CLASS; } YY_BREAK case 33: YY_RULE_SETUP #line 206 "../src/lexer.l" { D(O("CLASSDEFAULT");Y); return CLASSDEFAULT; } YY_BREAK /* see comment at TYPEIS */ case 34: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 7; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 208 "../src/lexer.l" { D(O("CLASSIS");Y); return CLASSIS; } YY_BREAK case 35: YY_RULE_SETUP #line 209 "../src/lexer.l" { D(O("COMPLEX");Y;); return BASICTYPE; } YY_BREAK case 36: YY_RULE_SETUP #line 210 "../src/lexer.l" { D(O("CONTAINS");Y); return CONTAINS; } YY_BREAK case 37: YY_RULE_SETUP #line 211 "../src/lexer.l" { D(O("CRITICAL");Y;); return CRITICAL; } YY_BREAK case 38: YY_RULE_SETUP #line 212 "../src/lexer.l" { D(O("DO");Y;); return DO; } YY_BREAK case 39: YY_RULE_SETUP #line 213 "../src/lexer.l" { D(O("DO,");Y;); return DOCOMMA; } YY_BREAK case 40: YY_RULE_SETUP #line 214 "../src/lexer.l" { D(O("DOCONCURRENT");Y;); return DOCONCURRENT; } YY_BREAK case 41: YY_RULE_SETUP #line 215 "../src/lexer.l" { D(O("DO,CONCURRENT");Y;); return DOCONCURRENT; } YY_BREAK case 42: YY_RULE_SETUP #line 216 "../src/lexer.l" { D(O("DOWHILE");Y;); return DOWHILE; } YY_BREAK case 43: YY_RULE_SETUP #line 217 "../src/lexer.l" { D(O("DO,WHILE");Y;); return DOWHILE; } YY_BREAK case 44: YY_RULE_SETUP #line 218 "../src/lexer.l" { D(O("DOUBLECOMPLEX");Y;); return BASICTYPE; } YY_BREAK case 45: YY_RULE_SETUP #line 219 "../src/lexer.l" { D(O("DOUBLEPRECISION");Y;); return BASICTYPE; } YY_BREAK case 46: YY_RULE_SETUP #line 220 "../src/lexer.l" { D(O("ELEMENTAL");Y;); return ELEMENTAL; } YY_BREAK case 47: YY_RULE_SETUP #line 221 "../src/lexer.l" { D(O("ELSE");Y); return ELSE; } YY_BREAK case 48: YY_RULE_SETUP #line 222 "../src/lexer.l" { D(O("ELSEIF");Y); return ELSEIF; } YY_BREAK case 49: YY_RULE_SETUP #line 223 "../src/lexer.l" { D(O("ELSEWHERE");Y); return ELSEWHERE; } YY_BREAK case 50: YY_RULE_SETUP #line 224 "../src/lexer.l" { D(O("END");Y;); return END; } YY_BREAK case 51: YY_RULE_SETUP #line 225 "../src/lexer.l" { D(O("ENDASSOCIATE");Y;); return ENDASSOCIATE; } YY_BREAK case 52: YY_RULE_SETUP #line 226 "../src/lexer.l" { D(O("ENDBLOCK");Y;); return ENDBLOCK; } YY_BREAK case 53: YY_RULE_SETUP #line 227 "../src/lexer.l" { D(O("ENDBLOCKDATA");Y;); return ENDBLOCKDATA; } YY_BREAK case 54: YY_RULE_SETUP #line 228 "../src/lexer.l" { D(O("ENDCRITICAL");Y;); return ENDCRITICAL; } YY_BREAK case 55: YY_RULE_SETUP #line 229 "../src/lexer.l" { D(O("ENDDO");Y;); return ENDDO; } YY_BREAK case 56: YY_RULE_SETUP #line 230 "../src/lexer.l" { D(O("ENDENUM");Y;); return ENDENUM; } YY_BREAK case 57: YY_RULE_SETUP #line 231 "../src/lexer.l" { D(O("ENDFORALL");Y;); return ENDFORALL; } YY_BREAK case 58: YY_RULE_SETUP #line 232 "../src/lexer.l" { D(O("ENDFUNCTION");Y;); return ENDFUNCTION; } YY_BREAK case 59: YY_RULE_SETUP #line 233 "../src/lexer.l" { D(O("ENDIF");Y); return ENDIF; } YY_BREAK case 60: YY_RULE_SETUP #line 234 "../src/lexer.l" { D(O("ENDINTERFACE");Y;); return ENDINTERFACE; } YY_BREAK case 61: YY_RULE_SETUP #line 235 "../src/lexer.l" { D(O("ENDMODULE");Y;); return ENDMODULE; } YY_BREAK case 62: YY_RULE_SETUP #line 236 "../src/lexer.l" { D(O("ENDPROCEDURE");Y;); return ENDPROCEDURE; } YY_BREAK case 63: YY_RULE_SETUP #line 237 "../src/lexer.l" { D(O("ENDPROGRAM");Y;); return ENDPROGRAM; } YY_BREAK case 64: YY_RULE_SETUP #line 238 "../src/lexer.l" { D(O("ENDSELECT");Y); return ENDSELECT; } YY_BREAK case 65: YY_RULE_SETUP #line 239 "../src/lexer.l" { D(O("ENDSUBROUTINE");Y;); return ENDSUBROUTINE; } YY_BREAK case 66: YY_RULE_SETUP #line 240 "../src/lexer.l" { D(O("ENDSUBMODULE");Y;); return ENDSUBMODULE; } YY_BREAK case 67: YY_RULE_SETUP #line 241 "../src/lexer.l" { D(O("ENDTEAM");Y); return ENDTEAM; } YY_BREAK case 68: YY_RULE_SETUP #line 242 "../src/lexer.l" { D(O("ENDTYPE");Y;); return ENDTYPE; } YY_BREAK case 69: YY_RULE_SETUP #line 243 "../src/lexer.l" { D(O("ENDWHERE");Y;); return ENDWHERE; } YY_BREAK case 70: YY_RULE_SETUP #line 244 "../src/lexer.l" { D(O("ENTRY");Y); return ENTRY; } YY_BREAK case 71: YY_RULE_SETUP #line 245 "../src/lexer.l" { D(O("ENUM");Y;); return ENUM; } YY_BREAK case 72: YY_RULE_SETUP #line 246 "../src/lexer.l" { D(O("FORALL");Y;); return FORALL; } YY_BREAK case 73: YY_RULE_SETUP #line 247 "../src/lexer.l" { D(O("FUNCTION");Y;); return FUNCTION; } YY_BREAK case 74: YY_RULE_SETUP #line 248 "../src/lexer.l" { D(O("IF");Y;); return IF; } YY_BREAK case 75: YY_RULE_SETUP #line 249 "../src/lexer.l" { D(O("IMPURE");Y;); return IMPURE; } YY_BREAK case 76: YY_RULE_SETUP #line 250 "../src/lexer.l" { D(O("INCLUDE");Y;); return INCLUDE; } YY_BREAK case 77: YY_RULE_SETUP #line 251 "../src/lexer.l" { D(O("INTEGER");Y;); return BASICTYPE; } YY_BREAK case 78: YY_RULE_SETUP #line 252 "../src/lexer.l" { D(O("INTERFACE");Y;); return INTERFACE; } YY_BREAK case 79: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 9; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 253 "../src/lexer.l" { D(O("INTERFACE1");Y;); return INTERFACE1; } YY_BREAK case 80: YY_RULE_SETUP #line 254 "../src/lexer.l" { D(O("LOGICAL");Y;); return BASICTYPE; } YY_BREAK case 81: YY_RULE_SETUP #line 255 "../src/lexer.l" { D(O("MODULE");Y); return MODULE; } YY_BREAK case 82: YY_RULE_SETUP #line 256 "../src/lexer.l" { D(O("MODULEPROCEDURE");Y); return MODULEPROCEDURE; } YY_BREAK case 83: YY_RULE_SETUP #line 257 "../src/lexer.l" { D(O("MODULESUBROUTINE");Y); return MODULESUBROUTINE; } YY_BREAK case 84: YY_RULE_SETUP #line 258 "../src/lexer.l" { D(O("MODULEFUNCTION");Y); return MODULEFUNCTION; } YY_BREAK case 85: YY_RULE_SETUP #line 259 "../src/lexer.l" { D(O("PROCEDURE");Y); return PROCEDURE; } YY_BREAK case 86: YY_RULE_SETUP #line 260 "../src/lexer.l" { D(O("PROGRAM");Y;); return PROGRAM; } YY_BREAK case 87: YY_RULE_SETUP #line 261 "../src/lexer.l" { D(O("PURE");Y;); return PURE; } YY_BREAK case 88: YY_RULE_SETUP #line 262 "../src/lexer.l" { D(O("RANK");Y); return RANK; } YY_BREAK case 89: YY_RULE_SETUP #line 263 "../src/lexer.l" { D(O("RANKDEFAULT");Y); return RANKDEFAULT; } YY_BREAK case 90: YY_RULE_SETUP #line 264 "../src/lexer.l" { D(O("REAL");Y;); return BASICTYPE; } YY_BREAK case 91: YY_RULE_SETUP #line 265 "../src/lexer.l" { D(O("RECURSIVE");Y;); return RECURSIVE; } YY_BREAK case 92: YY_RULE_SETUP #line 266 "../src/lexer.l" { D(O("NON_RECURSIVE");Y;); return NON_RECURSIVE; } YY_BREAK case 93: YY_RULE_SETUP #line 267 "../src/lexer.l" { D(O("SELECTCASE");Y); return SELECTCASE; } YY_BREAK case 94: YY_RULE_SETUP #line 268 "../src/lexer.l" { D(O("SELECTRANK");Y); return SELECTRANK; } YY_BREAK case 95: YY_RULE_SETUP #line 269 "../src/lexer.l" { D(O("SELECTTYPE");Y); return SELECTTYPE; } YY_BREAK case 96: YY_RULE_SETUP #line 270 "../src/lexer.l" { D(O("SIMPLE");Y;); return SIMPLE; } YY_BREAK case 97: YY_RULE_SETUP #line 271 "../src/lexer.l" { D(O("SUBMODULE");Y;); return SUBMODULE; } YY_BREAK case 98: YY_RULE_SETUP #line 272 "../src/lexer.l" { D(O("SUBROUTINE");Y;); return SUBROUTINE; } YY_BREAK case 99: YY_RULE_SETUP #line 273 "../src/lexer.l" { D(O("THEN");Y;); return THEN; } YY_BREAK case 100: YY_RULE_SETUP #line 274 "../src/lexer.l" { D(O("TYPE");Y;); return TYPE; } YY_BREAK case 101: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 4; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 275 "../src/lexer.l" { D(O("TYPEC");Y;); return TYPEC; } YY_BREAK /* To disambiguate between 'TYPE ISMYTYPE' and TYPE IS(MYTYPE), the lexer */ /* recognizes 'TYPEIS(' and returns "TYPEIS" */ /* Note that the '(' stays in the input buffer */ case 102: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 6; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 279 "../src/lexer.l" { D(O("TYPEIS");Y); return TYPEIS; } YY_BREAK case 103: YY_RULE_SETUP #line 280 "../src/lexer.l" { D(O("USE");Y); return USE; } YY_BREAK case 104: YY_RULE_SETUP #line 281 "../src/lexer.l" { D(O("WHERE");Y;); return WHERE; } YY_BREAK /* following are only used while relabeling */ case 105: YY_RULE_SETUP #line 285 "../src/lexer.l" { D(O("ASSIGN");Y;); return ASSIGN; } YY_BREAK case 106: YY_RULE_SETUP #line 286 "../src/lexer.l" { D(O("CALL");Y;); return CALL; } YY_BREAK case 107: YY_RULE_SETUP #line 287 "../src/lexer.l" { D(O("GOTO");Y;); return GOTO; } YY_BREAK case 108: YY_RULE_SETUP #line 288 "../src/lexer.l" { D(O("PRINT");Y;); return PRINT; } YY_BREAK case 109: YY_RULE_SETUP #line 289 "../src/lexer.l" { D(O("READ");Y;); return READ; } YY_BREAK case 110: YY_RULE_SETUP #line 290 "../src/lexer.l" { D(O("REREAD");Y;); return READ; } /* DEC fortran */ YY_BREAK case 111: YY_RULE_SETUP #line 291 "../src/lexer.l" { D(O("TO");Y;); return TO; } YY_BREAK case 112: YY_RULE_SETUP #line 292 "../src/lexer.l" { D(O("WRITE");Y;); return WRITE; } YY_BREAK case 113: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 9; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 293 "../src/lexer.l" { D(O("IO");Y;); return IO; } YY_BREAK case 114: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 5; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 294 "../src/lexer.l" { D(O("IO");Y;); return IO; } YY_BREAK case 115: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 7; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 295 "../src/lexer.l" { D(O("IO");Y;); return IO; } YY_BREAK case 116: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 5; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 296 "../src/lexer.l" { D(O("IO");Y;); return IO; } YY_BREAK case 117: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 7; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 297 "../src/lexer.l" { D(O("IO");Y;); return IO; } YY_BREAK case 118: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 4; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 298 "../src/lexer.l" { D(O("IO");Y;); return IO; } YY_BREAK case 119: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 4; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 299 "../src/lexer.l" { D(O("IO");Y;); return IO; } YY_BREAK case 120: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 6; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 300 "../src/lexer.l" { D(O("IO");Y;); return IO; } /* DEC fortran */ YY_BREAK case 121: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 6; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 301 "../src/lexer.l" { D(O("IO");Y;); return IO; } YY_BREAK case 122: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 4; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 302 "../src/lexer.l" { D(O("IO");Y;); return IO; } YY_BREAK case 123: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 5; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 303 "../src/lexer.l" { D(O("IO");Y;); return IO; } YY_BREAK case 124: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 6; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 304 "../src/lexer.l" { D(O("IO");Y;); return IO; } /* DEC fortran */ YY_BREAK case 125: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 6; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 305 "../src/lexer.l" { D(O("IO");Y;); return IO; } /* DEC fortran */ YY_BREAK case 126: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 6; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 306 "../src/lexer.l" { D(O("IO");Y;); return IO; } /* INTEL fortran */ YY_BREAK case 127: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 4; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 307 "../src/lexer.l" { D(O("IO");Y;); return IO; } /* INTEL fortran */ YY_BREAK case 128: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 7; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 308 "../src/lexer.l" { D(O("IO");Y;); return IO; } /* INTEL fortran */ YY_BREAK /* ACCEPT and TYPE, followed by a label are dec-extensions, and are disguised as READ and PRINT respectively */ case 129: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 6; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 311 "../src/lexer.l" { D(O("ACCEPT");Y;); return READ; } /* DEC fortran */ YY_BREAK case 130: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 4; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 312 "../src/lexer.l" { D(O("TYPE0-9");Y); return PRINT; } /* DEC fortran */ YY_BREAK case 131: YY_RULE_SETUP #line 316 "../src/lexer.l" { D(O("SEGMENT");Y;); return SEGMENT; } YY_BREAK case 132: YY_RULE_SETUP #line 317 "../src/lexer.l" { D(O("SEGMENT,");Y;); return SEGMENT; } YY_BREAK case 133: YY_RULE_SETUP #line 318 "../src/lexer.l" { D(O("ENDSEGMENT");Y;); return ENDSEGMENT; } YY_BREAK case 134: /* rule 134 can match eol */ YY_RULE_SETUP #line 322 "../src/lexer.l" { D(O("UNSURE");Y;); return UNSURE; } YY_BREAK case 135: /* rule 135 can match eol */ YY_RULE_SETUP #line 323 "../src/lexer.l" { D(O("FREE");Y;); return FREE; } YY_BREAK case 136: /* rule 136 can match eol */ YY_RULE_SETUP #line 324 "../src/lexer.l" { D(O("FREE");Y;); return FREE; } YY_BREAK case 137: /* rule 137 can match eol */ YY_RULE_SETUP #line 325 "../src/lexer.l" { D(O("UNSURE");Y;); return UNSURE; } YY_BREAK case 138: /* rule 138 can match eol */ YY_RULE_SETUP #line 326 "../src/lexer.l" { D(O("UNSURE");Y;); return UNSURE; } YY_BREAK case 139: /* rule 139 can match eol */ YY_RULE_SETUP #line 327 "../src/lexer.l" { D(O("FREE");Y;); return FREE; } YY_BREAK case 140: /* rule 140 can match eol */ YY_RULE_SETUP #line 328 "../src/lexer.l" { D(O("FREE");Y;); return FREE; } YY_BREAK case 141: /* rule 141 can match eol */ YY_RULE_SETUP #line 329 "../src/lexer.l" { D(O("FREE");Y;); return FREE; } YY_BREAK case 142: /* rule 142 can match eol */ YY_RULE_SETUP #line 330 "../src/lexer.l" { D(O("FREE");Y;); return FREE; } YY_BREAK case 143: /* rule 143 can match eol */ YY_RULE_SETUP #line 331 "../src/lexer.l" { D(O("FREE");Y;); return FREE; } YY_BREAK case 144: /* rule 144 can match eol */ YY_RULE_SETUP #line 332 "../src/lexer.l" { D(O("FREE");Y;); return FREE; } YY_BREAK case 145: /* rule 145 can match eol */ YY_RULE_SETUP #line 333 "../src/lexer.l" { D(O("FIXED");Y;); return FIXED; } YY_BREAK case 146: /* rule 146 can match eol */ YY_RULE_SETUP #line 334 "../src/lexer.l" { D(O("UNSURE");Y;); return UNSURE; } YY_BREAK case 147: /* rule 147 can match eol */ YY_RULE_SETUP #line 335 "../src/lexer.l" { D(O("UNSURE");Y;); return UNSURE; } YY_BREAK case 148: #line 340 "../src/lexer.l" case 149: /* rule 149 can match eol */ #line 341 "../src/lexer.l" case 150: /* rule 150 can match eol */ YY_RULE_SETUP #line 341 "../src/lexer.l" { D(O("FIXOMP");Y;); return OMP; } YY_BREAK case 151: /* rule 151 can match eol */ YY_RULE_SETUP #line 344 "../src/lexer.l" { D(O("EOL");); return EOL; } YY_BREAK case 152: YY_RULE_SETUP #line 345 "../src/lexer.l" { D(O("BLA");Y;); return yytext[0]; } YY_BREAK case 153: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 348 "../src/lexer.l" case 154: YY_RULE_SETUP #line 349 "../src/lexer.l" { D(O("OMP");Y;); return OMP; } YY_BREAK case 155: /* rule 155 can match eol */ YY_RULE_SETUP #line 352 "../src/lexer.l" { D(O("EOL");); return EOL; } YY_BREAK case 156: YY_RULE_SETUP #line 353 "../src/lexer.l" { D(O("BLA");Y;); return yytext[0]; } YY_BREAK case 157: YY_RULE_SETUP #line 358 "../src/lexer.l" { D(O("LABEL");Y;); lexeri_number = yytext; return LABEL; } YY_BREAK case 158: /* rule 158 can match eol */ YY_RULE_SETUP #line 362 "../src/lexer.l" { D(O("EOL");); return EOL; } YY_BREAK case 159: YY_RULE_SETUP #line 363 "../src/lexer.l" { D(O("BLA");Y;); return yytext[0]; } YY_BREAK case 160: YY_RULE_SETUP #line 367 "../src/lexer.l" { D(O("LABEL");Y;); lexeri_number = yytext; return LABEL; } YY_BREAK case 161: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 4; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 371 "../src/lexer.l" { D(O("LABELIS");Y); return LABELIS; } YY_BREAK case 162: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 4; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 372 "../src/lexer.l" { D(O("LABELIS");Y); return LABELIS; } YY_BREAK case 163: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 4; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 373 "../src/lexer.l" { D(O("LABELIS");Y); return LABELIS; } YY_BREAK case 164: *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ (yy_c_buf_p) = yy_cp = yy_bp + 4; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 374 "../src/lexer.l" { D(O("LABELIS");Y); return LABELIS; } YY_BREAK case 165: YY_RULE_SETUP #line 375 "../src/lexer.l" { D(O("OTHER");Y); return OTHER; } /* e.g: '(a80)' generated by Line_prep() */ YY_BREAK case 166: /* rule 166 can match eol */ YY_RULE_SETUP #line 376 "../src/lexer.l" { D(O("OTHER");Y); return OTHER; } /* e.g: read(5#n,x) dec extension */ YY_BREAK case 167: /* rule 167 can match eol */ YY_RULE_SETUP #line 377 "../src/lexer.l" { D(O("EOL");); return EOL; } YY_BREAK case 168: YY_RULE_SETUP #line 378 "../src/lexer.l" { D(O("COMMA");Y;); return yytext[0]; } YY_BREAK case 169: YY_RULE_SETUP #line 379 "../src/lexer.l" { D(O("OTHER");Y;); return OTHER; } YY_BREAK case 170: YY_RULE_SETUP #line 383 "../src/lexer.l" { D(O("STARTIO");Y;); BEGIN(state_iolist); line_pos-=strlen(yytext); yyless(0); return STARTIO; } YY_BREAK case 171: /* rule 171 can match eol */ *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ YY_LINENO_REWIND_TO(yy_cp - 1); (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 392 "../src/lexer.l" { D(O("LABEL_CALLLIST");Y;); /* DEC allows & and $ next to * */ lexeri_number = yytext+2; return LABEL; } YY_BREAK case 172: /* rule 172 can match eol */ YY_RULE_SETUP #line 397 "../src/lexer.l" { D(O("EOL_CALLLIST");); return EOL; } YY_BREAK case 173: YY_RULE_SETUP #line 398 "../src/lexer.l" { D(O("OTHER_CALLLIST");Y;); return OTHER; } YY_BREAK case 174: YY_RULE_SETUP #line 402 "../src/lexer.l" { D(O("STARTCALL");Y;); BEGIN(state_calllist); line_pos-=strlen(yytext); yyless(0); return STARTCALL; } YY_BREAK case 175: YY_RULE_SETUP #line 411 "../src/lexer.l" { D(O("FINDENTFIX p-on");Y;); return P_ON; } YY_BREAK case 176: YY_RULE_SETUP #line 414 "../src/lexer.l" { D(O("FIXFINDENTFIX p-on");Y;); return P_ON; } YY_BREAK case 177: YY_RULE_SETUP #line 417 "../src/lexer.l" { D(O("FINDENTFIX p-off");Y;); return P_OFF; } YY_BREAK case 178: YY_RULE_SETUP #line 420 "../src/lexer.l" { D(O("FIXFINDENTFIX p-off");Y;); return P_OFF; } YY_BREAK case 179: YY_RULE_SETUP #line 423 "../src/lexer.l" { D(O("FINDENTFIX");Y;); size_t l = input_string.length()-yyleng-1; lexer_rest = input_string.substr(yyleng,l); return FINDENTFIX; } YY_BREAK case 180: YY_RULE_SETUP #line 428 "../src/lexer.l" { D(O("FIXFINDENTFIX");Y;); size_t l = input_string.length()-yyleng-1; lexer_rest = input_string.substr(yyleng,l); return FIXFINDENTFIX; } YY_BREAK case 181: YY_RULE_SETUP #line 433 "../src/lexer.l" { D(O("CPP");Y;); return CPP; } YY_BREAK case 182: YY_RULE_SETUP #line 436 "../src/lexer.l" { D(O("CPP_IF");Y;); return CPP_IF; } YY_BREAK case 183: YY_RULE_SETUP #line 439 "../src/lexer.l" { D(O("CPP_ENDIF");Y;); return CPP_ENDIF; } YY_BREAK case 184: YY_RULE_SETUP #line 442 "../src/lexer.l" { D(O("CPP_ELSE");Y;); return CPP_ELSE; } YY_BREAK case 185: YY_RULE_SETUP #line 445 "../src/lexer.l" { D(O("CPP_ELIF");Y;); return CPP_ELIF; } YY_BREAK case 186: /* rule 186 can match eol */ YY_RULE_SETUP #line 448 "../src/lexer.l" { D(O("INCLUDE_CPP");Y;); extract_include(); return INCLUDE_CPP; } YY_BREAK case 187: /* rule 187 can match eol */ YY_RULE_SETUP #line 452 "../src/lexer.l" { D(O("INCLUDE_CPP_STD");Y;); extract_include(); return INCLUDE_CPP_STD; } YY_BREAK case 188: YY_RULE_SETUP #line 458 "../src/lexer.l" { D(O("COCO");Y;); return COCO; } YY_BREAK case 189: YY_RULE_SETUP #line 461 "../src/lexer.l" { D(O("COCO_IF");Y;); return COCO_IF; } YY_BREAK case 190: YY_RULE_SETUP #line 464 "../src/lexer.l" { D(O("COCO_ENDIF");Y;); return COCO_ENDIF; } YY_BREAK case 191: YY_RULE_SETUP #line 467 "../src/lexer.l" { D(O("COCO_ELSE");Y;); return COCO_ELSE; } YY_BREAK case 192: YY_RULE_SETUP #line 470 "../src/lexer.l" { D(O("COCO_ELIF");Y;); return COCO_ELIF; } YY_BREAK case 193: /* rule 193 can match eol */ YY_RULE_SETUP #line 473 "../src/lexer.l" { D(O("INCLUDE_COCO");Y;); /* coco statements must start with '??' in column 1. However, for this code that is somewhat inconvenient, so we allow white space before '??' */ extract_include(); return INCLUDE_COCO; } YY_BREAK case 194: /* rule 194 can match eol */ YY_RULE_SETUP #line 480 "../src/lexer.l" { D(O("INCLUDE_COCO");Y;); /* coco statements must start with '??' in column 1. However, for this code that is somewhat inconvenient, so we allow white space before '??' */ extract_include(); return INCLUDE_COCO; } YY_BREAK case 195: /* rule 195 can match eol */ YY_RULE_SETUP #line 489 "../src/lexer.l" { D(O("EOL");); return EOL; } YY_BREAK case 196: YY_RULE_SETUP #line 490 "../src/lexer.l" { D(O("BLA");Y;); return yytext[0]; } YY_BREAK case 197: YY_RULE_SETUP #line 493 "../src/lexer.l" { int type = pline.get_type(std::string(yytext)); D(O("found_special");O(type);O(pline.get_type_as_string(std::string(yytext)));Y;); D(O("encoded line");O(pline.get_line_encoded());); if (type == pline.is_string) { lexer_string = pline.get_value(std::string(yytext)); D(O("QSTRING");O(lexer_string);Y;); return QSTRING; } if (type == pline.is_stlabel) { lexer_stlabel = pline.get_value(std::string(yytext)); D(O("STLABEL");O(lexer_stlabel);Y;); return STLABEL; } if (type == pline.is_dotop) { D(O("DOTOPERATOR");); return DOTOPERATOR; } D(O("This should not happen");); } YY_BREAK case 198: /* rule 198 can match eol */ *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ YY_LINENO_REWIND_TO(yy_cp - 1); (yy_c_buf_p) = yy_cp -= 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 518 "../src/lexer.l" { D(O("NAMED_LABEL");Y;); lexer_name = yytext; lexer_name.erase(lexer_name.size()-1); return NAMED_LABEL; } YY_BREAK case 199: YY_RULE_SETUP #line 524 "../src/lexer.l" { D(O("I_NUMBER");Y;); lexer_name = yytext; lexeri_number = yytext; return I_NUMBER; } YY_BREAK case 200: YY_RULE_SETUP #line 531 "../src/lexer.l" { D(O("LPAREN");Y;); start_stack.push_back(YY_START); lrlevel = 1; lrreturn = 1; lexer_lr = ""; lexer_lrpos = line_pos; BEGIN(state_lr); } YY_BREAK case 201: YY_RULE_SETUP #line 540 "../src/lexer.l" { D(O("LPARENB");Y;); start_stack.push_back(YY_START); lrlevel = 1; lrreturn = 1; BEGIN(state_lrb); } YY_BREAK case 202: /* rule 202 can match eol */ YY_RULE_SETUP #line 547 "../src/lexer.l" { D(O("BLANK");); return BLANK; } YY_BREAK case 203: /* rule 203 can match eol */ YY_RULE_SETUP #line 549 "../src/lexer.l" { D(O("EOL");); return EOL; } YY_BREAK case 204: YY_RULE_SETUP #line 550 "../src/lexer.l" { D(O("BLA");Y;); return yytext[0]; } YY_BREAK case 205: YY_RULE_SETUP #line 552 "../src/lexer.l" ECHO; YY_BREAK #line 4673 "lexer.cpp" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(state_identifier): case YY_STATE_EOF(state_keyword): case YY_STATE_EOF(state_esope): case YY_STATE_EOF(state_cidentifier): case YY_STATE_EOF(state_lr): case YY_STATE_EOF(state_lrb): case YY_STATE_EOF(state_skip): case YY_STATE_EOF(state_skipall): case YY_STATE_EOF(state_skipnoop): case YY_STATE_EOF(state_error): case YY_STATE_EOF(state_findformat): case YY_STATE_EOF(state_scanfixpre): case YY_STATE_EOF(state_scanompfixed): case YY_STATE_EOF(state_scanompfree): case YY_STATE_EOF(state_incfilename): case YY_STATE_EOF(state_char): case YY_STATE_EOF(state_labels): case YY_STATE_EOF(state_iolist): case YY_STATE_EOF(state_startiolist): case YY_STATE_EOF(state_calllist): case YY_STATE_EOF(state_startcalllist): case YY_STATE_EOF(state_skipnos): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_c_buf_p); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of user's declarations */ } /* end of yylex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer (void) { char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; char *source = (yytext_ptr); int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1); for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ YY_FATAL_ERROR( "input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); /* "- 2" to take care of EOB's */ YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); } (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state (void) { yy_state_type yy_current_state; char *yy_cp; yy_current_state = (yy_start); yy_current_state += YY_AT_BOL(); (yy_state_ptr) = (yy_state_buf); *(yy_state_ptr)++ = yy_current_state; for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 1567 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; *(yy_state_ptr)++ = yy_current_state; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { int yy_is_jam; YY_CHAR yy_c = 1; while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 1567 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; yy_is_jam = (yy_current_state == 1566); if ( ! yy_is_jam ) *(yy_state_ptr)++ = yy_current_state; return yy_is_jam ? 0 : yy_current_state; } #ifndef YY_NO_UNPUT static void yyunput (int c, char * yy_bp ) { char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up yytext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ int number_to_move = (yy_n_chars) + 2; char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void) #else static int input (void) #endif { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ int offset = (int) ((yy_c_buf_p) - (yytext_ptr)); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyrestart (FILE * input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE ); } yy_init_buffer( YY_CURRENT_BUFFER, input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } static void yy_load_buffer_state (void) { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yy_delete_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) yyfree( (void *) b->yy_ch_buf ); yyfree( (void *) b ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) { int oerrno = errno; yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yy_flush_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void yyensure_buffer_stack (void) { yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ yy_size_t grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return NULL; b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = NULL; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; yy_switch_to_buffer( b ); return b; } /** Setup the input buffer state to scan a string. The next call to yylex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * yy_scan_bytes() instead. */ YY_BUFFER_STATE yy_scan_string (const char * yystr ) { return yy_scan_bytes( yystr, (int) strlen(yystr) ); } /** Setup the input buffer state to scan the given bytes. The next call to yylex() will * scan from a @e copy of @a bytes. * @param yybytes the byte buffer to scan * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = (yy_size_t) (_yybytes_len + 2); buf = (char *) yyalloc( n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = yy_scan_buffer( buf, n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yynoreturn yy_fatal_error (const char* msg ) { fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /** Get the current line number. * */ int yyget_lineno (void) { return yylineno; } /** Get the input stream. * */ FILE *yyget_in (void) { return yyin; } /** Get the output stream. * */ FILE *yyget_out (void) { return yyout; } /** Get the length of the current token. * */ int yyget_leng (void) { return yyleng; } /** Get the current token. * */ char *yyget_text (void) { return yytext; } /** Set the current line number. * @param _line_number line number * */ void yyset_lineno (int _line_number ) { yylineno = _line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param _in_str A readable stream. * * @see yy_switch_to_buffer */ void yyset_in (FILE * _in_str ) { yyin = _in_str ; } void yyset_out (FILE * _out_str ) { yyout = _out_str ; } int yyget_debug (void) { return yy_flex_debug; } void yyset_debug (int _bdebug ) { yy_flex_debug = _bdebug ; } static int yy_init_globals (void) { /* Initialization is the same as for the non-reentrant scanner. * This function is called from yylex_destroy(), so don't allocate here. */ (yy_buffer_stack) = NULL; (yy_buffer_stack_top) = 0; (yy_buffer_stack_max) = 0; (yy_c_buf_p) = NULL; (yy_init) = 0; (yy_start) = 0; (yy_state_buf) = 0; (yy_state_ptr) = 0; (yy_full_match) = 0; (yy_lp) = 0; /* Defined in main.c */ #ifdef YY_STDINIT yyin = stdin; yyout = stdout; #else yyin = NULL; yyout = NULL; #endif /* For future reference: Set errno on error, since we are called by * yylex_init() */ return 0; } /* yylex_destroy is for both reentrant and non-reentrant scanners. */ int yylex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ yy_delete_buffer( YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; yypop_buffer_state(); } /* Destroy the stack itself. */ yyfree((yy_buffer_stack) ); (yy_buffer_stack) = NULL; yyfree ( (yy_state_buf) ); (yy_state_buf) = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * yylex() is called, initialization will occur. */ yy_init_globals( ); return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, const char * s2, int n ) { int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (const char * s ) { int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *yyalloc (yy_size_t size ) { return malloc(size); } void *yyrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return realloc(ptr, size); } void yyfree (void * ptr ) { free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #line 552 "../src/lexer.l" void lexer_set(Line_prep p, const int state) { input_string = p.get_line_encoded()+'\n'; D(O("lexer_set");O(input_string);O(p.get_type_as_string(0));); pline = p; yy_delete_buffer(YY_CURRENT_BUFFER); BEGIN(INITIAL); yy_scan_string(input_string.c_str()); lexer_enable(state); line_pos = 0; } void lexer_set(const std::string &s, const int state) { input_string = s+'\n'; D(O("lexer_set");O(input_string);); yy_delete_buffer(YY_CURRENT_BUFFER); yy_scan_string(input_string.c_str()); lexer_enable(state); line_pos = 0; } void lexer_enable(const int k) { switch(k) { case CALLLIST: BEGIN(state_startcalllist); break; /* prepare for parsing parameters of call to find *100 */ case CHAR: BEGIN(state_char); break; /* internal use */ case CIDENTIFIER: BEGIN(state_cidentifier); break; /* parse identifier possibly followed by , */ case IDENTIFIER: BEGIN(state_identifier); break; /* parse identifier */ case INCFILENAME: BEGIN(state_incfilename); break; /* parse include file name */ case LABELS: BEGIN(state_labels); break; /* parse label */ case SKIPALL: BEGIN(state_skipall); break; /* skip everything */ case SKIP: BEGIN(state_skip); break; /* skip everything except = */ case SKIPNOOP: BEGIN(state_skipnoop); break; /* skip everything except [,|~!#$] */ case KEYWORD: BEGIN(state_keyword); break; /* parse keywords */ case ESOPE: BEGIN(state_esope); break; /* allow esope keywords */ case FINDFORMAT: BEGIN(state_findformat); break; /* used to determine fixed or free */ case IOLIST: BEGIN(state_startiolist); break; /* prepare for parsing parameters of read() etc */ case SCANFIXPRE: BEGIN(state_scanfixpre); break; /* parse preprocessor and findentfix */ case SCANOMPFIXED: BEGIN(state_scanompfixed); break; /* parse omp, fixed format */ case SCANOMPFREE: BEGIN(state_scanompfree); break; /* parse omp, free format */ case SKIPNOS: BEGIN(state_skipnos); break; /* skip everything except : */ default: D(O("invalid parameter in lexer_enable");O(k);); BEGIN(state_error); break; } D(O("enabled");O(k);O(YY_START);); } std::string lexer_getname() { return lexer_name; } std::string lexer_getstlabel() { return lexer_stlabel; } std::string lexer_geti_number() { return lexeri_number; } int lexer_get_pos() { return line_pos; } int lexer_get_len() { return yyleng; } std::string lexer_getrest() { return lexer_rest; } std::string lexer_getstring() { D(O("lexer_string");O(lexer_string);); return lexer_string; } std::string lexer_getlr() { D(O("lexer_lr");O(lexer_lr);); return lexer_lr; } int lexer_getlrpos() { D(O("lexer_lrpos");O(lexer_lrpos);); return lexer_lrpos; } std::string lexer_getinclude() { D(O("lexer_getinclude");O(lexer_include);); return lexer_include; } void extract_include() { // removes first and last character of rest of input line // example: // #include "file.inc" // after scanning of '#include ', the string "file.inc", // without quotes is put in lexer_include size_t l = input_string.length()-yyleng-1; lexer_include = input_string.substr(yyleng,l); if (lexer_include.size() > 1) { lexer_include.erase(lexer_include.end()-1); lexer_include.erase(lexer_include.begin()); } D(O("lexer_include");O(lexer_include);); } #if 0 // maybe we need this in the future: // not sure if this works OK std::deque input_string_stack; void lexer_push(std::string s, const int state) { // https://sourceforge.net/p/flex/mailman/message/30542280/ input_string_stack.push_back(s); input_string = s+'\n'; yypush_buffer_state(YY_CURRENT_BUFFER); yy_scan_string(input_string.c_str()); lexer_enable(state); } void lexer_pop() { yypop_buffer_state(); input_string=input_string_stack.back(); input_string_stack.pop_back(); } #endif void quiet_compiler() // to prevent warning about unused unput { (void)yyunput; } findent-4.3.2/src/builtparser.cpp0000644000000000000000000032025514566134066013746 0ustar00/* A Bison parser, made by GNU Bison 3.8.2. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, especially those whose name start with YY_ or yy_. They are private implementation details that can be changed or removed. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output, and Bison version. */ #define YYBISON 30802 /* Bison version string. */ #define YYBISON_VERSION "3.8.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 0 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* First part of user prologue. */ #line 30 "../src/parser.y" #include #include "debug.h" #include "lexer.h" #include "line_prep.h" #include "prop.h" struct propstruct properties; bool parselabeling = false; int itemnumber = 0; #line 84 "parser.cpp" # ifndef YY_CAST # ifdef __cplusplus # define YY_CAST(Type, Val) static_cast (Val) # define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) # else # define YY_CAST(Type, Val) ((Type) (Val)) # define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) # endif # endif # ifndef YY_NULLPTR # if defined __cplusplus # if 201103L <= __cplusplus # define YY_NULLPTR nullptr # else # define YY_NULLPTR 0 # endif # else # define YY_NULLPTR ((void*)0) # endif # endif #include "parser.hpp" /* Symbol kind. */ enum yysymbol_kind_t { YYSYMBOL_YYEMPTY = -2, YYSYMBOL_YYEOF = 0, /* "end of file" */ YYSYMBOL_YYerror = 1, /* error */ YYSYMBOL_YYUNDEF = 2, /* "invalid token" */ YYSYMBOL_MODULE = 3, /* MODULE */ YYSYMBOL_SUBFUN = 4, /* SUBFUN */ YYSYMBOL_ENTRY = 5, /* ENTRY */ YYSYMBOL_SUBMODULE = 6, /* SUBMODULE */ YYSYMBOL_MODULESUBROUTINE = 7, /* MODULESUBROUTINE */ YYSYMBOL_MODULEFUNCTION = 8, /* MODULEFUNCTION */ YYSYMBOL_END = 9, /* END */ YYSYMBOL_ENDSUBROUTINE = 10, /* ENDSUBROUTINE */ YYSYMBOL_ENDFUNCTION = 11, /* ENDFUNCTION */ YYSYMBOL_ENDPROGRAM = 12, /* ENDPROGRAM */ YYSYMBOL_ENDMODULE = 13, /* ENDMODULE */ YYSYMBOL_ENDSUBMODULE = 14, /* ENDSUBMODULE */ YYSYMBOL_IF = 15, /* IF */ YYSYMBOL_THEN = 16, /* THEN */ YYSYMBOL_ELSE = 17, /* ELSE */ YYSYMBOL_ELSEIF = 18, /* ELSEIF */ YYSYMBOL_ENDIF = 19, /* ENDIF */ YYSYMBOL_SIMPLEIF = 20, /* SIMPLEIF */ YYSYMBOL_NWAYIF = 21, /* NWAYIF */ YYSYMBOL_WHERE = 22, /* WHERE */ YYSYMBOL_ENDWHERE = 23, /* ENDWHERE */ YYSYMBOL_FORALL = 24, /* FORALL */ YYSYMBOL_ENDFORALL = 25, /* ENDFORALL */ YYSYMBOL_ELSEWHERE = 26, /* ELSEWHERE */ YYSYMBOL_DO = 27, /* DO */ YYSYMBOL_DOCOMMA = 28, /* DOCOMMA */ YYSYMBOL_DOWHILE = 29, /* DOWHILE */ YYSYMBOL_DOCONCURRENT = 30, /* DOCONCURRENT */ YYSYMBOL_ENDDO = 31, /* ENDDO */ YYSYMBOL_SELECTCASE = 32, /* SELECTCASE */ YYSYMBOL_SELECTTYPE = 33, /* SELECTTYPE */ YYSYMBOL_ENDSELECT = 34, /* ENDSELECT */ YYSYMBOL_CASE = 35, /* CASE */ YYSYMBOL_CASEDEFAULT = 36, /* CASEDEFAULT */ YYSYMBOL_TYPEIS = 37, /* TYPEIS */ YYSYMBOL_CLASSIS = 38, /* CLASSIS */ YYSYMBOL_CLASSDEFAULT = 39, /* CLASSDEFAULT */ YYSYMBOL_SELECTRANK = 40, /* SELECTRANK */ YYSYMBOL_RANK = 41, /* RANK */ YYSYMBOL_RANKDEFAULT = 42, /* RANKDEFAULT */ YYSYMBOL_INTERFACE = 43, /* INTERFACE */ YYSYMBOL_INTERFACE1 = 44, /* INTERFACE1 */ YYSYMBOL_ABSTRACTINTERFACE = 45, /* ABSTRACTINTERFACE */ YYSYMBOL_ENDINTERFACE = 46, /* ENDINTERFACE */ YYSYMBOL_CONTAINS = 47, /* CONTAINS */ YYSYMBOL_BLOCK = 48, /* BLOCK */ YYSYMBOL_ENDBLOCK = 49, /* ENDBLOCK */ YYSYMBOL_BLOCKDATA = 50, /* BLOCKDATA */ YYSYMBOL_ENDBLOCKDATA = 51, /* ENDBLOCKDATA */ YYSYMBOL_ASSOCIATE = 52, /* ASSOCIATE */ YYSYMBOL_ENDASSOCIATE = 53, /* ENDASSOCIATE */ YYSYMBOL_CRITICAL = 54, /* CRITICAL */ YYSYMBOL_ENDCRITICAL = 55, /* ENDCRITICAL */ YYSYMBOL_CHANGETEAM = 56, /* CHANGETEAM */ YYSYMBOL_ENDTEAM = 57, /* ENDTEAM */ YYSYMBOL_ENUM = 58, /* ENUM */ YYSYMBOL_ENDENUM = 59, /* ENDENUM */ YYSYMBOL_ASSIGNMENT = 60, /* ASSIGNMENT */ YYSYMBOL_ASSIGN = 61, /* ASSIGN */ YYSYMBOL_TO = 62, /* TO */ YYSYMBOL_GOTO = 63, /* GOTO */ YYSYMBOL_GOTO_COMPUTED = 64, /* GOTO_COMPUTED */ YYSYMBOL_GOTO_ASSIGNED = 65, /* GOTO_ASSIGNED */ YYSYMBOL_READ = 66, /* READ */ YYSYMBOL_PRINT = 67, /* PRINT */ YYSYMBOL_WRITE = 68, /* WRITE */ YYSYMBOL_IO = 69, /* IO */ YYSYMBOL_IOLIST = 70, /* IOLIST */ YYSYMBOL_STARTIO = 71, /* STARTIO */ YYSYMBOL_LABELIS = 72, /* LABELIS */ YYSYMBOL_OTHER = 73, /* OTHER */ YYSYMBOL_MODULEPROCEDURE = 74, /* MODULEPROCEDURE */ YYSYMBOL_PROCEDURE = 75, /* PROCEDURE */ YYSYMBOL_ENDPROCEDURE = 76, /* ENDPROCEDURE */ YYSYMBOL_TIDENTIFIER = 77, /* TIDENTIFIER */ YYSYMBOL_BLANK = 78, /* BLANK */ YYSYMBOL_CHAR = 79, /* CHAR */ YYSYMBOL_FINDFORMAT = 80, /* FINDFORMAT */ YYSYMBOL_UNKNOWN = 81, /* UNKNOWN */ YYSYMBOL_FREE = 82, /* FREE */ YYSYMBOL_FIXED = 83, /* FIXED */ YYSYMBOL_UNSURE = 84, /* UNSURE */ YYSYMBOL_PROBFREE = 85, /* PROBFREE */ YYSYMBOL_FINDENTFIX = 86, /* FINDENTFIX */ YYSYMBOL_FIXFINDENTFIX = 87, /* FIXFINDENTFIX */ YYSYMBOL_P_ON = 88, /* P_ON */ YYSYMBOL_P_OFF = 89, /* P_OFF */ YYSYMBOL_SCANFIXPRE = 90, /* SCANFIXPRE */ YYSYMBOL_CPP_IF = 91, /* CPP_IF */ YYSYMBOL_CPP_ENDIF = 92, /* CPP_ENDIF */ YYSYMBOL_CPP_ELSE = 93, /* CPP_ELSE */ YYSYMBOL_CPP_ELIF = 94, /* CPP_ELIF */ YYSYMBOL_CPP = 95, /* CPP */ YYSYMBOL_COCO_IF = 96, /* COCO_IF */ YYSYMBOL_COCO_ENDIF = 97, /* COCO_ENDIF */ YYSYMBOL_COCO_ELSE = 98, /* COCO_ELSE */ YYSYMBOL_COCO_ELIF = 99, /* COCO_ELIF */ YYSYMBOL_COCO = 100, /* COCO */ YYSYMBOL_INCLUDE = 101, /* INCLUDE */ YYSYMBOL_INCLUDE_CPP = 102, /* INCLUDE_CPP */ YYSYMBOL_INCLUDE_CPP_STD = 103, /* INCLUDE_CPP_STD */ YYSYMBOL_INCLUDE_COCO = 104, /* INCLUDE_COCO */ YYSYMBOL_INCFILENAME = 105, /* INCFILENAME */ YYSYMBOL_USE = 106, /* USE */ YYSYMBOL_SEGMENT = 107, /* SEGMENT */ YYSYMBOL_ENDSEGMENT = 108, /* ENDSEGMENT */ YYSYMBOL_ESOPE = 109, /* ESOPE */ YYSYMBOL_IDENTIFIER = 110, /* IDENTIFIER */ YYSYMBOL_CIDENTIFIER = 111, /* CIDENTIFIER */ YYSYMBOL_SKIP = 112, /* SKIP */ YYSYMBOL_SKIPALL = 113, /* SKIPALL */ YYSYMBOL_SKIPNOOP = 114, /* SKIPNOOP */ YYSYMBOL_SKIPNOS = 115, /* SKIPNOS */ YYSYMBOL_KEYWORD = 116, /* KEYWORD */ YYSYMBOL_ELEMENTAL = 117, /* ELEMENTAL */ YYSYMBOL_IMPURE = 118, /* IMPURE */ YYSYMBOL_PURE = 119, /* PURE */ YYSYMBOL_SIMPLE = 120, /* SIMPLE */ YYSYMBOL_RECURSIVE = 121, /* RECURSIVE */ YYSYMBOL_NON_RECURSIVE = 122, /* NON_RECURSIVE */ YYSYMBOL_SUBROUTINE = 123, /* SUBROUTINE */ YYSYMBOL_FUNCTION = 124, /* FUNCTION */ YYSYMBOL_PROGRAM = 125, /* PROGRAM */ YYSYMBOL_EOL = 126, /* EOL */ YYSYMBOL_NAMED_LABEL = 127, /* NAMED_LABEL */ YYSYMBOL_STLABEL = 128, /* STLABEL */ YYSYMBOL_LABEL = 129, /* LABEL */ YYSYMBOL_LABELS = 130, /* LABELS */ YYSYMBOL_LABELLIST = 131, /* LABELLIST */ YYSYMBOL_CALL = 132, /* CALL */ YYSYMBOL_STARTCALL = 133, /* STARTCALL */ YYSYMBOL_CALLLIST = 134, /* CALLLIST */ YYSYMBOL_TYPE = 135, /* TYPE */ YYSYMBOL_ENDTYPE = 136, /* ENDTYPE */ YYSYMBOL_CLASS = 137, /* CLASS */ YYSYMBOL_BASICTYPE = 138, /* BASICTYPE */ YYSYMBOL_TYPEC = 139, /* TYPEC */ YYSYMBOL_QSTRING = 140, /* QSTRING */ YYSYMBOL_HSTRING = 141, /* HSTRING */ YYSYMBOL_LR = 142, /* LR */ YYSYMBOL_LRB = 143, /* LRB */ YYSYMBOL_DOTOPERATOR = 144, /* DOTOPERATOR */ YYSYMBOL_I_NUMBER = 145, /* I_NUMBER */ YYSYMBOL_UNCLASSIFIED = 146, /* UNCLASSIFIED */ YYSYMBOL_ERROR = 147, /* ERROR */ YYSYMBOL_OMP = 148, /* OMP */ YYSYMBOL_SCANOMPFIXED = 149, /* SCANOMPFIXED */ YYSYMBOL_SCANOMPFREE = 150, /* SCANOMPFREE */ YYSYMBOL_DEF = 151, /* DEF */ YYSYMBOL_EXEC = 152, /* EXEC */ YYSYMBOL_ENDDEF = 153, /* ENDDEF */ YYSYMBOL_NONE = 154, /* NONE */ YYSYMBOL_LAST_TOKEN = 155, /* LAST_TOKEN */ YYSYMBOL_156_ = 156, /* '%' */ YYSYMBOL_157_ = 157, /* ',' */ YYSYMBOL_158_ = 158, /* '*' */ YYSYMBOL_159_ = 159, /* '=' */ YYSYMBOL_160_ = 160, /* ':' */ YYSYMBOL_YYACCEPT = 161, /* $accept */ YYSYMBOL_lline = 162, /* lline */ YYSYMBOL_labels = 163, /* labels */ YYSYMBOL_line = 164, /* line */ YYSYMBOL_blank = 165, /* blank */ YYSYMBOL_stlabel = 166, /* stlabel */ YYSYMBOL_named_label = 167, /* named_label */ YYSYMBOL_module = 168, /* module */ YYSYMBOL_use = 169, /* use */ YYSYMBOL_include = 170, /* include */ YYSYMBOL_identifiers = 171, /* identifiers */ YYSYMBOL_abstractinterface = 172, /* abstractinterface */ YYSYMBOL_contains = 173, /* contains */ YYSYMBOL_interface = 174, /* interface */ YYSYMBOL_moduleprocedure = 175, /* moduleprocedure */ YYSYMBOL_procedure = 176, /* procedure */ YYSYMBOL_program_stmt = 177, /* program_stmt */ YYSYMBOL_subroutine_stmt = 178, /* subroutine_stmt */ YYSYMBOL_subroutine = 179, /* subroutine */ YYSYMBOL_subroutine_spec = 180, /* subroutine_spec */ YYSYMBOL_subroutinename = 181, /* subroutinename */ YYSYMBOL_subroutineprefix = 182, /* subroutineprefix */ YYSYMBOL_subroutineprefix_spec = 183, /* subroutineprefix_spec */ YYSYMBOL_function_stmt = 184, /* function_stmt */ YYSYMBOL_function = 185, /* function */ YYSYMBOL_function_spec = 186, /* function_spec */ YYSYMBOL_functionname = 187, /* functionname */ YYSYMBOL_submodule = 188, /* submodule */ YYSYMBOL_intrinsic_type_spec = 189, /* intrinsic_type_spec */ YYSYMBOL_kind_selector = 190, /* kind_selector */ YYSYMBOL_entry = 191, /* entry */ YYSYMBOL_endassociate = 192, /* endassociate */ YYSYMBOL_endblock = 193, /* endblock */ YYSYMBOL_endblockdata = 194, /* endblockdata */ YYSYMBOL_endcritical = 195, /* endcritical */ YYSYMBOL_enddo = 196, /* enddo */ YYSYMBOL_endenum = 197, /* endenum */ YYSYMBOL_endforall = 198, /* endforall */ YYSYMBOL_endfunction = 199, /* endfunction */ YYSYMBOL_endif = 200, /* endif */ YYSYMBOL_endinterface = 201, /* endinterface */ YYSYMBOL_endmodule = 202, /* endmodule */ YYSYMBOL_endprocedure = 203, /* endprocedure */ YYSYMBOL_endprogram = 204, /* endprogram */ YYSYMBOL_endselect = 205, /* endselect */ YYSYMBOL_endsubmodule = 206, /* endsubmodule */ YYSYMBOL_endsubroutine = 207, /* endsubroutine */ YYSYMBOL_endteam = 208, /* endteam */ YYSYMBOL_endtype = 209, /* endtype */ YYSYMBOL_endsegment = 210, /* endsegment */ YYSYMBOL_endwhere = 211, /* endwhere */ YYSYMBOL_simple_end = 212, /* simple_end */ YYSYMBOL_gidentifier = 213, /* gidentifier */ YYSYMBOL_assignment = 214, /* assignment */ YYSYMBOL_assign = 215, /* assign */ YYSYMBOL_else = 216, /* else */ YYSYMBOL_elseif = 217, /* elseif */ YYSYMBOL_elsewhere = 218, /* elsewhere */ YYSYMBOL_if_construct = 219, /* if_construct */ YYSYMBOL_if = 220, /* if */ YYSYMBOL_nwayif = 221, /* nwayif */ YYSYMBOL_where_construct = 222, /* where_construct */ YYSYMBOL_forall_construct = 223, /* forall_construct */ YYSYMBOL_do_construct = 224, /* do_construct */ YYSYMBOL_do = 225, /* do */ YYSYMBOL_docomma = 226, /* docomma */ YYSYMBOL_goto = 227, /* goto */ YYSYMBOL_goto_computed = 228, /* goto_computed */ YYSYMBOL_goto_assigned = 229, /* goto_assigned */ YYSYMBOL_goto_prefix = 230, /* goto_prefix */ YYSYMBOL_read = 231, /* read */ YYSYMBOL_print = 232, /* print */ YYSYMBOL_io = 233, /* io */ YYSYMBOL_iolist = 234, /* iolist */ YYSYMBOL_itemlist = 235, /* itemlist */ YYSYMBOL_item = 236, /* item */ YYSYMBOL_237_1 = 237, /* $@1 */ YYSYMBOL_238_2 = 238, /* $@2 */ YYSYMBOL_239_3 = 239, /* $@3 */ YYSYMBOL_otheritem = 240, /* otheritem */ YYSYMBOL_labellist = 241, /* labellist */ YYSYMBOL_selectcase = 242, /* selectcase */ YYSYMBOL_selectrank = 243, /* selectrank */ YYSYMBOL_selecttype = 244, /* selecttype */ YYSYMBOL_call = 245, /* call */ YYSYMBOL_calllist = 246, /* calllist */ YYSYMBOL_clist = 247, /* clist */ YYSYMBOL_citem = 248, /* citem */ YYSYMBOL_case = 249, /* case */ YYSYMBOL_casedefault = 250, /* casedefault */ YYSYMBOL_rank = 251, /* rank */ YYSYMBOL_rankdefault = 252, /* rankdefault */ YYSYMBOL_classdefault = 253, /* classdefault */ YYSYMBOL_classis = 254, /* classis */ YYSYMBOL_typeis = 255, /* typeis */ YYSYMBOL_changeteam = 256, /* changeteam */ YYSYMBOL_block = 257, /* block */ YYSYMBOL_blockdata = 258, /* blockdata */ YYSYMBOL_associate = 259, /* associate */ YYSYMBOL_critical = 260, /* critical */ YYSYMBOL_enum = 261, /* enum */ YYSYMBOL_type = 262, /* type */ YYSYMBOL_type1 = 263, /* type1 */ YYSYMBOL_segment = 264, /* segment */ YYSYMBOL_lvalue = 265, /* lvalue */ YYSYMBOL_construct_name = 266, /* construct_name */ YYSYMBOL_lr_construct_name = 267, /* lr_construct_name */ YYSYMBOL_skipall = 268, /* skipall */ YYSYMBOL_skipnoop = 269, /* skipnoop */ YYSYMBOL_skipnos = 270, /* skipnos */ YYSYMBOL_enable_identifier = 271, /* enable_identifier */ YYSYMBOL_enable_cidentifier = 272, /* enable_cidentifier */ YYSYMBOL_enable_skip = 273, /* enable_skip */ YYSYMBOL_enable_skipall = 274, /* enable_skipall */ YYSYMBOL_enable_skipnoop = 275, /* enable_skipnoop */ YYSYMBOL_enable_skipnos = 276, /* enable_skipnos */ YYSYMBOL_getname = 277, /* getname */ YYSYMBOL_getstlabel = 278, /* getstlabel */ YYSYMBOL_getlabel = 279, /* getlabel */ YYSYMBOL_getlabel1 = 280, /* getlabel1 */ YYSYMBOL_getlabel2 = 281, /* getlabel2 */ YYSYMBOL_getstring = 282, /* getstring */ YYSYMBOL_getlr = 283, /* getlr */ YYSYMBOL_empty = 284 /* empty */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; #ifdef short # undef short #endif /* On compilers that do not define __PTRDIFF_MAX__ etc., make sure and (if available) are included so that the code can choose integer types of a good width. */ #ifndef __PTRDIFF_MAX__ # include /* INFRINGES ON USER NAME SPACE */ # if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include /* INFRINGES ON USER NAME SPACE */ # define YY_STDINT_H # endif #endif /* Narrow types that promote to a signed type and that can represent a signed or unsigned integer of at least N bits. In tables they can save space and decrease cache pressure. Promoting to a signed type helps avoid bugs in integer arithmetic. */ #ifdef __INT_LEAST8_MAX__ typedef __INT_LEAST8_TYPE__ yytype_int8; #elif defined YY_STDINT_H typedef int_least8_t yytype_int8; #else typedef signed char yytype_int8; #endif #ifdef __INT_LEAST16_MAX__ typedef __INT_LEAST16_TYPE__ yytype_int16; #elif defined YY_STDINT_H typedef int_least16_t yytype_int16; #else typedef short yytype_int16; #endif /* Work around bug in HP-UX 11.23, which defines these macros incorrectly for preprocessor constants. This workaround can likely be removed in 2023, as HPE has promised support for HP-UX 11.23 (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of . */ #ifdef __hpux # undef UINT_LEAST8_MAX # undef UINT_LEAST16_MAX # define UINT_LEAST8_MAX 255 # define UINT_LEAST16_MAX 65535 #endif #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ typedef __UINT_LEAST8_TYPE__ yytype_uint8; #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ && UINT_LEAST8_MAX <= INT_MAX) typedef uint_least8_t yytype_uint8; #elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX typedef unsigned char yytype_uint8; #else typedef short yytype_uint8; #endif #if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ typedef __UINT_LEAST16_TYPE__ yytype_uint16; #elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ && UINT_LEAST16_MAX <= INT_MAX) typedef uint_least16_t yytype_uint16; #elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX typedef unsigned short yytype_uint16; #else typedef int yytype_uint16; #endif #ifndef YYPTRDIFF_T # if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ # define YYPTRDIFF_T __PTRDIFF_TYPE__ # define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ # elif defined PTRDIFF_MAX # ifndef ptrdiff_t # include /* INFRINGES ON USER NAME SPACE */ # endif # define YYPTRDIFF_T ptrdiff_t # define YYPTRDIFF_MAXIMUM PTRDIFF_MAX # else # define YYPTRDIFF_T long # define YYPTRDIFF_MAXIMUM LONG_MAX # endif #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned # endif #endif #define YYSIZE_MAXIMUM \ YY_CAST (YYPTRDIFF_T, \ (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ ? YYPTRDIFF_MAXIMUM \ : YY_CAST (YYSIZE_T, -1))) #define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) /* Stored state numbers (used for stacks). */ typedef yytype_int16 yy_state_t; /* State numbers in computations. */ typedef int yy_state_fast_t; #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ # define YY_(Msgid) Msgid # endif #endif #ifndef YY_ATTRIBUTE_PURE # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) # define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define YY_ATTRIBUTE_PURE # endif #endif #ifndef YY_ATTRIBUTE_UNUSED # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) # define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else # define YY_ATTRIBUTE_UNUSED # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YY_USE(E) ((void) (E)) #else # define YY_USE(E) /* empty */ #endif /* Suppress an incorrect diagnostic about yylval being uninitialized. */ #if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__ # if __GNUC__ * 100 + __GNUC_MINOR__ < 407 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") # else # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") # endif # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value #endif #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ # define YY_IGNORE_USELESS_CAST_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") # define YY_IGNORE_USELESS_CAST_END \ _Pragma ("GCC diagnostic pop") #endif #ifndef YY_IGNORE_USELESS_CAST_BEGIN # define YY_IGNORE_USELESS_CAST_BEGIN # define YY_IGNORE_USELESS_CAST_END #endif #define YY_ASSERT(E) ((void) (0 && (E))) #if !defined yyoverflow /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS # include /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's 'empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined EXIT_SUCCESS void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined EXIT_SUCCESS void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* !defined yyoverflow */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yy_state_t yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYPTRDIFF_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / YYSIZEOF (*yyptr); \ } \ while (0) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ YYPTRDIFF_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ while (0) # endif # endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 10 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 569 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 161 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 124 /* YYNRULES -- Number of rules. */ #define YYNRULES 259 /* YYNSTATES -- Number of states. */ #define YYNSTATES 487 /* YYMAXUTOK -- Last valid token kind. */ #define YYMAXUTOK 410 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ (0 <= (YYX) && (YYX) <= YYMAXUTOK \ ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \ : YYSYMBOL_YYUNDEF) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM as returned by yylex. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 156, 2, 2, 2, 2, 158, 2, 157, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 160, 2, 2, 159, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { 0, 96, 96, 98, 99, 100, 101, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 179, 181, 183, 185, 187, 189, 191, 192, 194, 196, 198, 199, 202, 204, 218, 219, 221, 223, 225, 226, 228, 230, 231, 233, 234, 235, 236, 237, 238, 239, 240, 241, 243, 245, 247, 248, 250, 252, 254, 255, 257, 258, 259, 261, 263, 265, 267, 269, 271, 273, 275, 277, 278, 280, 282, 284, 286, 287, 289, 290, 292, 294, 296, 297, 299, 301, 303, 305, 307, 309, 310, 312, 314, 315, 318, 320, 322, 325, 328, 331, 332, 335, 338, 341, 342, 343, 344, 345, 346, 350, 352, 355, 356, 359, 360, 362, 363, 365, 368, 369, 372, 373, 376, 377, 379, 381, 382, 383, 384, 386, 386, 387, 387, 388, 388, 389, 391, 392, 395, 396, 397, 400, 402, 404, 407, 408, 409, 411, 413, 414, 415, 417, 418, 421, 423, 426, 428, 431, 434, 436, 439, 441, 443, 445, 447, 448, 450, 453, 454, 455, 456, 459, 462, 463, 464, 466, 467, 469, 470, 471, 472, 475, 477, 479, 481, 483, 485, 487, 489, 491, 493, 495, 497, 500, 506, 510, 512, 515 }; #endif /** Accessing symbol of state STATE. */ #define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State]) #if YYDEBUG || 0 /* The user-facing name of the symbol whose (internal) number is YYSYMBOL. No bounds checking. */ static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED; /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "\"end of file\"", "error", "\"invalid token\"", "MODULE", "SUBFUN", "ENTRY", "SUBMODULE", "MODULESUBROUTINE", "MODULEFUNCTION", "END", "ENDSUBROUTINE", "ENDFUNCTION", "ENDPROGRAM", "ENDMODULE", "ENDSUBMODULE", "IF", "THEN", "ELSE", "ELSEIF", "ENDIF", "SIMPLEIF", "NWAYIF", "WHERE", "ENDWHERE", "FORALL", "ENDFORALL", "ELSEWHERE", "DO", "DOCOMMA", "DOWHILE", "DOCONCURRENT", "ENDDO", "SELECTCASE", "SELECTTYPE", "ENDSELECT", "CASE", "CASEDEFAULT", "TYPEIS", "CLASSIS", "CLASSDEFAULT", "SELECTRANK", "RANK", "RANKDEFAULT", "INTERFACE", "INTERFACE1", "ABSTRACTINTERFACE", "ENDINTERFACE", "CONTAINS", "BLOCK", "ENDBLOCK", "BLOCKDATA", "ENDBLOCKDATA", "ASSOCIATE", "ENDASSOCIATE", "CRITICAL", "ENDCRITICAL", "CHANGETEAM", "ENDTEAM", "ENUM", "ENDENUM", "ASSIGNMENT", "ASSIGN", "TO", "GOTO", "GOTO_COMPUTED", "GOTO_ASSIGNED", "READ", "PRINT", "WRITE", "IO", "IOLIST", "STARTIO", "LABELIS", "OTHER", "MODULEPROCEDURE", "PROCEDURE", "ENDPROCEDURE", "TIDENTIFIER", "BLANK", "CHAR", "FINDFORMAT", "UNKNOWN", "FREE", "FIXED", "UNSURE", "PROBFREE", "FINDENTFIX", "FIXFINDENTFIX", "P_ON", "P_OFF", "SCANFIXPRE", "CPP_IF", "CPP_ENDIF", "CPP_ELSE", "CPP_ELIF", "CPP", "COCO_IF", "COCO_ENDIF", "COCO_ELSE", "COCO_ELIF", "COCO", "INCLUDE", "INCLUDE_CPP", "INCLUDE_CPP_STD", "INCLUDE_COCO", "INCFILENAME", "USE", "SEGMENT", "ENDSEGMENT", "ESOPE", "IDENTIFIER", "CIDENTIFIER", "SKIP", "SKIPALL", "SKIPNOOP", "SKIPNOS", "KEYWORD", "ELEMENTAL", "IMPURE", "PURE", "SIMPLE", "RECURSIVE", "NON_RECURSIVE", "SUBROUTINE", "FUNCTION", "PROGRAM", "EOL", "NAMED_LABEL", "STLABEL", "LABEL", "LABELS", "LABELLIST", "CALL", "STARTCALL", "CALLLIST", "TYPE", "ENDTYPE", "CLASS", "BASICTYPE", "TYPEC", "QSTRING", "HSTRING", "LR", "LRB", "DOTOPERATOR", "I_NUMBER", "UNCLASSIFIED", "ERROR", "OMP", "SCANOMPFIXED", "SCANOMPFREE", "DEF", "EXEC", "ENDDEF", "NONE", "LAST_TOKEN", "'%'", "','", "'*'", "'='", "':'", "$accept", "lline", "labels", "line", "blank", "stlabel", "named_label", "module", "use", "include", "identifiers", "abstractinterface", "contains", "interface", "moduleprocedure", "procedure", "program_stmt", "subroutine_stmt", "subroutine", "subroutine_spec", "subroutinename", "subroutineprefix", "subroutineprefix_spec", "function_stmt", "function", "function_spec", "functionname", "submodule", "intrinsic_type_spec", "kind_selector", "entry", "endassociate", "endblock", "endblockdata", "endcritical", "enddo", "endenum", "endforall", "endfunction", "endif", "endinterface", "endmodule", "endprocedure", "endprogram", "endselect", "endsubmodule", "endsubroutine", "endteam", "endtype", "endsegment", "endwhere", "simple_end", "gidentifier", "assignment", "assign", "else", "elseif", "elsewhere", "if_construct", "if", "nwayif", "where_construct", "forall_construct", "do_construct", "do", "docomma", "goto", "goto_computed", "goto_assigned", "goto_prefix", "read", "print", "io", "iolist", "itemlist", "item", "$@1", "$@2", "$@3", "otheritem", "labellist", "selectcase", "selectrank", "selecttype", "call", "calllist", "clist", "citem", "case", "casedefault", "rank", "rankdefault", "classdefault", "classis", "typeis", "changeteam", "block", "blockdata", "associate", "critical", "enum", "type", "type1", "segment", "lvalue", "construct_name", "lr_construct_name", "skipall", "skipnoop", "skipnos", "enable_identifier", "enable_cidentifier", "enable_skip", "enable_skipall", "enable_skipnoop", "enable_skipnos", "getname", "getstlabel", "getlabel", "getlabel1", "getlabel2", "getstring", "getlr", "empty", YY_NULLPTR }; static const char * yysymbol_name (yysymbol_kind_t yysymbol) { return yytname[yysymbol]; } #endif #define YYPACT_NINF (-397) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) #define YYTABLE_NINF (-248) #define yytable_value_is_error(Yyn) \ 0 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { -88, -397, -397, 28, 433, -95, -397, -397, -397, -397, -397, -397, -397, -92, -75, -397, -397, -397, -397, -397, -82, -397, -78, -397, -57, -397, -55, -397, -397, -397, -397, -53, -28, -397, -22, -21, -397, -20, -397, -19, -16, -397, -15, -14, -397, -397, -397, -397, -397, 3, 8, -397, -397, -397, -7, -397, -113, -397, -4, -397, -18, 14, -3, -2, 0, -1, -48, -397, -397, -397, -397, -397, 7, -397, -397, 20, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, 51, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, 9, -397, -397, -397, -397, -397, -397, 31, -397, -397, -397, -397, -43, -69, -397, -397, -397, -41, -397, -397, -397, -397, -112, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -5, -397, -104, 85, -397, -397, 39, 40, -397, -397, -111, 46, -100, -99, 33, 35, -9, 36, 141, 38, 41, 52, 54, 58, 59, -98, -397, -397, 60, 61, 65, 66, 68, 69, -397, 70, -397, -397, 71, 72, -397, 73, -397, 53, 67, -397, -397, -397, -397, 74, 75, 76, 78, 79, -397, 80, 82, 83, 84, -397, -397, -397, -397, -397, -397, 108, 138, -397, -110, -397, -397, 103, 104, -93, -397, 105, 106, -397, -73, -397, 107, 4, -397, -397, 92, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, 77, -33, 81, -397, -397, -397, -397, -397, -397, -397, 86, -397, 50, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, 87, -397, 91, -397, -397, 62, -69, -397, -397, -397, -397, -397, -397, 95, -397, -397, -397, 98, -397, 99, -397, -397, 100, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, 117, -397, -397, -397, -397, -397, -397, -397, 110, -397, 111, 112, -397, -397, 113, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, 168, -397, -397, -397, 114, 138, -397, -397, -397, -48, -397, 88, -397, -397, 116, 120, -397, 121, -397, -397, 90, -397, -397, -397, -397, -397, -397, -397, -27, -397, -397, -397, 130, 118, 140, -397, -397, -397, -397, -397, -397, -397, -397, -397, 96, -397, 145, -397, -397, 144, 133, -397, 151, -397, -397, -397, -397, -397, 109, 136, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, 153, 142, 143, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, 152, -397, -397, -397, -397, -397, -397, -397, -397, -397, 115, -397, -397, -397, -397, 122, -397, -397, -397, -69, -397, -397, -397, -397, 157, 159, -397, -397, -397, -397, 160, -397, -397, -397, -397, 147, -397, 148, -397, -397, -397, -397, 166, -397, -397, -103, -397, -397, -397, 134, -397, -397, -397, 155, -397 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ static const yytype_int16 yydefact[] = { 259, 252, 253, 0, 259, 4, 5, 3, 84, 83, 1, 246, 246, 0, 0, 246, 246, 246, 246, 246, 0, 246, 0, 246, 0, 246, 0, 246, 246, 246, 246, 0, 0, 246, 0, 0, 246, 0, 246, 0, 0, 246, 0, 0, 246, 249, 246, 249, 249, 0, 0, 246, 246, 246, 0, 246, 0, 246, 0, 246, 0, 0, 0, 0, 0, 0, 0, 246, 246, 246, 152, 82, 0, 246, 246, 0, 151, 246, 254, 246, 259, 246, 246, 2, 12, 60, 78, 57, 8, 24, 58, 61, 65, 64, 73, 0, 74, 75, 49, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 81, 48, 72, 234, 10, 9, 27, 28, 29, 56, 55, 62, 79, 51, 26, 0, 0, 52, 54, 53, 0, 66, 63, 67, 68, 59, 69, 70, 71, 15, 16, 17, 18, 19, 20, 22, 23, 77, 21, 13, 14, 11, 25, 50, 76, 0, 80, 0, 0, 103, 6, 0, 0, 258, 150, 0, 259, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 259, 171, 172, 0, 0, 0, 0, 0, 0, 246, 0, 246, 246, 0, 0, 246, 0, 92, 0, 0, 90, 136, 91, 223, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 249, 131, 254, 254, 254, 258, 193, 198, 191, 186, 187, 197, 0, 0, 0, 257, 0, 0, 148, 0, 200, 0, 209, 210, 232, 0, 101, 117, 105, 106, 107, 108, 109, 110, 100, 116, 0, 120, 0, 246, 99, 104, 246, 115, 111, 235, 0, 155, 247, 174, 176, 178, 181, 183, 185, 208, 168, 254, 249, 249, 258, 254, 0, 202, 0, 252, 251, 0, 0, 250, 179, 252, 249, 246, 144, 0, 252, 237, 133, 0, 140, 0, 137, 143, 0, 254, 156, 246, 135, 163, 149, 164, 132, 158, 252, 240, 239, 169, 170, 130, 203, 205, 142, 0, 216, 0, 0, 219, 204, 0, 218, 243, 252, 127, 224, 128, 225, 126, 227, 129, 222, 146, 228, 0, 249, 249, 249, 0, 0, 199, 255, 190, 189, 88, 252, 252, 138, 0, 0, 252, 0, 252, 97, 258, 214, 212, 256, 211, 147, 113, 124, 0, 121, 112, 248, 0, 0, 0, 160, 249, 166, 167, 249, 249, 258, 254, 249, 0, 245, 0, 236, 153, 0, 0, 125, 0, 145, 238, 134, 141, 159, 0, 0, 241, 252, 215, 221, 220, 217, 249, 246, 180, 182, 184, 254, 196, 192, 188, 0, 0, 0, 139, 87, 249, 233, 248, 258, 249, 213, 123, 122, 0, 252, 248, 252, 165, 175, 173, 249, 201, 229, 0, 252, 244, 85, 252, 0, 157, 242, 93, 0, 194, 89, 94, 95, 0, 0, 249, 207, 98, 102, 0, 118, 177, 246, 249, 0, 254, 0, 86, 96, 206, 114, 0, 230, 119, 0, 154, 252, 161, 0, 249, 254, 231, 0, 162 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -397, -397, -397, -397, -397, -397, 273, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -128, -397, 278, -397, -397, -397, -397, 280, -397, -397, -397, -397, -397, -397, 281, 282, 283, -397, 284, 285, 286, -397, -397, -62, -397, -397, -397, -217, -397, -397, -397, -397, 288, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, 5, 55, 234, -45, -397, -397, -11, -397, -396, -129, -397, -397, -202, -397, -203, -397, -397, -397, -220, 6 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { 0, 3, 4, 83, 84, 5, 6, 85, 86, 87, 355, 88, 89, 90, 91, 92, 93, 94, 260, 261, 375, 95, 262, 96, 263, 264, 377, 97, 265, 373, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 268, 123, 124, 125, 126, 269, 128, 129, 130, 131, 132, 133, 270, 271, 272, 137, 273, 274, 275, 141, 230, 231, 351, 348, 349, 232, 142, 143, 144, 145, 276, 147, 243, 368, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 172, 186, 204, 392, 388, 173, 165, 432, 205, 393, 389, 8, 9, 241, 417, 429, 359, 294, 7 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule whose number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { 168, 169, 207, 208, 279, 280, 347, 305, 70, 283, 166, 350, 315, 216, 284, 295, 352, 187, 188, 189, 344, 345, 346, 480, 227, 228, 299, 301, 10, 217, 457, 296, 1, 357, 70, 206, 70, 362, 462, 1, 2, 76, 300, 302, 316, 285, 267, 353, 187, 358, 170, 171, 289, 363, 481, 290, 233, 234, 247, 248, 178, 383, 237, 238, 180, 267, 240, 76, 242, 76, 245, 174, 175, 176, 177, 380, 179, 365, 181, 384, 183, 229, 185, 277, 387, 182, 244, 184, 192, 190, 394, 195, 62, 197, -247, 398, 200, 63, 64, 203, 65, 281, 278, 402, 282, 286, 211, 212, 213, 371, 215, 62, 218, 404, 191, 430, 63, 64, 431, 65, 193, 194, 196, 198, 235, 372, 199, 201, 202, 209, 366, 410, 416, 367, 210, 214, 306, 246, 219, 221, 222, 226, 223, 224, 428, 225, 239, 236, 291, 292, 293, 266, 287, 420, 421, 288, 297, 308, 424, 303, 426, 304, 307, 79, 309, 439, 332, 310, 249, 250, 251, 252, 253, 254, 255, 256, 343, 333, 311, 298, 312, -195, 79, 440, 313, 314, 318, 319, 257, 258, 259, 320, 321, 317, 322, 323, 325, 328, 329, 331, 334, 335, 336, 449, 337, 338, 339, 458, 340, 341, 342, 228, 452, 354, 356, 360, 361, 364, 369, 370, 386, 397, 390, 374, 399, 400, 401, 405, 379, 385, 411, 461, 427, 463, 381, 382, 406, 407, 408, 409, 433, 466, 422, 415, 467, 419, 423, 425, 395, 376, 435, 324, 378, 326, 327, 443, 442, 330, 444, 445, 434, 446, 448, 453, 460, 477, 447, 468, 454, 455, 470, 471, 473, 476, 478, 465, 479, 482, 167, 483, 485, 486, 122, 396, 127, 134, 135, 136, 138, 139, 140, 418, 146, 220, 391, 456, 0, 0, 0, 0, 412, 413, 414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 0, 0, 437, 438, 0, 0, 441, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 464, 0, 0, 0, 0, 0, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7, 0, 0, 11, 484, 12, 13, 0, 0, 14, 15, 16, 17, 18, 19, 20, 0, 21, 22, 23, 0, 474, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 0, 62, 0, -247, 0, 0, 63, 64, 0, 65, 0, 66, 0, 0, 67, 68, 69, 70, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 73, 74, 75, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 78, 0, 0, 79, 80, 0, 81, 82 }; static const yytype_int16 yycheck[] = { 11, 12, 47, 48, 132, 133, 226, 16, 77, 137, 4, 228, 110, 126, 126, 126, 126, 28, 29, 30, 223, 224, 225, 126, 72, 73, 126, 126, 0, 142, 426, 142, 127, 126, 77, 46, 77, 110, 434, 127, 128, 110, 142, 142, 142, 157, 15, 157, 59, 142, 142, 126, 156, 126, 157, 159, 67, 68, 7, 8, 142, 281, 73, 74, 142, 15, 77, 110, 79, 110, 81, 16, 17, 18, 19, 278, 21, 73, 23, 282, 25, 129, 27, 126, 286, 142, 80, 142, 33, 142, 292, 36, 61, 38, 63, 297, 41, 66, 67, 44, 69, 142, 145, 306, 145, 110, 51, 52, 53, 142, 55, 61, 57, 315, 142, 142, 66, 67, 145, 69, 142, 142, 142, 142, 69, 158, 142, 142, 142, 126, 126, 333, 349, 129, 126, 142, 145, 82, 142, 157, 126, 142, 145, 145, 364, 145, 126, 140, 63, 110, 110, 142, 157, 355, 356, 160, 110, 16, 360, 126, 362, 126, 126, 132, 126, 385, 113, 126, 117, 118, 119, 120, 121, 122, 123, 124, 221, 110, 126, 173, 126, 73, 132, 386, 126, 126, 126, 126, 137, 138, 139, 126, 126, 187, 126, 126, 126, 126, 126, 126, 126, 126, 126, 405, 126, 126, 126, 427, 126, 126, 126, 73, 415, 110, 110, 110, 110, 110, 126, 142, 129, 126, 160, 142, 126, 126, 126, 110, 142, 142, 62, 433, 142, 435, 279, 280, 126, 126, 126, 126, 110, 443, 126, 129, 446, 157, 126, 126, 293, 260, 110, 196, 263, 198, 199, 110, 160, 202, 114, 126, 142, 110, 126, 110, 112, 468, 157, 145, 126, 126, 113, 112, 112, 126, 126, 160, 110, 479, 5, 145, 483, 126, 4, 294, 4, 4, 4, 4, 4, 4, 4, 353, 4, 59, 289, 424, -1, -1, -1, -1, 345, 346, 347, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 451, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 380, -1, -1, 383, 384, -1, -1, 387, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 308, -1, 410, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 428, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 439, -1, -1, -1, -1, -1, 411, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 458, -1, -1, -1, -1, -1, -1, -1, 466, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, 3, 482, 5, 6, -1, -1, 9, 10, 11, 12, 13, 14, 15, -1, 17, 18, 19, -1, 465, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, -1, 61, -1, 63, -1, -1, 66, 67, -1, 69, -1, 71, -1, -1, 74, 75, 76, 77, 78, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, 106, 107, 108, -1, 110, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, 129, -1, -1, 132, 133, -1, 135, 136 }; /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of state STATE-NUM. */ static const yytype_int16 yystos[] = { 0, 127, 128, 162, 163, 166, 167, 284, 277, 278, 0, 3, 5, 6, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 61, 66, 67, 69, 71, 74, 75, 76, 77, 78, 101, 106, 107, 108, 110, 125, 129, 132, 133, 135, 136, 164, 165, 168, 169, 170, 172, 173, 174, 175, 176, 177, 178, 182, 184, 188, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 241, 242, 243, 244, 245, 246, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 272, 284, 167, 271, 271, 142, 126, 266, 271, 266, 266, 266, 266, 142, 266, 142, 266, 142, 266, 142, 266, 267, 271, 271, 271, 142, 142, 266, 142, 142, 266, 142, 266, 142, 142, 266, 142, 142, 266, 268, 274, 271, 268, 268, 126, 126, 266, 266, 266, 142, 266, 126, 142, 266, 142, 267, 157, 126, 145, 145, 145, 142, 72, 73, 129, 235, 236, 240, 271, 271, 266, 140, 271, 271, 126, 271, 279, 271, 247, 284, 271, 266, 7, 8, 117, 118, 119, 120, 121, 122, 123, 124, 137, 138, 139, 179, 180, 183, 185, 186, 189, 142, 15, 215, 220, 227, 228, 229, 231, 232, 233, 245, 126, 145, 213, 213, 142, 145, 213, 126, 157, 110, 157, 160, 156, 159, 63, 110, 110, 283, 126, 142, 110, 284, 126, 142, 126, 142, 126, 126, 16, 145, 126, 16, 126, 126, 126, 126, 126, 126, 110, 142, 284, 126, 126, 126, 126, 126, 126, 266, 126, 266, 266, 126, 126, 266, 126, 113, 110, 126, 126, 126, 126, 126, 126, 126, 126, 126, 268, 279, 279, 279, 283, 238, 239, 240, 237, 126, 157, 110, 171, 110, 126, 142, 282, 110, 110, 110, 126, 110, 73, 126, 129, 248, 126, 142, 142, 158, 190, 142, 181, 271, 187, 271, 142, 279, 268, 268, 283, 279, 142, 129, 277, 270, 276, 160, 265, 269, 275, 277, 268, 271, 126, 277, 126, 126, 126, 279, 266, 277, 110, 126, 126, 126, 126, 277, 62, 268, 268, 268, 129, 240, 280, 236, 157, 277, 277, 126, 126, 277, 126, 277, 142, 283, 281, 142, 145, 273, 110, 142, 110, 268, 268, 268, 283, 279, 268, 160, 110, 114, 126, 110, 157, 126, 277, 268, 271, 279, 110, 126, 126, 274, 273, 283, 268, 112, 277, 273, 277, 268, 160, 277, 277, 145, 213, 113, 112, 268, 112, 271, 268, 126, 279, 126, 110, 126, 157, 277, 145, 268, 279, 126 }; /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ static const yytype_int16 yyr1[] = { 0, 161, 162, 163, 163, 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 165, 166, 167, 168, 169, 170, 171, 171, 172, 173, 174, 174, 175, 176, 177, 177, 178, 179, 180, 180, 181, 182, 182, 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, 185, 186, 186, 187, 188, 189, 189, 190, 190, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 199, 200, 201, 202, 203, 203, 204, 204, 205, 206, 207, 207, 208, 209, 210, 211, 212, 213, 213, 214, 215, 215, 216, 217, 218, 219, 220, 221, 221, 222, 223, 224, 224, 224, 224, 224, 224, 225, 226, 227, 227, 228, 228, 229, 229, 230, 231, 231, 232, 232, 233, 233, 234, 235, 235, 235, 235, 237, 236, 238, 236, 239, 236, 236, 240, 240, 241, 241, 241, 242, 243, 244, 245, 245, 245, 246, 247, 247, 247, 248, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 260, 261, 262, 262, 262, 263, 264, 265, 265, 265, 266, 266, 267, 267, 267, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284 }; /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ static const yytype_int8 yyr2[] = { 0, 2, 2, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 5, 6, 4, 1, 3, 2, 2, 2, 5, 5, 5, 6, 3, 5, 1, 1, 1, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 6, 1, 1, 1, 3, 7, 1, 2, 2, 2, 1, 4, 3, 3, 3, 3, 3, 2, 3, 3, 4, 3, 2, 3, 3, 4, 3, 4, 3, 3, 3, 4, 3, 3, 2, 3, 2, 1, 1, 3, 7, 2, 3, 5, 3, 4, 2, 8, 11, 3, 3, 4, 3, 3, 2, 3, 3, 2, 2, 4, 2, 4, 2, 5, 2, 2, 4, 2, 4, 2, 4, 2, 2, 1, 3, 2, 2, 0, 3, 0, 4, 0, 3, 1, 1, 2, 2, 4, 2, 3, 3, 3, 6, 5, 2, 2, 1, 2, 2, 2, 1, 4, 3, 4, 3, 3, 4, 4, 3, 2, 3, 3, 2, 3, 3, 4, 6, 9, 2, 4, 1, 2, 3, 2, 3, 2, 2, 3, 4, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; enum { YYENOMEM = -2 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab #define YYNOMEM goto yyexhaustedlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY) \ { \ yychar = (Token); \ yylval = (Value); \ YYPOPSTACK (yylen); \ yystate = *yyssp; \ goto yybackup; \ } \ else \ { \ yyerror (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (0) /* Backward compatibility with an undocumented macro. Use YYerror or YYUNDEF. */ #define YYERRCODE YYUNDEF /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (0) # define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Kind, Value); \ YYFPRINTF (stderr, "\n"); \ } \ } while (0) /*-----------------------------------. | Print this symbol's value on YYO. | `-----------------------------------*/ static void yy_symbol_value_print (FILE *yyo, yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep) { FILE *yyoutput = yyo; YY_USE (yyoutput); if (!yyvaluep) return; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YY_USE (yykind); YY_IGNORE_MAYBE_UNINITIALIZED_END } /*---------------------------. | Print this symbol on YYO. | `---------------------------*/ static void yy_symbol_print (FILE *yyo, yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep) { YYFPRINTF (yyo, "%s %s (", yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind)); yy_symbol_value_print (yyo, yykind, yyvaluep); YYFPRINTF (yyo, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ static void yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF (stderr, " %d", yybot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ static void yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule) { int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]), &yyvsp[(yyi + 1) - (yynrhs)]); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyssp, yyvsp, Rule); \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) ((void) 0) # define YY_SYMBOL_PRINT(Title, Kind, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ static void yydestruct (const char *yymsg, yysymbol_kind_t yykind, YYSTYPE *yyvaluep) { YY_USE (yyvaluep); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YY_USE (yykind); YY_IGNORE_MAYBE_UNINITIALIZED_END } /* Lookahead token kind. */ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; /*----------. | yyparse. | `----------*/ int yyparse (void) { yy_state_fast_t yystate = 0; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus = 0; /* Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* Their size. */ YYPTRDIFF_T yystacksize = YYINITDEPTH; /* The state stack: array, bottom, top. */ yy_state_t yyssa[YYINITDEPTH]; yy_state_t *yyss = yyssa; yy_state_t *yyssp = yyss; /* The semantic value stack: array, bottom, top. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp = yyvs; int yyn; /* The return value of yyparse. */ int yyresult; /* Lookahead symbol kind. */ yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; /*------------------------------------------------------------. | yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; /*--------------------------------------------------------------------. | yysetstate -- set current state (the top of the stack) to yystate. | `--------------------------------------------------------------------*/ yysetstate: YYDPRINTF ((stderr, "Entering state %d\n", yystate)); YY_ASSERT (0 <= yystate && yystate < YYNSTATES); YY_IGNORE_USELESS_CAST_BEGIN *yyssp = YY_CAST (yy_state_t, yystate); YY_IGNORE_USELESS_CAST_END YY_STACK_PRINT (yyss, yyssp); if (yyss + yystacksize - 1 <= yyssp) #if !defined yyoverflow && !defined YYSTACK_RELOCATE YYNOMEM; #else { /* Get the current used size of the three stacks, in elements. */ YYPTRDIFF_T yysize = yyssp - yyss + 1; # if defined yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ yy_state_t *yyss1 = yyss; YYSTYPE *yyvs1 = yyvs; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * YYSIZEOF (*yyssp), &yyvs1, yysize * YYSIZEOF (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } # else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) YYNOMEM; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yy_state_t *yyss1 = yyss; union yyalloc *yyptr = YY_CAST (union yyalloc *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); if (! yyptr) YYNOMEM; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YY_IGNORE_USELESS_CAST_BEGIN YYDPRINTF ((stderr, "Stack size increased to %ld\n", YY_CAST (long, yystacksize))); YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) YYABORT; } #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yypact_value_is_default (yyn)) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token\n")); yychar = yylex (); } if (yychar <= YYEOF) { yychar = YYEOF; yytoken = YYSYMBOL_YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else if (yychar == YYerror) { /* The scanner already issued an error message, process directly to error recovery. But do not keep the error token as lookahead, it is too special and may lead us to an endless loop in error recovery. */ yychar = YYUNDEF; yytoken = YYSYMBOL_YYerror; goto yyerrlab1; } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yytable_value_is_error (yyn)) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END /* Discard the shifted token. */ yychar = YYEMPTY; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: '$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 8: /* line: abstractinterface */ #line 104 "../src/parser.y" { properties.kind = ABSTRACTINTERFACE; properties.type = DEF; } #line 1762 "parser.cpp" break; case 9: /* line: assign */ #line 105 "../src/parser.y" { properties.kind = ASSIGN; properties.type = EXEC; } #line 1768 "parser.cpp" break; case 10: /* line: assignment */ #line 106 "../src/parser.y" { properties.kind = ASSIGNMENT; properties.type = EXEC; } #line 1774 "parser.cpp" break; case 11: /* line: associate */ #line 107 "../src/parser.y" { properties.kind = ASSOCIATE; properties.type = EXEC; } #line 1780 "parser.cpp" break; case 12: /* line: blank */ #line 108 "../src/parser.y" { properties.kind = BLANK; properties.type = NONE; } #line 1786 "parser.cpp" break; case 13: /* line: block */ #line 109 "../src/parser.y" { properties.kind = BLOCK; properties.type = EXEC; } #line 1792 "parser.cpp" break; case 14: /* line: blockdata */ #line 110 "../src/parser.y" { properties.kind = BLOCKDATA; properties.type = DEF; } #line 1798 "parser.cpp" break; case 15: /* line: call */ #line 111 "../src/parser.y" { properties.kind = CALL; properties.type = EXEC; } #line 1804 "parser.cpp" break; case 16: /* line: calllist */ #line 112 "../src/parser.y" { properties.kind = CALLLIST; properties.type = NONE; } #line 1810 "parser.cpp" break; case 17: /* line: case */ #line 113 "../src/parser.y" { properties.kind = CASE; properties.type = EXEC; } #line 1816 "parser.cpp" break; case 18: /* line: casedefault */ #line 114 "../src/parser.y" { properties.kind = CASEDEFAULT; properties.type = EXEC; } #line 1822 "parser.cpp" break; case 19: /* line: rank */ #line 115 "../src/parser.y" { properties.kind = RANK; properties.type = EXEC; } #line 1828 "parser.cpp" break; case 20: /* line: rankdefault */ #line 116 "../src/parser.y" { properties.kind = RANKDEFAULT; properties.type = EXEC; } #line 1834 "parser.cpp" break; case 21: /* line: changeteam */ #line 117 "../src/parser.y" { properties.kind = CHANGETEAM; properties.type = EXEC; } #line 1840 "parser.cpp" break; case 22: /* line: classdefault */ #line 118 "../src/parser.y" { properties.kind = CLASSDEFAULT; properties.type = EXEC; } #line 1846 "parser.cpp" break; case 23: /* line: classis */ #line 119 "../src/parser.y" { properties.kind = CLASSIS; properties.type = EXEC; } #line 1852 "parser.cpp" break; case 24: /* line: contains */ #line 120 "../src/parser.y" { properties.kind = CONTAINS; properties.type = DEF; } #line 1858 "parser.cpp" break; case 25: /* line: critical */ #line 121 "../src/parser.y" { properties.kind = CRITICAL; properties.type = DEF; } #line 1864 "parser.cpp" break; case 26: /* line: do_construct */ #line 122 "../src/parser.y" { properties.kind = DO; properties.type = EXEC; } #line 1870 "parser.cpp" break; case 27: /* line: else */ #line 123 "../src/parser.y" { properties.kind = ELSE; properties.type = EXEC; } #line 1876 "parser.cpp" break; case 28: /* line: elseif */ #line 124 "../src/parser.y" { properties.kind = ELSEIF; properties.type = EXEC; } #line 1882 "parser.cpp" break; case 29: /* line: elsewhere */ #line 125 "../src/parser.y" { properties.kind = ELSEWHERE; properties.type = EXEC; } #line 1888 "parser.cpp" break; case 30: /* line: endassociate */ #line 126 "../src/parser.y" { properties.kind = ENDASSOCIATE; properties.type = ENDDEF; } #line 1894 "parser.cpp" break; case 31: /* line: endblock */ #line 127 "../src/parser.y" { properties.kind = ENDBLOCK; properties.type = EXEC; } #line 1900 "parser.cpp" break; case 32: /* line: endblockdata */ #line 128 "../src/parser.y" { properties.kind = ENDBLOCKDATA; properties.type = ENDDEF; } #line 1906 "parser.cpp" break; case 33: /* line: endcritical */ #line 129 "../src/parser.y" { properties.kind = ENDCRITICAL; properties.type = ENDDEF; } #line 1912 "parser.cpp" break; case 34: /* line: enddo */ #line 130 "../src/parser.y" { properties.kind = ENDDO; properties.type = EXEC; } #line 1918 "parser.cpp" break; case 35: /* line: endenum */ #line 131 "../src/parser.y" { properties.kind = ENDENUM; properties.type = DEF; } #line 1924 "parser.cpp" break; case 36: /* line: endforall */ #line 132 "../src/parser.y" { properties.kind = ENDFORALL; properties.type = EXEC; } #line 1930 "parser.cpp" break; case 37: /* line: endfunction */ #line 133 "../src/parser.y" { properties.kind = ENDFUNCTION; properties.type = ENDDEF; } #line 1936 "parser.cpp" break; case 38: /* line: endif */ #line 134 "../src/parser.y" { properties.kind = ENDIF; properties.type = EXEC; } #line 1942 "parser.cpp" break; case 39: /* line: endinterface */ #line 135 "../src/parser.y" { properties.kind = ENDINTERFACE; properties.type = ENDDEF; } #line 1948 "parser.cpp" break; case 40: /* line: endmodule */ #line 136 "../src/parser.y" { properties.kind = ENDMODULE; properties.type = ENDDEF; } #line 1954 "parser.cpp" break; case 41: /* line: endprocedure */ #line 137 "../src/parser.y" { properties.kind = ENDPROCEDURE; properties.type = ENDDEF; } #line 1960 "parser.cpp" break; case 42: /* line: endprogram */ #line 138 "../src/parser.y" { properties.kind = ENDPROGRAM; properties.type = ENDDEF; } #line 1966 "parser.cpp" break; case 43: /* line: endselect */ #line 139 "../src/parser.y" { properties.kind = ENDSELECT; properties.type = EXEC; } #line 1972 "parser.cpp" break; case 44: /* line: endsubmodule */ #line 140 "../src/parser.y" { properties.kind = ENDSUBMODULE; properties.type = ENDDEF; } #line 1978 "parser.cpp" break; case 45: /* line: endsubroutine */ #line 141 "../src/parser.y" { properties.kind = ENDSUBROUTINE; properties.type = ENDDEF; } #line 1984 "parser.cpp" break; case 46: /* line: endteam */ #line 142 "../src/parser.y" { properties.kind = ENDTEAM; properties.type = EXEC; } #line 1990 "parser.cpp" break; case 47: /* line: endtype */ #line 143 "../src/parser.y" { properties.kind = ENDTYPE; properties.type = ENDDEF; } #line 1996 "parser.cpp" break; case 48: /* line: endwhere */ #line 144 "../src/parser.y" { properties.kind = ENDWHERE; properties.type = EXEC; } #line 2002 "parser.cpp" break; case 49: /* line: entry */ #line 145 "../src/parser.y" { properties.kind = ENTRY; properties.type = DEF; } #line 2008 "parser.cpp" break; case 50: /* line: enum */ #line 146 "../src/parser.y" { properties.kind = ENUM; properties.type = DEF; } #line 2014 "parser.cpp" break; case 51: /* line: forall_construct */ #line 147 "../src/parser.y" { properties.kind = FORALL; properties.type = EXEC; } #line 2020 "parser.cpp" break; case 52: /* line: goto */ #line 148 "../src/parser.y" { properties.kind = GOTO; properties.type = EXEC; } #line 2026 "parser.cpp" break; case 53: /* line: goto_assigned */ #line 149 "../src/parser.y" { properties.kind = GOTO_ASSIGNED; properties.type = EXEC; } #line 2032 "parser.cpp" break; case 54: /* line: goto_computed */ #line 150 "../src/parser.y" { properties.kind = GOTO_COMPUTED; properties.type = EXEC; } #line 2038 "parser.cpp" break; case 55: /* line: if */ #line 151 "../src/parser.y" { properties.kind = SIMPLEIF; properties.type = EXEC; } #line 2044 "parser.cpp" break; case 56: /* line: if_construct */ #line 152 "../src/parser.y" { properties.kind = IF; properties.type = EXEC; } #line 2050 "parser.cpp" break; case 57: /* line: include */ #line 153 "../src/parser.y" { properties.kind = INCLUDE; properties.type = NONE; } #line 2056 "parser.cpp" break; case 58: /* line: interface */ #line 154 "../src/parser.y" { properties.kind = INTERFACE; properties.type = DEF; } #line 2062 "parser.cpp" break; case 59: /* line: labellist */ #line 155 "../src/parser.y" { properties.kind = LABELLIST; properties.type = NONE; } #line 2068 "parser.cpp" break; case 60: /* line: module */ #line 156 "../src/parser.y" { properties.kind = MODULE; properties.type = DEF; } #line 2074 "parser.cpp" break; case 61: /* line: moduleprocedure */ #line 157 "../src/parser.y" { properties.kind = PROCEDURE; properties.type = DEF; } #line 2080 "parser.cpp" break; case 62: /* line: nwayif */ #line 158 "../src/parser.y" { properties.kind = NWAYIF; properties.type = EXEC; } #line 2086 "parser.cpp" break; case 63: /* line: print */ #line 159 "../src/parser.y" { properties.kind = PRINT; properties.type = EXEC; } #line 2092 "parser.cpp" break; case 64: /* line: program_stmt */ #line 160 "../src/parser.y" { properties.kind = PROGRAM; properties.type = DEF; } #line 2098 "parser.cpp" break; case 65: /* line: procedure */ #line 161 "../src/parser.y" { properties.kind = PROCEDURE; properties.type = DEF; } #line 2104 "parser.cpp" break; case 66: /* line: read */ #line 162 "../src/parser.y" { properties.kind = READ; properties.type = EXEC; } #line 2110 "parser.cpp" break; case 67: /* line: io */ #line 163 "../src/parser.y" { properties.kind = IO; properties.type = EXEC; } #line 2116 "parser.cpp" break; case 68: /* line: iolist */ #line 164 "../src/parser.y" { properties.kind = IOLIST; properties.type = NONE; } #line 2122 "parser.cpp" break; case 69: /* line: selectcase */ #line 165 "../src/parser.y" { properties.kind = SELECTCASE; properties.type = EXEC; } #line 2128 "parser.cpp" break; case 70: /* line: selectrank */ #line 166 "../src/parser.y" { properties.kind = SELECTRANK; properties.type = EXEC; } #line 2134 "parser.cpp" break; case 71: /* line: selecttype */ #line 167 "../src/parser.y" { properties.kind = SELECTTYPE; properties.type = EXEC; } #line 2140 "parser.cpp" break; case 72: /* line: simple_end */ #line 168 "../src/parser.y" { properties.kind = END; properties.type = EXEC; } #line 2146 "parser.cpp" break; case 73: /* line: subroutine_stmt */ #line 169 "../src/parser.y" { properties.kind = SUBROUTINE; properties.type = DEF; } #line 2152 "parser.cpp" break; case 74: /* line: function_stmt */ #line 170 "../src/parser.y" { properties.kind = FUNCTION; properties.type = DEF; } #line 2158 "parser.cpp" break; case 75: /* line: submodule */ #line 171 "../src/parser.y" { properties.kind = SUBMODULE; properties.type = DEF; } #line 2164 "parser.cpp" break; case 76: /* line: type */ #line 172 "../src/parser.y" { properties.kind = TYPE; properties.type = DEF; } #line 2170 "parser.cpp" break; case 77: /* line: typeis */ #line 173 "../src/parser.y" { properties.kind = TYPEIS; properties.type = EXEC; } #line 2176 "parser.cpp" break; case 78: /* line: use */ #line 174 "../src/parser.y" { properties.kind = USE; properties.type = DEF; } #line 2182 "parser.cpp" break; case 79: /* line: where_construct */ #line 175 "../src/parser.y" { properties.kind = WHERE; properties.type = EXEC; } #line 2188 "parser.cpp" break; case 80: /* line: segment */ #line 176 "../src/parser.y" { properties.kind = SEGMENT; properties.type = EXEC; } #line 2194 "parser.cpp" break; case 81: /* line: endsegment */ #line 177 "../src/parser.y" { properties.kind = ENDSEGMENT; properties.type = EXEC; } #line 2200 "parser.cpp" break; case 87: /* include: INCLUDE QSTRING getstring EOL */ #line 189 "../src/parser.y" {D(O("include"););} #line 2206 "parser.cpp" break; case 191: /* $@1: %empty */ #line 386 "../src/parser.y" {itemnumber++;} #line 2212 "parser.cpp" break; case 193: /* $@2: %empty */ #line 387 "../src/parser.y" {itemnumber=123456;} #line 2218 "parser.cpp" break; case 195: /* $@3: %empty */ #line 388 "../src/parser.y" {itemnumber=123456;} #line 2224 "parser.cpp" break; case 197: /* item: otheritem */ #line 389 "../src/parser.y" {itemnumber++;} #line 2230 "parser.cpp" break; case 246: /* enable_identifier: %empty */ #line 481 "../src/parser.y" {lexer_enable(IDENTIFIER);} #line 2236 "parser.cpp" break; case 247: /* enable_cidentifier: %empty */ #line 483 "../src/parser.y" {lexer_enable(CIDENTIFIER);} #line 2242 "parser.cpp" break; case 248: /* enable_skip: %empty */ #line 485 "../src/parser.y" {lexer_enable(SKIP);} #line 2248 "parser.cpp" break; case 249: /* enable_skipall: %empty */ #line 487 "../src/parser.y" {lexer_enable(SKIPALL);} #line 2254 "parser.cpp" break; case 250: /* enable_skipnoop: %empty */ #line 489 "../src/parser.y" {lexer_enable(SKIPNOOP);} #line 2260 "parser.cpp" break; case 251: /* enable_skipnos: %empty */ #line 491 "../src/parser.y" {lexer_enable(SKIPNOS);} #line 2266 "parser.cpp" break; case 252: /* getname: %empty */ #line 493 "../src/parser.y" {properties.name=lexer_getname();} #line 2272 "parser.cpp" break; case 253: /* getstlabel: %empty */ #line 495 "../src/parser.y" {properties.stlabel=lexer_getstlabel();} #line 2278 "parser.cpp" break; case 254: /* getlabel: %empty */ #line 497 "../src/parser.y" {properties.labels.push_back(lexer_geti_number()); properties.label_pos.push_back(lexer_get_pos()-lexer_get_len());} #line 2285 "parser.cpp" break; case 255: /* getlabel1: %empty */ #line 500 "../src/parser.y" {if (itemnumber == 2) {properties.labels.push_back(lexer_geti_number()); properties.label_pos.push_back(lexer_get_pos()-lexer_get_len()); } } #line 2295 "parser.cpp" break; case 256: /* getlabel2: %empty */ #line 506 "../src/parser.y" {properties.labels.push_back(lexer_geti_number()); /* minus one for the extra comma, plus two for preceding ',*' */ properties.label_pos.push_back(lexer_get_pos()-lexer_get_len()-1+2);} #line 2303 "parser.cpp" break; case 257: /* getstring: %empty */ #line 510 "../src/parser.y" {properties.stringvalue=lexer_getstring();} #line 2309 "parser.cpp" break; case 258: /* getlr: %empty */ #line 512 "../src/parser.y" {properties.lrvalue=lexer_getlr(); properties.lrpos=lexer_getlrpos();} #line 2316 "parser.cpp" break; #line 2320 "parser.cpp" default: break; } /* User semantic actions sometimes alter yychar, and that requires that yytoken be updated with the new translation. We take the approach of translating immediately before every use of yytoken. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; *++yyvsp = yyval; /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ { const int yylhs = yyr1[yyn] - YYNTOKENS; const int yyi = yypgoto[yylhs] + *yyssp; yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp ? yytable[yyi] : yydefgoto[yylhs]); } goto yynewstate; /*--------------------------------------. | yyerrlab -- here on detecting error. | `--------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; yyerror (YY_("syntax error")); } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (0) YYERROR; ++yynerrs; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ /* Pop stack until we find a state that shifts the error token. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default (yyn)) { yyn += YYSYMBOL_YYerror; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", YY_ACCESSING_SYMBOL (yystate), yyvsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturnlab; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturnlab; /*-----------------------------------------------------------. | yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. | `-----------------------------------------------------------*/ yyexhaustedlab: yyerror (YY_("memory exhausted")); yyresult = 2; goto yyreturnlab; /*----------------------------------------------------------. | yyreturnlab -- parsing is finished, clean up and return. | `----------------------------------------------------------*/ yyreturnlab: if (yychar != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE (yychar); yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); } /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", YY_ACCESSING_SYMBOL (+*yyssp), yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif return yyresult; } #line 517 "../src/parser.y" void resetprop(void) { properties.kind = UNCLASSIFIED; properties.type = EXEC; properties.labels.clear(); properties.label_pos.clear(); properties.stlabel = ""; properties.name = ""; properties.stringvalue = ""; properties.lrvalue = ""; properties.lrpos = -123; } propstruct parseline(const Line_prep &p) { D(O("entering parseline");); lexer_set(p,IDENTIFIER); resetprop(); yyparse(); if (properties.kind != UNCLASSIFIED) return properties; #ifdef USEESOPE lexer_set(p,ESOPE); // enables KEYWORD+ESOPE (SEGMENT, ENDSEGMENT) #else lexer_set(p,KEYWORD); // enables KEYWORD #endif yyparse(); return properties; } propstruct parselabels(const std::string &s) { D(O("entering parselabels");); lexer_set(s,LABELS); resetprop(); parselabeling = true; yyparse(); return properties; } propstruct parseio(const std::string &s) { D(O("entering parseio");); lexer_set(s,IOLIST); resetprop(); parselabeling = true; itemnumber = 0; yyparse(); return properties; } propstruct parsecall(const std::string &s) { D(O("entering parsecall");); lexer_set(','+s,CALLLIST); // ',' to assist lexer to recognise first label resetprop(); parselabeling = true; yyparse(); return properties; } void yyerror(const char *c) { (void)c; D(O("ERROR");O(c);); if(parselabeling) { properties.kind = UNCLASSIFIED; properties.type = EXEC; } } extern "C" int yywrap() { D(O("yywrap");); return 1; } findent-4.3.2/src/builtparser.hpp0000644000000000000000000002377014566134066013755 0ustar00/* A Bison parser, made by GNU Bison 3.8.2. */ /* Bison interface for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, especially those whose name start with YY_ or yy_. They are private implementation details that can be changed or removed. */ #ifndef YY_YY_PARSER_HPP_INCLUDED # define YY_YY_PARSER_HPP_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int yydebug; #endif /* Token kinds. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { YYEMPTY = -2, YYEOF = 0, /* "end of file" */ YYerror = 256, /* error */ YYUNDEF = 257, /* "invalid token" */ MODULE = 258, /* MODULE */ SUBFUN = 259, /* SUBFUN */ ENTRY = 260, /* ENTRY */ SUBMODULE = 261, /* SUBMODULE */ MODULESUBROUTINE = 262, /* MODULESUBROUTINE */ MODULEFUNCTION = 263, /* MODULEFUNCTION */ END = 264, /* END */ ENDSUBROUTINE = 265, /* ENDSUBROUTINE */ ENDFUNCTION = 266, /* ENDFUNCTION */ ENDPROGRAM = 267, /* ENDPROGRAM */ ENDMODULE = 268, /* ENDMODULE */ ENDSUBMODULE = 269, /* ENDSUBMODULE */ IF = 270, /* IF */ THEN = 271, /* THEN */ ELSE = 272, /* ELSE */ ELSEIF = 273, /* ELSEIF */ ENDIF = 274, /* ENDIF */ SIMPLEIF = 275, /* SIMPLEIF */ NWAYIF = 276, /* NWAYIF */ WHERE = 277, /* WHERE */ ENDWHERE = 278, /* ENDWHERE */ FORALL = 279, /* FORALL */ ENDFORALL = 280, /* ENDFORALL */ ELSEWHERE = 281, /* ELSEWHERE */ DO = 282, /* DO */ DOCOMMA = 283, /* DOCOMMA */ DOWHILE = 284, /* DOWHILE */ DOCONCURRENT = 285, /* DOCONCURRENT */ ENDDO = 286, /* ENDDO */ SELECTCASE = 287, /* SELECTCASE */ SELECTTYPE = 288, /* SELECTTYPE */ ENDSELECT = 289, /* ENDSELECT */ CASE = 290, /* CASE */ CASEDEFAULT = 291, /* CASEDEFAULT */ TYPEIS = 292, /* TYPEIS */ CLASSIS = 293, /* CLASSIS */ CLASSDEFAULT = 294, /* CLASSDEFAULT */ SELECTRANK = 295, /* SELECTRANK */ RANK = 296, /* RANK */ RANKDEFAULT = 297, /* RANKDEFAULT */ INTERFACE = 298, /* INTERFACE */ INTERFACE1 = 299, /* INTERFACE1 */ ABSTRACTINTERFACE = 300, /* ABSTRACTINTERFACE */ ENDINTERFACE = 301, /* ENDINTERFACE */ CONTAINS = 302, /* CONTAINS */ BLOCK = 303, /* BLOCK */ ENDBLOCK = 304, /* ENDBLOCK */ BLOCKDATA = 305, /* BLOCKDATA */ ENDBLOCKDATA = 306, /* ENDBLOCKDATA */ ASSOCIATE = 307, /* ASSOCIATE */ ENDASSOCIATE = 308, /* ENDASSOCIATE */ CRITICAL = 309, /* CRITICAL */ ENDCRITICAL = 310, /* ENDCRITICAL */ CHANGETEAM = 311, /* CHANGETEAM */ ENDTEAM = 312, /* ENDTEAM */ ENUM = 313, /* ENUM */ ENDENUM = 314, /* ENDENUM */ ASSIGNMENT = 315, /* ASSIGNMENT */ ASSIGN = 316, /* ASSIGN */ TO = 317, /* TO */ GOTO = 318, /* GOTO */ GOTO_COMPUTED = 319, /* GOTO_COMPUTED */ GOTO_ASSIGNED = 320, /* GOTO_ASSIGNED */ READ = 321, /* READ */ PRINT = 322, /* PRINT */ WRITE = 323, /* WRITE */ IO = 324, /* IO */ IOLIST = 325, /* IOLIST */ STARTIO = 326, /* STARTIO */ LABELIS = 327, /* LABELIS */ OTHER = 328, /* OTHER */ MODULEPROCEDURE = 329, /* MODULEPROCEDURE */ PROCEDURE = 330, /* PROCEDURE */ ENDPROCEDURE = 331, /* ENDPROCEDURE */ TIDENTIFIER = 332, /* TIDENTIFIER */ BLANK = 333, /* BLANK */ CHAR = 334, /* CHAR */ FINDFORMAT = 335, /* FINDFORMAT */ UNKNOWN = 336, /* UNKNOWN */ FREE = 337, /* FREE */ FIXED = 338, /* FIXED */ UNSURE = 339, /* UNSURE */ PROBFREE = 340, /* PROBFREE */ FINDENTFIX = 341, /* FINDENTFIX */ FIXFINDENTFIX = 342, /* FIXFINDENTFIX */ P_ON = 343, /* P_ON */ P_OFF = 344, /* P_OFF */ SCANFIXPRE = 345, /* SCANFIXPRE */ CPP_IF = 346, /* CPP_IF */ CPP_ENDIF = 347, /* CPP_ENDIF */ CPP_ELSE = 348, /* CPP_ELSE */ CPP_ELIF = 349, /* CPP_ELIF */ CPP = 350, /* CPP */ COCO_IF = 351, /* COCO_IF */ COCO_ENDIF = 352, /* COCO_ENDIF */ COCO_ELSE = 353, /* COCO_ELSE */ COCO_ELIF = 354, /* COCO_ELIF */ COCO = 355, /* COCO */ INCLUDE = 356, /* INCLUDE */ INCLUDE_CPP = 357, /* INCLUDE_CPP */ INCLUDE_CPP_STD = 358, /* INCLUDE_CPP_STD */ INCLUDE_COCO = 359, /* INCLUDE_COCO */ INCFILENAME = 360, /* INCFILENAME */ USE = 361, /* USE */ SEGMENT = 362, /* SEGMENT */ ENDSEGMENT = 363, /* ENDSEGMENT */ ESOPE = 364, /* ESOPE */ IDENTIFIER = 365, /* IDENTIFIER */ CIDENTIFIER = 366, /* CIDENTIFIER */ SKIP = 367, /* SKIP */ SKIPALL = 368, /* SKIPALL */ SKIPNOOP = 369, /* SKIPNOOP */ SKIPNOS = 370, /* SKIPNOS */ KEYWORD = 371, /* KEYWORD */ ELEMENTAL = 372, /* ELEMENTAL */ IMPURE = 373, /* IMPURE */ PURE = 374, /* PURE */ SIMPLE = 375, /* SIMPLE */ RECURSIVE = 376, /* RECURSIVE */ NON_RECURSIVE = 377, /* NON_RECURSIVE */ SUBROUTINE = 378, /* SUBROUTINE */ FUNCTION = 379, /* FUNCTION */ PROGRAM = 380, /* PROGRAM */ EOL = 381, /* EOL */ NAMED_LABEL = 382, /* NAMED_LABEL */ STLABEL = 383, /* STLABEL */ LABEL = 384, /* LABEL */ LABELS = 385, /* LABELS */ LABELLIST = 386, /* LABELLIST */ CALL = 387, /* CALL */ STARTCALL = 388, /* STARTCALL */ CALLLIST = 389, /* CALLLIST */ TYPE = 390, /* TYPE */ ENDTYPE = 391, /* ENDTYPE */ CLASS = 392, /* CLASS */ BASICTYPE = 393, /* BASICTYPE */ TYPEC = 394, /* TYPEC */ QSTRING = 395, /* QSTRING */ HSTRING = 396, /* HSTRING */ LR = 397, /* LR */ LRB = 398, /* LRB */ DOTOPERATOR = 399, /* DOTOPERATOR */ I_NUMBER = 400, /* I_NUMBER */ UNCLASSIFIED = 401, /* UNCLASSIFIED */ ERROR = 402, /* ERROR */ OMP = 403, /* OMP */ SCANOMPFIXED = 404, /* SCANOMPFIXED */ SCANOMPFREE = 405, /* SCANOMPFREE */ DEF = 406, /* DEF */ EXEC = 407, /* EXEC */ ENDDEF = 408, /* ENDDEF */ NONE = 409, /* NONE */ LAST_TOKEN = 410 /* LAST_TOKEN */ }; typedef enum yytokentype yytoken_kind_t; #endif /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef int YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif extern YYSTYPE yylval; int yyparse (void); #endif /* !YY_YY_PARSER_HPP_INCLUDED */ findent-4.3.2/src/debug.cpp0000644000000000000000000000330714566134066012474 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "debug.h" bool p_on = 0; char endchar = '\n'; Debugostream ppp; findent-4.3.2/src/debug.h0000644000000000000000000000617414566134066012146 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef DEBUG_H #define DEBUG_H #ifndef DEBUG //#define DEBUG #endif #include #include #include #define O(x) {std::cerr << " [" << (x) << "] ";} #define Y O(yytext);O(YY_START) // macro to activate or deactivate debug output: #ifdef DEBUG #define D(x) {std::cerr << "WD: "<< __func__<<" "<<__FILE__ <<":"<<__LINE__<<" "; x; std::cerr << std::endl; } #define DL(x) x #else #define D(x) #define DL(x) #endif #define P(x) {std::cerr << "WD: "<< __func__<<" "<<__FILE__ <<":"<<__LINE__<<" "; x; std::cerr << std::endl; } #define XSTR(x) STR(x) #define STR(x) #x #define FL (std::string(__func__) + (" " __FILE__ ":" XSTR(__LINE__) " ")) // // ad-hoc debugging // turn on by !findentfix:p-on // turn off by !findentfix:p-off // or in the code: ppp.on() or ppp.off() // // a typical debug line would be: // ppp< Debugostream& operator<<( T val ) { if (output) { std::string name = typeid(val).name(); bool b = (typeid(val) == typeid(std::string)); if (name.length() > 2) b = b || (name.substr(name.length()-1)=="c"); if (b) std::cout << "["; std::cout << val; if (b) std::cout << "]"; } return *this; } }; extern Debugostream ppp; #endif findent-4.3.2/src/docs.cpp0000644000000000000000000006745114566134066012350 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include "docs.h" #include "flags.h" #include "version.h" #include "functions.h" bool Docs::print(int todo) { switch(todo) { case Flags::DO_MANPAGE: usage(1); return 1; #ifndef MAKEMAN case Flags::DO_CHANGELOG: changelog(); return 1; case Flags::DO_EMACS_FINDENT: emacs_findent(); return 1; case Flags::DO_EMACS_HELP: emacs_help(); return 1; case Flags::DO_GEDIT_EXTERNAL: gedit_external(); return 1; case Flags::DO_GEDIT_HELP: gedit_help(); return 1; case Flags::DO_GEDIT_PLUGIN: gedit_plugin(); return 1; case Flags::DO_GEDIT_PLUGIN_PY: gedit_plugin_py(); return 1; case Flags::DO_MAKEFDEPS: makefdeps(); return 1; case Flags::DO_README: readme(); return 1; #ifdef SELFREP case Flags::DO_SELFREP: selfrep(); return 1; #endif case Flags::DO_USAGE: usage(0); return 1; case Flags::DO_VERSION: std::cout << "findent version "<" << std::endl; std::cout << " where is for example DO, END, WHERE() etcetera." << std::endl; std::cout << "Findent will adjust the indentation according to ." << std::endl; std::cout << " Errors in OPTIONS are silently ignored." << std::endl; std::cout << " Options marked with "+no_env+" are ignored if given via environment" << std::endl; std::cout << "variable FINDENT_FLAGS." << std::endl; std::cout << " In the long options, you can replace '_' with '-'." << std::endl; std::cout << " Below: denotes an unsigned decimal number." << std::endl; std::cout << " denotes a character." << std::endl; std::cout << ".PP" << std::endl << ".SS \"General options:" << std::endl; } else { doman = 0; std::cout << "findent [options]" << std::endl; std::cout << " Findent reads from STDIN, writes to STDOUT." << std::endl; std::cout << " Findent indents and optionally relabels a Fortran source." << std::endl; std::cout << " Findent can convert from fixed form to free form and vice versa and" << std::endl; std::cout << " can supplement END statements, see 'Refactor' below." << std::endl; std::cout << " Comment lines with '!' in column one are not indented." << std::endl; std::cout << " You can correct findent related indenting errors by" << std::endl; std::cout << " inserting comment lines: " << std::endl; std::cout << " ! findentfix: " << std::endl; std::cout << " where is for example DO, END, WHERE() etcetera." << std::endl; std::cout << " Findent will adjust the indentation according to ." << std::endl; std::cout << " " << std::endl; std::cout << "OPTIONS (errors are silently ignored):" << std::endl; std::cout << " Options marked with "+no_env+" are ignored if given via environment" << std::endl; std::cout << " variable FINDENT_FLAGS." << std::endl; std::cout << " In the long options, you can replace '_' with '-'." << std::endl; std::cout << " Below: denotes an unsigned decimal number." << std::endl; std::cout << " denotes a character." << std::endl; std::cout << std::endl; std::cout << " General options:" << std::endl; } manout(" "," "); manout("-h, --help ","print this text. "+no_env); manout("-H, --manpage ","print man page. "+no_env); manout("--readme ","print some background information. "+no_env); manout("--changelog ","print ChangeLog. "+no_env); manout("-v, --version ","prints findent version. "+no_env); manout("-q, --query_fix_free ","guess free or fixed, prints 'fixed' or 'free' and exits. "+no_env); manout("--continuation= "," ' ': (default) do not change continuation characters."); manout(" "," '0': create numbered continuation characters."); manout(" "," other: use that continuation character."); manout(" "," default for conversion from free to fixed is '&'."); manout("--include_left= ","(0/1) 1: indent include statements to starting indent (default:0)."); manout("-l, --label_left= ","(0/1) 1: move statement labels to start of line."); manout(" "," (default: free: 1, fixed: 0)"); manout("-lastindent, --last_indent ","prints computed indentation of last line."); manout(" "," (for usage with vim) "+no_env); manout("-lastusable, --last_usable ","prints line number of last line usable."); manout(" "," as start for indenting(for usage with vim). "+no_env); manout("-iauto, --input_format=auto ","determine automatically input format (free or fixed)."); manout("-ifixed, --input_format=fixed ","force input format fixed (default: auto)."); manout("-ifree, --input_format=free ","force input format free (default:auto)."); manout("-i-, --indent=none ","do not change indent (useful in combination with -R)."); manout("-L, --input_line_length= ","use only first characters of each line."); manout(" "," default=0: take whole lines."); manout("-Lg, --input_line_length=g ","same as above, but use gfortran convention."); manout(" "," for counting the characters with tabbed lines."); manout(" "," example: --input_line_length=72g."); manout("-M, --max_indent= ","maximum output indent, default 100, 0: no limit."); manout("-ofixed, --output_format=fixed ","force fixed format output."); manout("-ofree, --output_format=free ","force free format output."); manout("-osame, --output_format=same ","output format same is input format."); manout("--openmp= ","1/0: do/don't indent openmp conditionals (default: 1)."); manout(" "," NOTE: for free format, the omp sentinel must be '!$ '."); manout("-Rr, --refactor_end ","refactor subroutines etc: the END line."); manout(" "," of a subroutine, program etc. is, if possible, replaced by"); manout(" "," 'end subroutine ' or"); manout(" "," 'end function ' or"); manout(" "," 'end procedure ' or"); manout(" "," 'end program ' or"); manout(" "," 'end block data ' or"); manout(" "," 'end module ' or"); manout(" "," 'end submodule '"); manout(" "," 'end interface '"); manout(" "," 'end type '"); manout(" "," where is the name of the appropriate procedure, subroutine etc."); manout(" "," NOTE1: if the END line contains a continuation the results are undefined."); manout(" "," NOTE2: a line like 'end function fun' will be replaced by."); manout(" "," 'end subroutine sub' if the END line ends 'subroutine sub'."); manout(" "," NOTE3: the flag --refactor_procedures is deprecated, use --refactor_end."); manout("-RR, --refactor_end=upcase ","same as -Rr, but 'END SUBROUTINE '."); manout(" ","in stead of 'end subroutine ' etc."); manout("--relabel=shuffle ","shuffles existing labels,"); manout(" "," primarily meant for demo and debugging."); manout(" "," see also the notes under --relabel below."); manout("--relabel, --relabel=, ","renumber labels: n1 = starting index,"); manout(" "," n2 is increment (default:1000,10)."); manout(" "," if n1=0 or n2=0, relabeling is disabled."); manout(" "," see also RELABEL below."); manout(" "," NOTE1: use only SYNTAX-CORRECT SOURCES with this option."); manout(" "," NOTE2: CHECK the functionality of your program after using this option."); manout(" "," NOTE3: after finding an error (missing label, ill formatted label list, ...)"); manout(" "," findent will stop relabeling, but will continue indenting"); manout(" "," and/or converting."); manout("--relabel_reset= ","1: reset label numbering at start of subroutine/function/program."); manout(" ","0: do not reset label numbering (default: 0)."); manout("--query_relabel[=] ","generate report. " + no_env); manout(" "," n=0, or flag omitted: do not generate report."); manout(" "," n=1: generate summary (only error message or OK message)."); manout(" "," n=2: generate report of original and renumbered labels (default)."); manout(" "," NOTE: if n >= 0, no output of the fortran source."); manout("--ws_remred[=] ","replace redundant white space with one space."); manout(" "," n=0, or flag omitted: do not replace redundant spaces."); manout(" "," NOTE1: use with care, avoid pieces of code with not terminated"); manout(" "," strings and use Fortran code without syntax errors:"); manout(" "," changes are irreversible."); manout(" "," NOTE2: for statements containing an hollerith, this flag is ignored."); manout("--safe ","ignore next flags marked with "+no_env+" (used by wfindent)."); if(doman) { std::cout << ".PP" << std::endl << ".SS \"Indenting options:" << std::endl; } else { std::cout << std::endl; std::cout << " Indenting options:" << std::endl; std::cout << std::endl; } manout("-I, --start_indent= ","starting indent (default:0)."); manout("-Ia, --start_indent=a ","determine starting indent from first line."); Flags f; manout("-i, --indent= ","all indents except I,c,C,e (default: "+number2string(f.default_indent)+")."); manout("-a, --indent_associate= ","ASSOCIATE indent."); manout("-b, --indent_block= ","BLOCK indent."); manout("-d, --indent_do= ","DO indent."); manout("-f, --indent_if= ","IF indent."); manout("-E, --indent_enum= ","ENUM indent."); manout("-F, --indent_forall= ","FORALL indent."); manout("-j, --indent_interface= ","INTERFACE indent."); manout("-m, --indent_module= ","MODULE indent."); manout("-r, --indent_procedure= ","FUNCTION,"); manout(" ", " SUBROUTINE and PROGRAM indent."); #ifdef USEESOPE manout("--indent_segment= ","SEGMENT indent."); #endif manout("-s, --indent_select= ","SELECT indent."); manout("-t, --indent_type= ","TYPE indent."); manout("-w, --indent_where= ","WHERE indent."); manout("-x, --indent_critical= ","CRITICAL indent."); manout("--indent_changeteam= ","CHANGE TEAM indent."); manout("-C-, --indent_contains=restart, ","restart indent after CONTAINS."); manout("-k, --indent_continuation= ","continuation indent except " ); manout(" "," for lines starting with '&' (see flag -K)."); manout(" "," NOTE: free to free only."); manout("-k-, --indent_continuation=none ","continuation lines not preceded"); manout(" "," by '&' are untouched."); manout(" "," NOTE: free to free only."); manout("-kd, --indent_continuation=default","continuation lines not preceded"); manout(" "," by '&' are default indented."); manout(" "," NOTE: free to free only."); manout("-K, --indent_ampersand ","indent lines starting with '&' (free only)."); manout("--align_paren[=] ","align continuation lines not preceded"); manout(" "," by '&' with preceding unmatched left parenthesis."); manout(" "," n=0, or flag omitted: do not align."); manout(" "," n=1: do align (default)."); manout(" "," NOTE1: free to free only."); manout(" "," NOTE1: for statements containing an hollerith, this flag is ignored."); manout(" ","Next defaults are: all - all/2."); manout("-c, --indent_case= ","CASE negative indent."); manout(" "," NOTE: also for RANK, TYPEIS and CLASSIS."); manout("-C, --indent_contains= ","CONTAINS negative indent."); manout("-e, --indent_entry= ","ENTRY negative indent."); manout(" "," "); if(doman) { std::cout << ".PP" << std::endl << ".SS" << std::endl; } std::cout << "Dependencies:" << std::endl; manout("--deps ","output dependency information only, other flags are ignored. "+no_env); manout(" "," This can be used to generate a dependencies file for usage with make(1). "); manout(" "," The format of this information:"); manout(" "," Fortran source -> findent output"); manout(" "," include \"file1\" -> inc file1"); manout(" "," #include \"file2\" -> cpp file2"); manout(" "," #include -> std file3"); manout(" "," ??include 'file4' -> coc file4"); manout(" "," use module1 -> use module1"); manout(" "," submodule(m) subm -> use m"); manout(" "," mod m:subm"); manout(" "," module module2 -> mod module2"); manout("--makefdeps ","outputs a sh(1) script that serves as a an example"); manout(" "," to generate dependencies for use in make(1). "+no_env); manout(" "," "); if(doman) { std::cout << ".PP" << std::endl << ".SS \"Environment:" << std::endl; } else { std::cout << "Environment:" << std::endl; } manout(" ","findent parses the environment variable FINDENT_FLAGS before the command-line flags."); if(doman) { std::cout << ".PP" << std::endl << ".SS \"Usage with vim:" << std::endl; } else { std::cout << "Usage with vim:" << std::endl; } manout("--vim_help " ,"outputs directions to use findent in (g)vim. "+no_env); manout("--vim_fortran " ,"outputs file 'fortran.vim', see --vim_help. "+no_env); manout("--vim_findent " ,"outputs file 'findent.vim', see --vim_help. "+no_env); manout(" "," "); if(doman) { std::cout << ".PP" << std::endl << ".SS \"Usage with gedit:" << std::endl; } else { std::cout << "Usage with gedit:" << std::endl; } manout("--gedit_help " ,"outputs directions to use findent in gedit. "+no_env); manout("--gedit_external " ,"outputs script 'findent-gedit', see --gedit_help. "+no_env); manout("--gedit_plugin " ,"outputs file 'findent.plugin', see --gedit_help. "+no_env); manout("--gedit_plugin_py " ,"outputs file 'python.py', see --gedit_help. "+no_env); manout(" "," "); if(doman) { std::cout << ".PP" << std::endl << ".SS \"Usage with emacs:" << std::endl; } else { std::cout << " Usage with emacs:" << std::endl; } manout("--emacs_help " ,"outputs directions to use findent in emacs. "+no_env); manout("--emacs_findent " ,"outputs script 'findent.el', see --emacs_help. "+no_env); manout(" "," "); #ifdef SELFREP if(doman) { std::cout << ".PP" << std::endl << ".SS \"Self replication:" << std::endl; } else { std::cout << " Self replication:" << std::endl; } manout("--selfrep " ,"outputs source tar ball to stdout "+no_env); manout(" "," Example: create the tar.gz file:"); manout(" "," findent --selfrep > findent.tar.gz"); manout(" "," Example: create the unpacked source tar ball:"); manout(" "," findent --selfrep | tar zxf -"); manout(" "," "); #endif if(doman) { std::cout << ".PP" << std::endl << ".SS \"RELABEL:" << std::endl; } else { std::cout << "RELABEL:" << std::endl; } manout(" ","The following constructs are candidates for relabeling:"); manout(" "," - 100,110,120,130: label"); manout(" "," - X: integer or real or logical expression"); manout(" "," - I: identifier"); manout(" "," - [,]: optional comma"); manout(" "," - ...: not parsed by findent, can be anything except '=...'"); manout(" "," - [IF]: optional IF(...)"); manout(" ",""); manout(" "," 100 ... ! statement or format label"); manout(" "," IF(...) 110,120,130"); manout(" "," IF(...) 110,120"); manout(" "," DO 100[,] I=X,..."); manout(" "," DO 100[,] WHILE(...)"); manout(" "," DO 100[,] CONCURRENT(...)"); manout(" "," DO 100"); manout(" "," [IF] ACCEPT 100..."); manout(" "," [IF] ASSIGN 100 TO I"); manout(" "," [IF] BACKSPACE(...,ERR=100,...)"); manout(" "," [IF] CALL I(...,*100,...,$110,...,&120,...)"); manout(" "," [IF] CLOSE(...,ERR=100,...)"); manout(" "," [IF] DECODE(...,100,...,ERR=110,...)"); manout(" "," [IF] DELETE(...,ERR=110,...)"); manout(" "," [IF] ENCODE(...,100,...,ERR=110,...)"); manout(" "," [IF] ENDFILE(...,ERR=100,...)"); manout(" "," [IF] FIND(...,ERR=110,...)"); manout(" "," [IF] FLUSH(...,ERR=100,...)"); manout(" "," [IF] GOTO 100"); manout(" "," [IF] GOTO I[,](100,110,120)"); manout(" "," [IF] GOTO(100,110,120)..."); manout(" "," [IF] INQUIRE(...,ERR=100,...)"); manout(" "," [IF] OPEN(...,ERR=100,...)"); manout(" "," [IF] PRINT 100..."); manout(" "," [IF] READ 100..."); manout(" "," [IF] READ(...,100,...)"); manout(" "," [IF] READ(...,ERR=100,...,END=110,EOR=120,...,FMT=130)..."); manout(" "," [IF] REREAD 100..."); manout(" "," [IF] REREAD(...,100,...)"); manout(" "," [IF] REREAD(...,ERR=100,...,END=110,EOR=120,...,FMT=130)..."); manout(" "," [IF] REWIND(...,ERR=100,...)"); manout(" "," [IF] REWRITE(...,100) ..."); manout(" "," [IF] REWRITE(...,ERR=100,...,FMT=110,...,EOR=120)..."); manout(" "," [IF] TYPE 100..."); manout(" "," [IF] WAIT(...,ERR=100,...,END=110,...,EOR=120,...)"); manout(" "," [IF] WRITE(...,100) ..."); manout(" "," [IF] WRITE(...,ERR=100,...,FMT=110,...,EOR=120)..."); manout(" "," "); if(doman) { std::cout << ".PP" << std::endl << ".SS" << std::endl; } std::cout << "Examples:" << std::endl; manout(" ","Indent: findent < in.f > out.f"); manout(" "," findent -i2 -r0 < in.f > out.f"); manout(" ",""); manout(" ","Relabel: findent --relabel < in.f > out.f"); manout(" ",""); manout(" ","Convert fixed to free form: findent -ofree < prog.f > prog.f90"); manout(" ",""); manout(" ","Convert free to fixed form: findent -ofixed < prog.f90 > prog.f"); manout(" ",""); manout(" ","Refactor 'end': findent -Rr < in.f90 > out.f90"); manout(" "," "); if(doman) { std::cout << ".PP" << std::endl << ".SS" << std::endl; } std::cout << "BUGS:" << std::endl; manout("*","Also for free-format, findent is space-insensitive, while"); manout(" ","the standard states that space must be used as general separator."); manout(" ",""); manout("*","There are some issues with labels in a continuation"); manout(" ","when converting from free to fixed format."); manout(" ","For example:"); manout(" ",""); manout(" ","\n123&\n 4 continue"); manout(" ",""); manout(" ","The problems arise because it is not possible to define a"); manout(" ","statement label in a continuation in fixed format."); manout(" ",""); manout("*","When converting from fixed format to free format, findent"); manout(" ","discards white space in a string if the string contains a"); manout(" ","continuation, e.g:"); manout(" "," print *,\"a"); manout(" "," +b\""); manout(" ",""); manout(" ","is converted to:"); manout(" "," print *,\"a&"); manout(" "," &b\""); manout("*","Relabel issues"); manout(" "," In some cases, findent refuses to relabel."); manout(" "," To see the cause, use the flag '--query-relabel=1', e.g.:"); manout(" "," findent --relabel=10,10 --query-relabel=1"); manout(" "," If the fortran source contains label-related errors, or when"); manout(" ","findent misbehaves, relabeling can create havoc. So: test."); if(doman) { std::cout << ".SH DONATIONS" << std::endl; std::cout << ".br" << std::endl; } else { std::cout << "DONATIONS" << std::endl; } manout(" ","Donations to support the maintenance of this program are welcome: "); manout(" ","https://paypal.me/wvermin"); if(doman) { std::cout << ".SH COPYRIGHT" << std::endl; std::cout << ".br" << std::endl; } else { std::cout << std::endl; std::cout << "COPYRIGHT" << std::endl; } manout(" ","This is free software; see the source for copying conditions."); manout(" ","There is NO warranty; not even for MERCHANTABILITY or FITNESS"); manout(" ","FOR A PARTICULAR PURPOSE."); } void Docs::replaceAll( std::string &s, const std::string &search, const std::string &replace ) { // // https://stackoverflow.com/questions/4643512/replace-substring-with-another-substring-c // for( size_t pos = 0; ; pos += replace.length() ) { // // Locate the substring to replace // pos = s.find( search, pos ); if( pos == std::string::npos ) break; // // Replace by erasing and inserting // s.erase( pos, search.length() ); s.insert( pos, replace ); } } // // doman == 1: output in man page format // flag: " ": normal continuation line // otherwize : skip to new paragraph and use bold format // txt: Line to output // void Docs::manout(const std::string flag, const std::string txt) { std::string mantxt = txt; if (doman) { std::string manflag = flag; replaceAll(mantxt,"-","\\-"); replaceAll(manflag,"-","\\-"); if (manflag == " ") std::cout << mantxt << std::endl; else { std::cout << ".TP" << std::endl << "\\fB"< 0) if(mantxt[0] == '\n') mantxt = mantxt.substr(1); replaceAll(mantxt,"\n","\n\t "); if (flag == " ") std::cout << flag << " " << " " << mantxt.substr(start) << std::endl; else std::cout << flag << " " << ": " << mantxt.substr(start) << std::endl; } } #ifndef MAKEMAN void Docs::vim_help() { #include "vim_help.inc" } void Docs::vim_findent() { #include "vim_findent.inc" } void Docs::vim_fortran() { #include "vim_fortran.inc" } void Docs::gedit_help() { #include "gedit_help.inc" } void Docs::gedit_external() { #include "gedit_external.inc" } void Docs::gedit_plugin() { #include "gedit_plugin.inc" } void Docs::gedit_plugin_py() { #include "gedit_plugin_py.inc" } void Docs::emacs_help() { #include "emacs_help.inc" } void Docs::emacs_findent() { #include "emacs_findent.inc" } void Docs::readme() { #include "readme.inc" } void Docs::makefdeps() { #include "makefdeps.inc" } void Docs::changelog() { #include "changelog.inc" } #endif findent-4.3.2/src/docs.h0000644000000000000000000000447514566134066012012 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef DOCS_H #define DOCS_H #include class Docs { public: bool print(int todo); private: void changelog(void); void emacs_findent(void); void emacs_help(void); void gedit_external(void); void gedit_help(void); void gedit_plugin(void); void gedit_plugin_py(void); void makefdeps(void); void readme(void); void usage(bool man); void version(void); void vim_findent(void); void vim_fortran(void); void vim_help(void); #ifdef SELFREP void selfrep(void); #endif void manout(const std::string flag, const std::string txt); void replaceAll( std::string &s, const std::string &search, const std::string &replace ); bool doman; }; #endif findent-4.3.2/src/findent.cpp0000644000000000000000000000372014566134066013034 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include "docs.h" #include "fixed.h" #include "fortran.h" #include "free.h" #include "findent.h" #include "findentclass.h" int main(int argc, char*argv[]) { Flags flags; int todo = flags.get_flags(argc, argv); Docs docs; if (docs.print(todo)) return 0; Findent findent(flags); findent.run(); } findent-4.3.2/src/findent.h0000644000000000000000000000324414566134066012502 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef FINDENT_H #define FINDENT_H #endif findent-4.3.2/src/findent_types.h0000644000000000000000000000505414566134066013727 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef NFINDENT_TYPES_H #define NFINDENT_TYPES_H #include #include #include typedef std::deque ints_t; typedef std::deque ints_store_t; typedef std::deque indents_t; typedef std::deque indent_store_t; typedef std::deque bools_t; typedef std::deque strings_t; typedef std::pair intpair_t; typedef std::deque intpairs_t; typedef std::deque intpairs_store_t; template std::ostream& operator <<(std::ostream &os, std::deque &obj) { // // to print a deque // if (obj.empty()) { os << ":empty"<::iterator it = obj.begin(); int i = 0; while (it != obj.end()) os << ++i << ":" << *it++ << std::endl; return os; } #endif findent-4.3.2/src/findentclass.cpp0000644000000000000000000001673314566134066014072 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include "findentclass.h" #include "fortranline.h" #include "debug.h" int Findent::determine_fix_or_free(strings_t *input) { int rc; int n = 0; const int nmax = 4000; Fortranline line(gl); std::string s; bool eof; bool p_more = 0; bool skip = 0; strings_t::iterator it = input->begin(); D(O(" ");); while (n < nmax) { n++; if(it == input->end()) { s = ""; eof = 1; } else { s = *it; it++; eof = 0; } line = Fortranline(gl,s); D(O(' ');); if (eof) { // // to avoid to have to type twice a dot to // end input from terminal: // break; } handle_pre_light(line,p_more); if(p_more) { skip = 1; continue; } if(skip) { skip = 0; continue; } rc = guess_fixedfree(line); switch(rc) { case UNSURE : break; case PROBFREE : break; case FREE : return FREE; case FIXED : return FIXED; } } return FIXED; } // end of determine_fix_or_free void Findent::handle_pre_light(Fortranline &line, bool &p_more) { // // handles preprocessor lines and their continuations: // // line (input): line to handle // p_more (inout): input: if true, line is a continuation // output: if continuation is expected, p=true if (!p_more) // this is the first line of a preprocessor sequence pregentype = line.getpregentype(); if(pregentype == COCO) p_more = (line.lastchar() == '&'); else p_more = (line.lastchar() == '\\'); } // end of handle_pre_light int Findent::guess_fixedfree(Fortranline &line) { // // sometimes, program sources contain carriage control characters // such as ^L // I cannot get the lexer to respond to [:cntrl:] // so I handle that here: // std::string s = line.str(); if (firstchar(s) != '\t') if(firstchar(s) < 32) return UNSURE; lexer_set(ltab2sp(s),FINDFORMAT); int rc = yylex(); return rc; } // end of guess_fixedfree void Findent::handle_reading_from_tty() { reading_from_tty = isatty(fileno(stdin)); if (reading_from_tty) { std::cerr << "! Warning: reading from terminal" << std::endl; std::cerr << "! End this session by typing a single dot ('.')" << std::endl; std::cerr << "! on a new line" << std::endl; std::cerr << "! " << std::endl; std::cerr << "! Examples of typical usage:" << std::endl; std::cerr << "! help: findent -h" << std::endl; std::cerr << "! indent: findent < in.f > out.f" << std::endl; std::cerr << "! convert: findent -ofree < prog.f > prog.f90" << std::endl; } } // end of handle_reading_from_tty int Findent::what_to_return() { if (flags.return_format) switch(input_format) { case FREE: return 2; break; case FIXED: return 4; break; } return 0; } // end of what_to_return #if 0 void Findent::init_indent() { // // fills the indent-stack until indent 0 // if flags.all_indent <= 0: build indent_stack with a number of start_indent's // while(!indent.empty()) indent.pop_back(); int l=0; if(flags.all_indent > 0) { for (l = start_indent%flags.all_indent; l >:: iterator it; for (it = includes.begin(); it != includes.end(); ++it) { // eliminate use if corresponding (sub)module is made if (it->first == USE) { if (includes.find(make_pair(MODULE,it->second)) != includes.end()) continue; if (includes.find(make_pair(SUBMODULE,it->second)) != includes.end()) continue; } std::cout << type2str(it->first) << " " << it->second << std::endl; } } findent-4.3.2/src/findentclass.h0000644000000000000000000000656614566134066013542 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef FINDENTCLASS_H #define FINDENTCLASS_H #include #include // pair #include #include "flags.h" #include "prop.h" #include "findent_types.h" #include "debug.h" #include "fortranline.h" #include "globals.h" class Findent { public: Findent() {} Findent(Flags &f) { // // public // gl = new Globals; cur_rprop = empty_rprop; endline = "\n"; flags = f; gl->global_format = UNKNOWN; gl->global_gnu_format = flags.input_format_gnu;; gl->global_line_length = flags.input_line_length; gl->global_omp = flags.honour_omp; // // private // all_indent = 0; endline_set = 0; input_format = flags.input_format; output_format = 0; reading_from_tty = 0; } ~Findent() { delete gl; } void handle_pre_light(Fortranline &line, bool &p_more); void init_indent(); int run(); std::string endline; Flags flags; Globals* gl; int input_format; int output_format; std::set > includes; strings_t *input; private: int all_indent; prop_t cur_rprop; bool endline_set; bool reading_from_tty; int determine_fix_or_free(strings_t *input); int guess_fixedfree(Fortranline &line); std::string handle_dos(const std::string &s); void handle_reading_from_tty(); void output_deps(); std::string type2str(const int t); int what_to_return(); // for handle_pre_light: int pregentype; strings_t input_buffer; }; #endif findent-4.3.2/src/findentrun.cpp0000644000000000000000000001262114566134066013561 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "findentclass.h" #include "free.h" #include "fixed.h" #include "fortran.h" #include "debug.h" #include "globals.h" int Findent::run() { handle_reading_from_tty(); // copy whole input to input_buffer while(1) { bool eof; std::string s; getline(std::cin,s); eof = (std::cin.eof() && s == ""); s = handle_dos(s); if (!eof && reading_from_tty) eof = (s == "."); D(O(s);); if (eof) break; input_buffer.push_back(s); } input = &input_buffer; if (input_format == UNKNOWN) input_format = determine_fix_or_free(input); D(O(FIXED);O(FREE);O(input_format);); gl->global_format = input_format; if (flags.only_fix_free) { switch(input_format) { case FREE: std::cout << "free" << std::endl; break; case FIXED: std::cout << "fixed" << std::endl; break; default: std::cout << "free" << std::endl; break; } return what_to_return(); } strings_t relabel_out; //flags.relabel = 1; // TTDD if(flags.relabel) { Fortran *relabel; switch (input_format) { case FREE: relabel = new Free(this); break; default: relabel = new Fixed(this); break; } relabel->relabeling = true; relabel->input = input; relabel->out = &relabel_out; relabel->init_relabel(); relabel->do_relabel(); input = &relabel_out; delete relabel; } if (flags.query_relabel != 0) return 0; Fortran *indent; switch (input_format) { case FREE: indent = new Free(this); break; default: indent = new Fixed(this); break; } D(O("startindent ");O(flags.start_indent);); indent->start_indent = flags.start_indent; output_format = flags.output_format; if(output_format == 0) output_format = input_format; // default we want labels right aligned for FIXED and left aligned // for FREE if(!flags.label_left_set) { flags.label_left = false; if(output_format == FREE) flags.label_left = true; } indent->init_indent(); indent->input = input; if (flags.last_usable_only) { mycout.setoutput(0); indent->handle_last_usable_only(); delete indent; return what_to_return(); } if (flags.last_indent_only || flags.deps) mycout.setoutput(0); indent->cur_indent = indent->start_indent; D(O("size: ");O(input->size());); while(1) { indent->full_statement = ""; D(O("Full_statement1");O(indent->full_statement);); indent->get_full_statement(); D(O("FULL_statement2");O(indent->full_statement);); DL({ for (size_t i = 0; ic_lines.size(); i++) D(O("FULL_c_lines");O(indent->c_lines[i].str());); }); indent->indent_and_output(); if (indent->end_of_file) { if(flags.last_indent_only) { D(O("mycout.get");O(mycout.get());); D(O("cur_indent");O(indent->cur_indent);); std::cout << num_leading_spaces(mycout.get()) << endline; /* std::string s; switch(input_format) { case FIXED: s = mycout.get(); if (s.length() <= 6) std::cout << 0 << std::endl; else // skip over label and continuation character std::cout << 6 + num_leading_spaces(s.substr(6)); break; default: std::cout << num_leading_spaces(mycout.get()) << endline; break; } */ /* switch (input_format) { case FIXED: std::cout << 6 + indent->cur_indent << endline; break; default: std::cout << indent->cur_indent << endline; break; } */ } if(flags.deps) output_deps(); delete indent; return what_to_return(); } } return what_to_return(); // never reached } findent-4.3.2/src/findentrun.h0000644000000000000000000000325214566134066013226 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef FINDENTRUN_H #define FINDENTRUN_H #endif findent-4.3.2/src/fixed.cpp0000644000000000000000000003430314566134066012505 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include "fixed.h" #include "debug.h" #include "findent_types.h" #include "free.h" #include "simpleostream.h" void Fixed::build_statement(Fortranline &line, bool &f_more, bool &pushback) { // // adds line to c_lines // adds line (stripped from comments, preprocessor stuff and // continuation stuff) to full_statement // f_more true: more lines are to expected // false: this line is complete // pushback = 0; f_more = false; if (line.blank_or_comment()) { c_lines.push_back(line); if (c_lines.size() ==1) f_more = false; // do not expect continuation lines else f_more = true; // but here we do D(O("FULL_fs_return");O(line.str());O(full_statement);O(f_more);); return; } std::string s = line.strnomp(); std::string sl = s.substr(0,5); // // special attention for garbage lines: // if(!cleanfive(s)) { c_lines.push_back(line); f_more = true; return; } if (s.length() >6) sl = sl+' '+s.substr(6); // // this is a line with code // // // check if this is the first line with proper fortran // bool first_fortran_line = true; for(size_t i = 0; i< c_lines.size(); ++i) if (c_lines[i].fortran()) { first_fortran_line = false; break; } if (first_fortran_line) { // // this is the first line with fortran content // c_lines.push_back(line); full_statement += trim(sl); D(O("fs_build");O(full_statement);); full_statement = rtrim(remove_trailing_comment(full_statement)); D(O("fs_build");O(full_statement);); // ------------------------------------- if(relabeling) { size_t i = 0; int l = 0; //while((line.str()[i] == ' ' || line.str()[i] == '\t') && i < line.str().size()) while(i < sl.size() && (sl.at(i) == ' ' || sl.at(i) == '\t')) { i++; l++; } for(size_t i=0; iendline; bool do_remred = fi->flags.ws_remred && !contains_hollerith; int remredstate = 0; std::ostringstream os; size_t cindex = 0; while(!lines.empty()) { mycout.reset(); if(lines.front().written()) { lines.pop_front(); continue; } if(output_pre(lines,freelines)) continue; if (lines.empty()) return; is_omp = lines.front().omp(); if(is_omp) { ompstr = lines.front().str().substr(0,2); cmpstr = "!$ "; } else { ompstr = ""; cmpstr = ""; } if (lines.front().blank()) { // // a completely blank line, that is simple: // if(to_mycout) mycout << ompstr << endline; else { os << cmpstr; if(had_first && is_omp) os << " & &"; // to keep gfortran and ifort happy freelines->push_back(F(os.str())); os.str(""); } lines.pop_front(); continue; } if (lines.front().comment()) { // // output indentation blanks: // if (lines.front().firstchar() == '!') { if (lines.front()[0] != '!' || is_omp) // // take care of the situation that cur_indent == 0 // but the comment does not start in column 1 // { if(to_mycout) //mycout << insert_omp(blanks(M(std::max(fi->cur_indent+6,1)))); mycout << insert_omp(blanks(M(std::max(cur_indent+6,1)))); else { os << cmpstr << ' '; if(had_first && is_omp) os << " & &"; // to keep gfortran and ifort happy } } } // // output comment: // if(to_mycout) mycout << lines.front().trim() << endline; else { int l=1; if (!is_omp && toupper(lines.front().firstchar()) == 'D') l = 0; os << "!" << lines.front().trim().substr(l); freelines->push_back(F(os.str())); os.str(""); } lines.pop_front(); continue; } // // this is a line with (part of) a fortran statement // possibly a continuation line // std::string s = lines.front().strnomp(); // // garbage in, garbage out: // if(!cleanfive(s)) { // // garbage in, garbage out // if(to_mycout) { std::string lineout = insert_omp(lines.front().rtrim()); if (do_remred) lineout = remred(lineout, ompstr.size(), remredstate); mycout << lineout << endline; //mycout << insert_omp(lines.front().rtrim()) << endline; } else { os << cmpstr << lines.front().rtrim(); freelines->push_back(F(os.str())); os.str(""); } lines.pop_front(); continue; } // // this should be a normal line with code, maybe preceded with a label // if(s.length() > 6) // line is [label][c]statement { bool iscontinuation = lines.front().fixedcontinuation(); if (iscontinuation) { if (fi->flags.conchar != ' ') { if (fi->flags.conchar == '0') { s.at(5) = continuations[cindex]; cindex++; if (cindex >= continuations.length()) cindex = 0; } else s.at(5) = fi->flags.conchar; } } // // output label field including possible continuation character // std::string label; int nlabel; if(is_omp) { unsigned int n; getstr_sp(s.substr(2,3),label,n); nlabel = 3; } else { unsigned int n; getstr_sp(s.substr(0,5),label,n); nlabel = 5; } if (fi->flags.label_left) label = label + std::string(nlabel-label.size(),' '); else label = std::string(nlabel-label.size(),' ') + label; if(to_mycout) mycout << ompstr + label+s[5]; else os << cmpstr << label + ' '; // // try to honour current indentation // if this is a continuation line, count the number // of spaces after column 6. // if (iscontinuation) { std::string s6 = s.substr(6)+'x'; old_indent = s6.find_first_not_of(' '); if (!to_mycout) os << '&'; } else { // // count the number of spaces after column 6 of the first line // std::string s6 = s.substr(6)+'x'; first_indent = s6.find_first_not_of(' '); cindex = 0; } int adjust_indent = old_indent - first_indent; if (adjust_indent < 0) adjust_indent = 0; switch(prevquote) { case ' ' : // no dangling strings, output with indent if(to_mycout) { int l = M(std::max(adjust_indent+cur_indent,0)); //mycout << blanks(M(std::max(adjust_indent+cur_indent,0))) std::string lineout = blanks(l) + trim(s.substr(6)); if (do_remred) lineout = remred(lineout, l, remredstate); mycout << lineout; } else os << trim(s.substr(6)); break; default: // dangling string, output asis if(to_mycout) { std::string lineout = s.substr(6); if (do_remred) lineout = remred(lineout, 0, remredstate); mycout << lineout; //mycout << s.substr(6); } else os << s.substr(6); break; } // // investigate if this line terminates a string // prevquote = fixedmissingquote(prevquote + s); if(to_mycout) mycout << endline; else { char c; if (wizard(lines)) // more fortran lines follow { c = ' '; if(iscontinuation) c = prevquote; if (is_omp) // an hack freelines->push_back(F('!'+add_amp(os.str().substr(1),c))); else freelines->push_back(F(add_amp(os.str(),c))); } else freelines->push_back(F(os.str())); os.str(""); } lines.pop_front(); had_first = 1; // here, the 1st line of a statement has been processed continue; } // // output a line that does not fulfill above conditions // Never reached? if(to_mycout) { std::string lineout = insert_omp(s); //mycout << insert_omp(s) << endline; if (do_remred) lineout = remred(lineout, ompstr.size(), remredstate); mycout << lineout << endline; } else { os << cmpstr << s; if (wizard(lines)) // more fortran lines follow { if (is_omp) // an hack freelines->push_back(F('!'+add_amp(os.str().substr(1),prevquote))); else freelines->push_back(F(add_amp(os.str(),prevquote))); } else freelines->push_back(F(os.str())); os.str(""); } lines.pop_front(); had_first = 1; // here, the 1st line of a statement has been processed } } // end of output void Fixed::output_converted(lines_t &lines, bool ch) { D(O("fixed::output_converted ");); lines_t freelines; output(lines, ch, &freelines); Globals oldgl = *gl; gl->global_format = FREE; gl->global_line_length = 0; Free f(fi); lines_t::iterator it = freelines.begin(); // // clean all freelines: // while(it != freelines.end()) { D(O((*it));); it->clean(1); it++; } f.cur_indent = cur_indent; f.labellength = labellength; f.output(freelines, ch); (*gl) = oldgl; } // end of output_converted bool Fixed::wizard() { // // Look ahead to see if the next fixed-format fortran line is a continuation // return true if a continuation is found, false otherwize. // For free format, always return 0. // if (gl->global_format == FREE) return 0; Fortranline line(gl); bool eof; while(1) { line = getnext(eof,0); if (eof) return 0; if (line.pre()) { bool p_more = 0; while(1) { fi->handle_pre_light(line,p_more); if (p_more) { line = getnext(eof,0); if (eof) return 0; } else break; } if(eof) return 0; continue; } if (line.fortran() && cleanfive(line.strnomp())) { // // return 1 if this is a fixed fortran continuation line // return line.fixedcontinuation(); } } return 0; } // end of wizard bool Fixed::wizard(lines_t lines) { // finds out if lines.front() gets a continuation line if(lines.empty()) return 0; lines_t::iterator it = lines.begin(); it++; while(it != lines.end()) { if (it-> fortran() && cleanfive(it->strnomp())) { D(O(it->str());O(it->fixedcontinuation());); return it->fixedcontinuation(); } it++; } return 0; } std::string Fixed::add_amp(const std::string &s,const char p) { // // examples: // s = "abc ! xyz", p = ' ' : result = "abc& ! xyz" // s = "ab'c ! xyz", p = ' ' : result = "ab'c ! xyz&" // s = "abc ! xyz", p = '\'' : result = "abc ! xyz&" // s = "ab'c ! xyz", p = '\'' : result = "ab'c& ! xyz" // p can be ' ', '\'', '"' // std::string slt = rtrim(remove_trailing_comment(s,p)); return slt + "&" + s.substr(slt.length()); } findent-4.3.2/src/fixed.h0000644000000000000000000000465614566134066012162 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef FIXED_H #define FIXED_H #include "fortran.h" class Fixed : public Fortran { public: Fixed(Findent *f) : Fortran(f) {} void build_statement(Fortranline &line, bool &f_more, bool &pushback); void output(lines_t &lines,bool contains_hollerith,lines_t *freelines = 0); void output_converted(lines_t &lines, bool ch); private: bool wizard(void); bool wizard(lines_t lines); std::string add_amp(const std::string &s,const char prevquote); std::string insert_omp(const std::string &s) { if(is_omp) { std::string sl = s; sl = sl + blanks(ompstr.length() - sl.length()); return sl.replace(0,ompstr.length(),ompstr); } else return s; } bool is_omp; std::string ompstr; std::string cmpstr; }; #endif findent-4.3.2/src/flags.cpp0000644000000000000000000005476714566134066012522 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include #include "debug.h" #include "flags.h" #include "parser.hpp" #define optargcheck if (!optarg || strlen(optarg)==0) break; const int RELABEL_START = 1000; const int RELABEL_INCREMENT = 10; void Flags::set_defaults(void) { include_left_default = 0; default_indent = 3; all_indent = default_indent; align_paren = 0; apply_indent = 1; auto_firstindent = 0; conchar = ' '; deps = 0; do_shuffle = 0; end_env_found = 0; honour_omp = 1; include_left = include_left_default; indent_ampersand = 0; input_format = UNKNOWN; input_format_gnu = 0; input_line_length = 0; label_left = 1; label_left_set = 0; last_indent_only = 0; last_usable_only = 0; max_indent = 100; only_fix_free = 0; output_format = 0; query_relabel = 0; refactor_end = 0; relabel = 0; relabel_reset = 0; relabel_start = RELABEL_START; relabel_increment = RELABEL_INCREMENT; return_format = 0; safe = 0; selfrep = 0; start_indent = 0; upcase_end_type = 0; ws_remred = 0; set_default_indents(); } void Flags::set_default_indents() { associate_indent = all_indent; // -a block_indent = all_indent; // -b case_indent = all_indent-all_indent/2; // -c changeteam_indent = all_indent; cont_indent = all_indent; // -k contains_indent = all_indent; // -C critical_indent = all_indent; // -x do_indent = all_indent; // -d entry_indent = all_indent-all_indent/2; // -e enum_indent = all_indent; // -E forall_indent = all_indent; // -F if_indent = all_indent; // -f indent_continuation = 1; // !-k- indent_contain = 1; // !-C- interface_indent = all_indent; // -j module_indent = all_indent; // -m routine_indent = all_indent; // -r #ifdef USEESOPE segment_indent = all_indent; #endif select_indent = all_indent; // -s type_indent = all_indent; // -w where_indent = all_indent; // -w } int Flags::get_flags(int argc, char *argv[]) { char *envopts = getenv("FINDENT_FLAGS"); char **allflags; char *envflags = strdup(""); int nflags = 1; if (envopts != 0) { // // collect flags from environment: // envflags = strdup(envopts); // // malloc enough space for all flags: // allflags = (char**) malloc(sizeof(char*)*(strlen(envflags)+argc+1)); allflags[0] = argv[0]; char *a = strtok(envflags," \t:"); while (a != 0) { allflags[nflags++] = a; a = strtok(0," \t:"); } } else { allflags = (char**) malloc(sizeof(char*)*(argc+1)); allflags[0] = argv[0]; } // add sentinel to separate environment flags frol command line flags allflags[nflags++] = (char*)"--end_of_env"; for (int i = 1; i/?"; while((c=getopt_long(nflags,allflags, "a:b:c:C:d:e:E:f:F:hHi:I:j:k:Kl:L:m:M:o:qQr:R:s:t:vw:x:", longopts, &option_index))!=-1) { switch(c) { case 'a' : // --indent_associate=nn optargcheck; associate_indent = atoi(optarg); break; case 'b' : optargcheck; block_indent = atoi(optarg); // --indent_block=nn break; case 'c' : optargcheck; case_indent = atoi(optarg); // --indent_case=nn break; case 'C' : // --indent_contains=nn/none optargcheck; if(strlen(optarg)>0 && optarg[0] == '-') indent_contain = 0; else contains_indent = atoi(optarg); break; case 'd' : // --indent_do=nn optargcheck; do_indent = atoi(optarg); break; case 'e' : optargcheck; entry_indent = atoi(optarg); // --indent_entry=nn break; case 'E' : optargcheck; enum_indent = atoi(optarg); // --indent_enum=nn break; case 'f' : optargcheck; if_indent = atoi(optarg); // --indent_if=nn break; case 'F' : optargcheck; forall_indent = atoi(optarg); // --indent_forall=nn break; case 'h' : // --help if(end_env_found) retval = DO_USAGE; break; case 'H': // --manpage if(end_env_found) retval = DO_MANPAGE; break; case 'i' : // --input_format=fixed/free/auto optargcheck; if (std::string(optarg) == "fixed") input_format = FIXED; else if (std::string(optarg) == "free") input_format = FREE; else if (std::string(optarg) == "auto") input_format = UNKNOWN; else if (strlen(optarg)>0 && optarg[0] == '-') // --indent=no/nn apply_indent = 0; else { all_indent = atoi(optarg); set_default_indents(); } break; case 'I' : // --start_indent=nn/auto optargcheck; if (strlen(optarg)>0 && optarg[0] == 'a') auto_firstindent = 1; else { start_indent = atoi(optarg); auto_firstindent = 0; } break; case 'j' : optargcheck; interface_indent = atoi(optarg); // --indent_interface=nn break; case 'k' : // --indent_continuation=nn/no optargcheck; if (strlen(optarg)>0 && (optarg[0] == 'd' || !strcmp(optarg,"default"))) indent_continuation = 1; else if (strlen(optarg)>0 && (optarg[0] == '-' || !strcmp(optarg,"none"))) indent_continuation = 0; else cont_indent = atoi(optarg); break; case 'K': // --indent_ampersand if (end_env_found) indent_ampersand = 1; break; case 'l' : optargcheck; if(std::string(optarg) == "astindent") // --last_indent { if(end_env_found) last_indent_only = 1; } else if(std::string(optarg) == "astusable") // --last_usable { if(end_env_found) last_usable_only = 1; } else { label_left = (atoi(optarg) != 0); // --label_left=0/1 label_left_set = true; } break; case 'L' : optargcheck; if (strlen(optarg)>0) { input_line_length = atoi(optarg); // --input_line_length=nn input_format_gnu = (optarg[strlen(optarg)-1] == 'g'); } break; case 'm' : optargcheck; module_indent = atoi(optarg); // --indent_module=nn break; case 'M' : optargcheck; max_indent = atoi(optarg); // --max-indent=nn break; case 'o' : optargcheck; if(std::string(optarg) == "free") // --output_format=free { output_format = FREE; break; } if(std::string(optarg) == "fixed") // --output_format=fixed { output_format = FIXED; break; } if(std::string(optarg) == "same") // --output_format=same { output_format = 0; break; } break; case 'q' : // --query_fix_free if (end_env_found) only_fix_free = 1; break; case 'Q': // // return 2 if free, 4 if fixed // not documented, maybe useful in the future // return_format = 1; break; case 'r' : // --indent_procedure optargcheck; routine_indent = atoi(optarg); break; case 'R': // --refactor_end[=upcase] optargcheck; switch(optarg[0]) { case 'R' : upcase_end_type = 1; // fall through case 'r' : refactor_end = 1; break; } break; case 's' : // --indent_select=nn optargcheck; select_indent = atoi(optarg); break; case 't' : optargcheck; type_indent = atoi(optarg); // --indent_type=nn break; case 'v' : if(end_env_found) retval = DO_VERSION; break; case 'w' : optargcheck; where_indent = atoi(optarg); // --indent_where=nn break; case 'x' : optargcheck; critical_indent = atoi(optarg); // --indent_critical=nn break; case DO_CHANGETEAM: optargcheck; changeteam_indent = atoi(optarg); // --indent_changeteam=nn break; case DO_CONCHAR: optargcheck; if (strlen(optarg) > 0) conchar=optarg[0]; if (allowed_conchars.find(conchar) == std::string::npos) conchar = '&'; break; case DO_DEPS: if(end_env_found) deps = 1; break; case DO_INCLUDE_LEFT: optargcheck; include_left = (atoi(optarg) != 0); // --include_left=0/1 break; case DO_ALIGN_PAREN: align_paren = 1; if(optarg != 0 && strlen(optarg) > 0) { align_paren = (atoi(optarg) != 0); } break; case DO_INDENT_CONTAINS: optargcheck; if (!strcmp(optarg,"restart")) indent_contain = 0; else contains_indent = atoi(optarg); break; case DO_INPUT_FORMAT: optargcheck; if (!strcmp(optarg,"fixed")) input_format = FIXED; else if (!strcmp(optarg,"free")) input_format = FREE; else if (!strcmp(optarg,"auto")) input_format = UNKNOWN; break; case DO_INDENT: optargcheck; if (!strcmp(optarg,"none")) apply_indent = 0; else { all_indent = atoi(optarg); set_default_indents(); } break; case DO_LAST_INDENT: if(end_env_found) last_indent_only = 1; break; case DO_LAST_USABLE: if(end_env_found) last_usable_only = 1; break; case DO_LABEL_LEFT: optargcheck; label_left = (atoi(optarg) != 0); // --label_left=0/1 label_left_set = true; break; case DO_QUERY_RELABEL: if(end_env_found) { query_relabel = 2; relabel = 1; if(optarg != 0 && strlen(optarg) > 0) { query_relabel = atoi(optarg); if(query_relabel < 0 || query_relabel > 2) query_relabel = 0; if(query_relabel == 0) relabel = 0; else relabel = 1; } } break; case DO_REFACTOR_END: refactor_end = 1; upcase_end_type = 0; if (optarg != 0 && strlen(optarg) > 0) { if (!strcmp(optarg,"upcase")) upcase_end_type = 1; } break; case DO_RELABEL: relabel = 1; if (optarg != 0 && strlen(optarg) > 0) { if(!strcmp(optarg,"shuffle")) { do_shuffle = 1; } else { do_shuffle = 0; relabel_start = atoi(optarg); char *p = strchr(optarg,','); if (p) relabel_increment = atoi(p+1); if (relabel_start <= 0 || relabel_increment <= 0) relabel = 0; } } break; case DO_WS_REMRED: ws_remred = 1; if(optarg != 0 && strlen(optarg) > 0) { ws_remred = atoi(optarg) != 0; } break; case DO_RELABEL_RESET: optargcheck; relabel_reset = (atoi(optarg) != 0); break; case DO_SAFE: safe = 1; end_env_found = 0; // this is a hack: if we encounter --safe // we enter the state as if FINDENT_FLAGS // has not been parsed. break; #ifdef USEESOPE case DO_SEGMENT: optargcheck; segment_indent = atoi(optarg); // --indent_segment=nn break; #endif case DO_OMP: optargcheck; if (atoi(optarg) == 0) honour_omp = 0; else honour_omp = 1; break; case DO_END_ENV: end_env_found = 1; break; case DO_CHANGELOG: case DO_EMACS_FINDENT: case DO_EMACS_HELP: case DO_GEDIT_EXTERNAL: case DO_GEDIT_HELP: case DO_GEDIT_PLUGIN: case DO_GEDIT_PLUGIN_PY: case DO_MAKEFDEPS: case DO_README: case DO_SELFREP: case DO_VIM_FINDENT: case DO_VIM_FORTRAN: case DO_VIM_HELP: if(end_env_found) retval = c; break; } if (retval != DO_NOTHING) break; } free(allflags); free(envflags); return retval; } findent-4.3.2/src/flags.h0000644000000000000000000001202614566134066012145 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef FLAGS_H #define FLAGS_H class Flags { void set_defaults(void); void set_default_indents(); public: Flags() { set_defaults(); } int get_flags(int argc, char *argv[]); enum { DO_NOTHING = 1000, DO_CHANGELOG, DO_CHANGETEAM, DO_CONCHAR, DO_DEPS, DO_EMACS_FINDENT, DO_EMACS_HELP, DO_END_ENV, DO_GEDIT_EXTERNAL, DO_GEDIT_HELP, DO_GEDIT_PLUGIN, DO_GEDIT_PLUGIN_PY, DO_INCLUDE_LEFT, DO_ALIGN_PAREN, DO_INDENT, DO_INDENT_CONTAINS, DO_INPUT_FORMAT, DO_LABEL_LEFT, DO_LAST_INDENT, DO_LAST_USABLE, DO_MAKEFDEPS, DO_MANPAGE, DO_OMP, DO_QUERY_RELABEL, DO_README, DO_REFACTOR_END, DO_RELABEL, DO_RELABEL_RESET, DO_SEGMENT, DO_SAFE, DO_SELFREP, DO_USAGE, DO_VERSION, DO_VIM_FINDENT, DO_VIM_FORTRAN, DO_VIM_HELP, DO_WS_REMRED }; bool apply_indent ; // 1: output indented line, else output original lines bool auto_firstindent ; char conchar ; // continuation character output by fixed2fixed, see manpage bool deps ; // output dependencies only bool do_shuffle ; // 1: shuffle labels bool end_env_found ; // signal that parsing flags from environment has been done bool include_left ; // 1: put include on the start of the line bool include_left_default ; bool indent_continuation ; bool indent_ampersand ; // indent continuation lines starting with ampersand, too bool indent_contain ; bool input_format_gnu ; bool label_left ; // 1: put statement labels on the start of the line bool label_left_set ; bool last_indent_only ; bool last_usable_only ; int max_indent ; // maximum allowed indent bool only_fix_free ; // 1: determine only if fixed or free (-q) bool refactor_end ; // 1: refactor end statements bool relabel ; // 1: relabel when possible bool relabel_reset ; // 1: restart from relabel_start in every function/subroutine/program int relabel_start ; // startnumber of relabeling int relabel_increment ; // increment of relabeling bool return_format ; // 1: return 2 if format==free, 4 if format==fixed bool safe ; // 1: disable flages like -q, default: 0 bool selfrep ; // 1: produce source tar ball on stdout bool ws_remred ; // 1: remove redundand space bool upcase_end_type ; // 1: use 'END SUBROUTINE' etc in stead of 'end subroutine' bool honour_omp ; // 1: treat openmp continuation lines as code, // 0: treat them as comment int all_indent; int associate_indent; int block_indent; int case_indent; int changeteam_indent; int cont_indent; bool align_paren; int contains_indent; int critical_indent; int default_indent; int do_indent; int entry_indent; int enum_indent; int forall_indent; int if_indent; int input_format; int input_line_length; int interface_indent; int module_indent; int output_format; int query_relabel; int routine_indent; #ifdef USEESOPE int segment_indent; #endif int select_indent; int start_indent; int type_indent; int where_indent; }; #endif findent-4.3.2/src/fortran.cpp0000644000000000000000000006603114566134066013064 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "fortran.h" #include "pre_analyzer.h" #include "line_prep.h" #include "functions.h" #include "flags.h" #define Cur_indent cur_indent #define FLAGS fi->flags #define Endline fi->endline #define End_of_file end_of_file #define Getnext getnext #define Includes fi->includes #define Curline (*curline) void Fortran::init_indent() { // // fills the indent-stack until indent 0 // if flags.all_indent <= 0: build indent_stack with a number of start_indent's // while(!indent.empty()) indent.pop_back(); int l=0; if(FLAGS.all_indent > 0) { for (l = start_indent%FLAGS.all_indent; lempty()) { eof = 1; } else { s = input->front(); input->pop_front(); } //} lines_read ++; return Fortranline(gl,s); } // end of mygetline Fortranline Fortran::getnext(bool &eof, bool use_wb) { Fortranline line(gl); eof = 0; if (use_wb && !wizardbuffer.empty()) { line = wizardbuffer.front(); D(O("wizardbuffer_pop");O(line.str());O(wizardbuffer.size());); num_lines++; wizardbuffer.pop_front(); //if (reading_from_tty && line.str() == ".") // eof = 1; } else { line = mygetline(eof); if (!eof) num_lines++; } // // remove trailing white space // FIXED: convert leading tab to space // line.clean(); if(!use_wb && !eof) { num_lines--; wizardbuffer.push_back(line); D(O("wizardbuffer_push");O(line.str());O(wizardbuffer.size());); } D(O("nbseen");O(nbseen);O(line.str());); if (!nbseen) { nbseen = !line.blank_or_comment() && (line.getpregentype() == 0) && prevlastchar != '\\' && line.lastchar() != '\\'; if (FLAGS.auto_firstindent && nbseen) { start_indent = guess_indent(line); cur_indent = start_indent; D(O("cur_indent");O(cur_indent);); init_indent(); // indent_handled = 1; // it solves issue#12 on github } prevlastchar = line.lastchar(); } D(O("indent_handled");O(indent_handled);O(line.str());); D(O(line.str());O(use_wb);); DL( if(use_wb) D(O("getnext___");O(line.str());); ); return line; } int Fortran::guess_indent(Fortranline line) { // // count spaces at start of line, correct for tabs and & and label // int si = 0; bool ready = 0; const int tabl = 8; if (line.format() == FIXED) { std::string s = line.str(); if (s.length() <= 6) return 0; /* t = s.find_first_not_of(' ',6); if (t != std::string::npos) si = t; else si = 0; */ for (unsigned int j=6; jhandle_pre_light(lines.front(),p_more); if (lines.front().pre()) if (to_mycout) mycout << lines.front().trim() << Endline; else outlines->push_back(F(lines.front().trim())); else if (to_mycout) mycout << lines.front().str() << Endline; else outlines->push_back(F(lines.front().str())); lines.pop_front(); if (lines.empty() || !p_more) break; } return 1; } else return 0; } // end of output_pre void Fortran::handle_last_usable_only() { // // search for the last line that is usable to start indenting // using findent. // int usable_line = 1; init_indent(); while(1) { //int prev = fi->num_lines; int prev = num_lines; get_full_statement(); Line_prep p(full_statement); propstruct props = parseline(p); switch (props.kind) { case BLANK: case CASE: case CASEDEFAULT: case CLASSDEFAULT: case CLASSIS: case CONTAINS: case ELSE: case ELSEIF: case ELSEWHERE: case ENTRY: case RANK: case RANKDEFAULT: case TYPEIS: break; default: usable_line = prev+1; break; } if (End_of_file) { std::cout << usable_line << Endline; return; } } } // end of last_usable_only void Fortran::get_full_statement() { // // this function collects 'full_statement': a complete // fortran line, concatenated from possible continuation lines, // comments and preprocessor lines removed // // full_statement is used to determine the indentation // // Also, every line is unmodified stored in 'c_lines' // // If the input starts with a comment or a preprocessor line, // full_statement = "", c_lines will contain the line, possibly // followed by preprocessor continuation lines as in: /* #define foo \ */ // bar // // A totally empty line is treated as a comment line, // // Comment lines and preprocessor lines can be embedded in // fortran continuation lines as in: // // subroutine compute( & // #ifdef one // x & // #else // x,y & // #endif // ) // // In this example, full_statement will contain: // // subroutine compute(x,y) // ( this is only correct if 'one' is not defined, but it // will not prevent correct indenting) // // // if things get hairy: try a finite state machine // // // see fortran.h for definitions of some variables // full_statement = ""; if(relabeling) full_pos.clear(); indent_handled = 0; pregion = 0; if (first_call) { Curline = Getnext(End_of_file); first_call = 0; } c_lines.clear(); if(relabeling) full_pos.clear(); while(1) { D(O("State:");O(state);O(fs_store.size());O(Curline.str());); switch(state) { case start: if (fs_store.empty()) { full_statement = ""; if(relabeling) full_pos.clear(); } else { full_statement = fs_store.back(); if(relabeling) full_pos = fp_store.back(); } if (End_of_file) { state = end_start; break; } pregentype = Curline.getpregentype(); if(pregentype == CPP || pregentype == COCO) { state = in_pre; break; } if (FLAGS.deps) { switch(pregentype) { case INCLUDE_CPP: case INCLUDE_CPP_STD: case INCLUDE_COCO: Includes.insert(std::make_pair(pregentype,Curline.getinclude())); } } if (is_findentfix(Curline)) { state = in_ffix; break; } state = in_fortran; break; case in_ffix: Curline.preregion(pregion); c_lines.push_back(Curline); full_statement = rtrim(remove_trailing_comment(Curline.rest())); // todo full_pos Curline = Getnext(End_of_file); state = start; return; case in_fortran: if(End_of_file) { state = end_fortran; break; } // issue14 // Always check if we are dealing with a preprocessor line: pregentype = Curline.getpregentype(); if(pregentype == CPP || pregentype == COCO) { state = in_pre; break; } // /issue14 Curline.preregion(pregion); build_statement(Curline, f_more, pushback); D(O("issue14 Curline ");O(Curline.str());O(f_more);O(pushback);); D(O("issue14 Full_statement ");O(full_statement);); if (f_more) { Curline = Getnext(End_of_file); if (End_of_file) { state = end_fortran; break; } pregentype = Curline.getpregentype(); D(O("issue14");O(Curline.str());O(pregentype==CPP);O(pregentype==COCO);); if (pregentype == CPP || pregentype == COCO) { p_more = 0; while (1) { handle_pre(Curline,p_more); Curline.preregion(pregion); c_lines.push_back(Curline); if(p_more) { Curline = Getnext(End_of_file); if (End_of_file) { state = end_fortran; break; } } else break; } Curline = Getnext(End_of_file); } if (FLAGS.deps) { switch(pregentype) { case INCLUDE_CPP: case INCLUDE_CPP_STD: case INCLUDE_COCO: Includes.insert(std::make_pair(pregentype,Curline.getinclude())); } } state = in_fortran; break; } state = in_fortran_1; // // need state in_fortran_1 to get correct result from last_usable // return; case in_fortran_1: if (!pushback) Curline = Getnext(End_of_file); state = start; break; case in_pre: p_more = 0; while(1) { handle_pre(Curline,p_more); Curline.preregion(pregion); c_lines.push_back(Curline); if(p_more) { Curline = Getnext(End_of_file); if (End_of_file) { state = end_pre; break; } } else break; } Curline = Getnext(End_of_file); state = start; break; case end_start: case end_fortran: case end_pre: state = start; return; } } } // end of get_full_statement bool Fortran::is_findentfix(Fortranline &line) { bool rc = 0; switch (line.scanfixpre()) { case FINDENTFIX: rc = 1; break; case P_ON: ppp.on(); // debug.h, debug.cpp break; case P_OFF: ppp.off(); break; } return rc; } void Fortran::handle_pre(Fortranline &line, bool &p_more) { int ifelse; if((!p_more) && ( pregentype == CPP || pregentype == COCO)) { int pretype = line.scanfixpre(); switch(pretype) { case CPP: case COCO: case FINDENTFIX: break; default: ifelse = prea.analyze(pretype); switch(ifelse) { case Pre_analyzer::PRE_IF: pregion++; push_all(); break; case Pre_analyzer::PRE_ELIF: pregion++; top_all(); break; case Pre_analyzer::PRE_ELSE: pregion++; top_all(); // fall through case Pre_analyzer::PRE_ENDIF: pregion++; pop_all(); break; case Pre_analyzer::PRE_ENDIFE: pregion++; break; default: return; break; } switch(ifelse) // full_statement needs apart treatment: { case Pre_analyzer::PRE_IF: fs_store.push_back(full_statement); D(O("full in if");O(full_statement);); cl_store.push_back(c_lines); if(relabeling) fp_store.push_back(full_pos); break; case Pre_analyzer::PRE_ELIF: if(fs_store.empty()) { full_statement = ""; cl_store.clear(); if(relabeling) full_pos.clear(); } else { full_statement = fs_store.back(); lines_t x = cl_store.back(); for (size_t i = 0; i 0) // // if there was a previous labeled do, handle it: // { int ilabel = string2number(props.stlabel); while ( top_dolabel() == ilabel ) { pop_indent(); pop_dolabel(); Cur_indent = top_indent(); indent_handled = 1; } } // // if the previous non-blank line was PROCEDURE (module procedure) // then determine if this was a procedure with executable content // if so: take delayed action with respect to indenting // if (prev_props.kind == PROCEDURE) { switch (props.type) { case EXEC: Cur_indent = top_indent(); push_indent(Cur_indent + FLAGS.routine_indent); empty_dolabels(); push_rprops(prev_props); break; default: break; } } Cur_indent = top_indent(); refactor_end_found = 0; if (FLAGS.deps) // determine dependencies { switch(props.kind) /* handle includes etc */ { case INCLUDE: case INCLUDE_CPP: case INCLUDE_CPP_STD: case INCLUDE_COCO: D(O("INCLUDE");O(props.stringvalue);O(FLAGS.deps);); Includes.insert(std::make_pair(props.kind,trim(props.stringvalue))); break; case USE: case MODULE: D(O("USE/MODULE");O(props.name);O(FLAGS.deps);); Includes.insert(std::make_pair(props.kind,trim(stolower(props.name)))); break; case SUBMODULE: D(O("SUBMODULE");O(props.lrvalue+":"+props.name);O(FLAGS.deps);); Includes.insert(std::make_pair(props.kind,trim(stolower(props.lrvalue))+":" +trim(stolower(props.name)))); Includes.insert(std::make_pair(USE,trim(stolower(props.lrvalue)))); } } else { // // for every entity that is eligible for refactoring it's end // e.g. subroutine // we will push props on the rprops stack // for every corresponding end-entity (e.g. endsubroutine) we will // pop the rprops stack // switch(props.kind) //determine indent, refactor { case TYPE: Cur_indent = top_indent(); push_indent(Cur_indent + FLAGS.type_indent); empty_dolabels(); push_rprops(props); break; case INTERFACE: D(O("INTERFACE_NAME");O(props.name);); Cur_indent = top_indent(); push_indent(Cur_indent + FLAGS.interface_indent); empty_dolabels(); push_rprops(props); break; case SUBROUTINE: case FUNCTION: case PROGRAM: case BLOCKDATA: Cur_indent = top_indent(); push_indent(Cur_indent + FLAGS.routine_indent); empty_dolabels(); push_rprops(props); break; case MODULE: case SUBMODULE: Cur_indent = top_indent(); push_indent(Cur_indent + FLAGS.module_indent); empty_dolabels(); push_rprops(props); break; case BLOCK: Cur_indent = top_indent(); push_indent(Cur_indent + FLAGS.block_indent); break; case CHANGETEAM: Cur_indent = top_indent(); push_indent(Cur_indent + FLAGS.changeteam_indent); break; case CRITICAL: Cur_indent = top_indent(); push_indent(Cur_indent + FLAGS.critical_indent); break; case ENUM: Cur_indent = top_indent(); push_indent(Cur_indent + FLAGS.enum_indent); empty_dolabels(); break; case ABSTRACTINTERFACE: D(O("ABSTRACTINTERFACE");); Cur_indent = top_indent(); push_indent(Cur_indent + FLAGS.interface_indent); empty_dolabels(); push_rprops(props); break; case DO: Cur_indent = top_indent(); push_indent(Cur_indent + FLAGS.do_indent); if (props.labels.size() != 0) push_dolabel(string2number(props.labels[0])); break; case SELECTCASE: case SELECTRANK: case SELECTTYPE: Cur_indent = top_indent(); push_indent(Cur_indent + FLAGS.select_indent); break; case CASE: case CASEDEFAULT: case RANK: case RANKDEFAULT: case CLASSDEFAULT: case CLASSIS: case TYPEIS: Cur_indent -= FLAGS.case_indent; break; case END: case ENDBLOCKDATA: case ENDFUNCTION: case ENDMODULE: case ENDPROCEDURE: case ENDPROGRAM: case ENDSUBROUTINE: case ENDSUBMODULE: case ENDINTERFACE: case ENDTYPE: if (!indent_handled && !first_code_line) Cur_indent = pop_indent(); cur_rprop = top_rprops(); pop_rprops(); refactor_end_found = (cur_rprop.kind != ABSTRACTINTERFACE); break; case ENDASSOCIATE: case ENDBLOCK: case ENDCRITICAL: case ENDDO: case ENDENUM: case ENDFORALL: case ENDIF: case ENDSELECT: case ENDTEAM: case ENDWHERE: D(O("indent_handled:");O(indent_handled);); if (!indent_handled && !first_code_line) Cur_indent = pop_indent(); break; case PROCEDURE: // in fact: moduleprocedure // // depending on what follows this will be // recognized as a module procedure with content // or only a moduleprocedure specification // break; case CONTAINS: if (FLAGS.indent_contain) Cur_indent -= FLAGS.contains_indent; else { Cur_indent = start_indent; pop_indent(); push_indent(Cur_indent); } break; case IF: Cur_indent = top_indent(); push_indent(Cur_indent + FLAGS.if_indent); break; case ELSE: Cur_indent -= FLAGS.if_indent; break; case ELSEIF: Cur_indent -= FLAGS.if_indent; break; case ELSEWHERE: Cur_indent -= FLAGS.where_indent; break; case ENTRY: Cur_indent -= FLAGS.entry_indent; break; case WHERE: Cur_indent = top_indent(); push_indent(Cur_indent + FLAGS.where_indent); break; case ASSOCIATE: Cur_indent = top_indent(); push_indent(Cur_indent + FLAGS.associate_indent); break; case FORALL: Cur_indent = top_indent(); push_indent(Cur_indent + FLAGS.forall_indent); break; case INCLUDE: D(O("INCLUDE");O(FLAGS.include_left);O(start_indent);); if (FLAGS.include_left) Cur_indent = start_indent; else Cur_indent = top_indent(); break; #ifdef USEESOPE case SEGMENT: Cur_indent = top_indent(); push_indent(Cur_indent + FLAGS.segment_indent); break; case ENDSEGMENT: if (!indent_handled) Cur_indent = pop_indent(); break; #endif default: Cur_indent = top_indent(); } // end determine indent and refactor D(O("Cur_indent");O(Cur_indent)); switch(props.kind) { case BLANK: break; default: first_code_line = 0; prev_props = props; } if(first_time) // check to handle multi-statement line like x=1;y=3 { output_line(ch); first_time = 0; } } rest = p.get_line_rest(); if (rest == "") break; } } // end of indent_and_output void Fortran::output_line(bool ch) { if (c_lines.empty()) return; mycout.reset(); handle_refactor(); if (!FLAGS.apply_indent) { // // no indentation requested: // while (!c_lines.empty()) { if(!c_lines.front().written()) mycout << c_lines.front().str() << Endline; c_lines.pop_front(); } return; } if (fi->input_format == fi->output_format) output(c_lines,ch); else output_converted(c_lines,ch); } // end of output_line void Fortran::handle_refactor() { if (FLAGS.refactor_end && refactor_end_found) { // // handle refactor routines // if (cur_rprop.kind != 0) // check if corresponding start is ok { // // modify line to match the corrsponding module, subroutine ... line // first, we have to locate that line, the back of the deque // could have comment or empty lines // lines_t::reverse_iterator it = c_lines.rbegin(); while (it != c_lines.rend()) { if ( it->blank_or_comment_or_pre() ) it++; else break; } // starting at position labellength + spaces, scan lines[0] until isalnumplus() // returns false. The scanned characters will be replaced by something // like: 'end subroutine mysub' // //std::string s = c_lines.back().trimmed_line(); std::string s = it->trimmed_line(); size_t startpos = s.find_first_not_of(' ',labellength); size_t endpos = s.length(); for (size_t i=startpos; istr(s.substr(0,startpos) + replacement + s.substr(endpos)); } } } // remove redundant space, replace multiple spaces outside strings and comments with one space. // comments start with '!' // s: line or continuation line. If s is the first line, state must be set to 0 // from: first characters of s will not be touched or interpreted // state: used by remred. Must be zero when remred is called for the first line. // std::string Fortran::remred(const std::string &s, int from, int &state) { enum {start=0,instrings,instringd,eatspace,incode,incomment}; std::string r = s.substr(0,from); static int prevc; // used to detect e.g. WRITE(10'5) X for (int i = from; i<(int)s.size(); i++) { int c = s[i]; switch(state) { case start: prevc = -1; switch(c) { case '\'': r += c; state = instrings; prevc = c; break; case '"': r += c; state = instringd; prevc = c; break; case ' ': case '\t': r += ' '; state = eatspace; break; case '!': r += c; state = incomment; break; default: r += c; state = incode; prevc = c; break; } break; case instrings: switch(c) { case '\'': r += c; state = start; break; default: r += c; break; } break; case instringd: switch(c) { case '"': r += c; state = start; break; default: r += c; break; } break; case eatspace: switch(c) { case ' ': case '\t': break; case '\'': r += c; if(!myisalnum(prevc)) state = instrings; else state = incode; prevc = c; break; case '"': r += c; state = instringd; prevc = c; break; case '!': r += c; prevc = -1; state = incomment; break; default: r += c; prevc = c; state = incode; break; } break; case incode: switch(c) { case ' ': case '\t': r += c; state = eatspace; break; case '\'': r += c; if(!myisalnum(prevc)) state = instrings; prevc = c; break; case '"': r += c; state = instringd; prevc = c; break; case '!': r += c; prevc = -1; state = incomment; break; default: r += c; prevc = c; break; } break; case incomment: r += c; break; } } switch(state) { case incomment: state = start; break; } return r; } #undef Cur_indent #undef FLAGS #undef Endline #undef End_of_file #undef Getnext #undef Curline #undef Includes findent-4.3.2/src/fortran.h0000644000000000000000000001753614566134066012537 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef FORTRAN_H #define FORTRAN_H #include "findent_types.h" #include "findentclass.h" #include "fortranline.h" #include "simpleostream.h" #include "pre_analyzer.h" #include "debug.h" class Fortran { public: virtual ~Fortran(){ delete curline; } Fortran(Findent *f) { fi = f; gl = f->gl; cur_rprop = empty_rprop; curline = new Fortranline(gl); prev_props = empty_rprop; refactor_end_found = 0; // for get_full_statement: f_more = 0; first_call = 1; state = start; num_lines = 0; start_indent = 0; lines_read = 0; nbseen = 0; end_of_file = 0; labellength = 0; relabeling = false; mygetline_nr = 0; // // for getnext: // prevlastchar = 0; cur_indent = 0; indent_handled = 0; } virtual void build_statement(Fortranline &line, bool &f_more, bool &pushback) = 0; virtual void output(lines_t &lines,bool contains_hollerith,lines_t *freelines = 0) = 0; virtual void output_converted(lines_t &lines, bool ch) = 0; void get_full_statement(void); void do_relabel(void); void init_relabel(void); int get_num(void) { return num_lines; } void handle_last_usable_only(void); void indent_and_output(void); void init_indent(void); int start_indent; int cur_indent; bool end_of_file; int labellength; bool relabeling; int pregion; std::string full_statement; intpairs_t full_pos; intpairs_store_t fp_store; void insert_in_full_pos(int i, int j) { full_pos.push_back(intpair_t(i,j)); } strings_t *input; strings_t *out; lines_t c_lines; protected: std::deque cl_store; struct propstruct cur_rprop; Fortranline* curline; ints_store_t dolabels_store; ints_t dolabels; // to store labels, necessary for labelled do Findent* fi; strings_t fs_store; Globals* gl; indent_store_t indent_store; // to store indent store bools_t nbseen_store; // to store nbseen Pre_analyzer prea; struct propstruct prev_props; bool refactor_end_found; rprops_store_t rprops_store; rprops_t rprops; // to store routines (module, subroutine ...) std::string remred(const std::string &s, int from, int &state); int M(const int k) { // // used to delimit indentation // if (fi->flags.max_indent <= 0) return k; else return std::min(fi->flags.max_indent,k); } Fortranline F(const std::string &s) { return Fortranline(gl,s); } int pop_indent(void) { if (indent.empty()) return 0; indent.pop_back(); return top_indent(); } int top_indent(void) { if (indent.empty()) return 0; return indent.back(); } int top_dolabel(void) { if (dolabels.empty()) return -1; return dolabels.back(); } int pop_dolabel(void) { if (dolabels.empty()) return -1; dolabels.pop_back(); return top_dolabel(); } void empty_dolabels(void) { while(!dolabels.empty()) dolabels.pop_back(); } void push_rprops(struct propstruct p) { rprops.push_back(p); } void push_dolabel(int p) { dolabels.push_back(p); } struct propstruct top_rprops(void) { if (rprops.empty()) return empty_rprop; return rprops.back(); } struct propstruct pop_rprops(void) { if (rprops.empty()) return empty_rprop; rprops.pop_back(); return top_rprops(); } void push_all(void) { dolabels_store.push_back(dolabels); indent_store.push_back(indent); nbseen_store.push_back(nbseen); rprops_store.push_back(rprops); } // end of push_all void top_all(void) { if (!dolabels_store.empty()) dolabels = dolabels_store.back(); if (!indent_store.empty()) indent=indent_store.back(); if (!nbseen_store.empty()) nbseen=nbseen_store.back(); if (!rprops_store.empty()) rprops = rprops_store.back(); } // end of top_all void pop_all(void) { if (!dolabels_store.empty()) dolabels_store.pop_back(); if (!indent_store.empty()) indent_store.pop_back(); if (!nbseen_store.empty()) nbseen_store.pop_back(); if (!rprops_store.empty()) rprops_store.pop_back(); } // end of pop_all void handle_pre(Fortranline &line, bool &p_more); bool is_findentfix(Fortranline &line); bool output_pre(lines_t &lines, lines_t *outlines); void output_line(bool ch); void handle_refactor(void); Fortranline getnext(bool &eof, bool use_wb = 1); //Fortranline mygetline(bool &eof, bool keep_lines = 0); Fortranline mygetline(bool &eof); private: // // for get_full_statement and handle_pre: // bool first_call; bool f_more; bool p_more; int pregentype; bool pushback; int state; indents_t indent; // to store indents void push_indent(int p) { indent.push_back(p); } linebuffer_t wizardbuffer; // to store wizard lines and push back lines from handle_fortran int num_lines; size_t mygetline_nr; int lines_read; bool nbseen; // did we encounter a non-blank line? int guess_indent(Fortranline line); void rel_store(void); void rel_flush(bool do_c_lines); void rel_doit(void); void rel_apply(void); void rel_report(void); void rel_summary(void); bool rel_collect(const std::string &label); // for getnext: char prevlastchar; bool indent_handled; enum { start=1, in_fortran, in_fortran_1, in_pre, end_start, end_fortran, end_pre, in_ffix }; }; #endif findent-4.3.2/src/fortranline.cpp0000644000000000000000000001134114566134066013726 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include "fortranline.h" void Fortranline::print() { std::cout << "orig_line: [" << orig_line << "]" << std::endl; std::cout << "trim: [" << trim() << "]" << std::endl; std::cout << "ltrim: [" << ltrim() << "]" << std::endl; std::cout << "rtrim: [" << rtrim() << "]" << std::endl; std::cout << "trimmed_line: [" << trimmed_line() << "]" << std::endl; std::cout << "firstchar: [" << firstchar() << "]" << std::endl; std::cout << "lastchar: [" << lastchar() << "]" << std::endl; std::cout << "first2chars: [" << first2chars() << "]" << std::endl; std::cout << "scanfixpre: " << scanfixpre() << std::endl; std::cout << "rest: [" << rest() << "]" << std::endl; std::cout << "global_format:" << g_format2txt() << std::endl; } std::ostream& operator <<(std::ostream &os,Fortranline &obj) { os<<"["<global_omp) return 0; if (format() == FIXED) lexer_set(orig_line,SCANOMPFIXED); else lexer_set(orig_line,SCANOMPFREE); int rc = yylex(); return rc == OMP; } findent-4.3.2/src/fortranline.h0000644000000000000000000002155214566134066013400 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef FORTRANLINE_H #define FORTRANLINE_H #include #include "functions.h" #include "lexer.h" #include "parser.hpp" #include "globals.h" #include "debug.h" class Fortranline { // // NOTE: // some functions assume that clean() is called // std::string orig_line; std::string orig_without_omp; // // Some functions are used repeatedly, the results are // cached here // char firstchar_cache; bool firstchar_cached; std::string ltrim_cache; bool ltrim_cached; bool omp_cache; bool omp_cached; int scanfixpre_cache; bool scanfixpre_cached; std::string trim_cache; bool trim_cached; std::string incfile_cache; bool Written; bool is_clean; Globals* gl; int local_format; bool local_gnu_format; int Preregion; void init(void) { local_format = gl->global_format; local_gnu_format = gl->global_gnu_format; is_clean = false; firstchar_cached = false; ltrim_cached = false; omp_cached = false; scanfixpre_cached = false; trim_cached = false; } void init(Globals* g) { gl = g; init(); } void do_clean(void); bool do_omp(void); public: void print(void); void clean(void) { if (is_clean) return; else do_clean(); } void clean(bool force) { if (force) do_clean(); else clean(); } Fortranline() { Written = false; Preregion = 0; } Fortranline(Globals* g) { Written = false; Preregion = 0; init(g); } Fortranline(Globals*g, const std::string &s) { Written = false; Preregion = 0; init(g); orig_line = s; } void written(bool w) { Written = w; } bool written(void) { return Written; } void preregion(int p) { Preregion = p; } int preregion(void) { return Preregion; } std::string g_format2txt(void) { switch(g_format()) { case UNKNOWN: return "unknown"; case FIXED: return "fixed"; case FREE: return "free"; default: return ""; } } void g_format(const int what) { gl->global_format = what; } int g_format(void) { return gl->global_format; } void line_length(const int what) { gl->global_line_length=what; } int line_length(void) { return gl->global_line_length; } void gnu_format(bool what) { gl->global_gnu_format=what; } bool gnu_format(void) { return gl->global_gnu_format; } std::string str(void) { return orig_line; } std::string strnomp(void) { clean(); return orig_without_omp; } friend std::ostream& operator <<(std::ostream &os,Fortranline &obj); void str(const std::string &s) { orig_line = s; init(); } int format(void) const { if (local_format == UNKNOWN) return gl->global_format; return local_format; } std::string trimmed_line(void) { // // result is different for FIXED or FREE, see below: // switch(format()) { case FIXED: return ::rtrim(orig_line); break; case FREE: default: if (omp()) return ::trim(orig_without_omp); else return ::trim(orig_line); break; } } std::string rtrim(void) { if (omp()) return ::rtrim(orig_without_omp); else return ::rtrim(orig_line); } std::string ltrim(void) { if (!ltrim_cached) { if (omp()) ltrim_cache = ::ltrim(orig_without_omp); else ltrim_cache = ::ltrim(orig_line); ltrim_cached = 1; } return ltrim_cache; } std::string trim(void) { if (!trim_cached) { if (omp()) trim_cache = ::trim(orig_without_omp); else trim_cache = ::trim(orig_line); trim_cached = 1; } return trim_cache; } char firstchar(void) { // returns first char of ltrim(), 0 if length()=0 if (!firstchar_cached) { if (ltrim().length()>0) firstchar_cache = ltrim()[0]; else firstchar_cache = 0; firstchar_cached = 1; } return firstchar_cache; } char operator [] (int i) const { //returns character in column k of the original line if(orig_line.length() > (unsigned) i) return orig_line[i]; else return 0; } char lastchar(void) const { if (orig_line.length() > 0) return *orig_line.rbegin(); else return 0; } std::string first2chars() { return ltrim().substr(0,2); } int scanfixpre(void) { if(!scanfixpre_cached) { lexer_set(trim(),SCANFIXPRE); scanfixpre_cache = yylex(); incfile_cache = lexer_getinclude(); if (format() == FIXED) if(scanfixpre_cache == FIXFINDENTFIX) scanfixpre_cache = FINDENTFIX; scanfixpre_cached = 1; } return scanfixpre_cache; } std::string getinclude() { if(scanfixpre_cache) return incfile_cache; else return ""; } bool omp(void) { if (!omp_cached) { omp_cache = do_omp(); omp_cached = 1; } return omp_cache; } std::string rest(void) { if(scanfixpre()==FINDENTFIX) return lexer_getrest(); else return ""; } bool blank(void) { return (trim().length() == 0); } bool comment(void) { switch (format()) { case FIXED: if (omp()) { return firstchar() == '!'; } switch(::firstchar(orig_line)) { case 'd': case 'D': case 'c': case 'C': case '!': case '*': return 1; } return firstchar() == '!'; break; case FREE: return firstchar() == '!'; break; } return 0; } bool blank_or_comment(void) { return blank() || comment(); } int getpregentype(void) { int pretype = scanfixpre(); switch(pretype) { case CPP_IF: case CPP_ENDIF: case CPP_ELSE: case CPP_ELIF: case CPP: return CPP; break; case COCO_IF: case COCO_ENDIF: case COCO_ELSE: case COCO_ELIF: case COCO: return COCO; break; case INCLUDE_CPP: case INCLUDE_CPP_STD: case INCLUDE_COCO: return pretype; break; default: return 0; } } bool precpp(void) { return firstchar() == '#'; } bool precoco(void) { return first2chars() == "??"; } bool pre(void) { return precpp() || precoco(); } bool blank_or_comment_or_pre(void) { return blank_or_comment() || pre(); } bool fortran(void) { return !blank_or_comment_or_pre(); } bool fixedcontinuation(void) const { // // returns 1 if the line, interpreted as a fixed format line, // contains a character other than 0 or ' ' in column 5 // const std::string c = " 0"; return c.find((*this)[5]) == std::string::npos; } std::string remove_trailing_comment(const char prevquote = ' ') { return ::rtrim(::remove_trailing_comment(orig_without_omp,prevquote)); } }; std::ostream& operator <<(std::ostream &os,Fortranline &obj); typedef std::deque lines_t; typedef std::deque linebuffer_t; #endif findent-4.3.2/src/free.cpp0000644000000000000000000004471014566134066012332 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include #include "debug.h" #include "findent_types.h" #include "fixed.h" #include "free.h" #include "simpleostream.h" static int get_paren_align(const std::string& line, int& state); static int align_state; static int align_indent; void Free::build_statement(Fortranline &line, bool &f_more, bool &pushback) { // // adds line to c_lines // adds line (stripped from comments, preprocessor stuff and // continuation stuff) to full_statement // f_more 1: more lines are to expected // 0: this line is complete // pushback = 0; if (!line.blank_or_comment()) { // // sl becomes the first input_line_length characters of line // and then trimmed left and right: // std::string sl = line.trimmed_line(); if(line.firstchar() == '&') sl.erase(0,1); full_statement = full_statement + sl; // // remove trailing comment and trailing white space // full_statement = rtrim(remove_trailing_comment(full_statement)); // // If the last character = '&', a continuation is expected. // f_more = ( lastchar(full_statement) == '&'); if (f_more) // chop off '&' from full_statement : full_statement.erase(full_statement.length()-1); } c_lines.push_back(line); DL( for (size_t i=0; iendline; bool to_mycout = (fixedlines == 0); bool isfirst = 1; const char conchar = '&'; bool expect_continuation = 0; bool prev_expect_continuation; bool mylabel_left = fi->flags.label_left; if(!to_mycout) // want labels left if converting to fixed mylabel_left = true; align_state = 0; align_indent = -1; bool do_align_paren = fi->flags.align_paren && !contains_hollerith; bool do_remred = fi->flags.ws_remred && !contains_hollerith; int remredstate = 0; while (!lines.empty()) { mycout.reset(); if(lines.front().written()) { lines.pop_front(); continue; } is_omp = lines.front().omp(); if(is_omp) { ompstr = "!$ "; // omp sentinel for free format cmpstr = "!$"; // omp sentinel for fixed format } else { ompstr = ""; cmpstr = ""; } if(output_pre(lines,fixedlines)) continue; if (lines.empty()) return; if (lines.front().blank()) { // // a completely blank line, that is simple: // if(to_mycout) mycout << ompstr << endline; else { if (lines.front().omp()) fixedlines->push_back(F(cmpstr)); else fixedlines->push_back(F("")); os.str(""); } lines.pop_front(); continue; } // // handle comment lines: // if (lines.front().comment()) { if (lines.front()[0] != '!' || lines.front().omp()) { // // take care of the situation that cur_indent == 0 // but the comment does not start in column 1 // if(to_mycout) mycout << insert_omp(blanks(M(std::max(cur_indent,1))),ompstr); else //os << cmpstr << blanks(std::max(fi->cur_indent,1)); os << cmpstr << blanks(std::max(cur_indent,1)); } if(to_mycout) { mycout << lines.front().trim() << endline; } else { os << lines.front().trim(); fixedlines->push_back(F(rtrim(os.str()))); os.str(""); } lines.pop_front(); continue; } // // this is a line with (part of) a fortran statement // possibly a continuation line // // // If the line ends with a '&', the next line with fortran code // is a real continuation line. // If this line does not end with '&', the next line with fortran code // is not a real continuation line: possibly this line is garbage. // // Important because of indenting real continuation lines. // prev_expect_continuation = expect_continuation; // // TODO: not bulletproof with regard to unfinished strings // expect_continuation = (lastchar(lines.front().remove_trailing_comment()) == '&'); if(isfirst) { // // found the first statement line // if label: handle it // isfirst = 0; std::string lineout; if (mylabel_left && labellength > 0) { // // put label at start of line // std::string firstline = lines.front().trim(); // it is possible, that the statement label is split across more lines. // as in: 123& // : &4 continue // or the label is directly followed by an &: // as in: 123& // : & continue // In that case the actual value of labellength is not usable here, we // will handle it separately. // if (labellength >= (int)firstline.size()-1 && lastchar(firstline) == '&') // was: if (labellength > (int)firstline.size() && lastchar(firstline) == '&') { if(to_mycout) { mycout << firstline << endline; } else { os << rm_last_amp(firstline) << blanks(6); // this is likely to create havoc fixedlines->push_back(F(os.str())); os.str(""); } } else { std::string label = firstline.substr(0,labellength); firstline = trim(firstline.substr(labellength)); int l = M(std::max(cur_indent - labellength,1)); // put at least one space after label if(to_mycout) { if (lines.front().omp()) l = M(std::max((int)(l-ompstr.length()),1)); lineout = ompstr + label + blanks(l) + firstline; if (do_remred) lineout = remred(lineout, l+ompstr.size()+label.size(), remredstate); mycout << lineout << endline; } else { os << insert_omp(label,cmpstr) << blanks(6) << rm_last_amp(firstline); fixedlines->push_back(F(os.str())); os.str(""); } } if (do_align_paren) align_indent = get_paren_align(lineout,align_state); D(O("align_indent");O(align_indent);); lines.pop_front(); continue; } // // this is the first code line without label. Always indent // (even if it starts with '&') // Or it is the first line with a label, and mylabel_left = false // In that case, the number of spaces between the label and the rest of // the line should be made equal to one and the whole line should // be indented. // if(to_mycout) { std::string line = lines.front().trim(); if (labellength > 0) line = line.substr(0,labellength) + ' ' + ltrim(line.substr(labellength)); std::string lineout; //mycout << insert_omp(blanks(M(std::max(cur_indent,0))),ompstr) << // line << endline; int l; if (align_indent >=0) { l = M(std::max(align_indent,0)); lineout = insert_omp(blanks(l),ompstr)+line; l += ompstr.size(); } else { l = M(std::max(cur_indent,0)); lineout = insert_omp(blanks(l),ompstr)+line; l += ompstr.size(); } if (do_align_paren) align_indent = get_paren_align(lineout,align_state); D(O("align_indent");O(align_indent);O(lineout);); if (do_remred) lineout = remred(lineout, l, remredstate); mycout << lineout << endline; } else { os << insert_omp(blanks(5),cmpstr); if(lines.front().firstchar() == '&') os << conchar << rm_last_amp(ltrim(lines.front().trim().substr(1))); else os << ' ' << rm_last_amp(lines.front().rtrim()); fixedlines->push_back(F(os.str())); os.str(""); } lines.pop_front(); continue; } // // handle next lines, these should be continuation lines // // // if continuation starts with '&', use current indentation // else use current indentation + flags.cont_indent // if (lines.front().firstchar() == '&') // continuation line starting with '&' { int l; if(to_mycout) { if (fi->flags.indent_ampersand && prev_expect_continuation) l = M(std::max(cur_indent + fi->flags.cont_indent, 0)); else l = M(std::max(cur_indent, 0)); std::string lineout = insert_omp(blanks(l),ompstr) + lines.front().trim(); if (do_remred) lineout = remred(lineout, l+ompstr.size(), remredstate); mycout << lineout << endline; } else { os << insert_omp(blanks(5),cmpstr) << conchar << rm_last_amp(lines.front().trim().substr(1)); fixedlines->push_back(F(os.str())); os.str(""); } lines.pop_front(); continue; } // // continutation not starting with '&' // D(O("align_indent");O(align_indent);); if (align_indent >= 0) { int l; l = M(std::max(align_indent,0)); std::string lineout = insert_omp(blanks(l),ompstr) + lines.front().trim(); if (do_remred) lineout = remred(lineout, l+ompstr.size(), remredstate); mycout << lineout << endline; align_indent = get_paren_align(ltrim(lineout),align_state); D(O("align_indent");O(align_indent);O(lineout);); lines.pop_front(); continue; } else if (fi->flags.indent_continuation) // indentation of continuation lines is requested { int l; if (prev_expect_continuation) l = M(std::max(cur_indent+fi->flags.cont_indent,0)); else l = M(std::max(cur_indent,0)); if(to_mycout) { std::string lineout = insert_omp(blanks(l),ompstr) + lines.front().trim(); if (do_remred) lineout = remred(lineout, l+ompstr.size(), remredstate); mycout << lineout << endline;; if (do_align_paren) align_indent = get_paren_align(lineout,align_state); D(O("indentation of & ");O(align_indent);O(lineout);); } else { os << insert_omp(blanks(5),cmpstr) << conchar << rm_last_amp(lines.front().rtrim()); fixedlines->push_back(F(os.str())); os.str(""); } lines.pop_front(); continue; } // // this line is a continuation line, without preceding '&' // and it has been requested that no indentation is done for // continuation lines // if(to_mycout) { std::string lineout = insert_omp(lines.front().rtrim(),ompstr); D(O("no & ");O(lineout);); //mycout << insert_omp(lines.front().rtrim(),ompstr) << endline; if (do_remred) { int l = num_leading_spaces(lineout); lineout = remred(lineout, l+ompstr.size(), remredstate); } mycout << lineout << endline; } else { os << insert_omp(blanks(5),cmpstr) << conchar << rm_last_amp(lines.front().rtrim()); fixedlines->push_back(F(os.str())); os.str(""); } lines.pop_front(); } } // end of output void Free::output_converted(lines_t &lines,bool ch) { D(O("free::output_converted ");); lines_t fixedlines; output(lines, ch, &fixedlines); Globals oldgl = *gl; gl->global_format = FIXED; gl->global_line_length = 0; Fixed f(fi); lines_t::iterator it = fixedlines.begin(); // // clean all fixedlines: // while(it != fixedlines.end()) { it->clean(1); it++; } f.cur_indent = cur_indent; f.labellength = labellength; f.output(fixedlines, ch); (*gl) = oldgl; } // end of output_converted std::string Free::rm_last_amp(const std::string &s) { // // removes trailing &, also as in // x = 10 & ! comment // also removes trailing space in result // std::string slt = rtrim(remove_trailing_comment(s)); std::string so = rtrim(slt); if (*so.rbegin() == '&') return rtrim(so.erase(so.length() -1)+s.substr(slt.length())); else return rtrim(s); } // end of rm_last_amp #ifdef PUSH #undef PUSH #endif #ifdef POP #undef POP #endif #define PUSH(i) \ do { \ indent = previndent + i; \ stack.push_back(indent); \ } while(0) #define POP \ do { \ if (stack.size() > 0) \ { \ stack.pop_back(); \ if (stack.size() > 0) \ indent = stack.back(); \ else \ indent = startindent; \ } \ } while(0) /* to be used in a continuation, and you want things aligned as * call sub(x, & * abc, & * [ 1, & * 42, & * 5], & * z) * * Usage: * Call the function with the first line ('call sub(x, &'), with * second parameter zero, example * int state = 0; * int indent = get_paren_align(line,state); * The return value is equal to the number of spaces one should prepend * to the next line, in our example that would be 9. * If the return value == -1, there is no unmatched open parenthesis, * it is up to you to act accordingly. * Keep calling this function, until the end of the continuation lines, * taking care to not alter the second parameter: this is managed by * the function for internal affairs. * The function is comment-aware. */ static int get_paren_align(const std::string& line, int& state) { enum states{start = 0, start1, inquote, lparen, lparen1}; static std::deque stack; static char quote; static int nextstate; static int indent; static int previndent; static int startindent; static int prevc; // used to detect e.g. WRITE(10'5) X if (state == 0) { stack.clear(); quote = 0; state = start1; nextstate = start1; previndent= 0; indent = 0; prevc = -1; for (int i=0; i<(int)line.size(); ++i) if(line[i] != ' ') { startindent = i; break; } } for (int i=0; i<(int)line.size(); ++i) { int c = line[i]; switch (state) { case start1: switch(c) { case '"': case '\'': if (c == '"' || !myisalnum(prevc)) { quote = c; nextstate = state; state = inquote; } break; case '(': case '[': PUSH(i); state = lparen; break; case '!': goto end_of_line; break; } if (!isblank(c)) prevc = c; break; case inquote: switch(c) { case '"': case '\'': if (quote == c) { prevc = c; state = nextstate; } break; } break; case lparen: switch(c) { case '"': case '\'': if (c == '"' || !myisalnum(prevc)) { POP; PUSH(i); quote = c; nextstate = lparen1; state = inquote; } break; case '(': case '[': PUSH(i); state = lparen; break; case ')': case ']': POP; if(stack.size() == 0) state = start1; else state = lparen; break; case '!': prevc = c; goto end_of_line; break; default: if (c != '/' && ! isspace(c)) { POP; PUSH(i); state = lparen1; } break; } if (!isblank(c)) prevc = c; break; case lparen1: switch(c) { case '"': case '\'': if (c == '"' || !myisalnum(prevc)) { quote = c; nextstate = lparen1; state = inquote; } break; case '(': case '[': PUSH(i); state = lparen; break; case ')': case ']': POP; if(stack.size() == 0) state = start1; else state = lparen1; break; case '!': prevc = c; goto end_of_line; break; } if (!isblank(c)) prevc = c; break; } } end_of_line: previndent = indent; if (stack.size() == 0) return -1; else return indent; } #undef PUSH #undef POP findent-4.3.2/src/free.h0000644000000000000000000000470414566134066011776 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef FREE_H #define FREE_H #include "fortran.h" #include "debug.h" class Free : public Fortran { public: Free(Findent *f) : Fortran(f) { } void build_statement(Fortranline &line, bool &f_more, bool &pushback); void output(lines_t &lines, bool contains_hollerith, lines_t *freelines = 0); void output_converted(lines_t &lines, bool ch); private: std::string rm_last_amp(const std::string &s); std::string insert_omp(const std::string &s, const std::string &somp) { if(is_omp) { std::string sl = s; int l = somp.length() - (sl+"x").find_first_not_of(' '); sl = blanks(l) + sl; return sl.replace(0,somp.length(),somp); } else return s; } bool is_omp; std::string ompstr; std::string cmpstr; }; #endif findent-4.3.2/src/functions.cpp0000644000000000000000000001775614566134066013433 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include "functions.h" std::string stoupper(const std::string &s) { std::string sl = s; int l = sl.size(); for (int i=0; i='0' && c <='9')) continue; return 0; } return 1; } bool isalnumplus(const char c) // // returns true if c is alfanum or in " \t_" // { if (std::isalnum(c)) return 1; else switch (c) { case ' ': case '\t': case '_': return 1; } return 0; } bool isfixedcmtp(const std::string &s) { // // returns 1 if this is a fixed empty line or fixed comment line or preprocessor line // or debug line ('d' or 'D' in column 1) // if (s == "" || trim(s) == "") return 1; char c = firstchar(s); char cts = firstchar(trim(s)); return (cts == 0 || c == 'C' || c == 'c' || cts == '!' || c == '*' \ || cts == '#' || c == 'd' || c == 'D' || trim(s).substr(0,2) == "??"); } int num_leading_spaces(const std::string &s) { size_t p = s.find_first_not_of(' '); if (p == std::string::npos) return s.size(); return p; } std::string leading_blanks(const std::string &s) { std::string r; size_t p = 0; while(p < s.size() && (s[p] == ' ' || s[p] == '\t')) r += s[p++]; return r; } char fixedmissingquote(const std::string &s) { // // investigate if this line terminates a string // returns ' ' if there is no unterminated string // returns '"' if this is an unterminated string, a '"' is missing // returns '\'' if this is an unterminated string, a '\'' is missing // bool instring = 0; char q = ' '; for(unsigned int i=0; i1 // is a continuation statement, if the continuation character is 1-9 // If the character is not within 1-9, it is assumed that // this character is the first of a statement, so in this case // this is counted as 6 spaces // const std::string d1_9 = "123456789"; const std::string db0_9 = " 0123456789"; size_t p = s.substr(0,6).find_first_of('\t'); if (p == std::string::npos) return rtrim(s); // no tab in first 6 columns if (s.find_first_not_of(db0_9) == p) // all space or numeric before tab? { if (s.length() == p+1) // ' 100 T' ->' 100', ' T'-> '' return rtrim(s.substr(0,p)); if (d1_9.find(s[p+1]) == std::string::npos) // ' 10 Tx' -> ' 10 x' return rtrim(s.substr(0,p)+blanks(6-p)+s.substr(p+1)); return rtrim(s.substr(0,p)+blanks(5-p)+s.substr(p+1));// ' 10 T1x' -> ' 10 1x' } else return rtrim(s); } std::string remove_trailing_comment(const std::string &s,const char prevquote) { // // removes trailing comment, but only if not part of an // unterminated string. // e.g: // 'print *, " Hi! and goodbye' // becomes: // 'print *, " Hi! and goodbye' // but // 'print *, " Hi! and goodbye" ! say goodbye' // becomes // 'print *, " Hi! and goodbye" ' // std::string so = s; bool instring = prevquote != ' '; char q = prevquote; for (unsigned int i=0; i "36" 5 // "36p" -> "36" 2 // void getstr_sp(const std::string &s, std::string &l, unsigned int &n) { l = ""; n = 0; bool r = false; bool firstzero = false; for (size_t i = 0; i #include #include #include "simpleostream.h" inline std::string blanks(const int x) { if (x > 0) return std::string((size_t) x ,' '); else return ""; } inline std::string ltrim(const std::string &str) { const std::string whitespace = " \t"; size_t strBegin = str.find_first_not_of(whitespace); if (strBegin == std::string::npos) return ""; // no content return str.substr(strBegin); } inline std::string rtrim(const std::string &str) { const std::string whitespace = " \t"; size_t strEnd = str.find_last_not_of(whitespace); if (strEnd == std::string::npos) return ""; // no content return str.substr(0,strEnd+1); } inline std::string trim(const std::string &str) { const std::string whitespace = " \t"; size_t strBegin = str.find_first_not_of(whitespace); if (strBegin == std::string::npos) return ""; // no content size_t strEnd = str.find_last_not_of(whitespace); size_t strRange = strEnd - strBegin + 1; return str.substr(strBegin, strRange); } inline char firstchar(const std::string &s) { if (s.length() == 0) return 0; return s[0]; } inline char lastchar(const std::string &s) { size_t l = s.length(); if (l == 0) return 0; return s[l-1]; } inline bool myisalnum(char c) { return(isalnum(c) || c == '_'); } extern Simpleostream mycout; template std::string number2string ( T number ) { std::ostringstream ss; ss << number; return ss.str(); } template T string2number ( const std::string &text ) { std::istringstream ss(text); T result = 0; // = 0: to make cppcheck happy return ss >> result ? result : 0; } bool cleanfive(const std::string &s); char firstchar(const std::string &s); char fixedmissingquote(const std::string &s); bool isalnumplus(const char c); bool isfixedcmtp(const std::string &s); char lastchar(const std::string &s); std::string ltab2sp(const std::string& s); int num_leading_spaces(const std::string &s); std::string leading_blanks(const std::string &s); std::string remove_blanks(const std::string &s); std::string remove_trailing_comment(const std::string &s, const char prevquote = ' '); std::string stolower(const std::string &s); std::string stoupper(const std::string &s); void getint_sp(const std::string &s, unsigned long int &l, unsigned int &n); void getstr_sp(const std::string &s, std::string &l, unsigned int &n); #endif findent-4.3.2/src/globals.cpp0000644000000000000000000000321514566134066013027 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "globals.h" findent-4.3.2/src/globals.h0000644000000000000000000000346114566134066012477 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef GLOBALS_H #define GLOBALS_H class Globals { public: int global_format; bool global_gnu_format; int global_line_length; bool global_omp; }; #endif findent-4.3.2/src/lexer.h0000644000000000000000000000434014566134066012170 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef LEXER_H #define LEXER_H #include "line_prep.h" void yyerror(const char *c); extern "C" int yylex(void); void lexer_enable(const int k); void lexer_set(Line_prep p, const int state); void lexer_set(const std::string &s, const int state); std::string lexer_getname(void); std::string lexer_getstlabel(void); std::string lexer_geti_number(void); int lexer_get_pos(void); int lexer_get_len(void); std::string lexer_getinclude(void); std::string lexer_getrest(void); std::string lexer_getstring(void); std::string lexer_getlr(void); int lexer_getlrpos(void); void extract_include(void); #endif findent-4.3.2/src/lexer.l0000644000000000000000000007070714566134066012206 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ %{ #include #include #include #include "debug.h" #include "lexer.h" #include "line_prep.h" #include "parser.hpp" #define YY_DECL extern "C" int yylex() #define YY_USER_ACTION line_pos += yyleng; std::deque start_stack; std::string lexer_name, lexer_stlabel, lexeri_number, lexer_rest, lexer_string, lexer_lr; int lexer_lrpos; std::string lexer_include; std::string input_string; int lrlevel; bool lrreturn; Line_prep pline; int line_pos; %} /* double [ gives problems in lexer comments */ %s state_identifier state_keyword state_esope state_cidentifier %x state_lr state_lrb state_skip state_skipall state_skipnoop state_error %x state_findformat state_scanfixpre state_scanompfixed state_scanompfree %x state_incfilename state_char state_labels state_iolist %x state_startiolist state_calllist state_startcalllist state_skipnos b [ \t] // following are keywords starting with c ckey call|close|common|continue|case|contains|cycle|class|codimension|contiguous|critical|complex|changeteam %% . { D(O("ERROR");Y;); return ERROR; } { "(" { D(O("lrplus");O(lrlevel);Y;); lrlevel++; if (lrlevel > 1) lexer_lr += yytext; } ")" { D(O("lrmin");O(lrlevel);Y;); lrlevel--; if(lrlevel == 0) { D(O("state:");O(start_stack.back());O(lrreturn);); BEGIN(start_stack.back()); start_stack.pop_back(); if(lrreturn) { D(O("LR");Y); return LR; } } else { lexer_lr += yytext; } } . { D(O("lrbla");O(lrlevel);Y;); lexer_lr += yytext; } \n { D(O("lreol");O(lrlevel);Y;); yyless(0); BEGIN(start_stack.back()); } } { "[" { D(O("lrb+");O(lrlevel);Y;); lrlevel++; } "]" { D(O("lrb-");O(lrlevel);Y;); lrlevel--; if(lrlevel == 0) { D(O("state:");O(start_stack.back());O(lrreturn);); BEGIN(start_stack.back()); start_stack.pop_back(); if(lrreturn) { return LRB; } } } . { D(O("lrbbla");O(lrlevel);Y;); } \n { D(O("lrbeol");O(lrlevel);Y;) yyless(0); BEGIN(start_stack.back()); } } { "(" { D(O("skipLPAREN");Y;); start_stack.push_back(YY_START); lrlevel = 1; lrreturn = 0; lexer_lr = ""; lexer_lrpos = line_pos; BEGIN(state_lr); } "[" { D(O("skipLPAREN");Y;); start_stack.push_back(YY_START); lrlevel = 1; lrreturn = 0; BEGIN(state_lrb); } } "=" { D(O("NOSKIP");Y;); return yytext[yyleng-1]; } [,|~!#$] { D(O("NOSKIPNOOP");Y;); return yytext[yyleng-1]; } ":" { D(O("NOSKIPNOS");Y;); return yytext[yyleng-1]; } { \n { D(O("endSKIP");Y;); switch(YY_START) { case state_skip: return SKIP; case state_skipall: return SKIPALL; case state_skipnoop: return SKIPNOOP; case state_skipnos: return SKIPNOS; } } . { D(O("SKIP");Y;); } } { [[:alpha:]][[:alnum:]_$]* { D(O("IDENTIFIER");Y;); lexer_name = yytext; return IDENTIFIER; } [[:alpha:]][[:alnum:]_$%]* { D(O("TIDENTIFIER");Y;); lexer_name = yytext; return TIDENTIFIER; } } { [[:alpha:]][[:alnum:]_$]*,{0,1} { D(O("IDENTIFIER");Y;); lexer_name = yytext; return IDENTIFIER; } [[:alpha:]][[:alnum:]_$%]*,{0,1} { D(O("TIDENTIFIER");Y;); lexer_name = yytext; return TIDENTIFIER; } } { /* to be used in '#include ' */ [^>]+ { D(O("INCFILENAME");Y;); lexer_string = yytext; BEGIN state_char; return INCFILENAME; } } { \n { D(O("EOL");); return EOL; } . { D(O("BLA");Y;); return yytext[0]; } } { abstractinterface { D(O("ABSTRACTINTERFACE");Y;); return ABSTRACTINTERFACE; } associate { D(O("ASSOCIATE");Y;); return ASSOCIATE; } block { D(O("BLOCK");Y;); return BLOCK; } blockdata { D(O("BLOCKDATA");Y;); return BLOCKDATA; } case { D(O("CASE");Y); return CASE; } casedefault { D(O("CASEDEFAULT");Y); return CASEDEFAULT; } character { D(O("CHARACTER");Y;); return BASICTYPE; } changeteam { D(O("CHANGETEAM");Y); return CHANGETEAM; } class { D(O("CLASS");Y;); return CLASS; } classdefault { D(O("CLASSDEFAULT");Y); return CLASSDEFAULT; } /* see comment at TYPEIS */ classis/\( { D(O("CLASSIS");Y); return CLASSIS; } complex { D(O("COMPLEX");Y;); return BASICTYPE; } contains { D(O("CONTAINS");Y); return CONTAINS; } critical { D(O("CRITICAL");Y;); return CRITICAL; } do { D(O("DO");Y;); return DO; } do, { D(O("DO,");Y;); return DOCOMMA; } doconcurrent { D(O("DOCONCURRENT");Y;); return DOCONCURRENT; } do,concurrent { D(O("DO,CONCURRENT");Y;); return DOCONCURRENT; } dowhile { D(O("DOWHILE");Y;); return DOWHILE; } do,while { D(O("DO,WHILE");Y;); return DOWHILE; } doublecomplex { D(O("DOUBLECOMPLEX");Y;); return BASICTYPE; } doubleprecision { D(O("DOUBLEPRECISION");Y;); return BASICTYPE; } elemental { D(O("ELEMENTAL");Y;); return ELEMENTAL; } else { D(O("ELSE");Y); return ELSE; } elseif { D(O("ELSEIF");Y); return ELSEIF; } elsewhere { D(O("ELSEWHERE");Y); return ELSEWHERE; } end { D(O("END");Y;); return END; } endassociate { D(O("ENDASSOCIATE");Y;); return ENDASSOCIATE; } endblock { D(O("ENDBLOCK");Y;); return ENDBLOCK; } endblockdata { D(O("ENDBLOCKDATA");Y;); return ENDBLOCKDATA; } endcritical { D(O("ENDCRITICAL");Y;); return ENDCRITICAL; } enddo { D(O("ENDDO");Y;); return ENDDO; } endenum { D(O("ENDENUM");Y;); return ENDENUM; } endforall { D(O("ENDFORALL");Y;); return ENDFORALL; } endfunction { D(O("ENDFUNCTION");Y;); return ENDFUNCTION; } endif { D(O("ENDIF");Y); return ENDIF; } endinterface { D(O("ENDINTERFACE");Y;); return ENDINTERFACE; } endmodule { D(O("ENDMODULE");Y;); return ENDMODULE; } endprocedure { D(O("ENDPROCEDURE");Y;); return ENDPROCEDURE; } endprogram { D(O("ENDPROGRAM");Y;); return ENDPROGRAM; } endselect { D(O("ENDSELECT");Y); return ENDSELECT; } endsubroutine { D(O("ENDSUBROUTINE");Y;); return ENDSUBROUTINE; } endsubmodule { D(O("ENDSUBMODULE");Y;); return ENDSUBMODULE; } endteam { D(O("ENDTEAM");Y); return ENDTEAM; } endtype { D(O("ENDTYPE");Y;); return ENDTYPE; } endwhere { D(O("ENDWHERE");Y;); return ENDWHERE; } entry { D(O("ENTRY");Y); return ENTRY; } enum { D(O("ENUM");Y;); return ENUM; } forall { D(O("FORALL");Y;); return FORALL; } function { D(O("FUNCTION");Y;); return FUNCTION; } if { D(O("IF");Y;); return IF; } impure { D(O("IMPURE");Y;); return IMPURE; } include { D(O("INCLUDE");Y;); return INCLUDE; } integer { D(O("INTEGER");Y;); return BASICTYPE; } interface { D(O("INTERFACE");Y;); return INTERFACE; } interface/[[:alpha:]_$] { D(O("INTERFACE1");Y;); return INTERFACE1; } logical { D(O("LOGICAL");Y;); return BASICTYPE; } module { D(O("MODULE");Y); return MODULE; } moduleprocedure { D(O("MODULEPROCEDURE");Y); return MODULEPROCEDURE; } modulesubroutine { D(O("MODULESUBROUTINE");Y); return MODULESUBROUTINE; } modulefunction { D(O("MODULEFUNCTION");Y); return MODULEFUNCTION; } procedure { D(O("PROCEDURE");Y); return PROCEDURE; } program { D(O("PROGRAM");Y;); return PROGRAM; } pure { D(O("PURE");Y;); return PURE; } rank { D(O("RANK");Y); return RANK; } rankdefault { D(O("RANKDEFAULT");Y); return RANKDEFAULT; } real { D(O("REAL");Y;); return BASICTYPE; } recursive { D(O("RECURSIVE");Y;); return RECURSIVE; } non_recursive { D(O("NON_RECURSIVE");Y;); return NON_RECURSIVE; } selectcase { D(O("SELECTCASE");Y); return SELECTCASE; } selectrank { D(O("SELECTRANK");Y); return SELECTRANK; } selecttype { D(O("SELECTTYPE");Y); return SELECTTYPE; } simple { D(O("SIMPLE");Y;); return SIMPLE; } submodule { D(O("SUBMODULE");Y;); return SUBMODULE; } subroutine { D(O("SUBROUTINE");Y;); return SUBROUTINE; } then { D(O("THEN");Y;); return THEN; } type { D(O("TYPE");Y;); return TYPE; } type/\( { D(O("TYPEC");Y;); return TYPEC; } /* To disambiguate between 'TYPE ISMYTYPE' and TYPE IS(MYTYPE), the lexer */ /* recognizes 'TYPEIS(' and returns "TYPEIS" */ /* Note that the '(' stays in the input buffer */ typeis/\( { D(O("TYPEIS");Y); return TYPEIS; } use { D(O("USE");Y); return USE; } where { D(O("WHERE");Y;); return WHERE; } /* following are only used while relabeling */ assign { D(O("ASSIGN");Y;); return ASSIGN; } call { D(O("CALL");Y;); return CALL; } goto { D(O("GOTO");Y;); return GOTO; } print { D(O("PRINT");Y;); return PRINT; } read { D(O("READ");Y;); return READ; } reread { D(O("REREAD");Y;); return READ; } /* DEC fortran */ to { D(O("TO");Y;); return TO; } write { D(O("WRITE");Y;); return WRITE; } backspace/\( { D(O("IO");Y;); return IO; } close/\( { D(O("IO");Y;); return IO; } endfile/\( { D(O("IO");Y;); return IO; } flush/\( { D(O("IO");Y;); return IO; } inquire/\( { D(O("IO");Y;); return IO; } open/\( { D(O("IO");Y;); return IO; } read/\( { D(O("IO");Y;); return IO; } reread/\( { D(O("IO");Y;); return IO; } /* DEC fortran */ rewind/\( { D(O("IO");Y;); return IO; } wait/\( { D(O("IO");Y;); return IO; } write/\( { D(O("IO");Y;); return IO; } decode/\( { D(O("IO");Y;); return IO; } /* DEC fortran */ encode/\( { D(O("IO");Y;); return IO; } /* DEC fortran */ delete/\( { D(O("IO");Y;); return IO; } /* INTEL fortran */ find/\( { D(O("IO");Y;); return IO; } /* INTEL fortran */ rewrite/\( { D(O("IO");Y;); return IO; } /* INTEL fortran */ /* ACCEPT and TYPE, followed by a label are dec-extensions, and are disguised as READ and PRINT respectively */ accept/[0-9] { D(O("ACCEPT");Y;); return READ; } /* DEC fortran */ type/[0-9] { D(O("TYPE0-9");Y); return PRINT; } /* DEC fortran */ } { segment { D(O("SEGMENT");Y;); return SEGMENT; } segment, { D(O("SEGMENT,");Y;); return SEGMENT; } endsegment { D(O("ENDSEGMENT");Y;); return ENDSEGMENT; } } { ^\?\?.*\n { D(O("UNSURE");Y;); return UNSURE; } ^[^dDcC#!* 0-9].*\n { D(O("FREE");Y;); return FREE; } ^[ 0-9]{1,4}[[:alpha:]_%].*\n { D(O("FREE");Y;); return FREE; } ^[^!]*!.*\n { D(O("UNSURE");Y;); return UNSURE; } ^[ ]{5}&[^&]*\n { D(O("UNSURE");Y;); return UNSURE; } ^.{0,4}&{b}*\n { D(O("FREE");Y;); return FREE; } ^.{6,}&{b}*\n { D(O("FREE");Y;); return FREE; } ^[^&]*&{b}*\n { D(O("FREE");Y;); return FREE; } ^[ ]{0,4}&.*\n { D(O("FREE");Y;); return FREE; } ^[ ]{6,}&.*\n { D(O("FREE");Y;); return FREE; } ^{ckey}.*\n { D(O("FREE");Y;); return FREE; } ^c{b}+[[:alnum:]].*\n { D(O("FIXED");Y;); return FIXED; } ^[ 0123456789]{6}.*\n { D(O("UNSURE");Y;); return UNSURE; } .*\n { D(O("UNSURE");Y;); return UNSURE; } } { ^[c!\*]\$[ 0-9]{3}[ 0]{0,1} | /* a first line */ ^[c!\*]\$[ ]{3}[^ ^0] | /* a continuation line */ ^[c!\*]\${b}* { D(O("FIXOMP");Y;); return OMP; } \n { D(O("EOL");); return EOL; } . { D(O("BLA");Y;); return yytext[0]; } } { ^{b}*!\$$ | ^{b}*!\${b} { D(O("OMP");Y;); return OMP; } \n { D(O("EOL");); return EOL; } . { D(O("BLA");Y;); return yytext[0]; } } { [0-9][0-9]* { D(O("LABEL");Y;); lexeri_number = yytext; return LABEL; } \n { D(O("EOL");); return EOL; } . { D(O("BLA");Y;); return yytext[0]; } } { [0-9][0-9]* { D(O("LABEL");Y;); lexeri_number = yytext; return LABEL; } err=/[0-9] { D(O("LABELIS");Y); return LABELIS; } fmt=/[0-9] { D(O("LABELIS");Y); return LABELIS; } end=/[0-9] { D(O("LABELIS");Y); return LABELIS; } eor=/[0-9] { D(O("LABELIS");Y); return LABELIS; } [ ][0-9]*[ ] { D(O("OTHER");Y); return OTHER; } /* e.g: '(a80)' generated by Line_prep() */ [0-9a-z_]{1,}[#'][^,]* { D(O("OTHER");Y); return OTHER; } /* e.g: read(5#n,x) dec extension */ \n { D(O("EOL");); return EOL; } , { D(O("COMMA");Y;); return yytext[0]; } . { D(O("OTHER");Y;); return OTHER; } } { . { D(O("STARTIO");Y;); BEGIN(state_iolist); line_pos-=strlen(yytext); yyless(0); return STARTIO; } } { ,[*&$][0-9]{1,}/[,\n] { D(O("LABEL_CALLLIST");Y;); /* DEC allows & and $ next to * */ lexeri_number = yytext+2; return LABEL; } \n { D(O("EOL_CALLLIST");); return EOL; } . { D(O("OTHER_CALLLIST");Y;); return OTHER; } } { . { D(O("STARTCALL");Y;); BEGIN(state_calllist); line_pos-=strlen(yytext); yyless(0); return STARTCALL; } } { {b}*\!{b}*findentfix:p-on { D(O("FINDENTFIX p-on");Y;); return P_ON; } ^[c\*]{b}*findentfix:p-on { D(O("FIXFINDENTFIX p-on");Y;); return P_ON; } {b}*\!{b}*findentfix:p-off { D(O("FINDENTFIX p-off");Y;); return P_OFF; } ^[c\*]{b}*findentfix:p-off { D(O("FIXFINDENTFIX p-off");Y;); return P_OFF; } {b}*\!{b}*findentfix: { D(O("FINDENTFIX");Y;); size_t l = input_string.length()-yyleng-1; lexer_rest = input_string.substr(yyleng,l); return FINDENTFIX; } ^[c\*]{b}*findentfix: { D(O("FIXFINDENTFIX");Y;); size_t l = input_string.length()-yyleng-1; lexer_rest = input_string.substr(yyleng,l); return FIXFINDENTFIX; } ^{b}*# { D(O("CPP");Y;); return CPP; } ^{b}*#{b}*if { D(O("CPP_IF");Y;); return CPP_IF; } ^{b}*#{b}*endif { D(O("CPP_ENDIF");Y;); return CPP_ENDIF; } ^{b}*#{b}*else { D(O("CPP_ELSE");Y;); return CPP_ELSE; } ^{b}*#{b}*elif { D(O("CPP_ELIF");Y;); return CPP_ELIF; } ^{b}*#{b}*include{b}*/\"[^\n]*\"{b}*\n { D(O("INCLUDE_CPP");Y;); extract_include(); return INCLUDE_CPP; } ^{b}*#{b}*include{b}*/<[^\n]*>{b}*\n { D(O("INCLUDE_CPP_STD");Y;); extract_include(); return INCLUDE_CPP_STD; } ^{b}*\?\? { D(O("COCO");Y;); return COCO; } ^{b}*\?\?{b}*i{b}*f { D(O("COCO_IF");Y;); return COCO_IF; } ^{b}*\?\?{b}*e{b}*n{b}*d{b}*i{b}*f { D(O("COCO_ENDIF");Y;); return COCO_ENDIF; } ^{b}*\?\?{b}*e{b}*l{b}*s{b}*e { D(O("COCO_ELSE");Y;); return COCO_ELSE; } ^{b}*\?\?{b}*e{b}*l{b}*s{b}*e{b}*i{b}*f { D(O("COCO_ELIF");Y;); return COCO_ELIF; } ^{b}*\?\?{b}*i{b}*n{b}*c{b}*l{b}*u{b}*d{b}*e{b}*/\'[^\n]+\'{b}*\n { D(O("INCLUDE_COCO");Y;); /* coco statements must start with '??' in column 1. However, for this code that is somewhat inconvenient, so we allow white space before '??' */ extract_include(); return INCLUDE_COCO; } ^{b}*\?\?{b}*i{b}*n{b}*c{b}*l{b}*u{b}*d{b}*e{b}*/\"[^\n]+\"{b}*\n { D(O("INCLUDE_COCO");Y;); /* coco statements must start with '??' in column 1. However, for this code that is somewhat inconvenient, so we allow white space before '??' */ extract_include(); return INCLUDE_COCO; } \n { D(O("EOL");); return EOL; } . { D(O("BLA");Y;); return yytext[0]; } } " "[0-9]*" " { int type = pline.get_type(std::string(yytext)); D(O("found_special");O(type);O(pline.get_type_as_string(std::string(yytext)));Y;); D(O("encoded line");O(pline.get_line_encoded());); if (type == pline.is_string) { lexer_string = pline.get_value(std::string(yytext)); D(O("QSTRING");O(lexer_string);Y;); return QSTRING; } if (type == pline.is_stlabel) { lexer_stlabel = pline.get_value(std::string(yytext)); D(O("STLABEL");O(lexer_stlabel);Y;); return STLABEL; } if (type == pline.is_dotop) { D(O("DOTOPERATOR");); return DOTOPERATOR; } D(O("This should not happen");); } [[:alpha:]][[:alnum:]_]*:/[^:] { D(O("NAMED_LABEL");Y;); lexer_name = yytext; lexer_name.erase(lexer_name.size()-1); return NAMED_LABEL; } [0-9][0-9]* { D(O("I_NUMBER");Y;); lexer_name = yytext; lexeri_number = yytext; return I_NUMBER; } "(" { D(O("LPAREN");Y;); start_stack.push_back(YY_START); lrlevel = 1; lrreturn = 1; lexer_lr = ""; lexer_lrpos = line_pos; BEGIN(state_lr); } "[" { D(O("LPARENB");Y;); start_stack.push_back(YY_START); lrlevel = 1; lrreturn = 1; BEGIN(state_lrb); } ^\n { D(O("BLANK");); return BLANK; } \n { D(O("EOL");); return EOL; } . { D(O("BLA");Y;); return yytext[0]; } %% void lexer_set(Line_prep p, const int state) { input_string = p.get_line_encoded()+'\n'; D(O("lexer_set");O(input_string);O(p.get_type_as_string(0));); pline = p; yy_delete_buffer(YY_CURRENT_BUFFER); BEGIN(INITIAL); yy_scan_string(input_string.c_str()); lexer_enable(state); line_pos = 0; } void lexer_set(const std::string &s, const int state) { input_string = s+'\n'; D(O("lexer_set");O(input_string);); yy_delete_buffer(YY_CURRENT_BUFFER); yy_scan_string(input_string.c_str()); lexer_enable(state); line_pos = 0; } void lexer_enable(const int k) { switch(k) { case CALLLIST: BEGIN(state_startcalllist); break; /* prepare for parsing parameters of call to find *100 */ case CHAR: BEGIN(state_char); break; /* internal use */ case CIDENTIFIER: BEGIN(state_cidentifier); break; /* parse identifier possibly followed by , */ case IDENTIFIER: BEGIN(state_identifier); break; /* parse identifier */ case INCFILENAME: BEGIN(state_incfilename); break; /* parse include file name */ case LABELS: BEGIN(state_labels); break; /* parse label */ case SKIPALL: BEGIN(state_skipall); break; /* skip everything */ case SKIP: BEGIN(state_skip); break; /* skip everything except = */ case SKIPNOOP: BEGIN(state_skipnoop); break; /* skip everything except [,|~!#$] */ case KEYWORD: BEGIN(state_keyword); break; /* parse keywords */ case ESOPE: BEGIN(state_esope); break; /* allow esope keywords */ case FINDFORMAT: BEGIN(state_findformat); break; /* used to determine fixed or free */ case IOLIST: BEGIN(state_startiolist); break; /* prepare for parsing parameters of read() etc */ case SCANFIXPRE: BEGIN(state_scanfixpre); break; /* parse preprocessor and findentfix */ case SCANOMPFIXED: BEGIN(state_scanompfixed); break; /* parse omp, fixed format */ case SCANOMPFREE: BEGIN(state_scanompfree); break; /* parse omp, free format */ case SKIPNOS: BEGIN(state_skipnos); break; /* skip everything except : */ default: D(O("invalid parameter in lexer_enable");O(k);); BEGIN(state_error); break; } D(O("enabled");O(k);O(YY_START);); } std::string lexer_getname() { return lexer_name; } std::string lexer_getstlabel() { return lexer_stlabel; } std::string lexer_geti_number() { return lexeri_number; } int lexer_get_pos() { return line_pos; } int lexer_get_len() { return yyleng; } std::string lexer_getrest() { return lexer_rest; } std::string lexer_getstring() { D(O("lexer_string");O(lexer_string);); return lexer_string; } std::string lexer_getlr() { D(O("lexer_lr");O(lexer_lr);); return lexer_lr; } int lexer_getlrpos() { D(O("lexer_lrpos");O(lexer_lrpos);); return lexer_lrpos; } std::string lexer_getinclude() { D(O("lexer_getinclude");O(lexer_include);); return lexer_include; } void extract_include() { // removes first and last character of rest of input line // example: // #include "file.inc" // after scanning of '#include ', the string "file.inc", // without quotes is put in lexer_include size_t l = input_string.length()-yyleng-1; lexer_include = input_string.substr(yyleng,l); if (lexer_include.size() > 1) { lexer_include.erase(lexer_include.end()-1); lexer_include.erase(lexer_include.begin()); } D(O("lexer_include");O(lexer_include);); } #if 0 // maybe we need this in the future: // not sure if this works OK std::deque input_string_stack; void lexer_push(std::string s, const int state) { // https://sourceforge.net/p/flex/mailman/message/30542280/ input_string_stack.push_back(s); input_string = s+'\n'; yypush_buffer_state(YY_CURRENT_BUFFER); yy_scan_string(input_string.c_str()); lexer_enable(state); } void lexer_pop() { yypop_buffer_state(); input_string=input_string_stack.back(); input_string_stack.pop_back(); } #endif void quiet_compiler() // to prevent warning about unused unput { (void)yyunput; } findent-4.3.2/src/line_prep.cpp0000644000000000000000000003475114566134066013372 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include #include #include "line_prep.h" #include "debug.h" #include "findent_types.h" #define DECIMAL_DIGITS \ '0': case '1': case '2': case '3': case '4': \ case '5': case '6': case '7': case '8': case '9' #define HANDLE_END_STLABEL \ { \ sv += place_holder; \ vstruct.type = is_stlabel; \ vstruct.value = v; \ wv.push_back(vstruct); \ if(p) pv.push_back((*p)[start_index]); \ } void Line_prep::set_line(const std::string &s, const intpairs_t *p) { enum states { maybe_stlabel=1, in_stlabel, in_code, in_qstring, pre_hollerith, in_hollerith, in_dotop}; struct whats vstruct,nonestruct; contains_hollerith = false; nonestruct.type = is_none; nonestruct.value = ""; nonestruct.stringtype = ' '; set_place_holder(' '); // // parsing stops at end of string s or at ';' or at '\n' // sl will contain s, space removed, except in strings and holleriths and label // sv will contain s, space removed, strings and hollertihs replaced // by place_holder, which can be any character except probably \n or ; // wv will contain for each element of sv an element of type 'whats' // sc will contain sv, placeholders replaced by SPACEnnnSPACE where nnn is the index in // wv that describes the placeholder // rest will contain the not-parsed part of the line // // optional parameter p contains at input the positions of s in the original lines. // if p != 0, then: // pv will contain the positions, with respect to sv // pc will contain the positions, with respect to sc // prest will contain the positions with respect to rest // p etc is used while relabelling // // examples: (place_holder = ' ') // s: [123 format(5habcde ,i5 ,'foo' 'bar')] // sl: [123 format(5habcde,i5,'foo''bar')] // sv: [ format( ,i5, )] // sc: [ 0 format( 8 ,i5, 13 )] // [01234567890123456789012345678901234567890 // wv[0]: type = type_stlabel, value = "123" // wv[8]: type = type_string, value = "abcde", stringtype = 'h' // wv[13]: type = type_string, value = "foo'bar", stringtype = '\'' // The other elements of wv: type = type_none // // sl is available via method string get_line_spaces_removed() // sv is available via method string get_line_compressed() // sc is available via method string get_line_encoded() // rest is available via method string get_line_rest() // // Elements of wv[i] are available via // int get_type(int i) // string get_value(int i) // char get_stringtype(int i) // string get_type_as_string(int i) // // The types are defined as member constants: // // is_invalid // is_none // is_string // is_stlabel // is_dotop // line = s; sl = ""; sv = ""; if(p) pv.clear(); states state = maybe_stlabel; std::string v; char c, prevc, prevstringtype = ' ', quotechar = ' '; int prevtype; int nhol = 0; int index = -1; bool getnextc = 1; int start_index = -1; D(O("in Line_prep:");O(s);); while(1) { if (getnextc) index++; else getnextc = 1; if (index >= (int)line.size()) break; c = line[index]; if (c == '\n') break; // // also end, when encountering a ';' which is not part of a string: // if (c == ';' && state != in_qstring && state != in_hollerith) break; vstruct = nonestruct; switch(state) { case maybe_stlabel: D(O("maybe_stlabel:");O(c);); if(isblank(c)) break; switch(c) { case DECIMAL_DIGITS: sl += c; v = c; state = in_stlabel; start_index = index; break; default: getnextc = 0; state = in_code; break; } break; case in_stlabel: D(O("in_stlabel:");O(c);); if( c >= '0' && c <= '9') { sl += c; v += c; break; } if (isblank(c)) { // // a sneak preview, to see if the first non-blank // is a digit. In this case the label is not ended here // bool digitfound = 0; for (unsigned int j=index+1; j 0) { v = ""; state = in_hollerith; } else { // // after all, this was an hollerith with length 0, adapt sv and wv // sv += v + c; D(O(v);O(sv);); for (unsigned int i=0; i0) nhol --; if (nhol == 0) { sv += place_holder; if(p) pv.push_back((*p)[start_index]); vstruct.type = is_string; vstruct.value = v; vstruct.stringtype = 'h'; state = in_code; wv.push_back(vstruct); } break; case in_qstring: D(O("in_q:");O(c);); if(c == quotechar) { sl += c; sv += place_holder; vstruct.type = is_string; vstruct.value = v; vstruct.stringtype = c; state = in_code; wv.push_back(vstruct); break; } sl += c; v += c; break; case in_dotop: D(O("in_dotop:");O(c);); if(isblank(c)) { break; } // // a dot operator can be [a-zA-z][a-zA-Z0-9_]* // check if first char is [a-zA-Z] // if (v.size() == 0) { if(isalpha(c)) { v += c; sl += c; D(O("in_dotop:");O(c);O(v);); break; } else { // // this was no dotop // getnextc = 0; // re-examine this c sv += '.'; if(p) pv.push_back((*p)[start_index]); wv.push_back(nonestruct); D(O("leaving in_dotop:");O(c);O(v);); state = in_code; break; } } if (c == '.') // end of this dotop { sv += place_holder; if(p) pv.push_back((*p)[start_index]); sl += c; vstruct.type = is_dotop; vstruct.value = v; state = in_code; wv.push_back(vstruct); break; } if (isalnum(c) || c == '_') { v += c; sl += c; break; } // // this is no dotop, but we already collected some // characters for it. Correct this: // sv += '.' + v; if(p) for(size_t i = start_index; (int)i < index; i++) if (s.at(i) != ' ' && s.at(i) != '\t') pv.push_back((*p)[i]); for (unsigned int i = 0; i < v.size()+1; i++) wv.push_back(nonestruct); getnextc = 0; // re-examine this c state = in_code; break; } } // // depending on the state we are in at the end, we take appropriate action: // switch(state) { case maybe_stlabel: break; case in_stlabel: HANDLE_END_STLABEL; break; case in_code: break; case in_qstring: sv += quotechar + v; if(p) for(size_t i = start_index+1; (int)i < index; i++) pv.push_back((*p)[i]); for (unsigned int i = 0; i < v.size()+1; i++) wv.push_back(nonestruct); break; case pre_hollerith: sv += v; if(p) { for(size_t i = start_index; (int)i < index; i++) if (s.at(i) != ' ' && s.at(i) != '\t') pv.push_back((*p)[i]); } for (unsigned int i=0; i < v.size(); i++) wv.push_back(nonestruct); break; case in_hollerith: if (nhol > 0) { sl += std::string(nhol,' '); v += std::string(nhol,' '); sv += place_holder; if(p) pv.push_back((*p)[index]); vstruct.type = is_string; vstruct.value = v; vstruct.stringtype = 'h'; wv.push_back(vstruct); } break; case in_dotop: sv += '.' + v; if(p) for(size_t i = start_index; (int)i < index; i++) if (s.at(i) != ' ' && s.at(i) != '\t') pv.push_back((*p)[i]); for (unsigned int i = 0; i < v.size()+1; i++) wv.push_back(nonestruct); break; } sc = ""; if(p) pc.clear(); for (unsigned int i=0; i #include #include #include "functions.h" #include "findent_types.h" class Line_prep { private: std::string line,sl,sv,sc,rest; // todo should be private intpairs_t pv; intpairs_t pc; intpairs_t prest; char place_holder; struct whats { int type; std::string value; char stringtype; }; std::deque wv; public: enum { is_invalid=1, is_none, is_string, is_stlabel, is_dotop }; bool contains_hollerith; Line_prep(const std::string &s, const intpairs_t *p = 0) { set_line(s, p); } Line_prep() {} void set_line(const std::string &s, const intpairs_t *p = 0); void set_place_holder(const char c) { place_holder = c; } char get_place_holder(void) { return place_holder; } std::string get_line(void) { return line; } std::string get_line_spaces_removed(void) { return sl; } std::string get_line_compressed(void) { return sv; } std::string get_line_encoded(void) { return sc; } std::string get_line_rest(void) { return rest; } intpairs_t get_pos_compressed(void) { return pv; } intpairs_t get_pos_encoded(void) { return pc; } intpairs_t get_pos_rest(void) { return prest; } int get_type(const unsigned int i) { if (i < wv.size()) return wv[i].type; else return is_invalid; } int get_type(const std::string &s) { return get_type(string2number(s)); } std::string get_type_as_string(const unsigned int i) { int k = get_type(i); switch(k) { case is_invalid: return ("invalid"); case is_none: return ("none"); case is_string: return ("string"); case is_stlabel: return ("label"); case is_dotop: return ("dotop"); default: return ("impossible"); } } std::string get_type_as_string(const std::string &s) { return get_type_as_string(string2number(s)); } std::string get_value(const unsigned i) { if (i < wv.size()) return wv[i].value; else return ""; } std::string get_value(const std::string &s) { return get_value(string2number(s)); } char get_stringtype(const unsigned i) { if (i < wv.size()) return wv[i].stringtype; else return ' '; } char get_stringtype(const std::string &s) { return get_stringtype(string2number(s)); } }; #endif findent-4.3.2/src/makeman.cpp0000644000000000000000000000333414566134066013017 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "docs.h" #include "flags.h" int main() { Docs docs; docs.print(Flags::DO_MANPAGE); } findent-4.3.2/src/mylexer.cpp0000644000000000000000000000340314566134066013070 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "lexer.cpp" // // to generate dependencies: // #include "parser.hpp" #include "debug.h" #include "lexer.h" #include "line_prep.h" findent-4.3.2/src/myparser.cpp0000644000000000000000000000340014566134066013242 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "parser.cpp" // // to generate dependencies: // #include "debug.h" #include "lexer.h" #include "line_prep.h" #include "prop.h" findent-4.3.2/src/parser.hpp0000644000000000000000000002377014566134066012715 0ustar00/* A Bison parser, made by GNU Bison 3.8.2. */ /* Bison interface for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, especially those whose name start with YY_ or yy_. They are private implementation details that can be changed or removed. */ #ifndef YY_YY_PARSER_HPP_INCLUDED # define YY_YY_PARSER_HPP_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int yydebug; #endif /* Token kinds. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { YYEMPTY = -2, YYEOF = 0, /* "end of file" */ YYerror = 256, /* error */ YYUNDEF = 257, /* "invalid token" */ MODULE = 258, /* MODULE */ SUBFUN = 259, /* SUBFUN */ ENTRY = 260, /* ENTRY */ SUBMODULE = 261, /* SUBMODULE */ MODULESUBROUTINE = 262, /* MODULESUBROUTINE */ MODULEFUNCTION = 263, /* MODULEFUNCTION */ END = 264, /* END */ ENDSUBROUTINE = 265, /* ENDSUBROUTINE */ ENDFUNCTION = 266, /* ENDFUNCTION */ ENDPROGRAM = 267, /* ENDPROGRAM */ ENDMODULE = 268, /* ENDMODULE */ ENDSUBMODULE = 269, /* ENDSUBMODULE */ IF = 270, /* IF */ THEN = 271, /* THEN */ ELSE = 272, /* ELSE */ ELSEIF = 273, /* ELSEIF */ ENDIF = 274, /* ENDIF */ SIMPLEIF = 275, /* SIMPLEIF */ NWAYIF = 276, /* NWAYIF */ WHERE = 277, /* WHERE */ ENDWHERE = 278, /* ENDWHERE */ FORALL = 279, /* FORALL */ ENDFORALL = 280, /* ENDFORALL */ ELSEWHERE = 281, /* ELSEWHERE */ DO = 282, /* DO */ DOCOMMA = 283, /* DOCOMMA */ DOWHILE = 284, /* DOWHILE */ DOCONCURRENT = 285, /* DOCONCURRENT */ ENDDO = 286, /* ENDDO */ SELECTCASE = 287, /* SELECTCASE */ SELECTTYPE = 288, /* SELECTTYPE */ ENDSELECT = 289, /* ENDSELECT */ CASE = 290, /* CASE */ CASEDEFAULT = 291, /* CASEDEFAULT */ TYPEIS = 292, /* TYPEIS */ CLASSIS = 293, /* CLASSIS */ CLASSDEFAULT = 294, /* CLASSDEFAULT */ SELECTRANK = 295, /* SELECTRANK */ RANK = 296, /* RANK */ RANKDEFAULT = 297, /* RANKDEFAULT */ INTERFACE = 298, /* INTERFACE */ INTERFACE1 = 299, /* INTERFACE1 */ ABSTRACTINTERFACE = 300, /* ABSTRACTINTERFACE */ ENDINTERFACE = 301, /* ENDINTERFACE */ CONTAINS = 302, /* CONTAINS */ BLOCK = 303, /* BLOCK */ ENDBLOCK = 304, /* ENDBLOCK */ BLOCKDATA = 305, /* BLOCKDATA */ ENDBLOCKDATA = 306, /* ENDBLOCKDATA */ ASSOCIATE = 307, /* ASSOCIATE */ ENDASSOCIATE = 308, /* ENDASSOCIATE */ CRITICAL = 309, /* CRITICAL */ ENDCRITICAL = 310, /* ENDCRITICAL */ CHANGETEAM = 311, /* CHANGETEAM */ ENDTEAM = 312, /* ENDTEAM */ ENUM = 313, /* ENUM */ ENDENUM = 314, /* ENDENUM */ ASSIGNMENT = 315, /* ASSIGNMENT */ ASSIGN = 316, /* ASSIGN */ TO = 317, /* TO */ GOTO = 318, /* GOTO */ GOTO_COMPUTED = 319, /* GOTO_COMPUTED */ GOTO_ASSIGNED = 320, /* GOTO_ASSIGNED */ READ = 321, /* READ */ PRINT = 322, /* PRINT */ WRITE = 323, /* WRITE */ IO = 324, /* IO */ IOLIST = 325, /* IOLIST */ STARTIO = 326, /* STARTIO */ LABELIS = 327, /* LABELIS */ OTHER = 328, /* OTHER */ MODULEPROCEDURE = 329, /* MODULEPROCEDURE */ PROCEDURE = 330, /* PROCEDURE */ ENDPROCEDURE = 331, /* ENDPROCEDURE */ TIDENTIFIER = 332, /* TIDENTIFIER */ BLANK = 333, /* BLANK */ CHAR = 334, /* CHAR */ FINDFORMAT = 335, /* FINDFORMAT */ UNKNOWN = 336, /* UNKNOWN */ FREE = 337, /* FREE */ FIXED = 338, /* FIXED */ UNSURE = 339, /* UNSURE */ PROBFREE = 340, /* PROBFREE */ FINDENTFIX = 341, /* FINDENTFIX */ FIXFINDENTFIX = 342, /* FIXFINDENTFIX */ P_ON = 343, /* P_ON */ P_OFF = 344, /* P_OFF */ SCANFIXPRE = 345, /* SCANFIXPRE */ CPP_IF = 346, /* CPP_IF */ CPP_ENDIF = 347, /* CPP_ENDIF */ CPP_ELSE = 348, /* CPP_ELSE */ CPP_ELIF = 349, /* CPP_ELIF */ CPP = 350, /* CPP */ COCO_IF = 351, /* COCO_IF */ COCO_ENDIF = 352, /* COCO_ENDIF */ COCO_ELSE = 353, /* COCO_ELSE */ COCO_ELIF = 354, /* COCO_ELIF */ COCO = 355, /* COCO */ INCLUDE = 356, /* INCLUDE */ INCLUDE_CPP = 357, /* INCLUDE_CPP */ INCLUDE_CPP_STD = 358, /* INCLUDE_CPP_STD */ INCLUDE_COCO = 359, /* INCLUDE_COCO */ INCFILENAME = 360, /* INCFILENAME */ USE = 361, /* USE */ SEGMENT = 362, /* SEGMENT */ ENDSEGMENT = 363, /* ENDSEGMENT */ ESOPE = 364, /* ESOPE */ IDENTIFIER = 365, /* IDENTIFIER */ CIDENTIFIER = 366, /* CIDENTIFIER */ SKIP = 367, /* SKIP */ SKIPALL = 368, /* SKIPALL */ SKIPNOOP = 369, /* SKIPNOOP */ SKIPNOS = 370, /* SKIPNOS */ KEYWORD = 371, /* KEYWORD */ ELEMENTAL = 372, /* ELEMENTAL */ IMPURE = 373, /* IMPURE */ PURE = 374, /* PURE */ SIMPLE = 375, /* SIMPLE */ RECURSIVE = 376, /* RECURSIVE */ NON_RECURSIVE = 377, /* NON_RECURSIVE */ SUBROUTINE = 378, /* SUBROUTINE */ FUNCTION = 379, /* FUNCTION */ PROGRAM = 380, /* PROGRAM */ EOL = 381, /* EOL */ NAMED_LABEL = 382, /* NAMED_LABEL */ STLABEL = 383, /* STLABEL */ LABEL = 384, /* LABEL */ LABELS = 385, /* LABELS */ LABELLIST = 386, /* LABELLIST */ CALL = 387, /* CALL */ STARTCALL = 388, /* STARTCALL */ CALLLIST = 389, /* CALLLIST */ TYPE = 390, /* TYPE */ ENDTYPE = 391, /* ENDTYPE */ CLASS = 392, /* CLASS */ BASICTYPE = 393, /* BASICTYPE */ TYPEC = 394, /* TYPEC */ QSTRING = 395, /* QSTRING */ HSTRING = 396, /* HSTRING */ LR = 397, /* LR */ LRB = 398, /* LRB */ DOTOPERATOR = 399, /* DOTOPERATOR */ I_NUMBER = 400, /* I_NUMBER */ UNCLASSIFIED = 401, /* UNCLASSIFIED */ ERROR = 402, /* ERROR */ OMP = 403, /* OMP */ SCANOMPFIXED = 404, /* SCANOMPFIXED */ SCANOMPFREE = 405, /* SCANOMPFREE */ DEF = 406, /* DEF */ EXEC = 407, /* EXEC */ ENDDEF = 408, /* ENDDEF */ NONE = 409, /* NONE */ LAST_TOKEN = 410 /* LAST_TOKEN */ }; typedef enum yytokentype yytoken_kind_t; #endif /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef int YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif extern YYSTYPE yylval; int yyparse (void); #endif /* !YY_YY_PARSER_HPP_INCLUDED */ findent-4.3.2/src/parser.y0000644000000000000000000006331314566134066012373 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ %{ #include #include "debug.h" #include "lexer.h" #include "line_prep.h" #include "prop.h" struct propstruct properties; bool parselabeling = false; int itemnumber = 0; %} %token MODULE SUBFUN ENTRY SUBMODULE %token MODULESUBROUTINE MODULEFUNCTION %token END ENDSUBROUTINE ENDFUNCTION ENDPROGRAM ENDMODULE ENDSUBMODULE %token IF THEN ELSE ELSEIF ENDIF SIMPLEIF NWAYIF %token WHERE ENDWHERE FORALL ENDFORALL ELSEWHERE %token DO DOCOMMA DOWHILE DOCONCURRENT ENDDO %token SELECTCASE SELECTTYPE ENDSELECT CASE CASEDEFAULT TYPEIS CLASSIS CLASSDEFAULT %token SELECTRANK RANK RANKDEFAULT %token INTERFACE INTERFACE1 ABSTRACTINTERFACE ENDINTERFACE %token CONTAINS %token BLOCK ENDBLOCK %token BLOCKDATA ENDBLOCKDATA %token ASSOCIATE ENDASSOCIATE %token CRITICAL ENDCRITICAL %token CHANGETEAM ENDTEAM %token ENUM ENDENUM %token ASSIGNMENT %token ASSIGN TO %token GOTO GOTO_COMPUTED GOTO_ASSIGNED READ PRINT WRITE IO IOLIST STARTIO %token LABELIS OTHER %token MODULEPROCEDURE PROCEDURE ENDPROCEDURE %token TIDENTIFIER %token BLANK CHAR %token FINDFORMAT UNKNOWN FREE FIXED UNSURE PROBFREE FINDENTFIX FIXFINDENTFIX %token P_ON P_OFF %token SCANFIXPRE %token CPP_IF CPP_ENDIF CPP_ELSE CPP_ELIF CPP %token COCO_IF COCO_ENDIF COCO_ELSE COCO_ELIF COCO %token INCLUDE INCLUDE_CPP INCLUDE_CPP_STD INCLUDE_COCO INCFILENAME %token USE %token SEGMENT ENDSEGMENT ESOPE %token IDENTIFIER CIDENTIFIER SKIP SKIPALL SKIPNOOP SKIPNOS KEYWORD %token ELEMENTAL IMPURE PURE SIMPLE RECURSIVE NON_RECURSIVE SUBROUTINE FUNCTION PROGRAM %token EOL NAMED_LABEL %token STLABEL LABEL LABELS LABELLIST CALL STARTCALL CALLLIST %token TYPE ENDTYPE CLASS %token BASICTYPE TYPEC %token QSTRING HSTRING %token LR LRB %token DOTOPERATOR %token I_NUMBER %token UNCLASSIFIED %token ERROR %token OMP SCANOMPFIXED SCANOMPFREE %token DEF EXEC ENDDEF NONE %token LAST_TOKEN %left '%' %% lline: labels line ; labels: empty | stlabel | named_label | stlabel named_label ; line: | abstractinterface { properties.kind = ABSTRACTINTERFACE; properties.type = DEF; } | assign { properties.kind = ASSIGN; properties.type = EXEC; } | assignment { properties.kind = ASSIGNMENT; properties.type = EXEC; } | associate { properties.kind = ASSOCIATE; properties.type = EXEC; } | blank { properties.kind = BLANK; properties.type = NONE; } | block { properties.kind = BLOCK; properties.type = EXEC; } | blockdata { properties.kind = BLOCKDATA; properties.type = DEF; } | call { properties.kind = CALL; properties.type = EXEC; } | calllist { properties.kind = CALLLIST; properties.type = NONE; } | case { properties.kind = CASE; properties.type = EXEC; } | casedefault { properties.kind = CASEDEFAULT; properties.type = EXEC; } | rank { properties.kind = RANK; properties.type = EXEC; } | rankdefault { properties.kind = RANKDEFAULT; properties.type = EXEC; } | changeteam { properties.kind = CHANGETEAM; properties.type = EXEC; } | classdefault { properties.kind = CLASSDEFAULT; properties.type = EXEC; } | classis { properties.kind = CLASSIS; properties.type = EXEC; } | contains { properties.kind = CONTAINS; properties.type = DEF; } | critical { properties.kind = CRITICAL; properties.type = DEF; } | do_construct { properties.kind = DO; properties.type = EXEC; } | else { properties.kind = ELSE; properties.type = EXEC; } | elseif { properties.kind = ELSEIF; properties.type = EXEC; } | elsewhere { properties.kind = ELSEWHERE; properties.type = EXEC; } | endassociate { properties.kind = ENDASSOCIATE; properties.type = ENDDEF; } | endblock { properties.kind = ENDBLOCK; properties.type = EXEC; } | endblockdata { properties.kind = ENDBLOCKDATA; properties.type = ENDDEF; } | endcritical { properties.kind = ENDCRITICAL; properties.type = ENDDEF; } | enddo { properties.kind = ENDDO; properties.type = EXEC; } | endenum { properties.kind = ENDENUM; properties.type = DEF; } | endforall { properties.kind = ENDFORALL; properties.type = EXEC; } | endfunction { properties.kind = ENDFUNCTION; properties.type = ENDDEF; } | endif { properties.kind = ENDIF; properties.type = EXEC; } | endinterface { properties.kind = ENDINTERFACE; properties.type = ENDDEF; } | endmodule { properties.kind = ENDMODULE; properties.type = ENDDEF; } | endprocedure { properties.kind = ENDPROCEDURE; properties.type = ENDDEF; } | endprogram { properties.kind = ENDPROGRAM; properties.type = ENDDEF; } | endselect { properties.kind = ENDSELECT; properties.type = EXEC; } | endsubmodule { properties.kind = ENDSUBMODULE; properties.type = ENDDEF; } | endsubroutine { properties.kind = ENDSUBROUTINE; properties.type = ENDDEF; } | endteam { properties.kind = ENDTEAM; properties.type = EXEC; } | endtype { properties.kind = ENDTYPE; properties.type = ENDDEF; } | endwhere { properties.kind = ENDWHERE; properties.type = EXEC; } | entry { properties.kind = ENTRY; properties.type = DEF; } | enum { properties.kind = ENUM; properties.type = DEF; } | forall_construct { properties.kind = FORALL; properties.type = EXEC; } | goto { properties.kind = GOTO; properties.type = EXEC; } | goto_assigned { properties.kind = GOTO_ASSIGNED; properties.type = EXEC; } | goto_computed { properties.kind = GOTO_COMPUTED; properties.type = EXEC; } | if { properties.kind = SIMPLEIF; properties.type = EXEC; } | if_construct { properties.kind = IF; properties.type = EXEC; } | include { properties.kind = INCLUDE; properties.type = NONE; } | interface { properties.kind = INTERFACE; properties.type = DEF; } | labellist { properties.kind = LABELLIST; properties.type = NONE; } | module { properties.kind = MODULE; properties.type = DEF; } | moduleprocedure { properties.kind = PROCEDURE; properties.type = DEF; } | nwayif { properties.kind = NWAYIF; properties.type = EXEC; } | print { properties.kind = PRINT; properties.type = EXEC; } | program_stmt { properties.kind = PROGRAM; properties.type = DEF; } | procedure { properties.kind = PROCEDURE; properties.type = DEF; } | read { properties.kind = READ; properties.type = EXEC; } | io { properties.kind = IO; properties.type = EXEC; } | iolist { properties.kind = IOLIST; properties.type = NONE; } | selectcase { properties.kind = SELECTCASE; properties.type = EXEC; } | selectrank { properties.kind = SELECTRANK; properties.type = EXEC; } | selecttype { properties.kind = SELECTTYPE; properties.type = EXEC; } | simple_end { properties.kind = END; properties.type = EXEC; } | subroutine_stmt { properties.kind = SUBROUTINE; properties.type = DEF; } | function_stmt { properties.kind = FUNCTION; properties.type = DEF; } | submodule { properties.kind = SUBMODULE; properties.type = DEF; } | type { properties.kind = TYPE; properties.type = DEF; } | typeis { properties.kind = TYPEIS; properties.type = EXEC; } | use { properties.kind = USE; properties.type = DEF; } | where_construct { properties.kind = WHERE; properties.type = EXEC; } | segment { properties.kind = SEGMENT; properties.type = EXEC; } | endsegment { properties.kind = ENDSEGMENT; properties.type = EXEC; } ; blank: BLANK ; stlabel: STLABEL getstlabel ; named_label: NAMED_LABEL getname ; module: MODULE enable_identifier IDENTIFIER getname EOL ; use: USE enable_identifier IDENTIFIER getname enable_skipall SKIPALL ; include: INCLUDE QSTRING getstring EOL {D(O("include"););} /* include "file.inc" */ ; identifiers: IDENTIFIER | identifiers ',' IDENTIFIER ; abstractinterface: ABSTRACTINTERFACE skipall ; contains: CONTAINS EOL ; interface: INTERFACE skipall /* interface [name, operator(*), assignment(=) */ | INTERFACE1 enable_identifier IDENTIFIER getname skipall ; moduleprocedure: MODULEPROCEDURE enable_identifier identifiers getname EOL ; procedure: PROCEDURE enable_identifier IDENTIFIER getname EOL ; /* standard dictates that only */ /* PROGRAM program_name */ /* is allowed, but there is (or was) at least one dialect that allows: */ /* PROGRAM */ /* and another dialect that allows */ /* PROGRAM program_name(p1,...,p8), comment */ /* and */ /* PROGRAM program_name,p1,...,p8, comment */ /* so we will be a bit sloppy here */ program_stmt: PROGRAM enable_identifier IDENTIFIER getname enable_skip SKIP | PROGRAM enable_identifier EOL ; subroutine_stmt: subroutineprefix subroutine subroutinename enable_skip SKIP ; subroutine: subroutine_spec ; subroutine_spec: SUBROUTINE | MODULESUBROUTINE ; subroutinename: enable_identifier IDENTIFIER getname ; subroutineprefix: empty | subroutineprefix subroutineprefix_spec ; subroutineprefix_spec: ELEMENTAL | IMPURE | PURE | SIMPLE | RECURSIVE | NON_RECURSIVE | intrinsic_type_spec | TYPEC LR | CLASS LR ; function_stmt: subroutineprefix function functionname LR enable_skip SKIP ; function: function_spec ; function_spec: FUNCTION | MODULEFUNCTION ; functionname: enable_identifier IDENTIFIER getname ; submodule: SUBMODULE LR getlr enable_identifier IDENTIFIER getname EOL ; intrinsic_type_spec: BASICTYPE | BASICTYPE kind_selector ; kind_selector: '*' I_NUMBER /* extension */ | '*' LR /* extension */ | LR ; entry: ENTRY enable_identifier IDENTIFIER skipall ; endassociate: ENDASSOCIATE construct_name EOL ; endblock: ENDBLOCK construct_name EOL ; endblockdata: ENDBLOCKDATA construct_name EOL ; endcritical: ENDCRITICAL construct_name EOL ; enddo: ENDDO construct_name EOL ; endenum: ENDENUM EOL ; endforall: ENDFORALL construct_name EOL ; endfunction: ENDFUNCTION construct_name EOL | ENDFUNCTION construct_name LR EOL /* to accommodate preprocessors who recognize END FUNCTION MYFUNC (SOMETHING) */ ; endif: ENDIF construct_name EOL ; endinterface: ENDINTERFACE skipall /* end interface [name, operator(*), assignment(=)] */ ; endmodule: ENDMODULE construct_name EOL ; endprocedure: ENDPROCEDURE construct_name EOL | ENDPROCEDURE construct_name LR EOL /* to accommodate preprocessors who recognize END PROCEDURE MYPROC (SOMETHING) */ ; endprogram: ENDPROGRAM construct_name EOL | ENDPROGRAM construct_name LR EOL /* to accommodate preprocessors who recognize END PROGRAM MYPROG (SOMETHING) */ ; endselect: ENDSELECT construct_name EOL ; endsubmodule: ENDSUBMODULE construct_name EOL ; endsubroutine: ENDSUBROUTINE construct_name EOL | ENDSUBROUTINE construct_name LR EOL /* to accommodate preprocessors who recognize END SUBROUTINE MYSUB (SOMETHING) */ ; endteam: ENDTEAM lr_construct_name EOL ; endtype: ENDTYPE construct_name EOL ; endsegment: ENDSEGMENT EOL ; endwhere: ENDWHERE construct_name EOL ; simple_end: END EOL ; gidentifier: IDENTIFIER | TIDENTIFIER ; assignment: lvalue '=' skipnoop /* this includes '=>' */ ; assign: ASSIGN I_NUMBER getlabel TO enable_identifier gidentifier EOL | if assign ; else: ELSE construct_name EOL ; elseif: ELSEIF LR THEN construct_name EOL ; elsewhere: ELSEWHERE lr_construct_name EOL ; if_construct: IF LR THEN EOL /* if (bla) then */ ; if : IF LR /* if (bla) */ ; nwayif : IF LR I_NUMBER getlabel ',' I_NUMBER getlabel EOL /* if(bla) 100,200 ! CDC extension */ | IF LR I_NUMBER getlabel ',' I_NUMBER getlabel ',' I_NUMBER getlabel EOL /* if(bla) 100,200,300 */ ; where_construct: WHERE LR EOL ; forall_construct: FORALL LR EOL ; do_construct: do I_NUMBER getlabel skipall /* do 100[,] ... */ | do gidentifier skipall /* do i=1,10 */ | docomma gidentifier skipall /* do, i=1,10 */ | do EOL /* do */ | DOWHILE LR EOL /* do while (i<10) */ | DOCONCURRENT LR EOL /* do concurrent (i=1:20) */ ; /* note: do, 100 i=1,10 is not valid fortran */ do: DO enable_identifier ; docomma: DOCOMMA enable_identifier ; goto: goto_prefix I_NUMBER getlabel skipall /* goto 100 */ | if goto /* covers also: if(bla) if(bla) goto 100 which is not fortran */ ; goto_computed: goto_prefix LR getlr skipall /* goto (10,20,30,40)[,] i */ | if goto_computed ; goto_assigned: goto_prefix gidentifier LR getlr skipall /* goto i[,] (10,20,30,40) */ | if goto_assigned ; goto_prefix: enable_cidentifier GOTO ; read: READ I_NUMBER getlabel skipall | if read ; print: PRINT I_NUMBER getlabel skipall | if print ; io: IO LR getlr skipall | if io ; iolist: STARTIO itemlist ; itemlist: item | itemlist ',' item | itemlist ',' | itemlist EOL ; item: LABEL {itemnumber++;} getlabel1 /* write(*,100) */ | LABELIS {itemnumber=123456;} LABEL getlabel /* fmt=10, err=10 ... */ | LABELIS {itemnumber=123456;} otheritem /* fmt="(a80)" */ | otheritem {itemnumber++;} ; otheritem: OTHER | OTHER otheritem ; labellist: LABEL getlabel /* used in parselabels */ | labellist ',' LABEL getlabel | labellist EOL ; selectcase: SELECTCASE LR EOL ; selectrank: SELECTRANK LR EOL ; selecttype: SELECTTYPE LR EOL ; call: CALL enable_identifier IDENTIFIER LR getlr skipall | CALL enable_identifier IDENTIFIER getlr skipall | if call ; calllist: STARTCALL clist /* used in parsecall */ ; clist: empty | clist citem | clist EOL ; citem: LABEL getlabel2 /* call sub(*100) */ | OTHER ; case: CASE LR construct_name EOL /* case (3) [name] */ ; casedefault: CASEDEFAULT construct_name EOL /* case default [name] */ ; rank: RANK LR construct_name EOL /* rank (3) [name] */ ; rankdefault: RANKDEFAULT construct_name EOL /* rank default [name] */ ; classdefault: CLASSDEFAULT construct_name EOL ; classis: CLASSIS LR construct_name EOL ; typeis: TYPEIS LR construct_name EOL ; changeteam: CHANGETEAM LR EOL ; block: BLOCK EOL ; blockdata: BLOCKDATA construct_name EOL ; associate: ASSOCIATE LR EOL ; critical: CRITICAL EOL | CRITICAL LR EOL ; enum: ENUM ',' skipall ; type: type1 IDENTIFIER getname skipall | type1 ':' ':' IDENTIFIER getname skipall | type1 ',' skipnos ':' ':' enable_identifier IDENTIFIER getname skipall type1: TYPE enable_identifier ; segment: SEGMENT enable_identifier IDENTIFIER EOL ; lvalue: gidentifier | gidentifier LR | lvalue '%' lvalue ; construct_name: enable_identifier empty /* */ | enable_identifier IDENTIFIER getname /* name */ ; lr_construct_name: enable_identifier empty /* */ | enable_identifier LR /* (..) */ | enable_identifier IDENTIFIER getname /* name */ | enable_identifier LR IDENTIFIER getname /* (..) name */ ; skipall: enable_skipall SKIPALL ; skipnoop: enable_skipnoop SKIPNOOP ; skipnos: enable_skipnos ; enable_identifier: {lexer_enable(IDENTIFIER);} ; enable_cidentifier: {lexer_enable(CIDENTIFIER);} ; enable_skip: {lexer_enable(SKIP);} ; enable_skipall: {lexer_enable(SKIPALL);} ; enable_skipnoop: {lexer_enable(SKIPNOOP);} ; enable_skipnos: {lexer_enable(SKIPNOS);} ; getname: {properties.name=lexer_getname();} ; getstlabel: {properties.stlabel=lexer_getstlabel();} ; getlabel: {properties.labels.push_back(lexer_geti_number()); properties.label_pos.push_back(lexer_get_pos()-lexer_get_len());} ; getlabel1: {if (itemnumber == 2) {properties.labels.push_back(lexer_geti_number()); properties.label_pos.push_back(lexer_get_pos()-lexer_get_len()); } } ; getlabel2: {properties.labels.push_back(lexer_geti_number()); /* minus one for the extra comma, plus two for preceding ',*' */ properties.label_pos.push_back(lexer_get_pos()-lexer_get_len()-1+2);} ; getstring: {properties.stringvalue=lexer_getstring();} ; getlr: {properties.lrvalue=lexer_getlr(); properties.lrpos=lexer_getlrpos();} ; empty: /* empty */ ; %% void resetprop(void) { properties.kind = UNCLASSIFIED; properties.type = EXEC; properties.labels.clear(); properties.label_pos.clear(); properties.stlabel = ""; properties.name = ""; properties.stringvalue = ""; properties.lrvalue = ""; properties.lrpos = -123; } propstruct parseline(const Line_prep &p) { D(O("entering parseline");); lexer_set(p,IDENTIFIER); resetprop(); yyparse(); if (properties.kind != UNCLASSIFIED) return properties; #ifdef USEESOPE lexer_set(p,ESOPE); // enables KEYWORD+ESOPE (SEGMENT, ENDSEGMENT) #else lexer_set(p,KEYWORD); // enables KEYWORD #endif yyparse(); return properties; } propstruct parselabels(const std::string &s) { D(O("entering parselabels");); lexer_set(s,LABELS); resetprop(); parselabeling = true; yyparse(); return properties; } propstruct parseio(const std::string &s) { D(O("entering parseio");); lexer_set(s,IOLIST); resetprop(); parselabeling = true; itemnumber = 0; yyparse(); return properties; } propstruct parsecall(const std::string &s) { D(O("entering parsecall");); lexer_set(','+s,CALLLIST); // ',' to assist lexer to recognise first label resetprop(); parselabeling = true; yyparse(); return properties; } void yyerror(const char *c) { (void)c; D(O("ERROR");O(c);); if(parselabeling) { properties.kind = UNCLASSIFIED; properties.type = EXEC; } } extern "C" int yywrap() { D(O("yywrap");); return 1; } findent-4.3.2/src/pre_analyzer.cpp0000644000000000000000000000542614566134066014105 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include "pre_analyzer.h" #include "functions.h" #include "parser.hpp" // // Depending on the value of pretype: // the ifelse_stack is manipulated as appropriate; // returns PRE_IF, PRE_ELIF, PRE_ELSE, PRE_ENDIF, PRE_ENDIFE, PRE_NONE as appropiate // int Pre_analyzer::analyze(const int pretype) { switch(pretype) { case CPP_IF: case CPP_ENDIF: case CPP_ELSE: case CPP_ELIF: case COCO_IF: case COCO_ENDIF: case COCO_ELSE: case COCO_ELIF: case INCLUDE_CPP: case INCLUDE_COCO: break; default: return this->PRE_NONE; } int r; switch(pretype) { case CPP_IF: case COCO_IF: this->ifelse_stack.push_back(0); return this->PRE_IF; case CPP_ELIF: case COCO_ELIF: return this->PRE_ELIF; case CPP_ELSE: case COCO_ELSE: if (!this->ifelse_stack.empty()) { ifelse_stack.pop_back(); ifelse_stack.push_back(1); } return this->PRE_ELSE; case CPP_ENDIF: case COCO_ENDIF: r = this->PRE_ENDIF; if (!ifelse_stack.empty()) { if (ifelse_stack.back()) r = this->PRE_ENDIFE; ifelse_stack.pop_back(); } return r; default: return this->PRE_NONE; } } findent-4.3.2/src/pre_analyzer.h0000644000000000000000000000363714566134066013554 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef PRE_ANALYZER_H #define PRE_ANALYZER_H #include class Pre_analyzer { std::deque ifelse_stack; // to note if there is an #else after #if public: int analyze(const int pretype); enum {PRE_NONE=1, PRE_IF, PRE_ELIF, PRE_ELSE, PRE_ENDIF, PRE_ENDIFE}; }; #endif findent-4.3.2/src/prop.cpp0000644000000000000000000000450014566134066012362 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "prop.h" #include "parser.hpp" std::string whatrprop(struct propstruct &p) { switch(p.kind) { case SUBROUTINE: case MODULESUBROUTINE: return("subroutine"); case PROGRAM: return("program"); case BLOCKDATA: return("block data"); case FUNCTION: case MODULEFUNCTION: return("function"); case MODULE: return("module"); case SUBMODULE: return("submodule"); case PROCEDURE: return("procedure"); case ABSTRACTINTERFACE: case INTERFACE: return("interface"); case TYPE: return("type"); default: return(""); } } // end of whatrprop findent-4.3.2/src/prop.h0000644000000000000000000000504514566134066012034 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef PROP_H #define PROP_H #include #include #include "findent_types.h" #include "parser.hpp" #include "line_prep.h" struct propstruct { int kind; // SUBROUTINE, DO, ... int type; // EXEC: executable stmnt; DEF: definition; ENDDEF: end definition; NONE strings_t labels; ints_t label_pos; std::string stlabel; std::string name; std::string stringvalue; std::string lrvalue; int lrpos; } ; const struct propstruct empty_rprop={0,NONE,strings_t(),ints_t(),"","","","",0}; propstruct parseline(const Line_prep &p); propstruct parselabels(const std::string &s); propstruct parseio(const std::string &s); propstruct parsecall(const std::string &s); std::string whatrprop(struct propstruct &p); typedef std::deque rprops_t; typedef std::deque rprops_store_t; typedef struct propstruct prop_t; #endif findent-4.3.2/src/relabel.cpp0000644000000000000000000006513614566134066013024 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include #include #include #include #include "findent_types.h" #include "fortran.h" #include "relabel.h" #include "debug.h" #include "functions.h" #include "fortranline.h" typedef std::deque lines_store_t; static lines_store_t c_lines_store; static intpairs_store_t full_pos_store; static strings_t full_statement_store; static std::map labels; static std::map labeldefs; static std::map > labeluses; static std::string label_num; static std::string subfunprog,subfunprogname; static std::string error_type; static std::string check_label_pos(const std::string &fs, lines_t &cl, const intpairs_t &fp, int &cor, int p, const std::string &prefix, bool relabel_it, bool is_stlabel); static std::string rel_check_labels(void); static std::string ints2string(const ints_t &list); static long long int seed; static double myrandom(void); static unsigned int myrandint(unsigned int n); static void smyrandom(unsigned long long i); static void mypermutate(int *a, unsigned int n); static void permutate_labels(void); //generate random number [0-1) // From Communications of the ACM, Vol 31 Oct 1988 number 10 // pp 1192..1201 // Stephen K. Park and Keith W. Miller // // Not thread-safe because of seed // // Could have used drand48(), but I need reproducible random // numbers to be able to check correct functioning of permutate_labels() // double myrandom() { const int a=16807; const int m=2147483647; seed = (a*seed) % m; return (double)seed/m; } // returns random integer m, such that 0 <= m < n unsigned int myrandint(unsigned int n) { return myrandom()*n; } // set seed void smyrandom(unsigned long long i) { seed = i; } // random permutate array a. // https://en.wikipedia.org/wiki/Random_permutation#Fisher-Yates_shuffles // n (input) number of elements in a void mypermutate(int *a, unsigned int n) { (void) mypermutate; // not called, only used as inspiration for permutate_labels() int x; for (unsigned int i=0; i::iterator it; std::vector l,m; int n = labels.size(); for (it = labels.begin(); it!=labels.end(); ++it) { l.push_back(it->first); // use it->second if you want to use generated labels m.push_back(it->first); } std::string x; for (int i=0; iflags.do_shuffle) { smyrandom(1); myrandom(); myrandom(); } } // // In this text, SUBROUTINE stands for SUBROUTINE/FUNCTION/PROGRAM // END stands for END/END FUNCTION/END SUBROUTINE/END PROGRAM/CONTAINS // read complete input and do relabel processing. // // Method: read until SUBROUTINE is encountered. Then: read until END storing the // source lines. Then relabel, and find the next SUBROUTINE. // // Since relabeling is a process that can easily destroy the // semantics of a program, relabeling is switched off after: // - encountering SUBROUTINE or END as part of a multi-statement line, // examples: // end ; subroutine foo // subroutine foo(x) ; real x // continue ; end // - finding a label that is used but not defined // - encountering an SUBROUTINE statement after an SUBROUTINE statement before an END statement // // Note: // a program like: // program prog // goto 10 // 10 end program // is allowed according to the standard, but this label will not been seen in the following case: // program prog // goto 10 // contains // subroutine sub // end subroutine // 10 end program // (Also gfortran gives an error: "Error: Label 10 referenced at (1) is never defined", // so we are in good company, albeit that ifort compiles the thing correctly) // void Fortran::do_relabel() { enum { outside = 1, inside, error, flush = 101, store, doit, }; int state = outside; bool error_found = 0; label_num = number2string(fi->flags.relabel_start); // // following loop is over the complete input // while(1) { D(O("error_found: ");O(error_found);); if(end_of_file) { rel_flush(1); break; } get_full_statement(); if (error_found) { rel_flush(1); continue; } std::string rest = full_statement; intpairs_t prest = full_pos; D(O(full_statement);O("full in relabel");); DL( for (size_t i=0; iflags.relabel_reset) label_num = number2string(fi->flags.relabel_start); labels.clear(); labeldefs.clear(); labeluses.clear(); rel_flush(1); break; } state = error; error_type += subfunprog; error_type += " statement part of multi statement line (" + number2string(num_lines) + ");"; if (item_nr == 1) rel_store(); break; default: rel_flush(1); break; } break; // end case outside case inside: D(O(props.kind);); switch(props.kind) { case SUBROUTINE: case FUNCTION: case PROGRAM: // // an unexpected SUBROUTINE statement // state = error; error_type += "misplaced "; switch(props.kind) { case SUBROUTINE: error_type += "subroutine"; break; case FUNCTION: error_type += "function"; break; case PROGRAM: error_type += "program"; break; } error_type += " statement (" + number2string(num_lines) + ");"; if(item_nr == 1) rel_store(); break; case CALL: case IO: case GOTO_COMPUTED: case GOTO_ASSIGNED: D(O("io or computed/assigned goto");); D(O(props.lrvalue);O(props.lrpos);); labstring = props.lrvalue; D(O("labstring");O(labstring);); switch(props.kind) { case IO: labs = parseio(labstring); break; case CALL: labs = parsecall(labstring); break; default: labs = parselabels(labstring); break; } switch (labs.kind) { case CALLLIST: case LABELLIST: case IOLIST: D(O("CALL/LABEL/IO_LIST");O(props.lrpos);); D(O(p.get_line_encoded());); DL( for(size_t i =0; i line_in_c_lines) first_line = line_in_c_lines; if(last_line < line_in_c_lines) last_line = line_in_c_lines; D(O("first, last");O(first_line);O(last_line);); } D(O(label_pos[num]);O(line_in_c_lines);O(col_in_c_lines);); D(O(rest);O("re");); D(O(c_lines[line_in_c_lines].str());O("cu");); // now get the value of the label from c_lines: unsigned int m; std::string checklabel; getstr_sp(c_lines[line_in_c_lines].str().substr(col_in_c_lines), checklabel, m); D(O(props.kind);O(p.get_line_encoded());); if (checklabel != lclean) { D(O("label_error");); D(O(l);O(checklabel);); state = error; error_type += "label not on one line: "+ l + "(" +number2string(num_lines) + ")"; break; } } // fall through default: { D(O("first, last");O(first_line);O(last_line);); for(int i = first_line; i <=last_line; ++i) { D(O(pregion);O(c_lines[i].preregion());O(c_lines[i].str());); if (c_lines[i].preregion() != pregion) { D(O("intervening preprocessor statement");O(pregion);O(c_lines[i].preregion());); state = error; error_type += "intervening preprocessor statement ("+ number2string(num_lines) +");"; break; } } } if(props.stlabel.size()>0) { // // check for consistency of label // int dummy; std::string n = check_label_pos(rest, c_lines, prest, dummy, 0, "", false,true); D(O(rest);O(n);); if (n.size() == 0 ) { state = error; error_type += "internal error;"; } else { bool rc = rel_collect(props.stlabel); if (!rc) { state = error; D(O("label out of range");); error_type += "label would go out of range: " +props.stlabel + " -> "+label_num+" ("+number2string(num_lines) + ");"; } } } if(item_nr == 1) rel_store(); break; } if(state == error) { D(O("state = error");O(error_type);); break; } switch(props.kind) { case END: case ENDPROGRAM: case ENDFUNCTION: case ENDSUBROUTINE: case ENDPROCEDURE: case CONTAINS: // // only valid if this is not part of a multiline statement // D(O("end found");); if (item_nr != 1 || p.get_line_rest().size() != 0) { std::string x = "END"; if (props.kind == CONTAINS) x = "CONTAINS"; state = error; error_type += x+" in multi statement line ("+number2string(num_lines)+");"; } if (rel_check_labels().size() != 0) { state = error; error_type += "undefined label: " + rel_check_labels() + " ("; error_type += ints2string(labeluses[rel_check_labels()]); error_type += ");"; } if(state == error) do_flush = false; else { state = outside; rel_doit(); rel_flush(0); break; } break; } break; // end case inside case error: if(do_flush) rel_flush(1); error_found = 1; break; } if(error_found || state == error) { D(O("Relabel impossible");O(error_type);); break; } rest = p.get_line_rest(); D(O(rest);); if (rest.size() == 0) break; prest = p.get_pos_rest(); } } switch(fi->flags.query_relabel) { case 0: return; case 1: case 2: rel_summary(); break; } } std::string rel_check_labels() { for (std::map::iterator it=labels.begin(); it!=labels.end(); ++it) { D(O("map:check ");O(it->first);O(" -> ");O(it->second);); if (it->second.size() == 0) return it->first; } return ""; } bool Fortran::rel_collect(const std::string &label) { if (label.size() == 0) return true; D(O(label);O(label_num);); if (label_num.size() > 5) return false; std::string mylabel; unsigned int n; getstr_sp(label,mylabel,n); // remove leading zero's embedding blanks ... D(O(label);O(mylabel);); if(labels[mylabel].size() > 0) // this label was already defined, maybe in a preprocessor suite. return true; labels[mylabel] = label_num; labeldefs[mylabel] = num_lines; unsigned long int x = string2number(label_num) + fi->flags.relabel_increment; label_num = number2string(x); D(O(label);O(mylabel);O(label_num);O(x);); return true; } void Fortran::rel_store() { full_statement_store.push_back(full_statement); full_pos_store.push_back(full_pos); c_lines_store.push_back(c_lines); } void Fortran::rel_flush(bool do_c_lines) { while(c_lines_store.size() > 0) { while(c_lines_store[0].size() > 0) { Fortranline *line = &c_lines_store[0].front(); D(O("WRITE_rel");O(line->written());O(line->str());); if(!line->written()) out->push_back(line->str()); c_lines_store[0].pop_front(); } c_lines_store.pop_front(); } c_lines_store.clear(); full_statement_store.clear(); full_pos_store.clear(); if(do_c_lines) while (c_lines.size() > 0) { Fortranline *line = &c_lines.front(); D(O("WRITE_rel");O(line->written());O(line->str());); if(!line->written()) out->push_back(line->str()); c_lines.pop_front(); } } void Fortran::rel_doit() { if (fi->flags.do_shuffle) { // // here we shuffle labels // permutate_labels(); } switch(fi->flags.query_relabel) { case 0: rel_apply(); break; case 2: rel_report(); break; } } void Fortran::rel_summary() { if(error_type.size() == 0) std::cout << "!No relabeling errors found" << std::endl; else std::cout << "!Relabeling error: " << error_type << std::endl; } void Fortran::rel_report() { std::cout << "!" << subfunprog << " " << subfunprogname << ":" << std::endl; std::cout << "!original(def'd ) new (used)" << std::endl; for (std::map ::iterator it=labels.begin(); it != labels.end(); ++it) { std::cout << "! " << std::setw(5) << it->first << "(" << std::setw(6) << labeldefs[it->first] << ") -> " << std::setw(5) << it->second << "("; std::cout << ints2string(labeluses[it->first]) << ")" << std::endl; } } std::string ints2string(const ints_t &list) { std::string s; for (size_t i = 0; i < list.size(); ++i) { s += number2string(list[i]); if (i != list.size()-1) s += ","; } return s; } void Fortran::rel_apply() { DL( for (std::map ::iterator it=labels.begin(); it != labels.end(); ++it) { D(O("map: ");O(it->first);O(" -> ");O(it->second);); } ); // // loop over stored lines // for (size_t line_nr=0; line_nr0) k = pc[0].first; // line nr in multi-line statement else // happens with a blank line k = 0; int cor = 0; size_t l = props.stlabel.size(); if (l > 0) // this line starts with a label { D(O(pos[0].first);O(pos[0].second); O(props.stlabel);); std::string n = check_label_pos(line, (*lines), pos, cor, 0, "", true, true); D(O(cor);O(pos[0].first);O(pos[0].second);); (void)n; D(O(n);); } D(O(line.size());O(pos.size());); DL(assert(pos.size() == line.size());); if(cor) { for (size_t i = 0; i < pc.size(); ++i) { if(pc[i].first == k) pc[i].second += cor; } for (size_t i = 0; i < pos.size(); ++i) { if(pos[i].first == k) { pos[i].second += cor; D(O(i);O(cor);O(k);O(pos[i].second);O((*lines)[k][pos[i].second]);); } } } DL(assert(pos.size() == line.size());); int extracor = 0; switch(props.kind) { case CALL: case IO: case GOTO_COMPUTED: case GOTO_ASSIGNED: D(O("computed/assigned goto");); D(O(props.lrvalue);O(props.lrpos);); D(O(p.get_line_encoded());); labstring = props.lrvalue; switch(props.kind) { case IO: labs = parseio(labstring); break; case CALL: labs = parsecall(labstring); break; default: labs = parselabels(labstring); } switch (labs.kind) { case CALLLIST: case LABELLIST: case IOLIST: D(O("CALL/LABEL/IO_LIST");O(props.lrpos);); D(O(p.get_line_encoded());); DL( for(size_t i =0; i= label_pos[num]) if(pos[i].first == curk /*&& pos[i].second >= label_pos[num]-2*/) // todo why -2? pos[i].second += extracor; } } } break; } line = p.get_line_rest(); // this is ok D(O(pos.size());O(line.size());O(line);); //pos = p.get_pos_rest(); // this is not ok, instead: do not use original pos, but shorten existing pos, using // length of previous and current line. size_t new_size = p.get_pos_rest().size(); while (pos.size() > new_size) pos.pop_front(); if (line.size() == 0) break; } } } // // check if label at position p of statement(fs) c_lines(cl) and pos(fp) // given info in full_pos_store // returns the number of chars used for the label in c_lines. // 0 signifies an error // std::string check_label_pos(const std::string &fs, lines_t &cl, const intpairs_t &fp, int &cor, int p, const std::string &prefix, bool relabel_it, bool is_stlabel) { DL(assert(fs.size() == fp.size());); cor = 0; std::string label_in_f; unsigned int m; // get label from fs getstr_sp(fs.substr(p), label_in_f, m); D(O(m);O(label_in_f);); if (m < 1) return ""; // get label from c_lines std::string label_in_c; unsigned int n; int k = fp[p].first; int q = fp[p].second; Fortranline *clk = &cl[k]; D(O(q);O(clk->str());O(clk->str().substr(q));O(is_stlabel);); if (is_stlabel) { // if this is a statement label, find the position where it starts, including spaces and tabs while(q > 0) { char c = clk->str()[q-1]; D(O(c);); if (c == ' ' || c == '\t') q--; else break; } } getstr_sp(clk->str().substr(q), label_in_c, n); D(O(clk->str());O(relabel_it);); D(O(clk->str().substr(q));O(relabel_it);); D(O(label_in_f);O(label_in_c);O(p);O(k);O(q);O(relabel_it);); if ((label_in_f != label_in_c) || label_in_f.size() == 0) return ""; if (relabel_it && !clk->written()) { // // replace in cl // int oldsize = clk->str().size(); std::string sl = prefix+labels[label_in_f]; D(O(label_in_f);O(sl);O("q n");O(q);O(n);); // add as many blanks after the label as in the original case std::string trailing_blanks = ""; for (size_t i = q+n-1; i!=0; --i) { char c = clk->str()[i]; if (isblank(c)) trailing_blanks = trailing_blanks+c; else break; } #ifdef equallength // if new label field is smaller than old one, add spaces // new label: sl+trailing_blanks. int e = n-sl.size()-trailing_blanks.size(); if (e < 0) e = 0; D(O(n);O(sl.size());O("bl.size");O(trailing_blanks.size());O(e);); trailing_blanks = std::string(e,' ')+trailing_blanks; #endif // // if we are handling a statement label, make sure that // it occupies at least 6 characters // if (is_stlabel && clk->format() == FIXED) { sl = std::string(5-sl.size(),' ') + sl; if(trailing_blanks.size() < 1) trailing_blanks = ' '; } else { // // gfortran-8, compiling free format thinks that // goto i(10,20,30 ) // is erroneous, while // goto i(10,20,30) // is ok. // so, we will not add spaces between the label and ')'. if (clk->str()[q+n] == ')') trailing_blanks=""; } // some peculiarities with repect to OpenMP: if (is_stlabel && clk->omp()) { sl = ltrim(sl); if(clk->format() == FREE) sl = " " + ltrim(sl); // space before label required else { // to make sure that the label fills the first 6 colums int n = 3-sl.size(); if(n>0) sl = std::string(n,' ')+sl; trailing_blanks = " "; // continuation character } } std::string one = clk->str().substr(0,q); std::string two = sl+trailing_blanks; std::string three = clk->str().substr(q+n); D(O(one);O(two);O(three);); clk->str(one+two+three); cor = clk->str().size()-oldsize; D(O(cor);O(p);O(fp.size());O(oldsize);); } return label_in_f; } findent-4.3.2/src/relabel.h0000644000000000000000000000324314566134066012460 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef RELABEL_H #define RELABEL_H #endif findent-4.3.2/src/selfrep.cpp0000644000000000000000000000562314566134066013051 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ #include #include #include "docs.h" #ifdef SELFREP static ssize_t mywrite(int fd, const void *buf, size_t count) { const size_t m = 4096; // max per write size_t w = 0; // # written chars char *b = (char *)buf; while (w < count) { size_t l = count - w; if (l > m) l = m; ssize_t x = write(fd, b+w, l); if (x < 0) return -1; w += x; } return 0; } static unsigned char tarfile[] = { #include "tarfile.inc" }; void Docs::selfrep() { if(sizeof(tarfile) > 1000 && isatty(fileno(stdout))) { std::cout << "Not sending tar file to terminal." << std::endl; std::cout << "Try redirecting to a file (e.g: findent -selfrep > findent.tar.gz)," << std::endl; std::cout << "or use a pipe (e.g: findent -selfrep | tar zxf -)." << std::endl; } else { // This is for the Windows version, to prevent the output // of a carriage return after a newline. // Alas, this does not work. Any solution? FILE *const out = fdopen(dup(fileno(stdout)),"wb"); ssize_t rc = mywrite(fileno(out),tarfile,sizeof(tarfile)); if (rc < 0) std::cerr << "findent: Problems encountered during production of the tar ball." << std::endl; fclose(out); } } #endif findent-4.3.2/src/simpleostream.cpp0000644000000000000000000000325614566134066014275 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "simpleostream.h" Simpleostream mycout; findent-4.3.2/src/simpleostream.h0000644000000000000000000000444514566134066013743 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef SIMPLEOSTREAM_H #define SIMPLEOSTREAM_H #include #include class Simpleostream { private: std::stringstream line; bool output; public: Simpleostream(void) { output = 1; } void reset(void) { line.str(""); } template< typename T > Simpleostream& operator<<( T val ) { if (output) std::cout << val; else line << val; return *this; } void setoutput(const bool b) { output = b; } bool getoutput(void) { return output; } template< typename T> void set( T s ) { reset(); line << s; } std::string get(void) { return line.str(); } }; #endif findent-4.3.2/src/toascii.sh0000755000000000000000000000366114566134066012677 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. cat << eof > toascii.c #include int main() { int c; int i = 0; while((c = getchar()) != EOF) { if (i>20) { i = 1; printf("\n"); } printf("%d,",c); i++; } } eof ${CC:-cc} $CFLAGS -o toascii toascii.c >/dev/null 2>&1 ./toascii rm -f toascii toascii.c findent-4.3.2/src/tocpp.sh0000755000000000000000000000330314566134066012362 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. sed 's/\\/\\\\/g;s/"/\\"/g;s/^/ std::cout << "/;s/$/" << std::endl;/' findent-4.3.2/src/version.h0000644000000000000000000000362114566134066012537 0ustar00/* -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef VERSION_H #define VERSION_H // VERSION is defined via the AC_INIT line in configure.ac #ifdef HAVE_CONFIG_H #include "config.h" #else #ifndef VERSION #define VERSION "unknown" #endif #ifndef PACKAGE_STRING #define PACKAGE_STRING "findent " VERSION #endif #endif #endif findent-4.3.2/test/0000755000000000000000000000000014566134066011067 5ustar00findent-4.3.2/test/Makefile.am0000644000000000000000000000376514566134066013136 0ustar00# -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # TESTS = \ test1.sh test2.sh test3.sh test4.sh test5.sh test6.sh \ test7.sh test8.sh test9.sh test10.sh test11.sh test12.sh \ test13.sh test14.sh test15.sh test16.sh test17.sh test18.sh \ test19.sh test20.sh test21.sh test22.sh test23.sh test24.sh \ test25.sh test26.sh AM_TESTS_ENVIRONMENT = ./init.sh ; EXTRA_DIST = $(TESTS) clean-local: rm -rf *.tmpdir findent-4.3.2/test/Makefile.in0000644000000000000000000012633014566134066013141 0ustar00# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/m4_ax_prog_cc_for_build.m4 \ $(top_srcdir)/m4/m4_ax_prog_cxx_for_build.m4 \ $(top_srcdir)/m4/ax_prog_bison.m4 \ $(top_srcdir)/m4/ax_prog_flex.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = prelude postlude test-compile.sh doit init.sh \ progfixed-dos.f.try.f.ref progfixed-dos.f \ progfixed.f.try.f.ref progfixed.f progfixed1.f.try.f.ref \ progfixed1.f progfixedfree-dos.f.try.f.ref progfixedfree-dos.f \ progfixedfree.f.try.f.ref progfixedfree.f \ progfree-dos.f.try.f.ref progfree-dos.f progfree.f.try.f.ref \ progfree.f progfree1.f.try.f.ref progfree1.f \ progfreefixed.f.try.f.ref progfreefixed.f esope.f.try.f.ref \ esope.f progrelabelfree.f progrelabelfree.f.try.f.ref \ progfixedrelabelfixed.f progfixedrelabelfixed.f.try.f.ref \ progfixedshufflefixed.f progfixedshufflefixed.f.try.f.ref \ progshufflefree.f progshufflefree.f.try.f.ref changelog.ref \ emacs_findent.ref emacs_help.ref gedit_external.ref \ gedit_help.ref gedit_plugin.ref gedit_plugin_py.ref help.ref \ makefdeps.ref manpage.ref readme.ref vim_findent.ref \ vim_fortran.ref vim_help.ref CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/changelog.ref.in \ $(srcdir)/doit.in $(srcdir)/emacs_findent.ref.in \ $(srcdir)/emacs_help.ref.in $(srcdir)/esope.f.in \ $(srcdir)/esope.f.try.f.ref.in $(srcdir)/gedit_external.ref.in \ $(srcdir)/gedit_help.ref.in $(srcdir)/gedit_plugin.ref.in \ $(srcdir)/gedit_plugin_py.ref.in $(srcdir)/help.ref.in \ $(srcdir)/init.sh.in $(srcdir)/makefdeps.ref.in \ $(srcdir)/manpage.ref.in $(srcdir)/postlude.in \ $(srcdir)/prelude.in $(srcdir)/progfixed-dos.f.in \ $(srcdir)/progfixed-dos.f.try.f.ref.in \ $(srcdir)/progfixed.f.in $(srcdir)/progfixed.f.try.f.ref.in \ $(srcdir)/progfixed1.f.in $(srcdir)/progfixed1.f.try.f.ref.in \ $(srcdir)/progfixedfree-dos.f.in \ $(srcdir)/progfixedfree-dos.f.try.f.ref.in \ $(srcdir)/progfixedfree.f.in \ $(srcdir)/progfixedfree.f.try.f.ref.in \ $(srcdir)/progfixedrelabelfixed.f.in \ $(srcdir)/progfixedrelabelfixed.f.try.f.ref.in \ $(srcdir)/progfixedshufflefixed.f.in \ $(srcdir)/progfixedshufflefixed.f.try.f.ref.in \ $(srcdir)/progfree-dos.f.in \ $(srcdir)/progfree-dos.f.try.f.ref.in $(srcdir)/progfree.f.in \ $(srcdir)/progfree.f.try.f.ref.in $(srcdir)/progfree1.f.in \ $(srcdir)/progfree1.f.try.f.ref.in \ $(srcdir)/progfreefixed.f.in \ $(srcdir)/progfreefixed.f.try.f.ref.in \ $(srcdir)/progrelabelfree.f.in \ $(srcdir)/progrelabelfree.f.try.f.ref.in \ $(srcdir)/progshufflefree.f.in \ $(srcdir)/progshufflefree.f.try.f.ref.in \ $(srcdir)/readme.ref.in $(srcdir)/test-compile.sh.in \ $(srcdir)/vim_findent.ref.in $(srcdir)/vim_fortran.ref.in \ $(srcdir)/vim_help.ref.in $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_OBJEXT = @BUILD_OBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CPP_FOR_BUILD = @CPP_FOR_BUILD@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXCPPFLAGS_FOR_BUILD = @CXXCPPFLAGS_FOR_BUILD@ CXXCPP_FOR_BUILD = @CXXCPP_FOR_BUILD@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@ CXX_FOR_BUILD = @CXX_FOR_BUILD@ CYGPATH_W = @CYGPATH_W@ DATE = @DATE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CC_FOR_BUILD = @ac_ct_CC_FOR_BUILD@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_CXX_FOR_BUILD = @ac_ct_CXX_FOR_BUILD@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ make_include = @make_include@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # TESTS = \ test1.sh test2.sh test3.sh test4.sh test5.sh test6.sh \ test7.sh test8.sh test9.sh test10.sh test11.sh test12.sh \ test13.sh test14.sh test15.sh test16.sh test17.sh test18.sh \ test19.sh test20.sh test21.sh test22.sh test23.sh test24.sh \ test25.sh test26.sh AM_TESTS_ENVIRONMENT = ./init.sh ; EXTRA_DIST = $(TESTS) all: all-am .SUFFIXES: .SUFFIXES: .log .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu test/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): prelude: $(top_builddir)/config.status $(srcdir)/prelude.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ postlude: $(top_builddir)/config.status $(srcdir)/postlude.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ test-compile.sh: $(top_builddir)/config.status $(srcdir)/test-compile.sh.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ doit: $(top_builddir)/config.status $(srcdir)/doit.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ init.sh: $(top_builddir)/config.status $(srcdir)/init.sh.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progfixed-dos.f.try.f.ref: $(top_builddir)/config.status $(srcdir)/progfixed-dos.f.try.f.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progfixed-dos.f: $(top_builddir)/config.status $(srcdir)/progfixed-dos.f.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progfixed.f.try.f.ref: $(top_builddir)/config.status $(srcdir)/progfixed.f.try.f.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progfixed.f: $(top_builddir)/config.status $(srcdir)/progfixed.f.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progfixed1.f.try.f.ref: $(top_builddir)/config.status $(srcdir)/progfixed1.f.try.f.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progfixed1.f: $(top_builddir)/config.status $(srcdir)/progfixed1.f.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progfixedfree-dos.f.try.f.ref: $(top_builddir)/config.status $(srcdir)/progfixedfree-dos.f.try.f.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progfixedfree-dos.f: $(top_builddir)/config.status $(srcdir)/progfixedfree-dos.f.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progfixedfree.f.try.f.ref: $(top_builddir)/config.status $(srcdir)/progfixedfree.f.try.f.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progfixedfree.f: $(top_builddir)/config.status $(srcdir)/progfixedfree.f.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progfree-dos.f.try.f.ref: $(top_builddir)/config.status $(srcdir)/progfree-dos.f.try.f.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progfree-dos.f: $(top_builddir)/config.status $(srcdir)/progfree-dos.f.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progfree.f.try.f.ref: $(top_builddir)/config.status $(srcdir)/progfree.f.try.f.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progfree.f: $(top_builddir)/config.status $(srcdir)/progfree.f.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progfree1.f.try.f.ref: $(top_builddir)/config.status $(srcdir)/progfree1.f.try.f.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progfree1.f: $(top_builddir)/config.status $(srcdir)/progfree1.f.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progfreefixed.f.try.f.ref: $(top_builddir)/config.status $(srcdir)/progfreefixed.f.try.f.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progfreefixed.f: $(top_builddir)/config.status $(srcdir)/progfreefixed.f.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ esope.f.try.f.ref: $(top_builddir)/config.status $(srcdir)/esope.f.try.f.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ esope.f: $(top_builddir)/config.status $(srcdir)/esope.f.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progrelabelfree.f: $(top_builddir)/config.status $(srcdir)/progrelabelfree.f.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progrelabelfree.f.try.f.ref: $(top_builddir)/config.status $(srcdir)/progrelabelfree.f.try.f.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progfixedrelabelfixed.f: $(top_builddir)/config.status $(srcdir)/progfixedrelabelfixed.f.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progfixedrelabelfixed.f.try.f.ref: $(top_builddir)/config.status $(srcdir)/progfixedrelabelfixed.f.try.f.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progfixedshufflefixed.f: $(top_builddir)/config.status $(srcdir)/progfixedshufflefixed.f.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progfixedshufflefixed.f.try.f.ref: $(top_builddir)/config.status $(srcdir)/progfixedshufflefixed.f.try.f.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progshufflefree.f: $(top_builddir)/config.status $(srcdir)/progshufflefree.f.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ progshufflefree.f.try.f.ref: $(top_builddir)/config.status $(srcdir)/progshufflefree.f.try.f.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ changelog.ref: $(top_builddir)/config.status $(srcdir)/changelog.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ emacs_findent.ref: $(top_builddir)/config.status $(srcdir)/emacs_findent.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ emacs_help.ref: $(top_builddir)/config.status $(srcdir)/emacs_help.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ gedit_external.ref: $(top_builddir)/config.status $(srcdir)/gedit_external.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ gedit_help.ref: $(top_builddir)/config.status $(srcdir)/gedit_help.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ gedit_plugin.ref: $(top_builddir)/config.status $(srcdir)/gedit_plugin.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ gedit_plugin_py.ref: $(top_builddir)/config.status $(srcdir)/gedit_plugin_py.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ help.ref: $(top_builddir)/config.status $(srcdir)/help.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ makefdeps.ref: $(top_builddir)/config.status $(srcdir)/makefdeps.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ manpage.ref: $(top_builddir)/config.status $(srcdir)/manpage.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ readme.ref: $(top_builddir)/config.status $(srcdir)/readme.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ vim_findent.ref: $(top_builddir)/config.status $(srcdir)/vim_findent.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ vim_fortran.ref: $(top_builddir)/config.status $(srcdir)/vim_fortran.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ vim_help.ref: $(top_builddir)/config.status $(srcdir)/vim_help.ref.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test1.sh.log: test1.sh @p='test1.sh'; \ b='test1.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test2.sh.log: test2.sh @p='test2.sh'; \ b='test2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test3.sh.log: test3.sh @p='test3.sh'; \ b='test3.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test4.sh.log: test4.sh @p='test4.sh'; \ b='test4.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test5.sh.log: test5.sh @p='test5.sh'; \ b='test5.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test6.sh.log: test6.sh @p='test6.sh'; \ b='test6.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test7.sh.log: test7.sh @p='test7.sh'; \ b='test7.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test8.sh.log: test8.sh @p='test8.sh'; \ b='test8.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test9.sh.log: test9.sh @p='test9.sh'; \ b='test9.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test10.sh.log: test10.sh @p='test10.sh'; \ b='test10.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test11.sh.log: test11.sh @p='test11.sh'; \ b='test11.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test12.sh.log: test12.sh @p='test12.sh'; \ b='test12.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test13.sh.log: test13.sh @p='test13.sh'; \ b='test13.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test14.sh.log: test14.sh @p='test14.sh'; \ b='test14.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test15.sh.log: test15.sh @p='test15.sh'; \ b='test15.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test16.sh.log: test16.sh @p='test16.sh'; \ b='test16.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test17.sh.log: test17.sh @p='test17.sh'; \ b='test17.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test18.sh.log: test18.sh @p='test18.sh'; \ b='test18.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test19.sh.log: test19.sh @p='test19.sh'; \ b='test19.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test20.sh.log: test20.sh @p='test20.sh'; \ b='test20.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test21.sh.log: test21.sh @p='test21.sh'; \ b='test21.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test22.sh.log: test22.sh @p='test22.sh'; \ b='test22.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test23.sh.log: test23.sh @p='test23.sh'; \ b='test23.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test24.sh.log: test24.sh @p='test24.sh'; \ b='test24.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test25.sh.log: test25.sh @p='test25.sh'; \ b='test25.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test26.sh.log: test26.sh @p='test26.sh'; \ b='test26.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ clean-local cscopelist-am ctags-am distclean distclean-generic \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am recheck tags-am \ uninstall uninstall-am .PRECIOUS: Makefile clean-local: rm -rf *.tmpdir # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: findent-4.3.2/test/changelog.ref.in0000644000000000000000000000005014566134066014114 0ustar00findent-4.3.2: pre01: recognize SIMPLE findent-4.3.2/test/doit.in0000755000000000000000000000063014566134066012360 0ustar00#!/bin/sh rc=0 flags=$1 eflags=$2 comment=$3 exe=$FINDENT for flag in $flags ; do cat prog | $exe $eflags $flag | tr -d '\r' > result if cmp -s expect result ; then echo "$flag : OK $comment" else echo "$flag : NOT OK $comment" echo "expected:" cat expect echo "got:" cat result echo "program is:" cat prog rc=`expr $rc + 1` fi done exit $rc findent-4.3.2/test/emacs_findent.ref.in0000644000000000000000000000017514566134066014774 0ustar00;;;; this file contains an interface to use findent within emacs. ;;;; the C-M-q command ("indent function") is redefined to findent-4.3.2/test/emacs_help.ref.in0000644000000000000000000000003314566134066014266 0ustar00Usage of findent in emacs findent-4.3.2/test/esope.f.in0000644000000000000000000000104214566134066012753 0ustar00! program esope ! 'normal' fortran compilers do not understand esope syntax #if 0 segment, test continue integer t endsegment SEGMENT, test continue integer t ENDSEGMENT 10 segment test1 30 continue endsegment segment continue segment = 10 continue segment tra = 10 continue segini,val segini ,val segsup , val #endif end findent-4.3.2/test/esope.f.try.f.ref.in0000644000000000000000000000105314566134066014571 0ustar00! program esope ! 'normal' fortran compilers do not understand esope syntax #if 0 segment, test continue integer t endsegment SEGMENT, test continue integer t ENDSEGMENT 10 segment test1 30 continue endsegment segment continue segment = 10 continue segment tra = 10 continue segini,val segini ,val segsup , val #endif end findent-4.3.2/test/gedit_external.ref.in0000644000000000000000000000007114566134066015166 0ustar00#!/bin/sh # to be used in gedit to indent fortran source findent-4.3.2/test/gedit_help.ref.in0000644000000000000000000000003314566134066014272 0ustar00Usage of findent in gedit findent-4.3.2/test/gedit_plugin.ref.in0000644000000000000000000000003014566134066014635 0ustar00[Plugin] Loader=python3 findent-4.3.2/test/gedit_plugin_py.ref.in0000644000000000000000000000005214566134066015351 0ustar00# -*- coding: utf-8 -*- # Findent plugin findent-4.3.2/test/help.ref.in0000644000000000000000000000002214566134066013114 0ustar00findent [options] findent-4.3.2/test/init.sh.in0000755000000000000000000000320314566134066012774 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. exit 0 findent-4.3.2/test/makefdeps.ref.in0000644000000000000000000000003214566134066014124 0ustar00#!/bin/sh # - makefdeps - findent-4.3.2/test/manpage.ref.in0000644000000000000000000000007314566134066013602 0ustar00.\" DO NOT MODIFY THIS FILE! It was created by findent \-H findent-4.3.2/test/postlude.in0000644000000000000000000000000214566134066013246 0ustar00: findent-4.3.2/test/prelude.in0000644000000000000000000000062514566134066013062 0ustar00rp() { # poor man's realpath cd "$1" pwd } . ../src/env.sh if [ "$FINDENTCHECK" ]; then export FINDENT="$FINDENTCHECK" else if [ -f $(rp ../src)/findent.exe ]; then export FINDENT=$(rp ../src)/findent.exe else export FINDENT=$(rp ../src)/findent fi fi export WFINDENT=$(rp ../scripts)/wfindent dir=$(basename $0).tmpdir rm -rf $dir mkdir $dir cd $dir # vim: filetype=sh findent-4.3.2/test/progfixed-dos.f.in0000644000000000000000000000626614566134066014427 0ustar00! -I0 -i5 -a1 -b2 -d3 -f4 -m5 -ifixed module m1 integer k enum, bind(c) enumerator :: red =1, blue, black =5 enumerator yellow enumerator gold, silver, bronze enumerator :: purple enumerator :: pink, lavender endenum #ifdef foo garbage #endif contains function f(x) print *,'abc 9 def' print *,"abcd 8 efgh" return end function #ifdef usempi function f1(x,m) real x,m #elif defined(useopenmp) function f1(x,m,n) real x,m,n #else function f1(x) real x #endif continue end function f1 end module program progfixed type mytype ! mytype integer i real x end type mytype #ifdef abcde real klm(10) #endif integer x(100) type(mytype) xyz continue do i=1,20 block do 90 k=1,90 do 90 k1=1,4 call one(a) do 7 j=1,20 call two(a) 7 x=x+j continue 90 continue continue end block enddo critical x=y endcritical critical x=y endcritical critical x=y end critical if (.false.) goto 88 if (.false.) goto 99999 88 if ('x' .eq. "abc''d") l=1 99999 continue if ('x' .eq. "abc''d")then continue endif ASSOCIATE ( Z => EXP(-(a**2+Y**2)) * COS(THETA)) PRINT *, A+Z, A-Z END ASSOCIATE forall(i=1:4) x(i)=5 continue forall(i=1:4) ! forall x(i)=6 end forall where(x.eq.0) x=5 ! where continue where(x.eq.0) x=10 endwhere continue where(x.eq.0) x=10 elsewhere x=11 endwhere select case(ia) case(1) print *,3 do i=1,9 continue enddo case(2) print*,6 case default print *,0 endselect end program subroutine one(a) continue entry myentry continue return end subroutine subroutine two(a) continue return endsubroutine subroutine three(a) continue return end subroutine four(a) continue return endsubroutine four subrou xtine five continue return end findent-4.3.2/test/progfixed-dos.f.try.f.ref.in0000644000000000000000000000620514566134066016234 0ustar00! -I0 -i5 -a1 -b2 -d3 -f4 -m5 -ifixed module m1 integer k enum, bind(c) enumerator :: red =1, blue, black =5 enumerator yellow enumerator gold, silver, bronze enumerator :: purple enumerator :: pink, lavender endenum #ifdef foo garbage #endif contains function f(x) print *,'abc 9 def' print *,"abcd 8 efgh" return end function #ifdef usempi function f1(x,m) real x,m #elif defined(useopenmp) function f1(x,m,n) real x,m,n #else function f1(x) real x #endif continue end function f1 end module program progfixed type mytype ! mytype integer i real x end type mytype #ifdef abcde real klm(10) #endif integer x(100) type(mytype) xyz continue do i=1,20 block do 90 k=1,90 do 90 k1=1,4 call one(a) do 7 j=1,20 call two(a) 7 x=x+j continue 90 continue continue end block enddo critical x=y endcritical critical x=y endcritical critical x=y end critical if (.false.) goto 88 if (.false.) goto 99999 88 if ('x' .eq. "abc''d") l=1 99999 continue if ('x' .eq. "abc''d")then continue endif ASSOCIATE ( Z => EXP(-(a**2+Y**2)) * COS(THETA)) PRINT *, A+Z, A-Z END ASSOCIATE forall(i=1:4) x(i)=5 continue forall(i=1:4) ! forall x(i)=6 end forall where(x.eq.0) x=5 ! where continue where(x.eq.0) x=10 endwhere continue where(x.eq.0) x=10 elsewhere x=11 endwhere select case(ia) case(1) print *,3 do i=1,9 continue enddo case(2) print*,6 case default print *,0 endselect end program subroutine one(a) continue entry myentry continue return end subroutine subroutine two(a) continue return endsubroutine subroutine three(a) continue return end subroutine four(a) continue return endsubroutine four subrou xtine five continue return end findent-4.3.2/test/progfixed.f.in0000644000000000000000000001641114566134066013635 0ustar00! -I0 -i5 -a1 -b2 -d3 -f4 -m5 -Rr module m1 integer k enum, bind(c) enumerator :: red =1, blue, black =5 enumerator yellow enumerator gold, silver, bronze enumerator :: purple enumerator :: pink, lavender endenum contains function f(x) print *,'abc 9 def' print *,"abcd 8 efgh" return end #ifdef usempi function f1(x,m) real x,m #elif defined(useopenmp) function f1(x,m,n) real x,m,n #else function f1(x) real x #endif continue end function f1 end subroutine ticket7 integer :: int real :: float logical :: bool #define COND \ if (float > 1.) then; \ continue ; \ end if COND if (.true.) then int = int + 1 end if end program progfixed type mytype ! mytype integer i real x end type mytype #ifdef abcde real klm@@@(10) #endif real do(100) integer x(100) type(mytype) xyz character*1000 astring continue a_ap: do i=1,20 continue enddo a_ap end = 10 if ( e .eq. n .and. * e .eq. m )then npar = npar + 1 endif do i=1, c a comment c a comment x 1 c a comment x 0 continue enddo do 123 i=1,2 continue 123 continue print *,'; function ',indx," function " continue 99880 FORMAT (' function ') 99870 FORMAT(1X,'Invalid species name',2X,A8) do i=1,10 do (i) = 5 continue do(i) = 5 continue enddo x = y ! function values continue astring = " ! this x is x no comment!" print *,a,b, x c,d x ,e,f continue print *,a,b, x c,d x ,e,f loop: do i=1,20 block do 90 k=1,90 do 90 k1=1,4 call one(a) do 7 j=1,20 call two(a) 7 x=x+j continue 90 continue continue end block enddo loop bbb: block continue end block bbb sc: select case(ja) case(1) continue case(2) continue end select sc continue do i=1,20 block continue end block enddo critical x=y endcritical critical x=y endcritical critical x=y end critical wv: if ( a.eq.b) then continue endif wv if (.false.) goto 88 if (.false.) goto 99999 88 if ('x' .eq. "abc''d") l=1 99999 continue if ('x' .eq. "abc''d") l=1 continue if ('x' .eq. "abc''d")then continue endif ASSOCIATE ( Z => EXP(-(a**2+Y**2)) * COS(THETA)) PRINT *, A+Z, A-Z END ASSOCIATE forall(i=1:4) x(i)=5 continue forall(i=1:4) ! forall x(i)=6 end forall where(x.eq.0) x=5 ! where continue where(x.eq.0) x=10 endwhere continue where(x.eq.0) x=10 elsewhere x=11 endwhere select case(ia) case(1) print *,3 do i=1,9 continue enddo case(2) print*,6 case default print *,0 endselect end program subroutine one(a) continue entry myentry continue return end subroutine subroutine two(a) continue d print *,'debug i=',i D print *,'debug j=',j x = 4 + c next line starts with 1 5 + c next line starts with 2 5+ c next line starts with 3 5+ c next line starts with 4 5+ c next line starts with 5 5+ c next line starts with 6 5 return endsubroutine subroutine three(a) continue return end subroutine four(a) continue return endsubroutine four subrou xtine five continue return end subroutine seven a = 1 x + 2 ! comment 1 y + 3 ! comment 2 y + 4 y + 5 y + 6 a = 1 x + 2 ! comment 1 y + 3 ! comment 2 #ifdef klm y + 4 syntax error y + 5 syntax error #endif y + 6 end subroutine multiline_preproc #ifdef one\ two\ three do i=1,10 #elif \ defined(q) do i=1,5 #else do i=1,7 #endif x=x+4 enddo end subroutine nok implicit none type domain_data real, dimension(:, :), allocatable :: temperature integer:: ibound, icopy, todomain end type type(domain_data), dimension(2), target :: dom allocate(dom(1) % temperature(20, 20)) dom(1) % temperature = 0. dom(1) % temperature(:, 1) = 1. end subroutine nok ! testing with findentfix: subroutine testfix implicit none integer i,j,k do i=1,10 c comment continue do j=1,6 continue ! findentfix: do do k=1,7 continue enddo C FINDENTFIX: enddo enddo * findentFIX: do;do continue * findentfix: enddo;enddo continue enddo end subroutine testfix subroutine testpointer integer, pointer :: subroutinesub integer, target :: i subroutinesub=>i ! must not be recognized as subroutine statement end subroutine omp integer i,j,k C$ integer m,n, c$ ! comment in omp sentinel ! normal comment *$ *$ 1 o,p print *,i,j,k !$ print*, m,n,o,p !$ do 100 i=1,20 !$ do 100 j=1,i c$ continue c$100 continue c$omp parallel c$omp do do i=1,20 continue enddo c$omp end parallel end subroutine label_excercise do 10 x 0 i=1,10 continue 01 00 continue do 02 0 i=1,10 continue 20 continue end findent-4.3.2/test/progfixed.f.try.f.ref.in0000644000000000000000000001711314566134066015451 0ustar00! -I0 -i5 -a1 -b2 -d3 -f4 -m5 -Rr module m1 integer k enum, bind(c) enumerator :: red =1, blue, black =5 enumerator yellow enumerator gold, silver, bronze enumerator :: purple enumerator :: pink, lavender endenum contains function f(x) print *,'abc 9 def' print *,"abcd 8 efgh" return end function f #ifdef usempi function f1(x,m) real x,m #elif defined(useopenmp) function f1(x,m,n) real x,m,n #else function f1(x) real x #endif continue end function f1 end module m1 subroutine ticket7 integer :: int real :: float logical :: bool #define COND \ if (float > 1.) then; \ continue ; \ end if COND if (.true.) then int = int + 1 end if end subroutine ticket7 program progfixed type mytype ! mytype integer i real x end type mytype #ifdef abcde real klm@@@(10) #endif real do(100) integer x(100) type(mytype) xyz character*1000 astring continue a_ap: do i=1,20 continue enddo a_ap end = 10 if ( e .eq. n .and. * e .eq. m )then npar = npar + 1 endif do i=1, c a comment c a comment x 1 c a comment x 0 continue enddo do 123 i=1,2 continue 123 continue print *,'; function ',indx," function " continue 99880 FORMAT (' function ') 99870 FORMAT(1X,'Invalid species name',2X,A8) do i=1,10 do (i) = 5 continue do(i) = 5 continue enddo x = y ! function values continue astring = " ! this x is x no comment!" print *,a,b, x c,d x ,e,f continue print *,a,b, x c,d x ,e,f loop: do i=1,20 block do 90 k=1,90 do 90 k1=1,4 call one(a) do 7 j=1,20 call two(a) 7 x=x+j continue 90 continue continue end block enddo loop bbb: block continue end block bbb sc: select case(ja) case(1) continue case(2) continue end select sc continue do i=1,20 block continue end block enddo critical x=y endcritical critical x=y endcritical critical x=y end critical wv: if ( a.eq.b) then continue endif wv if (.false.) goto 88 if (.false.) goto 99999 88 if ('x' .eq. "abc''d") l=1 99999 continue if ('x' .eq. "abc''d") l=1 continue if ('x' .eq. "abc''d")then continue endif ASSOCIATE ( Z => EXP(-(a**2+Y**2)) * COS(THETA)) PRINT *, A+Z, A-Z END ASSOCIATE forall(i=1:4) x(i)=5 continue forall(i=1:4) ! forall x(i)=6 end forall where(x.eq.0) x=5 ! where continue where(x.eq.0) x=10 endwhere continue where(x.eq.0) x=10 elsewhere x=11 endwhere select case(ia) case(1) print *,3 do i=1,9 continue enddo case(2) print*,6 case default print *,0 endselect end program progfixed subroutine one(a) continue entry myentry continue return end subroutine one subroutine two(a) continue d print *,'debug i=',i D print *,'debug j=',j x = 4 + c next line starts with 1 5 + c next line starts with 2 5+ c next line starts with 3 5+ c next line starts with 4 5+ c next line starts with 5 5+ c next line starts with 6 5 return end subroutine two subroutine three(a) continue return end subroutine three subroutine four(a) continue return end subroutine four subrou xtine five continue return end subroutine five subroutine seven a = 1 x + 2 ! comment 1 y + 3 ! comment 2 y + 4 y + 5 y + 6 a = 1 x + 2 ! comment 1 y + 3 ! comment 2 #ifdef klm y + 4 syntax error y + 5 syntax error #endif y + 6 end subroutine seven subroutine multiline_preproc #ifdef one\ two\ three do i=1,10 #elif \ defined(q) do i=1,5 #else do i=1,7 #endif x=x+4 enddo end subroutine multiline_preproc subroutine nok implicit none type domain_data real, dimension(:, :), allocatable :: temperature integer:: ibound, icopy, todomain end type domain_data type(domain_data), dimension(2), target :: dom allocate(dom(1) % temperature(20, 20)) dom(1) % temperature = 0. dom(1) % temperature(:, 1) = 1. end subroutine nok ! testing with findentfix: subroutine testfix implicit none integer i,j,k do i=1,10 c comment continue do j=1,6 continue ! findentfix: do do k=1,7 continue enddo C FINDENTFIX: enddo enddo * findentFIX: do;do continue * findentfix: enddo;enddo continue enddo end subroutine testfix subroutine testpointer integer, pointer :: subroutinesub integer, target :: i subroutinesub=>i ! must not be recognized as subroutine statement end subroutine testpointer subroutine omp integer i,j,k C$ integer m,n, c$ ! comment in omp sentinel ! normal comment *$ *$ 1 o,p print *,i,j,k !$ print*, m,n,o,p !$ do 100 i=1,20 !$ do 100 j=1,i c$ continue c$100 continue c$omp parallel c$omp do do i=1,20 continue enddo c$omp end parallel end subroutine omp subroutine label_excercise do 10 x 0 i=1,10 continue 100 continue do 02 0 i=1,10 continue 20 continue end subroutine label_excercise findent-4.3.2/test/progfixed1.f.in0000644000000000000000000000013614566134066013713 0ustar00! -i- -I8 -ifixed program programma continue end findent-4.3.2/test/progfixed1.f.try.f.ref.in0000644000000000000000000000013614566134066015527 0ustar00! -i- -I8 -ifixed program programma continue end findent-4.3.2/test/progfixedfree-dos.f.in0000644000000000000000000000646714566134066015274 0ustar00! -Ia -i5 -a1 -b2 -d3 -f4 -m5 -ofree module m1 integer k enum, bind(c) enumerator :: red =1, blue, black =5 enumerator yellow enumerator gold, silver, bronze enumerator :: purple enumerator :: pink, lavender endenum contains function f(x) print *,'abc 9 def' print *,"abcd 8 efgh" return end function end module program progfixed type mytype ! mytype integer i real x end type mytype #ifdef abcde real klm@@@(10) #endif integer x(100) type(mytype) xyz character*1000 astring do i=1, c a comment c a comment x 1 c a comment ! a floating comment x 0 continue enddo continue astring = " ! this x is x no comment!" print *,a,b, x c,d x ,e,f do i=1,20 block do 90 k=1,90 do 90 k1=1,4 call one(a) do 7 j=1,20 call two(a) 7 x=x+j continue 90 continue continue end block enddo critical x=y endcritical critical x=y endcritical critical x=y end critical if (.false.) goto 88 if (.false.) goto 99999 88 if ('x' .eq. "abc''d") l=1 99999 continue if ('x' .eq. "abc''d") l=1 continue if ('x' .eq. "abc''d")then continue endif ASSOCIATE ( Z => EXP(-(a**2+Y**2)) * COS(THETA)) PRINT *, A+Z, A-Z END ASSOCIATE forall(i=1:4) x(i)=5 continue forall(i=1:4) ! forall x(i)=6 end forall where(x.eq.0) x=5 ! where continue where(x.eq.0) x=10 endwhere continue where(x.eq.0) x=10 elsewhere x=11 endwhere select case(ia) case(1) print *,3 do i=1,9 continue enddo case(2) print*,6 case default print *,0 endselect end program subroutine one(a) continue entry myentry continue return end subroutine subroutine two(a) continue return endsubroutine subroutine three(a) continue return end subroutine four(a) continue return endsubroutine four subrou xtine five continue return end findent-4.3.2/test/progfixedfree-dos.f.try.f.ref.in0000644000000000000000000000561114566134066017076 0ustar00! -Ia -i5 -a1 -b2 -d3 -f4 -m5 -ofree module m1 integer k enum, bind(c) enumerator :: red =1, blue, black =5 enumerator yellow enumerator gold, silver, bronze enumerator :: purple enumerator :: pink, lavender endenum contains function f(x) print *,'abc& & def' print *,"abcd& & efgh" return end function end module program progfixed type mytype ! mytype integer i real x end type mytype #ifdef abcde real klm@@@(10) #endif integer x(100) type(mytype) xyz character*1000 astring do i=1,& ! a comment ! a comment &1& ! a comment ! a floating comment &0 continue enddo continue astring = " ! this& & is& & no comment!" print *,a,b,& &c,d& &,e,f do i=1,20 block do 90 k=1,90 do 90 k1=1,4 call one(a) do 7 j=1,20 call two(a) 7 x=x+j continue 90 continue continue end block enddo critical x=y endcritical critical x=y endcritical critical x=y end critical if (.false.) goto 88 if (.false.) goto 99999 88 if ('x' .eq. "abc''d") l=1 99999 continue if ('x' .eq. "abc''d") l=1 continue if ('x' .eq. "abc''d")then continue endif ASSOCIATE ( Z => EXP(-(a**2+Y**2)) * COS(THETA)) PRINT *, A+Z, A-Z END ASSOCIATE forall(i=1:4) x(i)=5 continue forall(i=1:4) ! forall x(i)=6 end forall where(x.eq.0) x=5 ! where continue where(x.eq.0) x=10 endwhere continue where(x.eq.0) x=10 elsewhere x=11 endwhere select case(ia) case(1) print *,3 do i=1,9 continue enddo case(2) print*,6 case default print *,0 endselect end program subroutine one(a) continue entry myentry continue return end subroutine subroutine two(a) continue return endsubroutine subroutine three(a) continue return end subroutine four(a) continue return endsubroutine four subrou& &tine five continue return end findent-4.3.2/test/progfixedfree.f.in0000644000000000000000000001346314566134066014503 0ustar00! -Ia -i5 -a1 -b2 -d3 -f4 -m5 -ofree -ifixed module m1 integer k enum, bind(c) enumerator :: red =1, blue, black =5 enumerator yellow enumerator gold, silver, bronze enumerator :: purple enumerator :: pink, lavender endenum contains function f(x) print *,'abc 9 def' print *,"abcd #ifdef foo garbage #endif 8 efgh" return end function # ifdef usempi function f1(x,m) real x,m # elif defined(useopenmp) function f1(x,m,n) real x,m,n # else function f1(x) real x # endif continue end function f1 end module program progfixed type mytype ! mytype integer i c a comment ! a floating comment real x end type mytype #ifdef abcde real klm@@@(10) #endif real do(100) integer x(100) type(mytype) xyz character*1000 astring continue a_ap: do i=1,20 continue enddo a_ap end = 10 if ( e .eq. n .and. * e .eq. m )then npar = npar + 1 endif do i=1, c a comment c a comment x 1 c a comment x 0 continue enddo do 123 i=1,2 continue 123 continue print *,'; function ',indx," function " continue 99880 FORMAT (' function ') 99870 FORMAT(1X,'Invalid species name',2X,A8) do i=1,10 do (i) = 5 continue do(i) = 5 continue enddo x = y ! function values continue astring = " ! this x is x no comment!" print *,a,b, x c,d x ,e,f continue print *,a,b, x c,d x ,e,f loop: do i=1,20 block do 90 k=1,90 do 90 k1=1,4 call one(a) do 7 j=1,20 call two(a) 7 x=x+j continue 90 continue continue end block enddo loop bbb: block continue end block bbb sc: select case(ja) case(1) continue case(2) continue end select sc continue do i=1,20 block continue end block enddo critical x=y endcritical critical x=y endcritical critical x=y end critical wv: if ( a.eq.b) then continue endif wv if (.false.) goto 88 if (.false.) goto 99999 88 if ('x' .eq. "abc''d") l=1 99999 continue if ('x' .eq. "abc''d") l=1 continue if ('x' .eq. "abc''d")then continue endif ASSOCIATE ( Z => EXP(-(a**2+Y**2)) * COS(THETA)) PRINT *, A+Z, A-Z END ASSOCIATE forall(i=1:4) x(i)=5 continue forall(i=1:4) ! forall x(i)=6 end forall where(x.eq.0) x=5 ! where continue where(x.eq.0) x=10 endwhere continue where(x.eq.0) x=10 elsewhere x=11 endwhere select case(ia) case(1) print *,3 do i=1,9 continue enddo case(2) print*,6 case default print *,0 endselect end program subroutine one(a) continue entry myentry continue return end subroutine subroutine two(a) continue d print *,'debug i=',i c D print *,'debug j=',j x = 4 + c next line starts with 1 5 + c next line starts with 2 5+ c next line starts with 3 5+ c next line starts with 4 5+ c next line starts with 5 5+ c next line starts with 6 5 return endsubroutine subroutine three(a) continue return end subroutine four(a) continue return endsubroutine four subrou xtine five continue return end subroutine seven a = 1 x + 2 ! comment 1 y + 3 ! comment 2 y + 4 y + 5 y + 6 a = 1 x + 2 ! comment 1 y + 3 ! comment 2 #ifdef klm y + 4 syntax error y + 5 syntax error #endif y + 6 end subroutine multiline_preproc #ifdef one\ two\ three do i=1,10 #elif \ defined(q) do i=1,5 #else do i=1,7 #endif x=x+4 enddo end subroutine omp integer i,j,k C$ integer m,n, c$ c$ !comment c$ *$ 1 o,p print *,i,j,k !$ print*, m,n,o,p !$ do 100 i=1,20 !$ do 100 j=1,i c$ continue c$100 continue end findent-4.3.2/test/progfixedfree.f.try.f.ref.in0000644000000000000000000001224114566134066016310 0ustar00! -Ia -i5 -a1 -b2 -d3 -f4 -m5 -ofree -ifixed module m1 integer k enum, bind(c) enumerator :: red =1, blue, black =5 enumerator yellow enumerator gold, silver, bronze enumerator :: purple enumerator :: pink, lavender endenum contains function f(x) print *,'abc& & def' print *,"abcd& #ifdef foo garbage #endif & efgh" return end function # ifdef usempi function f1(x,m) real x,m # elif defined(useopenmp) function f1(x,m,n) real x,m,n # else function f1(x) real x # endif continue end function f1 end module program progfixed type mytype ! mytype integer i ! a comment ! a floating comment real x end type mytype #ifdef abcde real klm@@@(10) #endif real do(100) integer x(100) type(mytype) xyz character*1000 astring continue a_ap: do i=1,20 continue enddo a_ap end = 10 if ( e .eq. n .and.& &e .eq. m )then npar = npar + 1 endif do i=1,& ! a comment ! a comment &1& ! a comment &0 continue enddo do 123 i=1,2 continue 123 continue print *,'; function ',indx," function " continue 99880 FORMAT (' function ') 99870 FORMAT(1X,'Invalid species name',2X,A8) do i=1,10 do (i) = 5 continue do(i) = 5 continue enddo x = y ! function values continue astring = " ! this& & is& & no comment!" print *,a,b,& &c,d& &,e,f continue print *,a,b,& &c,d& &,e,f loop: do i=1,20 block do 90 k=1,90 do 90 k1=1,4 call one(a) do 7 j=1,20 call two(a) 7 x=x+j continue 90 continue continue end block enddo loop bbb: block continue end block bbb sc: select case(ja) case(1) continue case(2) continue end select sc continue do i=1,20 block continue end block enddo critical x=y endcritical critical x=y endcritical critical x=y end critical wv: if ( a.eq.b) then continue endif wv if (.false.) goto 88 if (.false.) goto 99999 88 if ('x' .eq. "abc''d") l=1 99999 continue if ('x' .eq. "abc''d") l=1 continue if ('x' .eq. "abc''d")then continue endif ASSOCIATE ( Z => EXP(-(a**2+Y**2)) * COS(THETA)) PRINT *, A+Z, A-Z END ASSOCIATE forall(i=1:4) x(i)=5 continue forall(i=1:4) ! forall x(i)=6 end forall where(x.eq.0) x=5 ! where continue where(x.eq.0) x=10 endwhere continue where(x.eq.0) x=10 elsewhere x=11 endwhere select case(ia) case(1) print *,3 do i=1,9 continue enddo case(2) print*,6 case default print *,0 endselect end program subroutine one(a) continue entry myentry continue return end subroutine subroutine two(a) continue !d print *,'debug i=',i ! !D print *,'debug j=',j x = 4 +& ! next line starts with &5 +& ! next line starts with &5+& ! next line starts with &5+& ! next line starts with &5+& ! next line starts with &5+& ! next line starts with &5 return endsubroutine subroutine three(a) continue return end subroutine four(a) continue return endsubroutine four subrou& &tine five continue return end subroutine seven a = 1& &+ 2& ! comment 1 &+ 3& ! comment 2 &+ 4& &+ 5& &+ 6 a = 1& &+ 2& ! comment 1 &+ 3& ! comment 2 #ifdef klm &+ 4 syntax error& &+ 5 syntax error& #endif &+ 6 end subroutine multiline_preproc #ifdef one\ two\ three do i=1,10 #elif \ defined(q) do i=1,5 #else do i=1,7 #endif x=x+4 enddo end subroutine omp integer i,j,k !$ integer m,n,& !$ & & !$ & &!comment !$ & & !$ &o,p print *,i,j,k !$ print*, m,n,o,p !$ do 100 i=1,20 !$ do 100 j=1,i !$ continue !$ 100 continue end findent-4.3.2/test/progfixedrelabelfixed.f.in0000644000000000000000000003173214566134066016207 0ustar00! --relabel=200,2 --relabel-reset=0 module points type :: point real :: x,y end type point interface real module function point_dist(a,b) type(point), intent(in) :: a,b end function point_dist end interface interface inter module procedure fun end interface contains real function fun(x) real x fun = a+10 end end module submodule (points) points_a contains subroutine x goto 1 1 continue end subroutine module procedure point_dist continue goto 10 10 continue write(*,*) "hoppa" point_dist = sqrt((a%x-b%x)**2+(a%y-b%y)**2) end procedure end submodule subroutine mysub(*,i,k,*,*) return 1 end subroutine mysubomp !$ do 10 i=1,20 !$ do 10 j=1,10 !$ continue !$ 10 continue end subroutine subroutine mysub1 1 continue end subroutine mysub2(i) return end function myfun(x,i) goto (10,20,30) i #ifdef xyz 10 myfun = 10*x; goto 50 #endif 20 myfun = 20*x; goto 50 30 myfun = 30*x; goto 50 #ifndef xyz 10 myfun = 20*x; goto 50 #endif 50 end function myfun program p integer jf(2) jf(1) = 10 111 continue ; x= & y+10 ; continue ; z = 123 + & 12345 11 continue; continue ; continue do 1 i=1,20; do 2 j=1,20 ; do 3 k=0,4 x = x+1 3 continue 2 continue; 1 continue do 511 i=1,3 do 511, j=1,4 do 511 k=1,2 511 l=l+i+j+k do 5 i=1,3;;x=y; 5 continue do 12345, i=1,2 continue 12345 continue do 8 exit 8 continue do 9 while(i .eq. i+1) l = l+10 9 continue do 1001 , while(j .eq. j+1) do 1000, while(j .eq. j+1) 1000 continue; 1001 continue goto 120; if (0.eq.1) goto 130 120 continue 130 continue if(x) 91,92,93 ; 95 goto 92; goto 91 96 goto 93 if(x) 91, ! comment & 92, !comment & 93 ; 951 goto 92; goto 91 961 goto 93 #if 0 if(l) 91,92 #endif continue 91 continue 92 continue 93 continue goto( 91, 92, ! comment & 93, 1101) 4 if(x.eq.2)goto( 91, 92, ! comment & 93, 130),i ; goto 1101 ; goto 1102 assign 1101 to ixyz goto ixyz (91,92,93,1101) if(0 .eq. x)goto ixyz, (91,92, ! comment & 93,1102); goto 2010 1200 format(3i5) 1101 read 1200 if(1.eq.0) read 1200 read 1200,i,j,k if(1.eq.0)read 1200,i,j,k 1102 print 1200 if(1.eq.0)print 1200 print 1200,i, & j,k;goto 2010 if(1.eq.0) print 1200,i, & j,k;goto 2010 close (10) endfile 10 read '(i5)', i if(1.eq.0)read '(i5)', i read 2020,i,j,k if(1.eq.0)read 2020,i,j,k close(10,err=2010) if(1.eq.0)close(10,err=2010) open(10,err=2010) if(1.eq.0)open(10,err=2010) close(jf(1),err=2010) if(1.eq.0)close(jf(1),err=2010) endfile(9,err=2010) if(1.eq.0)endfile(9,err=2010) rewind(9,err=2010) if(1.eq.0)rewind(9,err=2010) flush(9,err=2010) if(1.eq.0)flush(9,err=2010) backspace(9,err=2010) inquire(9,err=2010) wait(9,err=2010) wait(9,end=2010) wait(9,eor=2010) write(jf(i),2020) read(*,'(a80)') read(*,fmt="(a80)") read(5,2020,err=2010,iostat=i,eor=2010,advance='no',end=2010) if(1.eq.0)backspace(9,err=2010); if(1.eq.0)inquire(9,err=2010) if(1.eq.0)wait(9,err=2010) if(1.eq.0)wait(9,end=2010) if(1.eq.0)wait(9,eor=2010) if(1.eq.0)write(jf(i),2020) if(1.eq.0)read(*,'(a80)') if(1.eq.0)read(*,fmt="(a80)") if(1.eq.0)read(5,2020,err=2010,iostat=i,eor=2010,advance='no',end=2010) read(5,err=2010,fmt='(3i3)', & end=2010) i,j,k write(6,2020) i,j,k write(*,2020) x write(6,fmt=2020)i,j,k if(i.eq.0)read(5,err=2010,fmt='(3i3)', & end=2010) i,j,k if(i.eq.0)write(6,2020) i,j,k if(i.eq.0)write(*,2020) x if(i.eq.0)write(6,fmt=2020)i,j,k 2010 continue 2020 format(3i5) call mysub(*3010,ixyz,j,*3020,*3030) if(1.eq.3) & call mysub(*3010,ixyz,j,*3020,*3030) call mysub1 call mysub1() call mysub2(klm) call mysub(*3010,3*400,3**4,*3020,*3030) call mysub(*3010,ij*400,3**ij,*3020,*3030) call mysub(*3010,ij*klm,3**4,*3020,*3030) if(1.eq.0)call mysub1 if(1.eq.0)call mysub1() if(1.eq.0)call mysub2(klm) if(1.eq.0)call mysub(*3010,3*400,3**4,*3020,*3030) if(1.eq.0)call mysub(*3010,ij*400,3**ij,*3020,*3030) if(1.eq.0)call mysub(*3010,ij*klm,3**4,*3020,*3030) 3010 continue 3020 continue 3030 continue contains real function f(x) goto 28 28 continue f = 10*x end function f subroutine subx goto 29 29 continue end subroutine subx end subroutine subx1 ! test following the man page #if 0 99 ... ! statement or format label IF(...) 110,120,130 IF(...) 110,120 DO 101 I=X,... 101 continue DO 102, I=X,... 102 continue DO 103 WHILE(...) 103 continue DO 104, WHILE(...) 104 continue DO 105 105 continue ACCEPT 100... ASSIGN 100 TO I BACKSPACE(...,ERR=100,...) CALL I(...,*100,...,&110,...,$120) CLOSE(...,ERR=100,...) DECODE(...,100,...,ERR=110,...) DELETE(...,ERR=110,...) ENCODE(...,100,...,ERR=110,...) ENDFILE(...,ERR=100,...) FIND(...,ERR=110,...) FLUSH(...,ERR=100,...) GOTO 100 GOTO I(100,110,120) GOTO I,(100,110,120) GOTO(100,110,120)... INQUIRE(...,ERR=100,...) OPEN(...,ERR=100,...) PRINT 100... READ 100... READ(...,100,...) READ(...,ERR=100,...,END=110,EOR=120,...,FMT=130)... REREAD 100... REREAD(...,100,...) REREAD(...,ERR=100,...,END=110,EOR=120,...,FMT=130)... REWIND(...,ERR=100,...) REWRITE(...,100) ... REWRITE(...,ERR=100,...,FMT=110,...,EOR=120)... TYPE 100... WAIT(...,ERR=100,...,END=110,...,EOR=120,...) WRITE(...,100) ... WRITE(...,ERR=100,...,FMT=110,...,EOR=120)... #endif 100 continue 110 continue 120 continue 130 continue end subroutine subx1 subroutine subx2 #if 0 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 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)... #endif 100 continue 110 continue 120 continue 130 continue end subroutine subroutine suby1 ! same as subx, now with omp #if 0 !$99 ... ! statement or format label !$ IF(...) 110,120,130 !$ IF(...) 110,120 !$ DO 101 I=X,... !$101 continue !$ DO 102, I=X,... !$102 continue !$ DO 103 WHILE(...) !$103 continue !$ DO 104, WHILE(...) !$104 continue !$ DO 105 !$105 continue !$ ACCEPT 100... !$ ASSIGN 100 TO I !$ BACKSPACE(...,ERR=100,...) !$ CALL I(...,*100,...,&110,...,$120) !$ CLOSE(...,ERR=100,...) !$ DECODE(...,100,...,ERR=110,...) !$ DELETE(...,ERR=110,...) !$ ENCODE(...,100,...,ERR=110,...) !$ ENDFILE(...,ERR=100,...) !$ FIND(...,ERR=110,...) !$ FLUSH(...,ERR=100,...) !$ GOTO 100 !$ GOTO I(100,110,120) !$ GOTO I,(100,110,120) !$ GOTO(100,110,120)... !$ INQUIRE(...,ERR=100,...) !$ OPEN(...,ERR=100,...) !$ PRINT 100... !$ READ 100... !$ READ(...,100,...) !$ READ(...,ERR=100,...,END=110,EOR=120,...,FMT=130)... !$ REREAD 100... !$ REREAD(...,100,...) !$ REREAD(...,ERR=100,...,END=110,EOR=120,...,FMT=130)... !$ REWIND(...,ERR=100,...) !$ REWRITE(...,100) ... !$ REWRITE(...,ERR=100,...,FMT=110,...,EOR=120)... !$ TYPE 100... !$ WAIT(...,ERR=100,...,END=110,...,EOR=120,...) !$ WRITE(...,100) ... !$ WRITE(...,ERR=100,...,FMT=110,...,EOR=120)... #endif !$100 continue !$110 continue !$120 continue !$130 continue end subroutine suby1 subroutine suby2 #if 0 !$ !$ 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 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)... !$ #endif !$100 continue !$110 continue !$120 continue !$130 continue end subroutine subroutine old_dec #if 0 integer buf(20) read(5'1000,err=50) x read(abc '1000,err=50) x read(5#1000,err=50) x read(5#n,err=50) x read(5#n,10,err=50) x write(5#1000,err=50) x write(5#n,err=50) x call sub(&60,$50,*50) reread 20,x,y,z reread(3,20),x,y,z type 10,x,y,z type *,x,y,z type 10 type * accept 20,x accept 20 accept *,x encode(80,30,buf,x,y,z,err=50) decode(80,40,buf,x,y,z,err=60) 10 format(3f10.4) 20 format(f10.6) 30 format(3f20.10) 40 format(3f20.6) 50 continue 60 continue #endif end subroutine abc ! no relabel possible, because of intervening preprocessor statement goto i,(20,4321 #ifdef trala & ,20) #else & ,145,20) #endif 10000 x=1 20 x=1 4321 x=1 4322 x=1 145 x=2 assign 10000 to i end subroutine subroutine xyz ! no relabel possible, because of intervening preprocessor statement in previous subroutine 1 continue end subroutine findent-4.3.2/test/progfixedrelabelfixed.f.try.f.ref.in0000644000000000000000000003114414566134066020020 0ustar00! --relabel=200,2 --relabel-reset=0 module points type :: point real :: x,y end type point interface real module function point_dist(a,b) type(point), intent(in) :: a,b end function point_dist end interface interface inter module procedure fun end interface contains real function fun(x) real x fun = a+10 end end module submodule (points) points_a contains subroutine x goto 200 200 continue end subroutine module procedure point_dist continue goto 202 202 continue write(*,*) "hoppa" point_dist = sqrt((a%x-b%x)**2+(a%y-b%y)**2) end procedure end submodule subroutine mysub(*,i,k,*,*) return 1 end subroutine mysubomp !$ do 204 i=1,20 !$ do 204 j=1,10 !$ continue !$204 continue end subroutine subroutine mysub1 206 continue end subroutine mysub2(i) return end function myfun(x,i) goto (208,210,212) i #ifdef xyz 208 myfun = 10*x; goto 214 #endif 210 myfun = 20*x; goto 214 212 myfun = 30*x; goto 214 #ifndef xyz 208 myfun = 20*x; goto 214 #endif 214 end function myfun program p integer jf(2) jf(1) = 10 216 continue ; x= & y+10 ; continue ; z = 123 + & 12345 218 continue; continue ; continue do 224 i=1,20; do 222 j=1,20 ; do 220 k=0,4 x = x+1 220 continue 222 continue; 224 continue do 226 i=1,3 do 226, j=1,4 do 226 k=1,2 226 l=l+i+j+k do 228 i=1,3;;x=y; 228 continue do 230, i=1,2 continue 230 continue do 232 exit 232 continue do 234 while(i .eq. i+1) l = l+10 234 continue do 238 , while(j .eq. j+1) do 236, while(j .eq. j+1) 236 continue; 238 continue goto 240; if (0.eq.1) goto 242 240 continue 242 continue if(x) 252,254,256 ; 244 goto 254; goto 252 246 goto 256 if(x) 252, ! comment & 254, !comment & 256 ; 248 goto 254; goto 252 250 goto 256 #if 0 if(l) 252,254 #endif continue 252 continue 254 continue 256 continue goto( 252, 254, ! comment & 256, 260) 4 if(x.eq.2)goto( 252, 254, ! comment & 256, 242),i ; goto 260 ; goto 262 assign 260 to ixyz goto ixyz (252,254,256,260) if(0 .eq. x)goto ixyz, (252,254, ! comment & 256,262); goto 264 258 format(3i5) 260 read 258 if(1.eq.0) read 258 read 258,i,j,k if(1.eq.0)read 258,i,j,k 262 print 258 if(1.eq.0)print 258 print 258,i, & j,k;goto 264 if(1.eq.0) print 258,i, & j,k;goto 264 close (10) endfile 10 read '(i5)', i if(1.eq.0)read '(i5)', i read 266,i,j,k if(1.eq.0)read 266,i,j,k close(10,err=264) if(1.eq.0)close(10,err=264) open(10,err=264) if(1.eq.0)open(10,err=264) close(jf(1),err=264) if(1.eq.0)close(jf(1),err=264) endfile(9,err=264) if(1.eq.0)endfile(9,err=264) rewind(9,err=264) if(1.eq.0)rewind(9,err=264) flush(9,err=264) if(1.eq.0)flush(9,err=264) backspace(9,err=264) inquire(9,err=264) wait(9,err=264) wait(9,end=264) wait(9,eor=264) write(jf(i),266) read(*,'(a80)') read(*,fmt="(a80)") read(5,266,err=264,iostat=i,eor=264,advance='no',end=264) if(1.eq.0)backspace(9,err=264); if(1.eq.0)inquire(9,err=264) if(1.eq.0)wait(9,err=264) if(1.eq.0)wait(9,end=264) if(1.eq.0)wait(9,eor=264) if(1.eq.0)write(jf(i),266) if(1.eq.0)read(*,'(a80)') if(1.eq.0)read(*,fmt="(a80)") if(1.eq.0)read(5,266,err=264,iostat=i,eor=264,advance='no',end=264) read(5,err=264,fmt='(3i3)', & end=264) i,j,k write(6,266) i,j,k write(*,266) x write(6,fmt=266)i,j,k if(i.eq.0)read(5,err=264,fmt='(3i3)', & end=264) i,j,k if(i.eq.0)write(6,266) i,j,k if(i.eq.0)write(*,266) x if(i.eq.0)write(6,fmt=266)i,j,k 264 continue 266 format(3i5) call mysub(*268,ixyz,j,*270,*272) if(1.eq.3) & call mysub(*268,ixyz,j,*270,*272) call mysub1 call mysub1() call mysub2(klm) call mysub(*268,3*400,3**4,*270,*272) call mysub(*268,ij*400,3**ij,*270,*272) call mysub(*268,ij*klm,3**4,*270,*272) if(1.eq.0)call mysub1 if(1.eq.0)call mysub1() if(1.eq.0)call mysub2(klm) if(1.eq.0)call mysub(*268,3*400,3**4,*270,*272) if(1.eq.0)call mysub(*268,ij*400,3**ij,*270,*272) if(1.eq.0)call mysub(*268,ij*klm,3**4,*270,*272) 268 continue 270 continue 272 continue contains real function f(x) goto 274 274 continue f = 10*x end function f subroutine subx goto 276 276 continue end subroutine subx end subroutine subx1 ! test following the man page #if 0 278 ... ! statement or format label IF(...) 292,294,296 IF(...) 292,294 DO 280 I=X,... 280 continue DO 282, I=X,... 282 continue DO 284 WHILE(...) 284 continue DO 286, WHILE(...) 286 continue DO 288 288 continue ACCEPT 290... ASSIGN 290 TO I BACKSPACE(...,ERR=290,...) CALL I(...,*290,...,&292,...,$294) CLOSE(...,ERR=290,...) DECODE(...,290,...,ERR=292,...) DELETE(...,ERR=292,...) ENCODE(...,290,...,ERR=292,...) ENDFILE(...,ERR=290,...) FIND(...,ERR=292,...) FLUSH(...,ERR=290,...) GOTO 290 GOTO I(290,292,294) GOTO I,(290,292,294) GOTO(290,292,294)... INQUIRE(...,ERR=290,...) OPEN(...,ERR=290,...) PRINT 290... READ 290... READ(...,290,...) READ(...,ERR=290,...,END=292,EOR=294,...,FMT=296)... REREAD 290... REREAD(...,290,...) REREAD(...,ERR=290,...,END=292,EOR=294,...,FMT=296)... REWIND(...,ERR=290,...) REWRITE(...,290) ... REWRITE(...,ERR=290,...,FMT=292,...,EOR=294)... TYPE 290... WAIT(...,ERR=290,...,END=292,...,EOR=294,...) WRITE(...,290) ... WRITE(...,ERR=290,...,FMT=292,...,EOR=294)... #endif 290 continue 292 continue 294 continue 296 continue end subroutine subx1 subroutine subx2 #if 0 if(...) ACCEPT 298... if(...) ASSIGN 298 TO I if(...) BACKSPACE(...,ERR=298,...) if(...) CALL I(...,*298,...,&300,...,$302) if(...) CLOSE(...,ERR=298,...) if(...) DECODE(...,298,...,ERR=300,...) if(...) DELETE(...,ERR=300,...) if(...) ENCODE(...,298,...,ERR=300,...) if(...) ENDFILE(...,ERR=298,...) if(...) FIND(...,ERR=300,...) if(...) FLUSH(...,ERR=298,...) if(...) GOTO 298 if(...) GOTO I(298,300,302) if(...) GOTO I,(298,300,302) if(...) GOTO(298,300,302)... if(...) INQUIRE(...,ERR=298,...) if(...) OPEN(...,ERR=298,...) if(...) PRINT 298... if(...) READ 298... if(...) READ(...,298,...) if(...) READ(...,ERR=298,...,END=300,EOR=302,...,FMT=304)... if(...) REREAD 298... if(...) REREAD(...,298,...) if(...) REREAD(...,ERR=298,...,END=300,EOR=302,...,FMT=304)... if(...) REWIND(...,ERR=298,...) if(...) REWRITE(...,298) ... if(...) REWRITE(...,ERR=298,...,FMT=300,...,EOR=302)... if(...) TYPE 298... if(...) WAIT(...,ERR=298,...,END=300,...,EOR=302,...) if(...) WRITE(...,298) ... if(...) WRITE(...,ERR=298,...,FMT=300,...,EOR=302)... #endif 298 continue 300 continue 302 continue 304 continue end subroutine subroutine suby1 ! same as subx, now with omp #if 0 !$306 ... ! statement or format label !$ IF(...) 320,322,324 !$ IF(...) 320,322 !$ DO 308 I=X,... !$308 continue !$ DO 310, I=X,... !$310 continue !$ DO 312 WHILE(...) !$312 continue !$ DO 314, WHILE(...) !$314 continue !$ DO 316 !$316 continue !$ ACCEPT 318... !$ ASSIGN 318 TO I !$ BACKSPACE(...,ERR=318,...) !$ CALL I(...,*318,...,&320,...,$322) !$ CLOSE(...,ERR=318,...) !$ DECODE(...,318,...,ERR=320,...) !$ DELETE(...,ERR=320,...) !$ ENCODE(...,318,...,ERR=320,...) !$ ENDFILE(...,ERR=318,...) !$ FIND(...,ERR=320,...) !$ FLUSH(...,ERR=318,...) !$ GOTO 318 !$ GOTO I(318,320,322) !$ GOTO I,(318,320,322) !$ GOTO(318,320,322)... !$ INQUIRE(...,ERR=318,...) !$ OPEN(...,ERR=318,...) !$ PRINT 318... !$ READ 318... !$ READ(...,318,...) !$ READ(...,ERR=318,...,END=320,EOR=322,...,FMT=324)... !$ REREAD 318... !$ REREAD(...,318,...) !$ REREAD(...,ERR=318,...,END=320,EOR=322,...,FMT=324)... !$ REWIND(...,ERR=318,...) !$ REWRITE(...,318) ... !$ REWRITE(...,ERR=318,...,FMT=320,...,EOR=322)... !$ TYPE 318... !$ WAIT(...,ERR=318,...,END=320,...,EOR=322,...) !$ WRITE(...,318) ... !$ WRITE(...,ERR=318,...,FMT=320,...,EOR=322)... #endif !$318 continue !$320 continue !$322 continue !$324 continue end subroutine suby1 subroutine suby2 #if 0 !$ !$ if(...) ACCEPT 326... !$ if(...) ASSIGN 326 TO I !$ if(...) BACKSPACE(...,ERR=326,...) !$ if(...) CALL I(...,*326,...,&328,...,$330) !$ if(...) CLOSE(...,ERR=326,...) !$ if(...) DECODE(...,326,...,ERR=328,...) !$ if(...) DELETE(...,ERR=328,...) !$ if(...) ENCODE(...,326,...,ERR=328,...) !$ if(...) ENDFILE(...,ERR=326,...) !$ if(...) FIND(...,ERR=328,...) !$ if(...) FLUSH(...,ERR=326,...) !$ if(...) GOTO 326 !$ if(...) GOTO I(326,328,330) !$ if(...) GOTO I,(326,328,330) !$ if(...) GOTO(326,328,330)... !$ if(...) INQUIRE(...,ERR=326,...) !$ if(...) OPEN(...,ERR=326,...) !$ if(...) PRINT 326... !$ if(...) READ 326... !$ if(...) READ(...,326,...) !$ if(...) READ(...,ERR=326,...,END=328,EOR=330,...,FMT=332)... !$ if(...) REREAD 326... !$ if(...) REREAD(...,326,...) !$ if(...) REREAD(...,ERR=326,...,END=328,EOR=330,...,FMT=332)... !$ if(...) REWIND(...,ERR=326,...) !$ if(...) REWRITE(...,326) ... !$ if(...) REWRITE(...,ERR=326,...,FMT=328,...,EOR=330)... !$ if(...) TYPE 326... !$ if(...) WAIT(...,ERR=326,...,END=328,...,EOR=330,...) !$ if(...) WRITE(...,326) ... !$ if(...) WRITE(...,ERR=326,...,FMT=328,...,EOR=330)... !$ #endif !$326 continue !$328 continue !$330 continue !$332 continue end subroutine subroutine old_dec #if 0 integer buf(20) read(5'1000,err=342) x read(abc '1000,err=342) x read(5#1000,err=342) x read(5#n,err=342) x read(5#n,334,err=342) x write(5#1000,err=342) x write(5#n,err=342) x call sub(&344,$342,*342) reread 336,x,y,z reread(3,336),x,y,z type 334,x,y,z type *,x,y,z type 334 type * accept 336,x accept 336 accept *,x encode(80,338,buf,x,y,z,err=342) decode(80,340,buf,x,y,z,err=344) 334 format(3f10.4) 336 format(f10.6) 338 format(3f20.10) 340 format(3f20.6) 342 continue 344 continue #endif end subroutine abc ! no relabel possible, because of intervening preprocessor statement goto i,(20,4321 #ifdef trala & ,20) #else & ,145,20) #endif 10000 x=1 20 x=1 4321 x=1 4322 x=1 145 x=2 assign 10000 to i end subroutine subroutine xyz ! no relabel possible, because of intervening preprocessor statement in previous subroutine 1 continue end subroutine findent-4.3.2/test/progfixedshufflefixed.f.in0000644000000000000000000003171114566134066016232 0ustar00! --relabel=shuffle module points type :: point real :: x,y end type point interface real module function point_dist(a,b) type(point), intent(in) :: a,b end function point_dist end interface interface inter module procedure fun end interface contains real function fun(x) real x fun = a+10 end end module submodule (points) points_a contains subroutine x goto 1 1 continue end subroutine module procedure point_dist continue goto 10 10 continue write(*,*) "hoppa" point_dist = sqrt((a%x-b%x)**2+(a%y-b%y)**2) end procedure end submodule subroutine mysub(*,i,k,*,*) return 1 end subroutine mysubomp !$ do 10 i=1,20 !$ do 10 j=1,10 !$ continue !$ 10 continue end subroutine subroutine mysub1 1 continue end subroutine mysub2(i) return end function myfun(x,i) goto (10,20,30) i #ifdef xyz 10 myfun = 10*x; goto 50 #endif 20 myfun = 20*x; goto 50 30 myfun = 30*x; goto 50 #ifndef xyz 10 myfun = 20*x; goto 50 #endif 50 end function myfun program p integer jf(2) jf(1) = 10 111 continue ; x= & y+10 ; continue ; z = 123 + & 12345 11 continue; continue ; continue do 1 i=1,20; do 2 j=1,20 ; do 3 k=0,4 x = x+1 3 continue 2 continue; 1 continue do 511 i=1,3 do 511, j=1,4 do 511 k=1,2 511 l=l+i+j+k do 5 i=1,3;;x=y; 5 continue do 12345, i=1,2 continue 12345 continue do 8 exit 8 continue do 9 while(i .eq. i+1) l = l+10 9 continue do 1001 , while(j .eq. j+1) do 1000, while(j .eq. j+1) 1000 continue; 1001 continue goto 120; if (0.eq.1) goto 130 120 continue 130 continue if(x) 91,92,93 ; 95 goto 92; goto 91 96 goto 93 if(x) 91, ! comment & 92, !comment & 93 ; 951 goto 92; goto 91 961 goto 93 #if 0 if(l) 91,92 #endif continue 91 continue 92 continue 93 continue goto( 91, 92, ! comment & 93, 1101) 4 if(x.eq.2)goto( 91, 92, ! comment & 93, 130),i ; goto 1101 ; goto 1102 assign 1101 to ixyz goto ixyz (91,92,93,1101) if(0 .eq. x)goto ixyz, (91,92, ! comment & 93,1102); goto 2010 1200 format(3i5) 1101 read 1200 if(1.eq.0) read 1200 read 1200,i,j,k if(1.eq.0)read 1200,i,j,k 1102 print 1200 if(1.eq.0)print 1200 print 1200,i, & j,k;goto 2010 if(1.eq.0) print 1200,i, & j,k;goto 2010 close (10) endfile 10 read '(i5)', i if(1.eq.0)read '(i5)', i read 2020,i,j,k if(1.eq.0)read 2020,i,j,k close(10,err=2010) if(1.eq.0)close(10,err=2010) open(10,err=2010) if(1.eq.0)open(10,err=2010) close(jf(1),err=2010) if(1.eq.0)close(jf(1),err=2010) endfile(9,err=2010) if(1.eq.0)endfile(9,err=2010) rewind(9,err=2010) if(1.eq.0)rewind(9,err=2010) flush(9,err=2010) if(1.eq.0)flush(9,err=2010) backspace(9,err=2010) inquire(9,err=2010) wait(9,err=2010) wait(9,end=2010) wait(9,eor=2010) write(jf(i),2020) read(*,'(a80)') read(*,fmt="(a80)") read(5,2020,err=2010,iostat=i,eor=2010,advance='no',end=2010) if(1.eq.0)backspace(9,err=2010); if(1.eq.0)inquire(9,err=2010) if(1.eq.0)wait(9,err=2010) if(1.eq.0)wait(9,end=2010) if(1.eq.0)wait(9,eor=2010) if(1.eq.0)write(jf(i),2020) if(1.eq.0)read(*,'(a80)') if(1.eq.0)read(*,fmt="(a80)") if(1.eq.0)read(5,2020,err=2010,iostat=i,eor=2010,advance='no',end=2010) read(5,err=2010,fmt='(3i3)', & end=2010) i,j,k write(6,2020) i,j,k write(*,2020) x write(6,fmt=2020)i,j,k if(i.eq.0)read(5,err=2010,fmt='(3i3)', & end=2010) i,j,k if(i.eq.0)write(6,2020) i,j,k if(i.eq.0)write(*,2020) x if(i.eq.0)write(6,fmt=2020)i,j,k 2010 continue 2020 format(3i5) call mysub(*3010,ixyz,j,*3020,*3030) if(1.eq.3) & call mysub(*3010,ixyz,j,*3020,*3030) call mysub1 call mysub1() call mysub2(klm) call mysub(*3010,3*400,3**4,*3020,*3030) call mysub(*3010,ij*400,3**ij,*3020,*3030) call mysub(*3010,ij*klm,3**4,*3020,*3030) if(1.eq.0)call mysub1 if(1.eq.0)call mysub1() if(1.eq.0)call mysub2(klm) if(1.eq.0)call mysub(*3010,3*400,3**4,*3020,*3030) if(1.eq.0)call mysub(*3010,ij*400,3**ij,*3020,*3030) if(1.eq.0)call mysub(*3010,ij*klm,3**4,*3020,*3030) 3010 continue 3020 continue 3030 continue contains real function f(x) goto 28 28 continue f = 10*x end function f subroutine subx goto 29 29 continue end subroutine subx end subroutine subx1 ! test following the man page #if 0 99 ... ! statement or format label IF(...) 110,120,130 IF(...) 110,120 DO 101 I=X,... 101 continue DO 102, I=X,... 102 continue DO 103 WHILE(...) 103 continue DO 104, WHILE(...) 104 continue DO 105 105 continue ACCEPT 100... ASSIGN 100 TO I BACKSPACE(...,ERR=100,...) CALL I(...,*100,...,&110,...,$120) CLOSE(...,ERR=100,...) DECODE(...,100,...,ERR=110,...) DELETE(...,ERR=110,...) ENCODE(...,100,...,ERR=110,...) ENDFILE(...,ERR=100,...) FIND(...,ERR=110,...) FLUSH(...,ERR=100,...) GOTO 100 GOTO I(100,110,120) GOTO I,(100,110,120) GOTO(100,110,120)... INQUIRE(...,ERR=100,...) OPEN(...,ERR=100,...) PRINT 100... READ 100... READ(...,100,...) READ(...,ERR=100,...,END=110,EOR=120,...,FMT=130)... REREAD 100... REREAD(...,100,...) REREAD(...,ERR=100,...,END=110,EOR=120,...,FMT=130)... REWIND(...,ERR=100,...) REWRITE(...,100) ... REWRITE(...,ERR=100,...,FMT=110,...,EOR=120)... TYPE 100... WAIT(...,ERR=100,...,END=110,...,EOR=120,...) WRITE(...,100) ... WRITE(...,ERR=100,...,FMT=110,...,EOR=120)... #endif 100 continue 110 continue 120 continue 130 continue end subroutine subx1 subroutine subx2 #if 0 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 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)... #endif 100 continue 110 continue 120 continue 130 continue end subroutine subroutine suby1 ! same as subx, now with omp #if 0 !$99 ... ! statement or format label !$ IF(...) 110,120,130 !$ IF(...) 110,120 !$ DO 101 I=X,... !$101 continue !$ DO 102, I=X,... !$102 continue !$ DO 103 WHILE(...) !$103 continue !$ DO 104, WHILE(...) !$104 continue !$ DO 105 !$105 continue !$ ACCEPT 100... !$ ASSIGN 100 TO I !$ BACKSPACE(...,ERR=100,...) !$ CALL I(...,*100,...,&110,...,$120) !$ CLOSE(...,ERR=100,...) !$ DECODE(...,100,...,ERR=110,...) !$ DELETE(...,ERR=110,...) !$ ENCODE(...,100,...,ERR=110,...) !$ ENDFILE(...,ERR=100,...) !$ FIND(...,ERR=110,...) !$ FLUSH(...,ERR=100,...) !$ GOTO 100 !$ GOTO I(100,110,120) !$ GOTO I,(100,110,120) !$ GOTO(100,110,120)... !$ INQUIRE(...,ERR=100,...) !$ OPEN(...,ERR=100,...) !$ PRINT 100... !$ READ 100... !$ READ(...,100,...) !$ READ(...,ERR=100,...,END=110,EOR=120,...,FMT=130)... !$ REREAD 100... !$ REREAD(...,100,...) !$ REREAD(...,ERR=100,...,END=110,EOR=120,...,FMT=130)... !$ REWIND(...,ERR=100,...) !$ REWRITE(...,100) ... !$ REWRITE(...,ERR=100,...,FMT=110,...,EOR=120)... !$ TYPE 100... !$ WAIT(...,ERR=100,...,END=110,...,EOR=120,...) !$ WRITE(...,100) ... !$ WRITE(...,ERR=100,...,FMT=110,...,EOR=120)... #endif !$100 continue !$110 continue !$120 continue !$130 continue end subroutine suby1 subroutine suby2 #if 0 !$ !$ 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 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)... !$ #endif !$100 continue !$110 continue !$120 continue !$130 continue end subroutine subroutine old_dec #if 0 integer buf(20) read(5'1000,err=50) x read(abc '1000,err=50) x read(5#1000,err=50) x read(5#n,err=50) x read(5#n,10,err=50) x write(5#1000,err=50) x write(5#n,err=50) x call sub(&60,$50,*50) reread 20,x,y,z reread(3,20),x,y,z type 10,x,y,z type *,x,y,z type 10 type * accept 20,x accept 20 accept *,x encode(80,30,buf,x,y,z,err=50) decode(80,40,buf,x,y,z,err=60) 10 format(3f10.4) 20 format(f10.6) 30 format(3f20.10) 40 format(3f20.6) 50 continue 60 continue #endif end subroutine abc ! no relabel possible, because of intervening preprocessor statement goto i,(20,4321 #ifdef trala & ,20) #else & ,145,20) #endif 10000 x=1 20 x=1 4321 x=1 4322 x=1 145 x=2 assign 10000 to i end subroutine subroutine xyz ! no relabel possible, because of intervening preprocessor statement in previous subroutine 1 continue end subroutine findent-4.3.2/test/progfixedshufflefixed.f.try.f.ref.in0000644000000000000000000003114514566134066020047 0ustar00! --relabel=shuffle module points type :: point real :: x,y end type point interface real module function point_dist(a,b) type(point), intent(in) :: a,b end function point_dist end interface interface inter module procedure fun end interface contains real function fun(x) real x fun = a+10 end end module submodule (points) points_a contains subroutine x goto 1 1 continue end subroutine module procedure point_dist continue goto 10 10 continue write(*,*) "hoppa" point_dist = sqrt((a%x-b%x)**2+(a%y-b%y)**2) end procedure end submodule subroutine mysub(*,i,k,*,*) return 1 end subroutine mysubomp !$ do 10 i=1,20 !$ do 10 j=1,10 !$ continue !$ 10 continue end subroutine subroutine mysub1 1 continue end subroutine mysub2(i) return end function myfun(x,i) goto (50,30,10) i #ifdef xyz 50 myfun = 10*x; goto 20 #endif 30 myfun = 20*x; goto 20 10 myfun = 30*x; goto 20 #ifndef xyz 50 myfun = 20*x; goto 20 #endif 20 end function myfun program p integer jf(2) jf(1) = 10 3030 continue ; x= & y+10 ; continue ; z = 123 + & 12345 1000 continue; continue ; continue do 111 i=1,20; do 92 j=1,20 ; do 3010 k=0,4 x = x+1 3010 continue 92 continue; 111 continue do 1101 i=1,3 do 1101, j=1,4 do 1101 k=1,2 1101 l=l+i+j+k do 961 i=1,3;;x=y; 961 continue do 130, i=1,2 continue 130 continue do 1 exit 1 continue do 9 while(i .eq. i+1) l = l+10 9 continue do 8 , while(j .eq. j+1) do 1001, while(j .eq. j+1) 1001 continue; 8 continue goto 95; if (0.eq.1) goto 11 95 continue 11 continue if(x) 951,120,2020 ; 5 goto 120; goto 951 1102 goto 2020 if(x) 951, ! comment & 120, !comment & 2020 ; 2 goto 120; goto 951 91 goto 2020 #if 0 if(l) 951,120 #endif continue 951 continue 120 continue 2020 continue goto( 951, 120, ! comment & 2020, 96) 4 if(x.eq.2)goto( 951, 120, ! comment & 2020, 11),i ; goto 96 ; goto 3 assign 96 to ixyz goto ixyz (951,120,2020,96) if(0 .eq. x)goto ixyz, (951,120, ! comment & 2020,3); goto 2010 1200 format(3i5) 96 read 1200 if(1.eq.0) read 1200 read 1200,i,j,k if(1.eq.0)read 1200,i,j,k 3 print 1200 if(1.eq.0)print 1200 print 1200,i, & j,k;goto 2010 if(1.eq.0) print 1200,i, & j,k;goto 2010 close (10) endfile 10 read '(i5)', i if(1.eq.0)read '(i5)', i read 511,i,j,k if(1.eq.0)read 511,i,j,k close(10,err=2010) if(1.eq.0)close(10,err=2010) open(10,err=2010) if(1.eq.0)open(10,err=2010) close(jf(1),err=2010) if(1.eq.0)close(jf(1),err=2010) endfile(9,err=2010) if(1.eq.0)endfile(9,err=2010) rewind(9,err=2010) if(1.eq.0)rewind(9,err=2010) flush(9,err=2010) if(1.eq.0)flush(9,err=2010) backspace(9,err=2010) inquire(9,err=2010) wait(9,err=2010) wait(9,end=2010) wait(9,eor=2010) write(jf(i),511) read(*,'(a80)') read(*,fmt="(a80)") read(5,511,err=2010,iostat=i,eor=2010,advance='no',end=2010) if(1.eq.0)backspace(9,err=2010); if(1.eq.0)inquire(9,err=2010) if(1.eq.0)wait(9,err=2010) if(1.eq.0)wait(9,end=2010) if(1.eq.0)wait(9,eor=2010) if(1.eq.0)write(jf(i),511) if(1.eq.0)read(*,'(a80)') if(1.eq.0)read(*,fmt="(a80)") if(1.eq.0)read(5,511,err=2010,iostat=i,eor=2010,advance='no',end=2010) read(5,err=2010,fmt='(3i3)', & end=2010) i,j,k write(6,511) i,j,k write(*,511) x write(6,fmt=511)i,j,k if(i.eq.0)read(5,err=2010,fmt='(3i3)', & end=2010) i,j,k if(i.eq.0)write(6,511) i,j,k if(i.eq.0)write(*,511) x if(i.eq.0)write(6,fmt=511)i,j,k 2010 continue 511 format(3i5) call mysub(*12345,ixyz,j,*93,*3020) if(1.eq.3) & call mysub(*12345,ixyz,j,*93,*3020) call mysub1 call mysub1() call mysub2(klm) call mysub(*12345,3*400,3**4,*93,*3020) call mysub(*12345,ij*400,3**ij,*93,*3020) call mysub(*12345,ij*klm,3**4,*93,*3020) if(1.eq.0)call mysub1 if(1.eq.0)call mysub1() if(1.eq.0)call mysub2(klm) if(1.eq.0)call mysub(*12345,3*400,3**4,*93,*3020) if(1.eq.0)call mysub(*12345,ij*400,3**ij,*93,*3020) if(1.eq.0)call mysub(*12345,ij*klm,3**4,*93,*3020) 12345 continue 93 continue 3020 continue contains real function f(x) goto 28 28 continue f = 10*x end function f subroutine subx goto 29 29 continue end subroutine subx end subroutine subx1 ! test following the man page #if 0 102 ... ! statement or format label IF(...) 103,110,105 IF(...) 103,110 DO 120 I=X,... 120 continue DO 104, I=X,... 104 continue DO 101 WHILE(...) 101 continue DO 130, WHILE(...) 130 continue DO 99 99 continue ACCEPT 100... ASSIGN 100 TO I BACKSPACE(...,ERR=100,...) CALL I(...,*100,...,&103,...,$110) CLOSE(...,ERR=100,...) DECODE(...,100,...,ERR=103,...) DELETE(...,ERR=103,...) ENCODE(...,100,...,ERR=103,...) ENDFILE(...,ERR=100,...) FIND(...,ERR=103,...) FLUSH(...,ERR=100,...) GOTO 100 GOTO I(100,103,110) GOTO I,(100,103,110) GOTO(100,103,110)... INQUIRE(...,ERR=100,...) OPEN(...,ERR=100,...) PRINT 100... READ 100... READ(...,100,...) READ(...,ERR=100,...,END=103,EOR=110,...,FMT=105)... REREAD 100... REREAD(...,100,...) REREAD(...,ERR=100,...,END=103,EOR=110,...,FMT=105)... REWIND(...,ERR=100,...) REWRITE(...,100) ... REWRITE(...,ERR=100,...,FMT=103,...,EOR=110)... TYPE 100... WAIT(...,ERR=100,...,END=103,...,EOR=110,...) WRITE(...,100) ... WRITE(...,ERR=100,...,FMT=103,...,EOR=110)... #endif 100 continue 103 continue 110 continue 105 continue end subroutine subx1 subroutine subx2 #if 0 if(...) ACCEPT 120... if(...) ASSIGN 120 TO I if(...) BACKSPACE(...,ERR=120,...) if(...) CALL I(...,*120,...,&130,...,$110) if(...) CLOSE(...,ERR=120,...) if(...) DECODE(...,120,...,ERR=130,...) if(...) DELETE(...,ERR=130,...) if(...) ENCODE(...,120,...,ERR=130,...) if(...) ENDFILE(...,ERR=120,...) if(...) FIND(...,ERR=130,...) if(...) FLUSH(...,ERR=120,...) if(...) GOTO 120 if(...) GOTO I(120,130,110) if(...) GOTO I,(120,130,110) if(...) GOTO(120,130,110)... if(...) INQUIRE(...,ERR=120,...) if(...) OPEN(...,ERR=120,...) if(...) PRINT 120... if(...) READ 120... if(...) READ(...,120,...) if(...) READ(...,ERR=120,...,END=130,EOR=110,...,FMT=100)... if(...) REREAD 120... if(...) REREAD(...,120,...) if(...) REREAD(...,ERR=120,...,END=130,EOR=110,...,FMT=100)... if(...) REWIND(...,ERR=120,...) if(...) REWRITE(...,120) ... if(...) REWRITE(...,ERR=120,...,FMT=130,...,EOR=110)... if(...) TYPE 120... if(...) WAIT(...,ERR=120,...,END=130,...,EOR=110,...) if(...) WRITE(...,120) ... if(...) WRITE(...,ERR=120,...,FMT=130,...,EOR=110)... #endif 120 continue 130 continue 110 continue 100 continue end subroutine subroutine suby1 ! same as subx, now with omp #if 0 !$102 ... ! statement or format label !$ IF(...) 120,103,105 !$ IF(...) 120,103 !$ DO 110 I=X,... !$110 continue !$ DO 99, I=X,... !$ 99 continue !$ DO 104 WHILE(...) !$104 continue !$ DO 101, WHILE(...) !$101 continue !$ DO 130 !$130 continue !$ ACCEPT 100... !$ ASSIGN 100 TO I !$ BACKSPACE(...,ERR=100,...) !$ CALL I(...,*100,...,&120,...,$103) !$ CLOSE(...,ERR=100,...) !$ DECODE(...,100,...,ERR=120,...) !$ DELETE(...,ERR=120,...) !$ ENCODE(...,100,...,ERR=120,...) !$ ENDFILE(...,ERR=100,...) !$ FIND(...,ERR=120,...) !$ FLUSH(...,ERR=100,...) !$ GOTO 100 !$ GOTO I(100,120,103) !$ GOTO I,(100,120,103) !$ GOTO(100,120,103)... !$ INQUIRE(...,ERR=100,...) !$ OPEN(...,ERR=100,...) !$ PRINT 100... !$ READ 100... !$ READ(...,100,...) !$ READ(...,ERR=100,...,END=120,EOR=103,...,FMT=105)... !$ REREAD 100... !$ REREAD(...,100,...) !$ REREAD(...,ERR=100,...,END=120,EOR=103,...,FMT=105)... !$ REWIND(...,ERR=100,...) !$ REWRITE(...,100) ... !$ REWRITE(...,ERR=100,...,FMT=120,...,EOR=103)... !$ TYPE 100... !$ WAIT(...,ERR=100,...,END=120,...,EOR=103,...) !$ WRITE(...,100) ... !$ WRITE(...,ERR=100,...,FMT=120,...,EOR=103)... #endif !$100 continue !$120 continue !$103 continue !$105 continue end subroutine suby1 subroutine suby2 #if 0 !$ !$ if(...) ACCEPT 110... !$ if(...) ASSIGN 110 TO I !$ if(...) BACKSPACE(...,ERR=110,...) !$ if(...) CALL I(...,*110,...,&100,...,$120) !$ if(...) CLOSE(...,ERR=110,...) !$ if(...) DECODE(...,110,...,ERR=100,...) !$ if(...) DELETE(...,ERR=100,...) !$ if(...) ENCODE(...,110,...,ERR=100,...) !$ if(...) ENDFILE(...,ERR=110,...) !$ if(...) FIND(...,ERR=100,...) !$ if(...) FLUSH(...,ERR=110,...) !$ if(...) GOTO 110 !$ if(...) GOTO I(110,100,120) !$ if(...) GOTO I,(110,100,120) !$ if(...) GOTO(110,100,120)... !$ if(...) INQUIRE(...,ERR=110,...) !$ if(...) OPEN(...,ERR=110,...) !$ if(...) PRINT 110... !$ if(...) READ 110... !$ if(...) READ(...,110,...) !$ if(...) READ(...,ERR=110,...,END=100,EOR=120,...,FMT=130)... !$ if(...) REREAD 110... !$ if(...) REREAD(...,110,...) !$ if(...) REREAD(...,ERR=110,...,END=100,EOR=120,...,FMT=130)... !$ if(...) REWIND(...,ERR=110,...) !$ if(...) REWRITE(...,110) ... !$ if(...) REWRITE(...,ERR=110,...,FMT=100,...,EOR=120)... !$ if(...) TYPE 110... !$ if(...) WAIT(...,ERR=110,...,END=100,...,EOR=120,...) !$ if(...) WRITE(...,110) ... !$ if(...) WRITE(...,ERR=110,...,FMT=100,...,EOR=120)... !$ #endif !$110 continue !$100 continue !$120 continue !$130 continue end subroutine subroutine old_dec #if 0 integer buf(20) read(5'1000,err=40) x read(abc '1000,err=40) x read(5#1000,err=40) x read(5#n,err=40) x read(5#n,60,err=40) x write(5#1000,err=40) x write(5#n,err=40) x call sub(&50,$40,*40) reread 10,x,y,z reread(3,10),x,y,z type 60,x,y,z type *,x,y,z type 60 type * accept 10,x accept 10 accept *,x encode(80,30,buf,x,y,z,err=40) decode(80,20,buf,x,y,z,err=50) 60 format(3f10.4) 10 format(f10.6) 30 format(3f20.10) 20 format(3f20.6) 40 continue 50 continue #endif end subroutine abc ! no relabel possible, because of intervening preprocessor statement goto i,(20,4321 #ifdef trala & ,20) #else & ,145,20) #endif 10000 x=1 20 x=1 4321 x=1 4322 x=1 145 x=2 assign 10000 to i end subroutine subroutine xyz ! no relabel possible, because of intervening preprocessor statement in previous subroutine 1 continue end subroutine findent-4.3.2/test/progfree-dos.f.in0000644000000000000000000000514214566134066014241 0ustar00! -I2 -i5 -a1 -b2 -d3 -f4 -m5 -ifree module m1 integer k enum, bind(c) enumerator :: red =1, blue, black =5 enumerator yellow enumerator gold, silver, bronze enumerator :: purple enumerator :: pink, lavender endenum type, public :: mytypea integer i end type mytypea contains function f(x) print *,'abc & def' print *,"abcd& & efgh" return end function #ifdef usempi function f1(x,m) real x,m #elif defined(useopenmp) function f1(x,m,n) real x,m,n #else function f1(x) real x #endif continue end function f1 end module program progfree type mytype ! mytype integer i real x end type mytype #ifdef abcde real klm(10) #endif integer x(100) type(mytype) xyz continue do i=1,20 block do 90 k=1,90 do 90 k1=1,4 call one(a) do 7 j=1,20 call two(a) 7 x=x+j continue 90 continue continue end block enddo critical x=y endcritical critical x=y endcritical critical x=y end critical if (.false.) goto 88 if (.false.) goto 99999 88 if ('x' .eq. "abc''d") l=1 99999 continue if ('x' .eq. "abc''d") l=1 continue if ('x' .eq. "abc''d")then continue endif ASSOCIATE ( Z => EXP(-(a**2+Y**2)) * COS(THETA)) PRINT *, A+Z, A-Z END ASSOCIATE forall(i=1:4) x(i)=5 continue forall(i=1:4) ! forall x(i)=6 end forall where(x.eq.0) x=5 ! where continue where(x.eq.0) x=10 endwhere continue where(x.eq.0) x=10 elsewhere x=11 endwhere select case(ia) case(1) print *,3 do i=1,9 continue enddo case(2) print*,6 case default print *,0 endselect end program subroutine one(a) continue entry myentry continue return end subroutine subroutine two(a) continue return endsubroutine subroutine three(a) continue return end subroutine four(a) continue return endsubroutine four subrou& &tine five continue return end findent-4.3.2/test/progfree-dos.f.try.f.ref.in0000644000000000000000000000544314566134066016061 0ustar00! -I2 -i5 -a1 -b2 -d3 -f4 -m5 -ifree module m1 integer k enum, bind(c) enumerator :: red =1, blue, black =5 enumerator yellow enumerator gold, silver, bronze enumerator :: purple enumerator :: pink, lavender endenum type, public :: mytypea integer i end type mytypea contains function f(x) print *,'abc & def' print *,"abcd& & efgh" return end function #ifdef usempi function f1(x,m) real x,m #elif defined(useopenmp) function f1(x,m,n) real x,m,n #else function f1(x) real x #endif continue end function f1 end module program progfree type mytype ! mytype integer i real x end type mytype #ifdef abcde real klm(10) #endif integer x(100) type(mytype) xyz continue do i=1,20 block do 90 k=1,90 do 90 k1=1,4 call one(a) do 7 j=1,20 call two(a) 7 x=x+j continue 90 continue continue end block enddo critical x=y endcritical critical x=y endcritical critical x=y end critical if (.false.) goto 88 if (.false.) goto 99999 88 if ('x' .eq. "abc''d") l=1 99999 continue if ('x' .eq. "abc''d") l=1 continue if ('x' .eq. "abc''d")then continue endif ASSOCIATE ( Z => EXP(-(a**2+Y**2)) * COS(THETA)) PRINT *, A+Z, A-Z END ASSOCIATE forall(i=1:4) x(i)=5 continue forall(i=1:4) ! forall x(i)=6 end forall where(x.eq.0) x=5 ! where continue where(x.eq.0) x=10 endwhere continue where(x.eq.0) x=10 elsewhere x=11 endwhere select case(ia) case(1) print *,3 do i=1,9 continue enddo case(2) print*,6 case default print *,0 endselect end program subroutine one(a) continue entry myentry continue return end subroutine subroutine two(a) continue return endsubroutine subroutine three(a) continue return end subroutine four(a) continue return endsubroutine four subrou& &tine five continue return end findent-4.3.2/test/progfree.f.in0000644000000000000000000002167514566134066013467 0ustar00! -I2 -i5 -a1 -b2 -d3 -f4 -m5 -Rr ! ticket 1 block data pblockdata common /xcomm/ p end block data qblockdata common /qcomm/ p end block data qblockdata block data rblockdata common /rcomm/ p end block data ! submodule and 'module subroutine' not recognized by gfortran 4.8.2 #if 0 MODULE ancestor INTEGER :: i INTERFACE MODULE SUBROUTINE sub1(arg1) INTEGER :: arg1 END SUBROUTINE MODULE SUBROUTINE sub2(arg2) INTEGER :: arg2 END SUBROUTINE END INTERFACE END MODULE SUBMODULE (ancestor) descendant INTEGER :: j CONTAINS MODULE SUBROUTINE sub1(arg1) INTEGER :: arg1 arg1 = 1 i = 2 j = 3 END SUBROUTINE module function fun1(arg1) integer :: arg1 fun1 = 10 end MODULE PROCEDURE sub2 arg2 = 1 END END #endif module some_module type :: onetype integer i end type onetype type name character(22) :: n end type type isname integer i end type complex ccc interface myinterface subroutine tx(a,b) real a,b end end interface interface anotherinterface module procedure funccc ! ! ticket 8 module procedure funcccc, funcy end interface abstract interface character*8 recursive function func(x) real :: x end function func end interface contains character*(8) impure function funcc(x) real :: x funcc = 'a' end function funcc #if 0 ! gfortran does not handle NON_RECURSIVE integer non_recursive function norecur(x) real::x norecur = x*10 end function norecur #endif #if 0 ! test non-standards real function myfunc() continue end subroutine myfunc(something) subroutine mysub continue end subroutine mysub(something) procedure myproc continue end procedure myproc(something) program myprog continue end program myprog(something) #endif integer(kind=4) pure function funccc(x) real, intent(in) :: x funccc = 2 end function type(onetype) function funcccc(x) type(onetype) :: x funcccc = x end function double precision function funcy(x) double precision :: x funcy = x end function #define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) /* Test for GCC >= 4.8.0 */ #if GCC_VERSION >= 40800 subroutine handleP(p) class(*), intent(in) :: p select type(p) type is (character(len=*)) write(*,*) len(p), ': ', p class is (name) write(*,*) len(p%n), ': ', p%n class default write(*,*) 'Unknown type' end select end subroutine #endif double complex function compx(x) double complex x compx = x end function complex recursive function compxx(x) complex x compxx = x end function real function alpha_integral_function(x) implicit none real:: x alpha_integral_function = 0 end end ! end of this module ! /ticket 1 module m1 integer k enum, bind(c) enumerator :: red =1, blue, black =5 enumerator yellow enumerator gold, silver, bronze enumerator :: purple enumerator :: pink, lavender endenum type, public :: mytypea integer i end type mytypea integer, parameter, public :: i8=selected_int_kind(16) contains function f(x) print *,'abc & def' print *,"abcd& & efgh" return end function integer(kind=i8) function func1(a, b) integer(kind=i8), intent(in) :: a, b func1 = a + b end function func1 integer(kind=i8)function funcx(a, b) integer(kind=i8), intent(in) :: a, b funcx = a + b end function funcx #ifdef usempi function f1(x,m) real x,m #elif defined(useopenmp) function f1(x,m,n) real x,m,n #else function f1(x) real x #endif continue end function f1 end module subroutine ticket7 integer :: int real :: float logical :: bool #define COND \ if (float > 1.) then; \ if (bool) write(*, *) 'nope'; \ end if COND if (.true.) then int = int + 1 end if end subroutine program progfree type mytype ! mytype integer i real x end type mytype #ifdef abcde real klm(10) #endif integer x(100) type(mytype) xyz real do(1000) continue loop: do i=1,20 continue enddo loop loop1 : do , i=1,20 continue enddo loop1 end = 10 do while(i.eq.0) continue enddo do , while(i.eq.0) continue enddo do concurrent(i=1:10) x(i) = 0 enddo do , concurrent(i=1:10) x(i) = 0 enddo if ( a.eq.b .and. & c.eq.r) then n=n+1 endif iff: if (a.eq.b) then continue endif iff lsele: select case(i) case(10) continue case(11) continue case default continue end select lsele lblock: block continue end block lblock x = 3.0*a + 4*b + & & 2 *c + y assign 90 to i do i=1,20 block do 90 k=1,90 do 90 k1=1,4 call one(a) do 7 j=1,20 call two(a) 7 x=x+j continue 90 continue continue end block enddo do i=1,10; do j=3,5; continue; enddo; enddo do i=1,7; do j=2,2 continue enddo continue enddo do ; enddo critical x=y do(3) = 123 endcritical critical x=y endcritical critical x=y end critical if (.false.) goto 88 if (.false.) goto 99999 88 if ('x' .eq. "abc''d") l=1 99999 continue if ('x' .eq. "abc''d") l=1 continue if ('x' .eq. "abc''d")then continue endif ASSOCIATE ( Z => EXP(-(a**2+Y**2)) * COS(THETA)) PRINT *, A+Z, A-Z END ASSOCIATE forall(i=1:4) x(i)=5 continue forall(i=1:4) ! forall x(i)=6 end forall hop:forall(i=1:4) ! forall x(i)=6 end forall hop where(x.eq.0) x=5 ! where continue where(x.eq.0) x=10 endwhere continue where(x.eq.0) x=10 elsewhere x=11 endwhere select case(ia) case(1) print *,3 do i=1,9 continue enddo case(2) print*,6 case default print *,0 endselect end program subroutine one(a) continue entry myentry continue return end subroutine two(a) continue a = 3 + &! comment1 4 + & ! comment 2 5 a = 3 + & ! test preprocessor within continuation 4 + & #ifdef abc this would cause a compilation error & #endif 5 return endsubroutine subroutine three(a) do 10 i=1,4 do 5 j=1,2 continue 5 enddo 10 enddo typecode = 9 continue return end subroutine four(a) continue return endsubroutine four subrou& &tine five continue return end subroutine seven a = 1& &+ 2 &! comment 1 &+ 3 &! comment 2 &+ 4& &+ 5& &+ 6 a = 1& &+ 2 &! comment 1 &+ 3 &! comment 2 #ifdef klm &+ 4 syntax error& &+ 5 syntax error& #endif &+ 6 end subroutine multiline_preproc #ifdef one\ two\ three do i=1,10 #elif \ defined(q) do i=1,5 #else do i=1,7 #endif x=x+4 enddo end subroutine nok implicit none type domain_data real, dimension(:, :), allocatable :: temperature integer:: ibound, icopy, todomain end type type(domain_data), dimension(2), target :: dom allocate(dom(1) % temperature(20, 20)) dom(1) % temperature = 0. dom(1) % temperature(:, 1) = 1. end subroutine nok ! testing with findentfix: subroutine testfix implicit none integer i,j,k do i=1,10 ! comment continue do j=1,6 continue ! findentfix: do do k=1,7 continue enddo ! FINDENTFIX: enddo enddo continue enddo end subroutine testfix subroutine omp integer i,j,k !$ integer m,n, & !$ o,p print *,i,j,k !$ print*, m,n,o,p !$ do i=1,20 continue !$ enddo end subroutine label_excercise do 010& &0 i=1,10 continue 01& &00 continue continue 120 do i=1,10 continue enddo end findent-4.3.2/test/progfree.f.try.f.ref.in0000644000000000000000000002427014566134066015275 0ustar00! -I2 -i5 -a1 -b2 -d3 -f4 -m5 -Rr ! ticket 1 block data pblockdata common /xcomm/ p end block data pblockdata block data qblockdata common /qcomm/ p end block data qblockdata block data rblockdata common /rcomm/ p end block data rblockdata ! submodule and 'module subroutine' not recognized by gfortran 4.8.2 #if 0 MODULE ancestor INTEGER :: i INTERFACE MODULE SUBROUTINE sub1(arg1) INTEGER :: arg1 end subroutine sub1 MODULE SUBROUTINE sub2(arg2) INTEGER :: arg2 end subroutine sub2 end interface end module ancestor SUBMODULE (ancestor) descendant INTEGER :: j CONTAINS MODULE SUBROUTINE sub1(arg1) INTEGER :: arg1 arg1 = 1 i = 2 j = 3 end subroutine sub1 module function fun1(arg1) integer :: arg1 fun1 = 10 end function fun1 MODULE PROCEDURE sub2 arg2 = 1 end procedure sub2 end submodule descendant #endif module some_module type :: onetype integer i end type onetype type name character(22) :: n end type name type isname integer i end type isname complex ccc interface myinterface subroutine tx(a,b) real a,b end subroutine tx end interface myinterface interface anotherinterface module procedure funccc ! ! ticket 8 module procedure funcccc, funcy end interface anotherinterface abstract interface character*8 recursive function func(x) real :: x end function func end interface contains character*(8) impure function funcc(x) real :: x funcc = 'a' end function funcc #if 0 ! gfortran does not handle NON_RECURSIVE integer non_recursive function norecur(x) real::x norecur = x*10 end function norecur #endif #if 0 ! test non-standards real function myfunc() continue end function myfunc(something) subroutine mysub continue end subroutine mysub(something) procedure myproc continue end procedure myproc(something) program myprog continue end program myprog(something) #endif integer(kind=4) pure function funccc(x) real, intent(in) :: x funccc = 2 end function funccc type(onetype) function funcccc(x) type(onetype) :: x funcccc = x end function funcccc double precision function funcy(x) double precision :: x funcy = x end function funcy #define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) /* Test for GCC >= 4.8.0 */ #if GCC_VERSION >= 40800 subroutine handleP(p) class(*), intent(in) :: p select type(p) type is (character(len=*)) write(*,*) len(p), ': ', p class is (name) write(*,*) len(p%n), ': ', p%n class default write(*,*) 'Unknown type' end select end subroutine handleP #endif double complex function compx(x) double complex x compx = x end function compx complex recursive function compxx(x) complex x compxx = x end function compxx real function alpha_integral_function(x) implicit none real:: x alpha_integral_function = 0 end function alpha_integral_function end module some_module ! end of this module ! /ticket 1 module m1 integer k enum, bind(c) enumerator :: red =1, blue, black =5 enumerator yellow enumerator gold, silver, bronze enumerator :: purple enumerator :: pink, lavender endenum type, public :: mytypea integer i end type mytypea integer, parameter, public :: i8=selected_int_kind(16) contains function f(x) print *,'abc & def' print *,"abcd& & efgh" return end function f integer(kind=i8) function func1(a, b) integer(kind=i8), intent(in) :: a, b func1 = a + b end function func1 integer(kind=i8)function funcx(a, b) integer(kind=i8), intent(in) :: a, b funcx = a + b end function funcx #ifdef usempi function f1(x,m) real x,m #elif defined(useopenmp) function f1(x,m,n) real x,m,n #else function f1(x) real x #endif continue end function f1 end module m1 subroutine ticket7 integer :: int real :: float logical :: bool #define COND \ if (float > 1.) then; \ if (bool) write(*, *) 'nope'; \ end if COND if (.true.) then int = int + 1 end if end subroutine ticket7 program progfree type mytype ! mytype integer i real x end type mytype #ifdef abcde real klm(10) #endif integer x(100) type(mytype) xyz real do(1000) continue loop: do i=1,20 continue enddo loop loop1 : do , i=1,20 continue enddo loop1 end = 10 do while(i.eq.0) continue enddo do , while(i.eq.0) continue enddo do concurrent(i=1:10) x(i) = 0 enddo do , concurrent(i=1:10) x(i) = 0 enddo if ( a.eq.b .and. & c.eq.r) then n=n+1 endif iff: if (a.eq.b) then continue endif iff lsele: select case(i) case(10) continue case(11) continue case default continue end select lsele lblock: block continue end block lblock x = 3.0*a + 4*b + & & 2 *c + y assign 90 to i do i=1,20 block do 90 k=1,90 do 90 k1=1,4 call one(a) do 7 j=1,20 call two(a) 7 x=x+j continue 90 continue continue end block enddo do i=1,10; do j=3,5; continue; enddo; enddo do i=1,7; do j=2,2 continue enddo continue enddo do ; enddo critical x=y do(3) = 123 endcritical critical x=y endcritical critical x=y end critical if (.false.) goto 88 if (.false.) goto 99999 88 if ('x' .eq. "abc''d") l=1 99999 continue if ('x' .eq. "abc''d") l=1 continue if ('x' .eq. "abc''d")then continue endif ASSOCIATE ( Z => EXP(-(a**2+Y**2)) * COS(THETA)) PRINT *, A+Z, A-Z END ASSOCIATE forall(i=1:4) x(i)=5 continue forall(i=1:4) ! forall x(i)=6 end forall hop:forall(i=1:4) ! forall x(i)=6 end forall hop where(x.eq.0) x=5 ! where continue where(x.eq.0) x=10 endwhere continue where(x.eq.0) x=10 elsewhere x=11 endwhere select case(ia) case(1) print *,3 do i=1,9 continue enddo case(2) print*,6 case default print *,0 endselect end program progfree subroutine one(a) continue entry myentry continue return end subroutine one subroutine two(a) continue a = 3 + &! comment1 4 + & ! comment 2 5 a = 3 + & ! test preprocessor within continuation 4 + & #ifdef abc this would cause a compilation error & #endif 5 return end subroutine two subroutine three(a) do 10 i=1,4 do 5 j=1,2 continue 5 enddo 10 enddo typecode = 9 continue return end subroutine three subroutine four(a) continue return end subroutine four subrou& &tine five continue return end subroutine five subroutine seven a = 1& &+ 2 &! comment 1 &+ 3 &! comment 2 &+ 4& &+ 5& &+ 6 a = 1& &+ 2 &! comment 1 &+ 3 &! comment 2 #ifdef klm &+ 4 syntax error& &+ 5 syntax error& #endif &+ 6 end subroutine seven subroutine multiline_preproc #ifdef one\ two\ three do i=1,10 #elif \ defined(q) do i=1,5 #else do i=1,7 #endif x=x+4 enddo end subroutine multiline_preproc subroutine nok implicit none type domain_data real, dimension(:, :), allocatable :: temperature integer:: ibound, icopy, todomain end type domain_data type(domain_data), dimension(2), target :: dom allocate(dom(1) % temperature(20, 20)) dom(1) % temperature = 0. dom(1) % temperature(:, 1) = 1. end subroutine nok ! testing with findentfix: subroutine testfix implicit none integer i,j,k do i=1,10 ! comment continue do j=1,6 continue ! findentfix: do do k=1,7 continue enddo ! FINDENTFIX: enddo enddo continue enddo end subroutine testfix subroutine omp integer i,j,k !$ integer m,n, & !$ o,p print *,i,j,k !$ print*, m,n,o,p !$ do i=1,20 continue !$ enddo end subroutine omp subroutine label_excercise do 010& &0 i=1,10 continue 01& &00 continue continue 120 do i=1,10 continue enddo end subroutine label_excercise findent-4.3.2/test/progfree1.f.in0000644000000000000000000000006414566134066013535 0ustar00! -i- -I8 -ifree -Rr program programma continue end findent-4.3.2/test/progfree1.f.try.f.ref.in0000644000000000000000000000010614566134066015346 0ustar00! -i- -I8 -ifree -Rr program programma continue end program programma findent-4.3.2/test/progfreefixed.f.in0000644000000000000000000001204714566134066014500 0ustar00! -Ia -i5 -a1 -b2 -d3 -f4 -m5 -ifree -ofixed module m1 integer k enum, bind(c) enumerator :: red =1, blue, black =5 enumerator yellow enumerator gold, silver, bronze enumerator :: purple enumerator :: pink, lavender endenum contains function f(x) print *,'abc& & def' print *,"abcd& #ifdef foo garbage & #endif & efgh" return end function #ifdef usempi function f1(x,m) real x,m #elif defined(useopenmp) function f1(x,m,n) real x,m,n #else function f1(x) real x #endif continue end function f1 end module program progfixed type mytype ! mytype integer i ! a comment ! a floating comment real x end type mytype #ifdef abcde real klm@@@(10) #endif real do(100) integer x(100) type(mytype) xyz character*1000 astring continue a_ap: do i=1,20 continue enddo a_ap end = 10 if ( e .eq. n .and.& & e .eq. m )then npar = npar + 1 endif do i=1,& ! a comment ! a comment &1& ! a comment &0 continue enddo do 123 i=1,2 continue 123 continue print *,'; function ',indx," function " continue 99880 FORMAT (' function ') 99870 FORMAT(1X,'Invalid species name',2X,A8) do i=1,10 do (i) = 5 continue do(i) = 5 continue enddo x = y ! function values continue astring = " ! this& & is& & no comment!" print *,a,b,& & c,d& & ,e,f continue print *,a,b,& & c,d& & ,e,f loop: do i=1,20 block do 90 k=1,90 do 90 k1=1,4 call one(a) do 7 j=1,20 call two(a) 7 x=x+j continue 90 continue continue end block enddo loop bbb: block continue end block bbb sc: select case(ja) case(1) continue case(2) continue end select sc continue do i=1,20 block continue end block enddo critical x=y endcritical critical x=y endcritical critical x=y end critical wv: if ( a.eq.b) then continue endif wv if (.false.) goto 88 if (.false.) goto 99999 88 if ('x' .eq. "abc''d") l=1 99999 continue if ('x' .eq. "abc''d") l=1 continue if ('x' .eq. "abc''d")then continue endif ASSOCIATE ( Z => EXP(-(a**2+Y**2)) * COS(THETA)) PRINT *, A+Z, A-Z END ASSOCIATE forall(i=1:4) x(i)=5 continue forall(i=1:4) ! forall x(i)=6 end forall where(x.eq.0) x=5 ! where continue where(x.eq.0) x=10 endwhere continue where(x.eq.0) x=10 elsewhere x=11 endwhere select case(ia) case(1) print *,3 do i=1,9 continue enddo case(2) print*,6 case default print *,0 endselect end program subroutine one(a) continue entry myentry continue return end subroutine subroutine two(a) continue !d print *,'debug i=',i ! !D print *,'debug j=',j x = 4 +& ! next line starts with &5 +& ! next line starts with &5+& ! next line starts with &5+& ! next line starts with &5+& ! next line starts with &5+& ! next line starts with &5 return endsubroutine subroutine three(a) continue return end subroutine four(a) continue return endsubroutine four subrou& &tine five continue return end subroutine seven a = 1& &+ 2 &! comment 1 &+ 3 &! comment 2 &+ 4& &+ 5& &+ 6 a = 1& &+ 2 &! comment 1 &+ 3 &! comment 2 #ifdef klm &+ 4 syntax error& &+ 5 syntax error& #endif &+ 6 end subroutine multiline_preproc #ifdef one\ two\ three do i=1,10 #elif \ defined(q) do i=1,5 #else do i=1,7 #endif x=x+4 enddo end subroutine omp integer i,j,k !$ integer m,n, & !$ o,p print *,i,j,k !$ print*, m,n,o,p !$ do 100 i=1,20 !$ do 100 j=1,i continue !$ 100 enddo end findent-4.3.2/test/progfreefixed.f.try.f.ref.in0000644000000000000000000001443114566134066016313 0ustar00! -Ia -i5 -a1 -b2 -d3 -f4 -m5 -ifree -ofixed module m1 integer k enum, bind(c) enumerator :: red =1, blue, black =5 enumerator yellow enumerator gold, silver, bronze enumerator :: purple enumerator :: pink, lavender endenum contains function f(x) print *,'abc & def' print *,"abcd #ifdef foo & garbage #endif & efgh" return end function #ifdef usempi function f1(x,m) real x,m #elif defined(useopenmp) function f1(x,m,n) real x,m,n #else function f1(x) real x #endif continue end function f1 end module program progfixed type mytype ! mytype integer i ! a comment ! a floating comment real x end type mytype #ifdef abcde real klm@@@(10) #endif real do(100) integer x(100) type(mytype) xyz character*1000 astring continue a_ap: do i=1,20 continue enddo a_ap end = 10 if ( e .eq. n .and. & e .eq. m )then npar = npar + 1 endif do i=1, ! a comment ! a comment & 1 ! a comment & 0 continue enddo do 123 i=1,2 continue 123 continue print *,'; function ',indx," function " continue 99880 FORMAT (' function ') 99870 FORMAT(1X,'Invalid species name',2X,A8) do i=1,10 do (i) = 5 continue do(i) = 5 continue enddo x = y ! function values continue astring = " ! this & is & no comment!" print *,a,b, & c,d & ,e,f continue print *,a,b, & c,d & ,e,f loop: do i=1,20 block do 90 k=1,90 do 90 k1=1,4 call one(a) do 7 j=1,20 call two(a) 7 x=x+j continue 90 continue continue end block enddo loop bbb: block continue end block bbb sc: select case(ja) case(1) continue case(2) continue end select sc continue do i=1,20 block continue end block enddo critical x=y endcritical critical x=y endcritical critical x=y end critical wv: if ( a.eq.b) then continue endif wv if (.false.) goto 88 if (.false.) goto 99999 88 if ('x' .eq. "abc''d") l=1 99999 continue if ('x' .eq. "abc''d") l=1 continue if ('x' .eq. "abc''d")then continue endif ASSOCIATE ( Z => EXP(-(a**2+Y**2)) * COS(THETA)) PRINT *, A+Z, A-Z END ASSOCIATE forall(i=1:4) x(i)=5 continue forall(i=1:4) ! forall x(i)=6 end forall where(x.eq.0) x=5 ! where continue where(x.eq.0) x=10 endwhere continue where(x.eq.0) x=10 elsewhere x=11 endwhere select case(ia) case(1) print *,3 do i=1,9 continue enddo case(2) print*,6 case default print *,0 endselect end program subroutine one(a) continue entry myentry continue return end subroutine subroutine two(a) continue !d print *,'debug i=',i ! !D print *,'debug j=',j x = 4 + ! next line starts with & 5 + ! next line starts with & 5+ ! next line starts with & 5+ ! next line starts with & 5+ ! next line starts with & 5+ ! next line starts with & 5 return endsubroutine subroutine three(a) continue return end subroutine four(a) continue return endsubroutine four subrou & tine five continue return end subroutine seven a = 1 & + 2 ! comment 1 & + 3 ! comment 2 & + 4 & + 5 & + 6 a = 1 & + 2 ! comment 1 & + 3 ! comment 2 #ifdef klm & + 4 syntax error & + 5 syntax error #endif & + 6 end subroutine multiline_preproc #ifdef one\ two\ three do i=1,10 #elif \ defined(q) do i=1,5 #else do i=1,7 #endif x=x+4 enddo end subroutine omp integer i,j,k !$ integer m,n, !$ & o,p print *,i,j,k !$ print*, m,n,o,p !$ do 100 i=1,20 !$ do 100 j=1,i continue !$100 enddo end findent-4.3.2/test/progrelabelfree.f.in0000644000000000000000000002760114566134066015011 0ustar00! --relabel=3100,20 -I8 module points type :: point real :: x,y end type point interface real module function point_dist(a,b) type(point), intent(in) :: a,b end function point_dist end interface interface inter module procedure fun end interface contains real function fun(x) real x fun = a+10 end end module submodule (points) points_a contains subroutine x goto 1 1 continue end subroutine module procedure point_dist continue goto 10 10 continue write(*,*) "hoppa" point_dist = sqrt((a%x-b%x)**2+(a%y-b%y)**2) end procedure end submodule subroutine mysub(*,i,k,*,*) return 1 end subroutine mysubomp !$ do 10 i=1,20 !$ do 10 j=1,10 !$ continue !$ 10 continue end subroutine subroutine mysub1 1 continue end subroutine mysub2(i) return end function myfun(x,i) goto (10,20,30) i #ifdef xyz 10 myfun = 10*x; goto 50 #endif 20 myfun = 20*x; goto 50 30 myfun = 30*x; goto 50 #ifndef xyz 10 myfun = 20*x; goto 50 #endif 50 end function myfun program p integer jf(2) jf(1) = 10 111 continue ; 112 x=& y+10 ; 115 continue ; z = 123 + & 12345 11 continue; 31 continue ; 51 continue do 1 i=1,20; do 2 j=1,20 ; do 3 k=0,4 x = x+1 3 continue 2 continue; 1 continue do 511 i=1,3 do 511, j=1,4 do 511 k=1,2 511 l=l+i+j+k do 5 i=1,3;;x=y;5 continue do 12345, i=1,2 continue 12345 continue do 8 exit 8 continue do 9 while(i .eq. i+1) l = l+10 9 continue do 1001 , while(j .eq. j+1) do 1000, while(j .eq. j+1) 1000 continue; 1001 continue goto 120; if (0.eq.1) goto 130 120 continue 130 continue if(x) 91,92,93 ; 95 goto 92; goto 91 ; 96 goto 93 if(x) 91,& ! comment 92,& !comment 93 ; 951 goto 92; goto 91 ; 961 goto 93 #if 0 if(l) 91,92 #endif continue 91 continue 92 continue 93 continue goto( 91, 92,& ! comment 93, 1101) 4 if(x.eq.2)goto( 91, 92,& ! comment 93, 130),i ; goto 1101 ; goto 1102 assign 1101 to ixyz goto ixyz (91,92,93,1101) if(0 .eq. x)goto ixyz, (91,92,& ! comment 93,1102); goto 2010 1200 format(3i5) 1101 read 1200 read 1200,i,j,k if(1.eq.0)read 1200,i,j,k 1102 print 1200 if(1.eq.0) print 1200 print 1200,i,& j,k;goto 2010 if(1.eq.0) print 1200,i,& j,k;goto 2010 close (10) endfile 10 read '(i5)', i if(1.eq.0)read '(i5)', i read 2020,i,j,k if(1.eq.0)read 2020,i,j,k close(10,err=2010) if(1.eq.0)close(10,err=2010) open(10,err=2010) if(1.eq.0)open(10,err=2010) close(jf(1),err=2010) if(1.eq.0)close(jf(1),err=2010) endfile(9,err=2010) if(1.eq.0)endfile(9,err=2010) rewind(9,err=2010) if(1.eq.0)rewind(9,err=2010) flush(9,err=2010) if(1.eq.0)flush(9,err=2010) backspace(9,err=2010) inquire(9,err=2010) wait(9,err=2010) wait(9,end=2010) wait(9,eor=2010) write(jf(i),2020) read(*,'(a80)') read(*,fmt="(a80)") read(5,2020,err=2010,iostat=i,eor=2010,advance='no',end=2010) if(1.eq.0)backspace(9,err=2010); if(1.eq.0)inquire(9,err=2010);if(1.eq.0)wait(9,err=2010) if(1.eq.0)wait(9,end=2010) if(1.eq.0)wait(9,eor=2010) if(1.eq.0)write(jf(i),2020) if(1.eq.0)read(*,'(a80)') if(1.eq.0)read(*,fmt="(a80)") if(1.eq.0)read(5,2020,err=2010,iostat=i,eor=2010,advance='no',end=2010) read(5,err=2010,fmt='(3i3)',& end=2010) i,j,k write(6,2020) i,j,k write(*,2020) x write(6,fmt=2020)i,j,k if(i.eq.0)read(5,err=2010,fmt='(3i3)',& end=2010) i,j,k if(i.eq.0)write(6,2020) i,j,k if(i.eq.0)write(*,2020) x if(i.eq.0)write(6,fmt=2020)i,j,k 2010 continue 2020 format(3i5) call mysub(*3010,ixyz,j,*3020,*3030) if(1.eq.3) & call mysub(*3010,ixyz,j,*3020,*3030) call mysub1 call mysub1() call mysub2(klm) call mysub(*3010,3*400,3**4,*3020,*3030) call mysub(*3010,ij*400,3**ij,*3020,*3030) call mysub(*3010,ij*klm,3**4,*3020,*3030) if(1.eq.0)call mysub1 if(1.eq.0)call mysub1() if(1.eq.0)call mysub2(klm) if(1.eq.0)call mysub(*3010,3*400,3**4,*3020,*3030) if(1.eq.0)call mysub(*3010,ij*400,3**ij,*3020,*3030) if(1.eq.0)call mysub(*3010,ij*klm,3**4,*3020,*3030) 3010 continue 3020 continue 3030 continue contains real function f(x) 1 continue f = 10*x end function f subroutine subf 1 continue end subroutine subf end #if 0 subroutine subx ! test all according to the man page 99 ... ! statement or format label IF(...) 110,120,130 IF(...) 110,120 DO 101 I=X,... 101 continue DO 102, I=X,... 102 continue DO 103 WHILE(...) 103 continue DO 104, WHILE(...) 104 continue DO 105 105 continue ACCEPT 100... ASSIGN 100 TO I BACKSPACE(...,ERR=100,...) CALL I(...,*100,...,&110,...,$120) CLOSE(...,ERR=100,...) DECODE(...,100,...,ERR=110,...) DELETE(...,ERR=110,...) ENCODE(...,100,...,ERR=110,...) ENDFILE(...,ERR=100,...) FIND(...,ERR=110,...) FLUSH(...,ERR=100,...) GOTO 100 GOTO I(100,110,120) GOTO I,(100,110,120) GOTO(100,110,120)... INQUIRE(...,ERR=100,...) OPEN(...,ERR=100,...) PRINT 100... READ 100... READ(...,100,...) READ(...,ERR=100,...,END=110,EOR=120,...,FMT=130)... REREAD 100... REREAD(...,100,...) REREAD(...,ERR=100,...,END=110,EOR=120,...,FMT=130)... REWIND(...,ERR=100,...) REWRITE(...,100) ... REWRITE(...,ERR=100,...,FMT=110,...,EOR=120)... TYPE 100... WAIT(...,ERR=100,...,END=110,...,EOR=120,...) WRITE(...,100) ... WRITE(...,ERR=100,...,FMT=110,...,EOR=120)... 100 continue; 110 continue; 120 continue; 130 continue end subroutine subx subroutine subx1 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 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)... 100 continue; 110 continue; 120 continue; 130 continue end subroutine subroutine suby ! same as subx, but now with omp sentinel !$ 99 ... ! statement or format label !$ IF(...) 110,120,130 !$ IF(...) 110,120 !$ DO 101 I=X,... !$ 101 continue !$ DO 102, I=X,... !$ 102 continue !$ DO 103 WHILE(...) !$ 103 continue !$ DO 104, WHILE(...) !$ 104 continue !$ DO 105 !$ 105 continue !$ ACCEPT 100... !$ ASSIGN 100 TO I !$ BACKSPACE(...,ERR=100,...) !$ CALL I(...,*100,...,&110,...,$120) !$ CLOSE(...,ERR=100,...) !$ DECODE(...,100,...,ERR=110,...) !$ DELETE(...,ERR=110,...) !$ ENCODE(...,100,...,ERR=110,...) !$ ENDFILE(...,ERR=100,...) !$ FIND(...,ERR=110,...) !$ FLUSH(...,ERR=100,...) !$ GOTO 100 !$ GOTO I(100,110,120) !$ GOTO I,(100,110,120) !$ GOTO(100,110,120)... !$ INQUIRE(...,ERR=100,...) !$ OPEN(...,ERR=100,...) !$ PRINT 100... !$ READ 100... !$ READ(...,100,...) !$ READ(...,ERR=100,...,END=110,EOR=120,...,FMT=130)... !$ REREAD 100... !$ REREAD(...,100,...) !$ REREAD(...,ERR=100,...,END=110,EOR=120,...,FMT=130)... !$ REWIND(...,ERR=100,...) !$ REWRITE(...,100) ... !$ REWRITE(...,ERR=100,...,FMT=110,...,EOR=120)... !$ TYPE 100... !$ WAIT(...,ERR=100,...,END=110,...,EOR=120,...) !$ WRITE(...,100) ... !$ WRITE(...,ERR=100,...,FMT=110,...,EOR=120)... !$ 100 continue; 110 continue; 120 continue; 130 continue end subroutine suby subroutine suby1 !$ !$ 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 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)... !$ !$ 100 continue; 110 continue; 120 continue; 130 continue end subroutine #endif subroutine old_dec #if 0 integer buf(20) type 10,x,y,z read(5'1000,err=50) x read(abc '1000,err=50) x read(5#1000,err=50) x read(5#n,err=50) x read(5#n,10,err=50) x write(5#1000,err=50) x write(5#n,err=50) x call sub(&60,$50,*50) type *,x,y,z type 10 type * accept 20,x accept 20 accept *,x encode(80,30,buf,x,y,z,err=50) decode(80,40,buf,x,y,z,err=60) 10 format(3f10.4) 20 format(f10.6) 30 format(3f20.10) 40 format(3f20.6) 50 continue 60 continue #endif end subroutine abc ! no relabel possible, because of intervening preprocessor statement goto i,(20,4321& #ifdef trala ,20) #else ,145,20) #endif 10000 x=1 20 x=1 4321 x=1 4322 x=1 145 x=2 assign 10000 to i end subroutine subroutine xyz ! no relabel possible, because of intervening preprocessor statement in previous subroutine 1 continue end subroutine findent-4.3.2/test/progrelabelfree.f.try.f.ref.in0000644000000000000000000003306714566134066016630 0ustar00! --relabel=3100,20 -I8 module points type :: point real :: x,y end type point interface real module function point_dist(a,b) type(point), intent(in) :: a,b end function point_dist end interface interface inter module procedure fun end interface contains real function fun(x) real x fun = a+10 end end module submodule (points) points_a contains subroutine x goto 3100 3100 continue end subroutine module procedure point_dist continue goto 3120 3120 continue write(*,*) "hoppa" point_dist = sqrt((a%x-b%x)**2+(a%y-b%y)**2) end procedure end submodule subroutine mysub(*,i,k,*,*) return 1 end subroutine mysubomp !$ do 3140 i=1,20 !$ do 3140 j=1,10 !$ continue !$ 3140 continue end subroutine subroutine mysub1 3160 continue end subroutine mysub2(i) return end function myfun(x,i) goto (3180,3200,3220) i #ifdef xyz 3180 myfun = 10*x; goto 3240 #endif 3200 myfun = 20*x; goto 3240 3220 myfun = 30*x; goto 3240 #ifndef xyz 3180 myfun = 20*x; goto 3240 #endif 3240 end function myfun program p integer jf(2) jf(1) = 10 3260 continue ;3280 x=& y+10 ;3300 continue ; z = 123 + & 12345 3320 continue;3340 continue ;3360 continue do 3420 i=1,20; do 3400 j=1,20 ; do 3380 k=0,4 x = x+1 3380 continue 3400 continue;3420 continue do 3440 i=1,3 do 3440, j=1,4 do 3440 k=1,2 3440 l=l+i+j+k do 3460 i=1,3;;x=y;3460 continue do 3480, i=1,2 continue 3480 continue do 3500 exit 3500 continue do 3520 while(i .eq. i+1) l = l+10 3520 continue do 3560 , while(j .eq. j+1) do 3540, while(j .eq. j+1) 3540 continue;3560 continue goto 3580; if (0.eq.1) goto 3600 3580 continue 3600 continue if(x) 3700,3720,3740 ;3620 goto 3720; goto 3700 ;3640 goto 3740 if(x) 3700,& ! comment 3720,& !comment 3740 ;3660 goto 3720; goto 3700 ;3680 goto 3740 #if 0 if(l) 3700,3720 #endif continue 3700 continue 3720 continue 3740 continue goto( 3700, 3720,& ! comment 3740, 3780) 4 if(x.eq.2)goto( 3700, 3720,& ! comment 3740, 3600),i ; goto 3780 ; goto 3800 assign 3780 to ixyz goto ixyz (3700,3720,3740,3780) if(0 .eq. x)goto ixyz, (3700,3720,& ! comment 3740,3800); goto 3820 3760 format(3i5) 3780 read 3760 read 3760,i,j,k if(1.eq.0)read 3760,i,j,k 3800 print 3760 if(1.eq.0) print 3760 print 3760,i,& j,k;goto 3820 if(1.eq.0) print 3760,i,& j,k;goto 3820 close (10) endfile 10 read '(i5)', i if(1.eq.0)read '(i5)', i read 3840,i,j,k if(1.eq.0)read 3840,i,j,k close(10,err=3820) if(1.eq.0)close(10,err=3820) open(10,err=3820) if(1.eq.0)open(10,err=3820) close(jf(1),err=3820) if(1.eq.0)close(jf(1),err=3820) endfile(9,err=3820) if(1.eq.0)endfile(9,err=3820) rewind(9,err=3820) if(1.eq.0)rewind(9,err=3820) flush(9,err=3820) if(1.eq.0)flush(9,err=3820) backspace(9,err=3820) inquire(9,err=3820) wait(9,err=3820) wait(9,end=3820) wait(9,eor=3820) write(jf(i),3840) read(*,'(a80)') read(*,fmt="(a80)") read(5,3840,err=3820,iostat=i,eor=3820,advance='no',end=3820) if(1.eq.0)backspace(9,err=3820); if(1.eq.0)inquire(9,err=3820);if(1.eq.0)wait(9,err=3820) if(1.eq.0)wait(9,end=3820) if(1.eq.0)wait(9,eor=3820) if(1.eq.0)write(jf(i),3840) if(1.eq.0)read(*,'(a80)') if(1.eq.0)read(*,fmt="(a80)") if(1.eq.0)read(5,3840,err=3820,iostat=i,eor=3820,advance='no',end=3820) read(5,err=3820,fmt='(3i3)',& end=3820) i,j,k write(6,3840) i,j,k write(*,3840) x write(6,fmt=3840)i,j,k if(i.eq.0)read(5,err=3820,fmt='(3i3)',& end=3820) i,j,k if(i.eq.0)write(6,3840) i,j,k if(i.eq.0)write(*,3840) x if(i.eq.0)write(6,fmt=3840)i,j,k 3820 continue 3840 format(3i5) call mysub(*3860,ixyz,j,*3880,*3900) if(1.eq.3) & call mysub(*3860,ixyz,j,*3880,*3900) call mysub1 call mysub1() call mysub2(klm) call mysub(*3860,3*400,3**4,*3880,*3900) call mysub(*3860,ij*400,3**ij,*3880,*3900) call mysub(*3860,ij*klm,3**4,*3880,*3900) if(1.eq.0)call mysub1 if(1.eq.0)call mysub1() if(1.eq.0)call mysub2(klm) if(1.eq.0)call mysub(*3860,3*400,3**4,*3880,*3900) if(1.eq.0)call mysub(*3860,ij*400,3**ij,*3880,*3900) if(1.eq.0)call mysub(*3860,ij*klm,3**4,*3880,*3900) 3860 continue 3880 continue 3900 continue contains real function f(x) 3920 continue f = 10*x end function f subroutine subf 3940 continue end subroutine subf end #if 0 subroutine subx ! test all according to the man page 3960 ... ! statement or format label IF(...) 4100,4120,4140 IF(...) 4100,4120 DO 3980 I=X,... 3980 continue DO 4000, I=X,... 4000 continue DO 4020 WHILE(...) 4020 continue DO 4040, WHILE(...) 4040 continue DO 4060 4060 continue ACCEPT 4080... ASSIGN 4080 TO I BACKSPACE(...,ERR=4080,...) CALL I(...,*4080,...,&4100,...,$4120) CLOSE(...,ERR=4080,...) DECODE(...,4080,...,ERR=4100,...) DELETE(...,ERR=4100,...) ENCODE(...,4080,...,ERR=4100,...) ENDFILE(...,ERR=4080,...) FIND(...,ERR=4100,...) FLUSH(...,ERR=4080,...) GOTO 4080 GOTO I(4080,4100,4120) GOTO I,(4080,4100,4120) GOTO(4080,4100,4120)... INQUIRE(...,ERR=4080,...) OPEN(...,ERR=4080,...) PRINT 4080... READ 4080... READ(...,4080,...) READ(...,ERR=4080,...,END=4100,EOR=4120,...,FMT=4140)... REREAD 4080... REREAD(...,4080,...) REREAD(...,ERR=4080,...,END=4100,EOR=4120,...,FMT=4140)... REWIND(...,ERR=4080,...) REWRITE(...,4080) ... REWRITE(...,ERR=4080,...,FMT=4100,...,EOR=4120)... TYPE 4080... WAIT(...,ERR=4080,...,END=4100,...,EOR=4120,...) WRITE(...,4080) ... WRITE(...,ERR=4080,...,FMT=4100,...,EOR=4120)... 4080 continue;4100 continue;4120 continue;4140 continue end subroutine subx subroutine subx1 if(...) ACCEPT 4160... if(...) ASSIGN 4160 TO I if(...) BACKSPACE(...,ERR=4160,...) if(...) CALL I(...,*4160,...,&4180,...,$4200) if(...) CLOSE(...,ERR=4160,...) if(...) DECODE(...,4160,...,ERR=4180,...) if(...) DELETE(...,ERR=4180,...) if(...) ENCODE(...,4160,...,ERR=4180,...) if(...) ENDFILE(...,ERR=4160,...) if(...) FIND(...,ERR=4180,...) if(...) FLUSH(...,ERR=4160,...) if(...) GOTO 4160 if(...) GOTO I(4160,4180,4200) if(...) GOTO I,(4160,4180,4200) if(...) GOTO(4160,4180,4200)... if(...) INQUIRE(...,ERR=4160,...) if(...) OPEN(...,ERR=4160,...) if(...) PRINT 4160... if(...) READ 4160... if(...) READ(...,4160,...) if(...) READ(...,ERR=4160,...,END=4180,EOR=4200,...,FMT=4220)... if(...) REREAD 4160... if(...) REREAD(...,4160,...) if(...) REREAD(...,ERR=4160,...,END=4180,EOR=4200,...,FMT=4220)... if(...) REWIND(...,ERR=4160,...) if(...) REWRITE(...,4160) ... if(...) REWRITE(...,ERR=4160,...,FMT=4180,...,EOR=4200)... if(...) TYPE 4160... if(...) WAIT(...,ERR=4160,...,END=4180,...,EOR=4200,...) if(...) WRITE(...,4160) ... if(...) WRITE(...,ERR=4160,...,FMT=4180,...,EOR=4200)... 4160 continue;4180 continue;4200 continue;4220 continue end subroutine subroutine suby ! same as subx, but now with omp sentinel !$ 4240 ... ! statement or format label !$ IF(...) 4380,4400,4420 !$ IF(...) 4380,4400 !$ DO 4260 I=X,... !$ 4260 continue !$ DO 4280, I=X,... !$ 4280 continue !$ DO 4300 WHILE(...) !$ 4300 continue !$ DO 4320, WHILE(...) !$ 4320 continue !$ DO 4340 !$ 4340 continue !$ ACCEPT 4360... !$ ASSIGN 4360 TO I !$ BACKSPACE(...,ERR=4360,...) !$ CALL I(...,*4360,...,&4380,...,$4400) !$ CLOSE(...,ERR=4360,...) !$ DECODE(...,4360,...,ERR=4380,...) !$ DELETE(...,ERR=4380,...) !$ ENCODE(...,4360,...,ERR=4380,...) !$ ENDFILE(...,ERR=4360,...) !$ FIND(...,ERR=4380,...) !$ FLUSH(...,ERR=4360,...) !$ GOTO 4360 !$ GOTO I(4360,4380,4400) !$ GOTO I,(4360,4380,4400) !$ GOTO(4360,4380,4400)... !$ INQUIRE(...,ERR=4360,...) !$ OPEN(...,ERR=4360,...) !$ PRINT 4360... !$ READ 4360... !$ READ(...,4360,...) !$ READ(...,ERR=4360,...,END=4380,EOR=4400,...,FMT=4420)... !$ REREAD 4360... !$ REREAD(...,4360,...) !$ REREAD(...,ERR=4360,...,END=4380,EOR=4400,...,FMT=4420)... !$ REWIND(...,ERR=4360,...) !$ REWRITE(...,4360) ... !$ REWRITE(...,ERR=4360,...,FMT=4380,...,EOR=4400)... !$ TYPE 4360... !$ WAIT(...,ERR=4360,...,END=4380,...,EOR=4400,...) !$ WRITE(...,4360) ... !$ WRITE(...,ERR=4360,...,FMT=4380,...,EOR=4400)... !$ 4360 continue; 4380 continue; 4400 continue; 4420 continue end subroutine suby subroutine suby1 !$ !$ if(...) ACCEPT 4440... !$ if(...) ASSIGN 4440 TO I !$ if(...) BACKSPACE(...,ERR=4440,...) !$ if(...) CALL I(...,*4440,...,&4460,...,$4480) !$ if(...) CLOSE(...,ERR=4440,...) !$ if(...) DECODE(...,4440,...,ERR=4460,...) !$ if(...) DELETE(...,ERR=4460,...) !$ if(...) ENCODE(...,4440,...,ERR=4460,...) !$ if(...) ENDFILE(...,ERR=4440,...) !$ if(...) FIND(...,ERR=4460,...) !$ if(...) FLUSH(...,ERR=4440,...) !$ if(...) GOTO 4440 !$ if(...) GOTO I(4440,4460,4480) !$ if(...) GOTO I,(4440,4460,4480) !$ if(...) GOTO(4440,4460,4480)... !$ if(...) INQUIRE(...,ERR=4440,...) !$ if(...) OPEN(...,ERR=4440,...) !$ if(...) PRINT 4440... !$ if(...) READ 4440... !$ if(...) READ(...,4440,...) !$ if(...) READ(...,ERR=4440,...,END=4460,EOR=4480,...,FMT=4500)... !$ if(...) REREAD 4440... !$ if(...) REREAD(...,4440,...) !$ if(...) REREAD(...,ERR=4440,...,END=4460,EOR=4480,...,FMT=4500)... !$ if(...) REWIND(...,ERR=4440,...) !$ if(...) REWRITE(...,4440) ... !$ if(...) REWRITE(...,ERR=4440,...,FMT=4460,...,EOR=4480)... !$ if(...) TYPE 4440... !$ if(...) WAIT(...,ERR=4440,...,END=4460,...,EOR=4480,...) !$ if(...) WRITE(...,4440) ... !$ if(...) WRITE(...,ERR=4440,...,FMT=4460,...,EOR=4480)... !$ !$ 4440 continue; 4460 continue; 4480 continue; 4500 continue end subroutine #endif subroutine old_dec #if 0 integer buf(20) type 4520,x,y,z read(5'1000,err=4600) x read(abc '1000,err=4600) x read(5#1000,err=4600) x read(5#n,err=4600) x read(5#n,4520,err=4600) x write(5#1000,err=4600) x write(5#n,err=4600) x call sub(&4620,$4600,*4600) type *,x,y,z type 4520 type * accept 4540,x accept 4540 accept *,x encode(80,4560,buf,x,y,z,err=4600) decode(80,4580,buf,x,y,z,err=4620) 4520 format(3f10.4) 4540 format(f10.6) 4560 format(3f20.10) 4580 format(3f20.6) 4600 continue 4620 continue #endif end subroutine abc ! no relabel possible, because of intervening preprocessor statement goto i,(20,4321& #ifdef trala ,20) #else ,145,20) #endif 10000 x=1 20 x=1 4321 x=1 4322 x=1 145 x=2 assign 10000 to i end subroutine subroutine xyz ! no relabel possible, because of intervening preprocessor statement in previous subroutine 1 continue end subroutine findent-4.3.2/test/progshufflefree.f.in0000644000000000000000000002760114566134066015037 0ustar00! --relabel=shuffle -I8 module points type :: point real :: x,y end type point interface real module function point_dist(a,b) type(point), intent(in) :: a,b end function point_dist end interface interface inter module procedure fun end interface contains real function fun(x) real x fun = a+10 end end module submodule (points) points_a contains subroutine x goto 1 1 continue end subroutine module procedure point_dist continue goto 10 10 continue write(*,*) "hoppa" point_dist = sqrt((a%x-b%x)**2+(a%y-b%y)**2) end procedure end submodule subroutine mysub(*,i,k,*,*) return 1 end subroutine mysubomp !$ do 10 i=1,20 !$ do 10 j=1,10 !$ continue !$ 10 continue end subroutine subroutine mysub1 1 continue end subroutine mysub2(i) return end function myfun(x,i) goto (10,20,30) i #ifdef xyz 10 myfun = 10*x; goto 50 #endif 20 myfun = 20*x; goto 50 30 myfun = 30*x; goto 50 #ifndef xyz 10 myfun = 20*x; goto 50 #endif 50 end function myfun program p integer jf(2) jf(1) = 10 111 continue ; 112 x=& y+10 ; 115 continue ; z = 123 + & 12345 11 continue; 31 continue ; 51 continue do 1 i=1,20; do 2 j=1,20 ; do 3 k=0,4 x = x+1 3 continue 2 continue; 1 continue do 511 i=1,3 do 511, j=1,4 do 511 k=1,2 511 l=l+i+j+k do 5 i=1,3;;x=y;5 continue do 12345, i=1,2 continue 12345 continue do 8 exit 8 continue do 9 while(i .eq. i+1) l = l+10 9 continue do 1001 , while(j .eq. j+1) do 1000, while(j .eq. j+1) 1000 continue; 1001 continue goto 120; if (0.eq.1) goto 130 120 continue 130 continue if(x) 91,92,93 ; 95 goto 92; goto 91 ; 96 goto 93 if(x) 91,& ! comment 92,& !comment 93 ; 951 goto 92; goto 91 ; 961 goto 93 #if 0 if(l) 91,92 #endif continue 91 continue 92 continue 93 continue goto( 91, 92,& ! comment 93, 1101) 4 if(x.eq.2)goto( 91, 92,& ! comment 93, 130),i ; goto 1101 ; goto 1102 assign 1101 to ixyz goto ixyz (91,92,93,1101) if(0 .eq. x)goto ixyz, (91,92,& ! comment 93,1102); goto 2010 1200 format(3i5) 1101 read 1200 read 1200,i,j,k if(1.eq.0)read 1200,i,j,k 1102 print 1200 if(1.eq.0) print 1200 print 1200,i,& j,k;goto 2010 if(1.eq.0) print 1200,i,& j,k;goto 2010 close (10) endfile 10 read '(i5)', i if(1.eq.0)read '(i5)', i read 2020,i,j,k if(1.eq.0)read 2020,i,j,k close(10,err=2010) if(1.eq.0)close(10,err=2010) open(10,err=2010) if(1.eq.0)open(10,err=2010) close(jf(1),err=2010) if(1.eq.0)close(jf(1),err=2010) endfile(9,err=2010) if(1.eq.0)endfile(9,err=2010) rewind(9,err=2010) if(1.eq.0)rewind(9,err=2010) flush(9,err=2010) if(1.eq.0)flush(9,err=2010) backspace(9,err=2010) inquire(9,err=2010) wait(9,err=2010) wait(9,end=2010) wait(9,eor=2010) write(jf(i),2020) read(*,'(a80)') read(*,fmt="(a80)") read(5,2020,err=2010,iostat=i,eor=2010,advance='no',end=2010) if(1.eq.0)backspace(9,err=2010); if(1.eq.0)inquire(9,err=2010);if(1.eq.0)wait(9,err=2010) if(1.eq.0)wait(9,end=2010) if(1.eq.0)wait(9,eor=2010) if(1.eq.0)write(jf(i),2020) if(1.eq.0)read(*,'(a80)') if(1.eq.0)read(*,fmt="(a80)") if(1.eq.0)read(5,2020,err=2010,iostat=i,eor=2010,advance='no',end=2010) read(5,err=2010,fmt='(3i3)',& end=2010) i,j,k write(6,2020) i,j,k write(*,2020) x write(6,fmt=2020)i,j,k if(i.eq.0)read(5,err=2010,fmt='(3i3)',& end=2010) i,j,k if(i.eq.0)write(6,2020) i,j,k if(i.eq.0)write(*,2020) x if(i.eq.0)write(6,fmt=2020)i,j,k 2010 continue 2020 format(3i5) call mysub(*3010,ixyz,j,*3020,*3030) if(1.eq.3) & call mysub(*3010,ixyz,j,*3020,*3030) call mysub1 call mysub1() call mysub2(klm) call mysub(*3010,3*400,3**4,*3020,*3030) call mysub(*3010,ij*400,3**ij,*3020,*3030) call mysub(*3010,ij*klm,3**4,*3020,*3030) if(1.eq.0)call mysub1 if(1.eq.0)call mysub1() if(1.eq.0)call mysub2(klm) if(1.eq.0)call mysub(*3010,3*400,3**4,*3020,*3030) if(1.eq.0)call mysub(*3010,ij*400,3**ij,*3020,*3030) if(1.eq.0)call mysub(*3010,ij*klm,3**4,*3020,*3030) 3010 continue 3020 continue 3030 continue contains real function f(x) 1 continue f = 10*x end function f subroutine subf 1 continue end subroutine subf end #if 0 subroutine subx ! test all according to the man page 99 ... ! statement or format label IF(...) 110,120,130 IF(...) 110,120 DO 101 I=X,... 101 continue DO 102, I=X,... 102 continue DO 103 WHILE(...) 103 continue DO 104, WHILE(...) 104 continue DO 105 105 continue ACCEPT 100... ASSIGN 100 TO I BACKSPACE(...,ERR=100,...) CALL I(...,*100,...,&110,...,$120) CLOSE(...,ERR=100,...) DECODE(...,100,...,ERR=110,...) DELETE(...,ERR=110,...) ENCODE(...,100,...,ERR=110,...) ENDFILE(...,ERR=100,...) FIND(...,ERR=110,...) FLUSH(...,ERR=100,...) GOTO 100 GOTO I(100,110,120) GOTO I,(100,110,120) GOTO(100,110,120)... INQUIRE(...,ERR=100,...) OPEN(...,ERR=100,...) PRINT 100... READ 100... READ(...,100,...) READ(...,ERR=100,...,END=110,EOR=120,...,FMT=130)... REREAD 100... REREAD(...,100,...) REREAD(...,ERR=100,...,END=110,EOR=120,...,FMT=130)... REWIND(...,ERR=100,...) REWRITE(...,100) ... REWRITE(...,ERR=100,...,FMT=110,...,EOR=120)... TYPE 100... WAIT(...,ERR=100,...,END=110,...,EOR=120,...) WRITE(...,100) ... WRITE(...,ERR=100,...,FMT=110,...,EOR=120)... 100 continue; 110 continue; 120 continue; 130 continue end subroutine subx subroutine subx1 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 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)... 100 continue; 110 continue; 120 continue; 130 continue end subroutine subroutine suby ! same as subx, but now with omp sentinel !$ 99 ... ! statement or format label !$ IF(...) 110,120,130 !$ IF(...) 110,120 !$ DO 101 I=X,... !$ 101 continue !$ DO 102, I=X,... !$ 102 continue !$ DO 103 WHILE(...) !$ 103 continue !$ DO 104, WHILE(...) !$ 104 continue !$ DO 105 !$ 105 continue !$ ACCEPT 100... !$ ASSIGN 100 TO I !$ BACKSPACE(...,ERR=100,...) !$ CALL I(...,*100,...,&110,...,$120) !$ CLOSE(...,ERR=100,...) !$ DECODE(...,100,...,ERR=110,...) !$ DELETE(...,ERR=110,...) !$ ENCODE(...,100,...,ERR=110,...) !$ ENDFILE(...,ERR=100,...) !$ FIND(...,ERR=110,...) !$ FLUSH(...,ERR=100,...) !$ GOTO 100 !$ GOTO I(100,110,120) !$ GOTO I,(100,110,120) !$ GOTO(100,110,120)... !$ INQUIRE(...,ERR=100,...) !$ OPEN(...,ERR=100,...) !$ PRINT 100... !$ READ 100... !$ READ(...,100,...) !$ READ(...,ERR=100,...,END=110,EOR=120,...,FMT=130)... !$ REREAD 100... !$ REREAD(...,100,...) !$ REREAD(...,ERR=100,...,END=110,EOR=120,...,FMT=130)... !$ REWIND(...,ERR=100,...) !$ REWRITE(...,100) ... !$ REWRITE(...,ERR=100,...,FMT=110,...,EOR=120)... !$ TYPE 100... !$ WAIT(...,ERR=100,...,END=110,...,EOR=120,...) !$ WRITE(...,100) ... !$ WRITE(...,ERR=100,...,FMT=110,...,EOR=120)... !$ 100 continue; 110 continue; 120 continue; 130 continue end subroutine suby subroutine suby1 !$ !$ 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 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)... !$ !$ 100 continue; 110 continue; 120 continue; 130 continue end subroutine #endif subroutine old_dec #if 0 integer buf(20) type 10,x,y,z read(5'1000,err=50) x read(abc '1000,err=50) x read(5#1000,err=50) x read(5#n,err=50) x read(5#n,10,err=50) x write(5#1000,err=50) x write(5#n,err=50) x call sub(&60,$50,*50) type *,x,y,z type 10 type * accept 20,x accept 20 accept *,x encode(80,30,buf,x,y,z,err=50) decode(80,40,buf,x,y,z,err=60) 10 format(3f10.4) 20 format(f10.6) 30 format(3f20.10) 40 format(3f20.6) 50 continue 60 continue #endif end subroutine abc ! no relabel possible, because of intervening preprocessor statement goto i,(20,4321& #ifdef trala ,20) #else ,145,20) #endif 10000 x=1 20 x=1 4321 x=1 4322 x=1 145 x=2 assign 10000 to i end subroutine subroutine xyz ! no relabel possible, because of intervening preprocessor statement in previous subroutine 1 continue end subroutine findent-4.3.2/test/progshufflefree.f.try.f.ref.in0000644000000000000000000003217114566134066016651 0ustar00! --relabel=shuffle -I8 module points type :: point real :: x,y end type point interface real module function point_dist(a,b) type(point), intent(in) :: a,b end function point_dist end interface interface inter module procedure fun end interface contains real function fun(x) real x fun = a+10 end end module submodule (points) points_a contains subroutine x goto 1 1 continue end subroutine module procedure point_dist continue goto 10 10 continue write(*,*) "hoppa" point_dist = sqrt((a%x-b%x)**2+(a%y-b%y)**2) end procedure end submodule subroutine mysub(*,i,k,*,*) return 1 end subroutine mysubomp !$ do 10 i=1,20 !$ do 10 j=1,10 !$ continue !$ 10 continue end subroutine subroutine mysub1 1 continue end subroutine mysub2(i) return end function myfun(x,i) goto (50,30,10) i #ifdef xyz 50 myfun = 10*x; goto 20 #endif 30 myfun = 20*x; goto 20 10 myfun = 30*x; goto 20 #ifndef xyz 50 myfun = 20*x; goto 20 #endif 20 end function myfun program p integer jf(2) jf(1) = 10 31 continue ;93 x=& y+10 ;115 continue ; z = 123 + & 12345 1000 continue;3010 continue ;95 continue do 112 i=1,20; do 111 j=1,20 ; do 92 k=0,4 x = x+1 92 continue 111 continue;112 continue do 3 i=1,3 do 3, j=1,4 do 3 k=1,2 3 l=l+i+j+k do 2010 i=1,3;;x=y;2010 continue do 9, i=1,2 continue 9 continue do 3030 exit 3030 continue do 961 while(i .eq. i+1) l = l+10 961 continue do 511 , while(j .eq. j+1) do 1001, while(j .eq. j+1) 1001 continue;511 continue goto 1200; if (0.eq.1) goto 130 1200 continue 130 continue if(x) 3020,1,11 ;2 goto 1; goto 3020 ;12345 goto 11 if(x) 3020,& ! comment 1,& !comment 11 ;8 goto 1; goto 3020 ;5 goto 11 #if 0 if(l) 3020,1 #endif continue 3020 continue 1 continue 11 continue goto( 3020, 1,& ! comment 11, 96) 4 if(x.eq.2)goto( 3020, 1,& ! comment 11, 130),i ; goto 96 ; goto 2020 assign 96 to ixyz goto ixyz (3020,1,11,96) if(0 .eq. x)goto ixyz, (3020,1,& ! comment 11,2020); goto 1102 51 format(3i5) 96 read 51 read 51,i,j,k if(1.eq.0)read 51,i,j,k 2020 print 51 if(1.eq.0) print 51 print 51,i,& j,k;goto 1102 if(1.eq.0) print 51,i,& j,k;goto 1102 close (10) endfile 10 read '(i5)', i if(1.eq.0)read '(i5)', i read 120,i,j,k if(1.eq.0)read 120,i,j,k close(10,err=1102) if(1.eq.0)close(10,err=1102) open(10,err=1102) if(1.eq.0)open(10,err=1102) close(jf(1),err=1102) if(1.eq.0)close(jf(1),err=1102) endfile(9,err=1102) if(1.eq.0)endfile(9,err=1102) rewind(9,err=1102) if(1.eq.0)rewind(9,err=1102) flush(9,err=1102) if(1.eq.0)flush(9,err=1102) backspace(9,err=1102) inquire(9,err=1102) wait(9,err=1102) wait(9,end=1102) wait(9,eor=1102) write(jf(i),120) read(*,'(a80)') read(*,fmt="(a80)") read(5,120,err=1102,iostat=i,eor=1102,advance='no',end=1102) if(1.eq.0)backspace(9,err=1102); if(1.eq.0)inquire(9,err=1102);if(1.eq.0)wait(9,err=1102) if(1.eq.0)wait(9,end=1102) if(1.eq.0)wait(9,eor=1102) if(1.eq.0)write(jf(i),120) if(1.eq.0)read(*,'(a80)') if(1.eq.0)read(*,fmt="(a80)") if(1.eq.0)read(5,120,err=1102,iostat=i,eor=1102,advance='no',end=1102) read(5,err=1102,fmt='(3i3)',& end=1102) i,j,k write(6,120) i,j,k write(*,120) x write(6,fmt=120)i,j,k if(i.eq.0)read(5,err=1102,fmt='(3i3)',& end=1102) i,j,k if(i.eq.0)write(6,120) i,j,k if(i.eq.0)write(*,120) x if(i.eq.0)write(6,fmt=120)i,j,k 1102 continue 120 format(3i5) call mysub(*91,ixyz,j,*1101,*951) if(1.eq.3) & call mysub(*91,ixyz,j,*1101,*951) call mysub1 call mysub1() call mysub2(klm) call mysub(*91,3*400,3**4,*1101,*951) call mysub(*91,ij*400,3**ij,*1101,*951) call mysub(*91,ij*klm,3**4,*1101,*951) if(1.eq.0)call mysub1 if(1.eq.0)call mysub1() if(1.eq.0)call mysub2(klm) if(1.eq.0)call mysub(*91,3*400,3**4,*1101,*951) if(1.eq.0)call mysub(*91,ij*400,3**ij,*1101,*951) if(1.eq.0)call mysub(*91,ij*klm,3**4,*1101,*951) 91 continue 1101 continue 951 continue contains real function f(x) 1 continue f = 10*x end function f subroutine subf 1 continue end subroutine subf end #if 0 subroutine subx ! test all according to the man page 110 ... ! statement or format label IF(...) 103,105,100 IF(...) 103,105 DO 99 I=X,... 99 continue DO 104, I=X,... 104 continue DO 102 WHILE(...) 102 continue DO 101, WHILE(...) 101 continue DO 130 130 continue ACCEPT 120... ASSIGN 120 TO I BACKSPACE(...,ERR=120,...) CALL I(...,*120,...,&103,...,$105) CLOSE(...,ERR=120,...) DECODE(...,120,...,ERR=103,...) DELETE(...,ERR=103,...) ENCODE(...,120,...,ERR=103,...) ENDFILE(...,ERR=120,...) FIND(...,ERR=103,...) FLUSH(...,ERR=120,...) GOTO 120 GOTO I(120,103,105) GOTO I,(120,103,105) GOTO(120,103,105)... INQUIRE(...,ERR=120,...) OPEN(...,ERR=120,...) PRINT 120... READ 120... READ(...,120,...) READ(...,ERR=120,...,END=103,EOR=105,...,FMT=100)... REREAD 120... REREAD(...,120,...) REREAD(...,ERR=120,...,END=103,EOR=105,...,FMT=100)... REWIND(...,ERR=120,...) REWRITE(...,120) ... REWRITE(...,ERR=120,...,FMT=103,...,EOR=105)... TYPE 120... WAIT(...,ERR=120,...,END=103,...,EOR=105,...) WRITE(...,120) ... WRITE(...,ERR=120,...,FMT=103,...,EOR=105)... 120 continue;103 continue;105 continue;100 continue end subroutine subx subroutine subx1 if(...) ACCEPT 120... if(...) ASSIGN 120 TO I if(...) BACKSPACE(...,ERR=120,...) if(...) CALL I(...,*120,...,&130,...,$100) if(...) CLOSE(...,ERR=120,...) if(...) DECODE(...,120,...,ERR=130,...) if(...) DELETE(...,ERR=130,...) if(...) ENCODE(...,120,...,ERR=130,...) if(...) ENDFILE(...,ERR=120,...) if(...) FIND(...,ERR=130,...) if(...) FLUSH(...,ERR=120,...) if(...) GOTO 120 if(...) GOTO I(120,130,100) if(...) GOTO I,(120,130,100) if(...) GOTO(120,130,100)... if(...) INQUIRE(...,ERR=120,...) if(...) OPEN(...,ERR=120,...) if(...) PRINT 120... if(...) READ 120... if(...) READ(...,120,...) if(...) READ(...,ERR=120,...,END=130,EOR=100,...,FMT=110)... if(...) REREAD 120... if(...) REREAD(...,120,...) if(...) REREAD(...,ERR=120,...,END=130,EOR=100,...,FMT=110)... if(...) REWIND(...,ERR=120,...) if(...) REWRITE(...,120) ... if(...) REWRITE(...,ERR=120,...,FMT=130,...,EOR=100)... if(...) TYPE 120... if(...) WAIT(...,ERR=120,...,END=130,...,EOR=100,...) if(...) WRITE(...,120) ... if(...) WRITE(...,ERR=120,...,FMT=130,...,EOR=100)... 120 continue;130 continue;100 continue;110 continue end subroutine subroutine suby ! same as subx, but now with omp sentinel !$ 101 ... ! statement or format label !$ IF(...) 103,130,99 !$ IF(...) 103,130 !$ DO 120 I=X,... !$ 120 continue !$ DO 105, I=X,... !$ 105 continue !$ DO 100 WHILE(...) !$ 100 continue !$ DO 102, WHILE(...) !$ 102 continue !$ DO 110 !$ 110 continue !$ ACCEPT 104... !$ ASSIGN 104 TO I !$ BACKSPACE(...,ERR=104,...) !$ CALL I(...,*104,...,&103,...,$130) !$ CLOSE(...,ERR=104,...) !$ DECODE(...,104,...,ERR=103,...) !$ DELETE(...,ERR=103,...) !$ ENCODE(...,104,...,ERR=103,...) !$ ENDFILE(...,ERR=104,...) !$ FIND(...,ERR=103,...) !$ FLUSH(...,ERR=104,...) !$ GOTO 104 !$ GOTO I(104,103,130) !$ GOTO I,(104,103,130) !$ GOTO(104,103,130)... !$ INQUIRE(...,ERR=104,...) !$ OPEN(...,ERR=104,...) !$ PRINT 104... !$ READ 104... !$ READ(...,104,...) !$ READ(...,ERR=104,...,END=103,EOR=130,...,FMT=99)... !$ REREAD 104... !$ REREAD(...,104,...) !$ REREAD(...,ERR=104,...,END=103,EOR=130,...,FMT=99)... !$ REWIND(...,ERR=104,...) !$ REWRITE(...,104) ... !$ REWRITE(...,ERR=104,...,FMT=103,...,EOR=130)... !$ TYPE 104... !$ WAIT(...,ERR=104,...,END=103,...,EOR=130,...) !$ WRITE(...,104) ... !$ WRITE(...,ERR=104,...,FMT=103,...,EOR=130)... !$ 104 continue; 103 continue; 130 continue; 99 continue end subroutine suby subroutine suby1 !$ !$ if(...) ACCEPT 130... !$ if(...) ASSIGN 130 TO I !$ if(...) BACKSPACE(...,ERR=130,...) !$ if(...) CALL I(...,*130,...,&110,...,$100) !$ if(...) CLOSE(...,ERR=130,...) !$ if(...) DECODE(...,130,...,ERR=110,...) !$ if(...) DELETE(...,ERR=110,...) !$ if(...) ENCODE(...,130,...,ERR=110,...) !$ if(...) ENDFILE(...,ERR=130,...) !$ if(...) FIND(...,ERR=110,...) !$ if(...) FLUSH(...,ERR=130,...) !$ if(...) GOTO 130 !$ if(...) GOTO I(130,110,100) !$ if(...) GOTO I,(130,110,100) !$ if(...) GOTO(130,110,100)... !$ if(...) INQUIRE(...,ERR=130,...) !$ if(...) OPEN(...,ERR=130,...) !$ if(...) PRINT 130... !$ if(...) READ 130... !$ if(...) READ(...,130,...) !$ if(...) READ(...,ERR=130,...,END=110,EOR=100,...,FMT=120)... !$ if(...) REREAD 130... !$ if(...) REREAD(...,130,...) !$ if(...) REREAD(...,ERR=130,...,END=110,EOR=100,...,FMT=120)... !$ if(...) REWIND(...,ERR=130,...) !$ if(...) REWRITE(...,130) ... !$ if(...) REWRITE(...,ERR=130,...,FMT=110,...,EOR=100)... !$ if(...) TYPE 130... !$ if(...) WAIT(...,ERR=130,...,END=110,...,EOR=100,...) !$ if(...) WRITE(...,130) ... !$ if(...) WRITE(...,ERR=130,...,FMT=110,...,EOR=100)... !$ !$ 130 continue; 110 continue; 100 continue; 120 continue end subroutine #endif subroutine old_dec #if 0 integer buf(20) type 40,x,y,z read(5'1000,err=50) x read(abc '1000,err=50) x read(5#1000,err=50) x read(5#n,err=50) x read(5#n,40,err=50) x write(5#1000,err=50) x write(5#n,err=50) x call sub(&30,$50,*50) type *,x,y,z type 40 type * accept 10,x accept 10 accept *,x encode(80,20,buf,x,y,z,err=50) decode(80,60,buf,x,y,z,err=30) 40 format(3f10.4) 10 format(f10.6) 20 format(3f20.10) 60 format(3f20.6) 50 continue 30 continue #endif end subroutine abc ! no relabel possible, because of intervening preprocessor statement goto i,(20,4321& #ifdef trala ,20) #else ,145,20) #endif 10000 x=1 20 x=1 4321 x=1 4322 x=1 145 x=2 assign 10000 to i end subroutine subroutine xyz ! no relabel possible, because of intervening preprocessor statement in previous subroutine 1 continue end subroutine findent-4.3.2/test/readme.ref.in0000644000000000000000000000010514566134066013423 0ustar00For installation instructions and usage, see README.1st and INSTALL findent-4.3.2/test/test-compile.sh.in0000755000000000000000000000714214566134066014444 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. export FINDENT_FLAGS="$TEST_FINDENT_FLAGS" prog="$1" echo "$0: $prog" if test "x$FC" = x ; then gfortran=: echo "will not try to compile fortran sources" else gfortran="$FC" echo "will try to compile fortran sources using $gfortran" fi rc=0 exe=${FINDENT:-../src/findent} $exe -v bprog="`basename $prog`" rm -f "bprog.try.f" echo -n "$bprog: " case "$bprog" in *progfixed*) format="-ffixed-form -ffixed-line-length-none -fd-lines-as-comments" ;; *) format="-ffree-form -ffree-line-length-none" ;; esac $gfortran -fcoarray=single -cpp -fopenmp $format -o prog $prog >/dev/null 2>&1 if [ $? -ne 0 ] ; then echo -n " original program does not compile using: -fcoarray=single -cpp -fopenmp $format -o prog $prog " rc=1 fi parms=`head -n1 < $prog | tr '!' ' '|tr '\r' ' '` $exe $parms < $prog > $bprog.try.f 2>/dev/null if [ -f $prog.try.f.ref ]; then if [ "$CROSSCOMPILE" = yes ] ; then case $prog in *dos*) : ;; *) tmpfile=`mktemp` tr -d '\r' < $bprog.try.f > $tmpfile mv $tmpfile $bprog.try.f ;; esac fi cmp -s $bprog.try.f $prog.try.f.ref >/dev/null 2>&1 if [ "$?" -eq 0 ]; then echo -n "OK" else echo -n "WRONG" rc=1 fi echo else echo "cannot compare" rc=1 fi case "$bprog" in *free.f | *free1.f | *free-dos.f) format="-ffree-form -ffree-line-length-none" ;; *) format="-ffixed-form -ffixed-line-length-none -fd-lines-as-comments" ;; esac $gfortran -fcoarray=single -cpp -fopenmp $format -o prog $bprog.try.f >/dev/null 2>&1 if [ $? -ne 0 ] ; then echo " converted program does not compile using: -fcoarray=single -cpp -fopenmp $format -o prog $bprog.try.f " rc=1 fi echo "END TESTING FINDENT rc=$rc" if [ $rc -ne 0 ] ; then echo "If you are sure $PWD/$bprog.try.f is correct:" echo "copy $PWD/$bprog.try.f" echo "to the corresponding .in file in the test directory" echo " and configure again." fi rm -f prog exit $rc findent-4.3.2/test/test1.sh0000755000000000000000000000341414566134066012470 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi ../test-compile.sh ../progfixed-dos.f rc=$? . ../postlude exit $rc findent-4.3.2/test/test10.sh0000755000000000000000000000670014566134066012551 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi rc=0 prog=" program main 10 continue end " expect="program main 10 continue end" exe=$FINDENT for flag in -l0 --label_left=0 ; do a=`echo "$prog" | $exe "$flag" -I0 -i6 | tr -d '\r'` if [ "$a" = "$expect" ]; then echo "$flag works OK" else echo "$flag works NOT OK:" echo "expected:" echo "$expect" echo "got :" echo "$a" echo "program is:" echo "$prog" rc=`expr $rc + 1` fi done expect="program main 10 continue end" for flag in -l1 --label_left=1 ; do a=`echo "$prog" | $exe "$flag" -I0 -i6 | tr -d '\r'` if [ "$a" = "$expect" ]; then echo "$flag works OK" else echo "$flag works NOT OK:" echo "expected:" echo "$expect" echo "got :" echo "$a" echo "program is:" echo "$prog" rc=`expr $rc + 1` fi done prog=" program main 10 continue end " expect=" program main 10 continue end" for flag in -l0 --label_left=0 ; do a=`echo "$prog" | $exe "$flag" -I0 -i6 | tr -d '\r'` if [ "$a" = "$expect" ]; then echo "$flag works OK" else echo "$flag works NOT OK:" echo "expected:" echo "$expect" echo "got :" echo "$a" echo "program is:" echo "$prog" rc=`expr $rc + 1` fi done expect=" program main 10 continue end" for flag in -l1 --label_left=1 ; do a=`echo "$prog" | $exe "$flag" -I0 -i6 | tr -d '\r'` if [ "$a" = "$expect" ]; then echo "$flag works OK" else echo "$flag works NOT OK:" echo "expected:" echo "$expect" echo "got :" echo "$a" echo "program is:" echo "$prog" rc=`expr $rc + 1` fi done . ../postlude exit $rc findent-4.3.2/test/test11.sh0000755000000000000000000000704014566134066012550 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # vim: indentexpr=none if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi rc=0 cat << eof > prog program prog continue eof cat << eof > expect 5 eof ../doit "-lastindent --last_indent --last-indent" "-ifree -Ia -i3" rc=`expr $rc + $?` cat << eof > prog if(l) then endif eof cat << eof > expect 5 eof ../doit "-lastindent --last_indent --last-indent" "-ifree -Ia -i3" rc=`expr $rc + $?` cat << eof > prog ! comment endif eof cat << eof > expect 5 eof ../doit "-lastindent --last_indent --last-indent" "-ifree -Ia -i3" rc=`expr $rc + $?` cat << eof > prog ! comment end eof cat << eof > expect 5 eof ../doit "-lastindent --last_indent --last-indent" "-ifree -Ia -i3" rc=`expr $rc + $?` # issue#12 on github cat << eof > prog do i=1,5;print *,i;enddo continue eof cat << eof > expect do i=1,5;print *,i;enddo continue eof ../doit "-ifixed -ifree" "-Ia -i3" rc=`expr $rc + $?` # test 2018 critical(stat = istat) cat << eof > prog program pcritical critical(stat=istat) continue end critical end eof cat << eof > expect program pcritical critical(stat=istat) continue end critical end eof ../doit "--indent-critical=4 -x4" "-ifree" rc=`expr $rc + $?` # test 2018 change team(), end team [()] cat << eof > prog program pchangeteam change team(newteam) continue end team continue change team(newteam) continue end team (stat=istat) l: change team(newteam) continue end team (stat=istat) l k: change team(newteam) continue end team k end eof cat << eof > expect program pchangeteam change team(newteam) continue end team continue change team(newteam) continue end team (stat=istat) l: change team(newteam) continue end team (stat=istat) l k: change team(newteam) continue end team k end eof ../doit "--indent-changeteam=4 --indent_changeteam=4" "-ifree" rc=`expr $rc + $?` . ../postlude exit $rc findent-4.3.2/test/test12.sh0000755000000000000000000000670314566134066012556 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi rc=0 cat << eof > prog program prog continue ! comment eof cat << eof > expect 3 eof ../doit "-lastusable --last_usable" "-ifree -Ia" "" rc=`expr $rc + $?` ../doit "-lastusable --last_usable" "-ifixed -Ia" "" rc=`expr $rc + $?` cat << eof > prog program prog include "a.inc" include 'b.inc' ?? include 'c.inc' ??include "d.inc" #include "e.inc" # include end eof cat << eof > expect inc a.inc inc b.inc cpp e.inc std f.inc coc c.inc coc d.inc eof ../doit "--deps" "-ifree" "" rc=`expr $rc + $?` cat << eof > prog program prog include "a.inc" include 'b.inc' ?? include 'c.inc' ??include "d.inc" #include "e.inc" # include end eof cat << eof > expect inc a.inc inc b.inc cpp e.inc std f.inc coc c.inc coc d.inc eof ../doit "--deps" "-ifixed" "" rc=`expr $rc + $?` cat << eof > main.f90 module mm integer i end program main use mymod use mm include "file.inc" #include "one.inc" continue end eof cat << eof > sub.f90 module mymod integer x contains subroutine sub continue end subroutine end module module mymod1 interface real module function f(a) real a end function end interface end module eof cat << eof > sub1.f90 submodule (mymod1) mymod2 contains module procedure f f = 10.0 end procedure end submodule eof cat << eof |sort > expect sub1.lo: sub.lo main.lo: sub.lo main.lo: file.inc one.inc eof touch file.inc one.inc # remove '\r' to facilitate dos executable $FINDENT --makefdeps | tr -d '\r' > makefdeps.sh chmod +x makefdeps.sh ./makefdeps.sh -s .lo main.f90 sub.f90 sub1.f90 | tr -d '\r' | sort > result if cmp -s expect result ; then echo "--makefdeps : OK" else echo "--makefdeps : NOT OK" echo "expected:" cat expect echo "got:" cat result rc=`expr $rc + 1` fi . ../postlude exit $rc findent-4.3.2/test/test13.sh0000755000000000000000000000511314566134066012551 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi rc=0 exe=$FINDENT for flag in -h --help ; do : | $exe "$flag" | head -n 1 | tr -d '\r' > help.try cmp -s ../help.ref help.try r=$? if [ $r -eq 0 ] ; then echo "$flag : works OK" else echo "$flag : works NOT OK, compare help.try and help.ref" fi rc=`expr $rc + $r` done for flag in -H --manpage ; do : | $exe "$flag" | head -n 1 | tr -d '\r' > manpage.try cmp -s ../manpage.ref manpage.try r=$? if [ $r -eq 0 ] ; then echo "$flag : OK" else echo "$flag : NOT OK, compare manpage.try and manpage.ref" fi rc=`expr $rc + $r` done for flag in -v --version ; do : | $exe $flag > result if grep -q "^findent version" result ; then echo "$flag: OK" else echo "$flag : NOT OK" echo "expected : findent version ..." echo "got:" cat result rc=`expr $rc + 1` fi done . ../postlude exit $rc findent-4.3.2/test/test14.sh0000755000000000000000000001157514566134066012563 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # vim: indentexpr=none if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi rc=0 doit=../doit cat << eof > prog program fixed001 continue # if xyz || \ abc x=1 # endif end eof cat << eof > expect fixed eof $doit "-q --query_fix_free" "" "for fixed input" rc=`expr $rc + $?` cat << eof > prog program free001 continue end eof cat << eof > expect free eof $doit "-q --query_fix_free" "" "for free input" rc=`expr $rc + $?` cat << eof > prog program p001 do i=1,10 continue enddo end eof cat << eof > expect program p001 do i=1,10 continue enddo end eof $doit "-M2 --max_indent=2" "-ifree -i8" "for free input" rc=`expr $rc + $?` cat << eof > expect program p001 do i=1,10 continue enddo end eof $doit "-M2 --max_indent=2" "-ifixed -i8" "for fixed input" rc=`expr $rc + $?` cat << eof > prog program p002 x=x+ & 10+ & & 20+ & 30 end eof cat << eof > expect program p002 x=x+ 1 10+ 2 20+ 3 30 end eof $doit "--continuation=0" "-ofixed" "--continuation=0 for free input" rc=`expr $rc + $?` cat << eof > expect program p002 x=x+ & 10+ & 20+ & 30 end eof $doit "--continuation= " "-ofixed" "--continuation=' ' for free input" rc=`expr $rc + $?` cat << eof > expect program p002 x=x+ + 10+ + 20+ + 30 end eof $doit "--continuation=+" "-ofixed" "--continuation=+ for free input" rc=`expr $rc + $?` cat << eof > prog program p003 x=9+ + 20 + ! abc ! abc ! abc + 30 end eof cat << eof > expect program p003 x=9+ + 20 + ! abc ! abc ! abc + 30 end eof $doit "--continuation= " "" "--continuation=' ' for fixed input" rc=`expr $rc + $?` cat << eof > expect program p003 x=9+ 9 20 + ! abc ! abc ! abc 9 30 end eof $doit "--continuation=9" "" "--continuation=9 for fixed input" rc=`expr $rc + $?` cat << eof > prog #define W \ program program p004 continue end eof cat << eof > expect #define W \ program program p004 continue end eof $doit "-Ia --start-indent=a" "-ifree" "for free input" rc=`expr $rc + $?` $doit "-Ia --start-indent=a" "-ifixed" "for fixed input" rc=`expr $rc + $?` cat << eof > prog program p a=10 & #ifdef b +5 & #ifdef c +6 & #endif c #endif b + 7 do i=1,20 continue enddo end eof cat << eof > expect program p a=10 & #ifdef b +5 & #ifdef c +6 & #endif c #endif b + 7 do i=1,20 continue enddo end eof $doit "-Ia" "-ifree" "issue14" rc=`expr $rc + $?` cat << eof > prog program p a=10 #ifdef b & +5 #ifdef c & +6 #endif #endif & + 7 do i=1,20 continue enddo end eof cat << eof > expect program p a=10 #ifdef b & +5 #ifdef c & +6 #endif #endif & + 7 do i=1,20 continue enddo end eof $doit "-Ia" "-ifixed" "issue14" rc=`expr $rc + $?` . ../postlude exit $rc findent-4.3.2/test/test15.sh0000755000000000000000000001313114566134066012552 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi rc=0 doit=../doit cat << eof > prog program main continue end eof cat << eof > expect program main continue end eof $doit "-iauto --input_format=auto -ifixed --input_format=fixed" "-I0 -i3" "for fixed input" rc=`expr $rc + $?` cat << eof > expect program main continue end eof $doit "-ifree --input_format=free" "-I0 -i3" "for fixed input" rc=`expr $rc + $?` cat << eof > prog program main continue end eof cat << eof > expect program main continue end eof $doit "-iauto --input_format=auto -ifree --input_format=free" "-I0 -i3" "for free input" rc=`expr $rc + $?` cat << eof > prog program main continue end eof cp prog expect $doit "-i- --indent=none" "" "" rc=`expr $rc + $?` cat << eof > prog program main x = 10 + 6 end eof cat << eof > expect program main x = 10 end eof $doit "-L42 --input_line_length=42" "-I0 -i3" "" rc=`expr $rc + $?` cat << eof > prog program main continue end eof cat << eof > expect program main continue end eof $doit "-ofree --output_format=free" "-I0 -i3" "" rc=`expr $rc + $?` cat << eof > prog program main continue end eof cat << eof > expect program main continue end eof $doit "-osame --output_format=same" "-I0 -i3" "for free input" rc=`expr $rc + $?` cat << eof > prog program main continue end eof cat << eof > expect program main continue end eof $doit "-osame --output_format=same" "-I0 -i3" "for fixed input" rc=`expr $rc + $?` cat << eof > prog module points type :: point real :: x,y end type point interface real module function point_dist(a,b) type(point), intent(in) :: a,b end function point_dist end interface end module submodule (points) points_a contains module procedure point_dist write(*,*) "hoppa" point_dist = sqrt((a%x-b%x)**2+(a%y-b%y)**2) end procedure end submodule program main continue contains subroutine mysub continue end end eof cat << eof > expect module points type :: point real :: x,y end type point interface real module function point_dist(a,b) type(point), intent(in) :: a,b end function point_dist end interface end module points submodule (points) points_a contains module procedure point_dist write(*,*) "hoppa" point_dist = sqrt((a%x-b%x)**2+(a%y-b%y)**2) end procedure point_dist end submodule points_a program main continue contains subroutine mysub continue end subroutine mysub end program main eof $doit "-Rr --refactor_procedures --refactor-end" "-Ia -i3" "for free input" rc=`expr $rc + $?` cat << eof > expect module points type :: point real :: x,y END TYPE point interface real module function point_dist(a,b) type(point), intent(in) :: a,b END FUNCTION point_dist END INTERFACE END MODULE points submodule (points) points_a contains module procedure point_dist write(*,*) "hoppa" point_dist = sqrt((a%x-b%x)**2+(a%y-b%y)**2) END PROCEDURE point_dist END SUBMODULE points_a program main continue contains subroutine mysub continue END SUBROUTINE mysub END PROGRAM main eof $doit "-RR --refactor_procedures=upcase --refactor_end=upcase" "-Ia -i3" "for free input" rc=`expr $rc + $?` . ../postlude exit $rc findent-4.3.2/test/test16.sh0000755000000000000000000002100314566134066012550 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi rc=0 doit=../doit cat << eof > prog program main01 continue end eof cat << eof > expect program main01 continue end eof $doit "-I5 --start_indent=5" -i3 "for fixed input" rc=`expr $rc + $?` cat << eof > prog program main02 continue end eof cat << eof > expect program main02 continue end eof $doit "-I5 --start_indent=5" -i3 "for free input" rc=`expr $rc + $?` cat << eof > prog program main03 continue end eof cat << eof > expect program main03 continue end eof $doit "-Ia --start_indent=a" "-I0 -i3" "" rc=`expr $rc + $?` cat << eof > prog program main04 continue do i=1,10 do j=1,20 continue enddo enddo end eof cat << eof > expect program main04 continue do i=1,10 do j=1,20 continue enddo enddo end eof $doit "-i5 --indent=5" "-I0" "" rc=`expr $rc + $?` cat << eof > prog program main06 associate( z => sin(theta)) print *,z end associate end eof cat << eof > expect program main06 associate( z => sin(theta)) print *,z end associate end eof $doit "-a5 --indent_associate=5" "-i3 -I0" "" rc=`expr $rc + $?` cat << eof > prog program main07 block continue end block end eof cat << eof > expect program main07 block continue end block end eof $doit "-b5 --indent_block=5" "-i3 -I0" "" rc=`expr $rc + $?` cat << eof > prog program main08 do i=1,10 do j=1,5 print *,i,j enddo enddo end eof cat << eof > expect program main08 do i=1,10 do j=1,5 print *,i,j enddo enddo end eof $doit "-d5 --indent_do=5" "-i3 -I0" "" rc=`expr $rc + $?` cat << eof > prog program main09 if (i .eq. 7) then print *,'foo' continue endif continue end eof cat << eof > expect program main09 if (i .eq. 7) then print *,'foo' continue endif continue end eof $doit "-f5 --indent_if=5" "-i3 -I0" "" rc=`expr $rc + $?` cat << eof > prog program main10 enum, bind(c) enumerator :: red = 1, blue black = 5 enumerator yellow end enum end eof cat << eof > expect program main10 enum, bind(c) enumerator :: red = 1, blue black = 5 enumerator yellow end enum end eof $doit "-E5 --indent_enum=5" "-i3 -I0" "" rc=`expr $rc + $?` cat << eof > prog program main11 forall(k=1:1000) x(k) = 23 y(k) = 67 end forall end eof cat << eof > expect program main11 forall(k=1:1000) x(k) = 23 y(k) = 67 end forall end eof $doit "-F5 --indent_forall=5" "-i3 -I0" "" rc=`expr $rc + $?` cat << eof > prog program main12 interface myinterface subroutine mysub(x) real x end subroutine end interface end eof cat << eof > expect program main12 interface myinterface subroutine mysub(x) real x end subroutine end interface end eof $doit "-j5 --indent_interface=5" "-i3 -I0" "" rc=`expr $rc + $?` cat << eof > prog module mymodule01 integer x contains subroutine mysub continue end subroutine end module eof cat << eof > expect module mymodule01 integer x contains subroutine mysub continue end subroutine end module eof $doit "-m5 --indent_module=5" "-i3 -I0" "" rc=`expr $rc + $?` cat << eof > prog subroutine mysub01 continue end subroutine function myfun(x) real x end function eof cat << eof > expect subroutine mysub01 continue end subroutine function myfun(x) real x end function eof $doit "-r5 --indent_procedure=5" "-i3 -I0" "" rc=`expr $rc + $?` cat << eof > prog program main13 continue select case(i) case(1) x=2 case(3) x=4 end select continue end program eof cat << eof > expect program main13 continue select case(i) case(1) x=2 case(3) x=4 end select continue end program eof $doit "-s5 --indent_select=5" "-i3 -I0" "" rc=`expr $rc + $?` cat << eof > prog program main14 type mytype integer :: i real x,y end type mytype end program eof cat << eof > expect program main14 type mytype integer :: i real x,y end type mytype end program eof $doit "-t5 --indent_type=5" "-i3 -I0" "" rc=`expr $rc + $?` cat << eof > prog program main15 where(x>21) y=10 z=11 end where end program eof cat << eof > expect program main15 where(x>21) y=10 z=11 end where end program eof $doit "-w5 --indent_where=5" "-i3 -I0" "" rc=`expr $rc + $?` cat << eof > prog program main16 continue critical x=10 y=11 end critical end program eof cat << eof > expect program main16 continue critical x=10 y=11 end critical end program eof $doit "-x5 --indent_critical=5" "-i3 -I0" "" rc=`expr $rc + $?` cat << eof > prog program main17 continue contains subroutine mysub continue end subroutine mysub end program eof cat << eof > expect program main17 continue contains subroutine mysub continue end subroutine mysub end program eof $doit "-C- --indent_contains=restart" "-i3 -I0" "" rc=`expr $rc + $?` cat << eof > prog program main18 continue x = x + & & 10 y = y + & 5 end program eof cat << eof > expect program main18 continue x = x + & & 10 y = y + & 5 end program eof $doit "-k- --indent_continuation=none" "-i3 -I0" "" rc=`expr $rc + $?` cat << eof > prog program main19 continue select case(i) case(3) x=8 case(5) y=2 end select continue end program eof cat << eof > expect program main19 continue select case(i) case(3) x=8 case(5) y=2 end select continue end program eof $doit "-c4 --indent_case=4" "-i6 -I0" "" rc=`expr $rc + $?` cat << eof > prog program main20 continue contains function foo(bar) real bar continue end function end program eof cat << eof > expect program main20 continue contains function foo(bar) real bar continue end function end program eof $doit "-C4 --indent_contains=4" "-i6 -I0" "" rc=`expr $rc + $?` cat << eof > prog subroutine mysub02 continue entry myentry continue end subroutine eof cat << eof > expect subroutine mysub02 continue entry myentry continue end subroutine eof $doit "-e4 --indent_entry=4" "-i6 -I0" "" rc=`expr $rc + $?` cat << eof > prog subroutine mysub03 do i=1,20 continue !$ continue enddo end subroutine eof cat << eof > expect subroutine mysub03 do i=1,20 continue !$ continue enddo end subroutine eof $doit "--openmp=0" "-i3 -I0" "" rc=`expr $rc + $?` cat << eof > prog subroutine mysub04 do i=1,20 continue !$ continue enddo end subroutine eof cat << eof > expect subroutine mysub04 do i=1,20 continue !$ continue enddo end subroutine eof $doit "--openmp=0" "-i3 -I0" "" rc=`expr $rc + $?` . ../postlude exit $rc findent-4.3.2/test/test17.sh0000755000000000000000000000460114566134066012556 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #test output of help-texts and flag --selfrep if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi exe=$FINDENT rc=0 for f in vim_help gedit_help vim_fortran vim_findent \ gedit_external gedit_plugin gedit_plugin_py \ emacs_help emacs_findent readme makefdeps changelog; do flag="--$f" : | $exe $flag | head -n 2 | tr -d '\r' > $f.try cmp -s ../$f.ref $f.try r=$? if [ $r -eq 0 ] ; then echo "$flag : works OK" else echo "$flag : works NOT OK, compare $f.try and $f.ref" fi rc=`expr $rc + $r` done n=`: | $exe --selfrep | wc -c` if test "$n" -gt 1000 -a x"$CROSSCOMPILE" = "xno" ; then : | $exe --selfrep | tar ztf - | grep -q 'src/findent.cpp' r=$? rc=`expr $rc + $r` fi . ../postlude exit $rc findent-4.3.2/test/test18.sh0000755000000000000000000000474614566134066012571 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. if test -e prelude ; then . ./prelude else unset FINDENT . ./debian/tests/prelude fi cat < prog1.f || exit 1 program prog1 continue end program prog1 eof cat << eof > prog2.f || exit 1 module modprog2 integer i end module program prog2 use modprog2 continue end program prog2 eof cat << eof > prog1.f.ref || exit 1 program prog1 continue end program prog1 eof cat << eof > prog2.f.ref || exit 1 module modprog2 integer i end module program prog2 use modprog2 continue end program prog2 eof $WFINDENT -q -i5 prog1.f prog2.f tmpfile=`mktemp` tr -d '\r' < prog1.f > $tmpfile mv $tmpfile prog1.f tmpfile=`mktemp` tr -d '\r' < prog2.f > $tmpfile mv $tmpfile prog2.f for i in 1 2 ; do cmp -s prog$i.f prog$i.f.ref if [ $? -ne 0 ] ; then echo "prog$i.f and prog$i.f.ref are not equal" exit 1 fi done . ../postlude exit 0 findent-4.3.2/test/test19.sh0000755000000000000000000000752414566134066012567 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi rc=0 doit=../doit cat << eof > prog program main #define foo \\ bar \\ a contains #ifdef foo \\ bar \\ a subroutine sub() #elif bar==1 subroutine sub(a) #else subroutine sub(a,b) #endif continue end subroutine end program eof cat << eof > expect program main #define foo \\ bar \\ a contains #ifdef foo \\ bar \\ a subroutine sub() #elif bar==1 subroutine sub(a) #else subroutine sub(a,b) #endif continue end subroutine end program eof $doit "-ifixed --input_format=fixed" "-I0 -i3" "for fixed input" rc=`expr $rc + $?` cat << eof > expect program main #define foo \\ bar \\ a contains #ifdef foo \\ bar \\ a subroutine sub() #elif bar==1 subroutine sub(a) #else subroutine sub(a,b) #endif continue end subroutine end program eof $doit "-ifree --input_format=free" "-I0 -i3" "for free input" rc=`expr $rc + $?` cat << eof > prog program main ??logical::foo = .true. & ?? .or. & ?? .or. .false. contains ??if(foo) & ?? then subroutine sub() ??else if(bar) then subroutine sub(a) ??else subroutine sub(a,b) ??endif continue end subroutine ?? logical a= & ?? .true. end program eof cat << eof > expect program main ??logical::foo = .true. & ?? .or. & ?? .or. .false. contains ??if(foo) & ?? then subroutine sub() ??else if(bar) then subroutine sub(a) ??else subroutine sub(a,b) ??endif continue end subroutine ?? logical a= & ?? .true. end program eof $doit "-ifixed --input_format=fixed" "-I0 -i3" "for fixed input" rc=`expr $rc + $?` cat << eof > expect program main ??logical::foo = .true. & ?? .or. & ?? .or. .false. contains ??if(foo) & ?? then subroutine sub() ??else if(bar) then subroutine sub(a) ??else subroutine sub(a,b) ??endif continue end subroutine ?? logical a= & ?? .true. end program eof $doit "-ifree --input_format=free" "-I0 -i3" "for free input" rc=`expr $rc + $?` . ../postlude exit $rc findent-4.3.2/test/test2.sh0000755000000000000000000000341114566134066012466 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi ../test-compile.sh ../progfixed.f rc=$? . ../postlude exit $rc findent-4.3.2/test/test20.sh0000755000000000000000000007745714566134066012573 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # tests according to "Modern Fortran explaned" ISBN 978-0-19-881188-6 if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi rc=0 cat << eof > prog ! if statement and if construct. pp 55-57 program p_if logical a,b if(a) continue if(a) then continue endif if (a) then continue else continue endif if (a) then continue elseif (b) then continue else continue endif l1: if(a) then continue endif l1 l2: if (a) then continue else l2 continue endif l2 l3: if (a) then continue else if (b) then l3 continue else l3 continue endif l3 continue end eof cat << eof > expect ! if statement and if construct. pp 55-57 program p_if logical a,b if(a) continue if(a) then continue endif if (a) then continue else continue endif if (a) then continue elseif (b) then continue else continue endif l1: if(a) then continue endif l1 l2: if (a) then continue else l2 continue endif l2 l3: if (a) then continue else if (b) then l3 continue else l3 continue endif l3 continue end eof ../doit "-f5 --indent-if=5 --indent_if=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! case construct pp 57-59 program p_case integer i select case (i) case (3) continue case (4) continue case default continue end select l1: select case (i) case (3) l1 continue case (4) l1 continue case default l1 continue end select l1 end eof cat << eof > expect ! case construct pp 57-59 program p_case integer i select case (i) case (3) continue case (4) continue case default continue end select l1: select case (i) case (3) l1 continue case (4) l1 continue case default l1 continue end select l1 end eof ../doit "-s5 --indent-select=5 --indent_select=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! do construct pp 59-63 program p_do do i=1,10 continue enddo l1: do i=1,10,2 continue enddo l1 do , i=1,10 continue end do l2: do, i=1,10,2 continue end do l2 continue end eof cat << eof > expect ! do construct pp 59-63 program p_do do i=1,10 continue enddo l1: do i=1,10,2 continue enddo l1 do , i=1,10 continue end do l2: do, i=1,10,2 continue end do l2 continue end eof ../doit "-d5 --indent-do=5 --indent_do=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Main program pp 70-71 program p_main continue end program main program p_main1 continue end program program p_main2 continue contains subroutine mysub continue end end eof cat << eof > expect ! Main program pp 70-71 program p_main continue end program main program p_main1 continue end program program p_main2 continue contains subroutine mysub continue end end eof ../doit "-r5 --indent-procedure=5 --indent_procedure=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! External subprograms pp 72-73 subroutine p_sub1 continue contains subroutine mysub continue end end subroutine p_sub1 real function myfunc() continue contains subroutine asub(x) continue end subroutine asub end function myfunc eof cat << eof > expect ! External subprograms pp 72-73 subroutine p_sub1 continue contains subroutine mysub continue end end subroutine p_sub1 real function myfunc() continue contains subroutine asub(x) continue end subroutine asub end function myfunc eof ../doit "-r5 --indent-procedure=5 --indent_procedure=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Modules pp 73-75 module p_module integer i contains subroutine mysub continue end subroutine mysub end module p_module1 integer j contains real function myfunc(x) continue myfunc=x end function end module p_module1 module p_module2 integer k contains real function afunc(x) continue myfunc=x*k end function end module eof cat << eof > expect ! Modules pp 73-75 module p_module integer i contains subroutine mysub continue end subroutine mysub end module p_module1 integer j contains real function myfunc(x) continue myfunc=x end function end module p_module1 module p_module2 integer k contains real function afunc(x) continue myfunc=x*k end function end module eof ../doit "-m5 --indent-module=5 --indent_module=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Arguments of procedures pp 76-83 subroutine s_arguments(x,y) integer, intent(inout) :: x,y continue end integer function f_arguments(x,y,z) integer x,y,z f_arguments = x+y+z end eof cat << eof > expect ! Arguments of procedures pp 76-83 subroutine s_arguments(x,y) integer, intent(inout) :: x,y continue end integer function f_arguments(x,y,z) integer x,y,z f_arguments = x+y+z end eof ../doit "-r5 --indent-procedure=5 --indent_procedure=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Explicit and implicit interfaces pp 83-84 program p_interface interface inter subroutine s(x) real x end end interface inter interface subroutine y(x) real x end end interface end program eof cat << eof > expect ! Explicit and implicit interfaces pp 83-84 program p_interface interface inter subroutine s(x) real x end end interface inter interface subroutine y(x) real x end end interface end program eof ../doit "-j5 --indent-interface=5 --indent_interface=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Direct recursion pp 92-93 recursive function f_recur(n) result(i) integer i,n i = n end function eof cat << eof > expect ! Direct recursion pp 92-93 recursive function f_recur(n) result(i) integer i,n i = n end function eof ../doit "-r5 --indent-procedure=5 --indent_procedure=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Overloading and generic interfaces pp 94-99 program p_overload interface doit real function doit1(x) real x end function doit1 real function doit2(x,y) real x,y end function doit2 end interface doit interface operator(*) logical function myand(a,b) logical, intent(in) :: a,b end function myand end interface operator(*) end eof cat << eof > expect ! Overloading and generic interfaces pp 94-99 program p_overload interface doit real function doit1(x) real x end function doit1 real function doit2(x,y) real x,y end function doit2 end interface doit interface operator(*) logical function myand(a,b) logical, intent(in) :: a,b end function myand end interface operator(*) end eof ../doit "-j5 --indent-interface=5 --indent_interface=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! The subroutine and function statements pp 99-101 program p_subroutine end integer(4), pure elemental function myfunc(x) integer, intent(in) :: x myfunc = x end function pure function pfunc(x) result(y) real*8, intent(in) :: x real*8 y y=x end elemental subroutine mysub(i) integer, intent(inout) :: i i = 2*i continue end subroutine mysub pure subroutine psub(x,y) real, intent(inout) :: x real, intent(in) :: y x = x*y continue end eof cat << eof > expect ! The subroutine and function statements pp 99-101 program p_subroutine end integer(4), pure elemental function myfunc(x) integer, intent(in) :: x myfunc = x end function pure function pfunc(x) result(y) real*8, intent(in) :: x real*8 y y=x end elemental subroutine mysub(i) integer, intent(inout) :: i i = 2*i continue end subroutine mysub pure subroutine psub(x,y) real, intent(inout) :: x real, intent(in) :: y x = x*y continue end eof ../doit "-r5 --indent-procedure=5 --indent_procedure=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! The where statement and construct pp 123-126 program p_where real a(10) where(a /= 0) a=1/a where (a /= 0) a=1/a end where where (a /= 0) a=1/a elsewhere a=9 end where where (a == 0) a = 1 elsewhere (a > -1) a=0.5 elsewhere (a > 4) a=3 end where l1: where (a /= 0) a=1/a end where l1 l2: where (a == 0) a = 1 elsewhere (a /= 24 )l2 a=0.5 elsewhere (a > 4) l2 a=3 end where l2 l3:where (a /= 0) a=1/a elsewhere l3 a=9 end where l3 end eof cat << eof > expect ! The where statement and construct pp 123-126 program p_where real a(10) where(a /= 0) a=1/a where (a /= 0) a=1/a end where where (a /= 0) a=1/a elsewhere a=9 end where where (a == 0) a = 1 elsewhere (a > -1) a=0.5 elsewhere (a > 4) a=3 end where l1: where (a /= 0) a=1/a end where l1 l2: where (a == 0) a = 1 elsewhere (a /= 24 )l2 a=0.5 elsewhere (a > 4) l2 a=3 end where l2 l3:where (a /= 0) a=1/a elsewhere l3 a=9 end where l3 end eof ../doit "-w5 --indent-where=5 --indent_where=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Impure elemental procedures pp 128-129 program p_impure contains impure elemental integer function myfunc(x) integer, intent(in) :: x myfunc = x+1 end function end program eof cat << eof > expect ! Impure elemental procedures pp 128-129 program p_impure contains impure elemental integer function myfunc(x) integer, intent(in) :: x myfunc = x+1 end function end program eof ../doit "-r5 --indent-procedure=5 --indent_procedure=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! The do concurrent construct program p_doconcurrent real:: a(10) do concurrent(i=1:10) a(i) = 8 enddo l1: do concurrent(i=1:10) a(i) = 8 enddo l1 do, concurrent(i=1:10) a(i) = 8 enddo l2: do, concurrent(i=1:10) a(i) = 8 enddo l2 end eof cat << eof > expect ! The do concurrent construct program p_doconcurrent real:: a(10) do concurrent(i=1:10) a(i) = 8 enddo l1: do concurrent(i=1:10) a(i) = 8 enddo l1 do, concurrent(i=1:10) a(i) = 8 enddo l2: do, concurrent(i=1:10) a(i) = 8 enddo l2 end eof ../doit "-d5 --indent-do=5 --indent_do=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! The block construct pp 168-170 program p_block block continue end block l1:block continue end block l1 end eof cat << eof > expect ! The block construct pp 168-170 program p_block block continue end block l1:block continue end block l1 end eof ../doit "-b5 --indent-block=5 --indent_block=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Derived-type definitions pp 173-177 module p_type type,public :: mytype integer a(10) end type mytype type :: atype integer a(10) end type type :: btype integer a(10) end type btype type anothertype integer x(10) end type end eof cat << eof > expect ! Derived-type definitions pp 173-177 module p_type type,public :: mytype integer a(10) end type mytype type :: atype integer a(10) end type type :: btype integer a(10) end type btype type anothertype integer x(10) end type end eof ../doit "-t5 --indent-type=5 --indent_type=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Advanced type parameter features program p_advancedtype type mytype(k,l) integer, kind :: k integer, len :: l real(k) :: a(l) end type mytype type(mytype(selected_real_kind(6),10)) :: x x%a(2) = 9 end eof cat << eof > expect ! Advanced type parameter features program p_advancedtype type mytype(k,l) integer, kind :: k integer, len :: l real(k) :: a(l) end type mytype type(mytype(selected_real_kind(6),10)) :: x x%a(2) = 9 end eof ../doit "-t5 --indent-type=5 --indent_type=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Abstract interfaces pp 285-287 program p_abstractinterfaces abstract interface integer function f(x,y) integer x,y end function end interface end eof cat << eof > expect ! Abstract interfaces pp 285-287 program p_abstractinterfaces abstract interface integer function f(x,y) integer x,y end function end interface end eof ../doit "-j5 --indent-interface=5 --indent_interface=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Type extension pp 291-293 program p_typeextension type x integer a end type x type, extends(x) :: y integer b end type y end eof cat << eof > expect ! Type extension pp 291-293 program p_typeextension type x integer a end type x type, extends(x) :: y integer b end type y end eof ../doit "-t5 --indent-type=5 --indent_type=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! The associate construct pp 300-301 program p_associate implicit none type atype real x end type atype type(atype) :: a associate(x => a%x) x=10 end associate l1: associate(x => a%x) x=10 end associate l1 end eof cat << eof > expect ! The associate construct pp 300-301 program p_associate implicit none type atype real x end type atype type(atype) :: a associate(x => a%x) x=10 end associate l1: associate(x => a%x) x=10 end associate l1 end eof ../doit "-a5 --indent-associate=5 --indent_associate=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! The select type construct module mymod implicit none type t real x end type type u integer i end type type, extends(u) :: w integer j end type end module mymod program p_selecttype use mymod implicit none type(t), target :: a type(u), target :: b type(w), target :: c class(*), pointer :: h a%x = 11 b%i = -10 c%i = 120 h => a call doit(h) h => b call doit(h) h => c call doit(h) contains subroutine doit(h) class(*), pointer :: h select type(h) type is (t) print *,h%x type is(u) print *,h%i class is (w) print *,h%i class default print *,'ai!' end select l1: select type(h) type is (t) l1 print *,h%x type is(u) l1 print *,h%i class is (w) l1 print *,h%i class default l1 print *,'ai!' end select l1 end end eof cat << eof > expect ! The select type construct module mymod implicit none type t real x end type type u integer i end type type, extends(u) :: w integer j end type end module mymod program p_selecttype use mymod implicit none type(t), target :: a type(u), target :: b type(w), target :: c class(*), pointer :: h a%x = 11 b%i = -10 c%i = 120 h => a call doit(h) h => b call doit(h) h => c call doit(h) contains subroutine doit(h) class(*), pointer :: h select type(h) type is (t) print *,h%x type is(u) print *,h%i class is (w) print *,h%i class default print *,'ai!' end select l1: select type(h) type is (t) l1 print *,h%x type is(u) l1 print *,h%i class is (w) l1 print *,h%i class default l1 print *,'ai!' end select l1 end end eof ../doit "-s5 --indent-select=5 --indent_select=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! select rank p 442 #define CANRANK #ifdef __GNUC__ #if __GNUC__ < 10 #undef CANRANK #endif #endif program selrank implicit none real, dimension(3,4) :: y print *,xfunc(y) contains integer function xfunc(a) implicit none real, intent(in) :: a(..) integer k k = -2 #ifdef CANRANK select rank(a) rank(*) k = -1 rank(0) k = 0 rank(1) k = 1 rank(2) k = 2 rank default k = 100 end select #endif xfunc = k end function end program selrank eof cat << eof > expect ! select rank p 442 #define CANRANK #ifdef __GNUC__ #if __GNUC__ < 10 #undef CANRANK #endif #endif program selrank implicit none real, dimension(3,4) :: y print *,xfunc(y) contains integer function xfunc(a) implicit none real, intent(in) :: a(..) integer k k = -2 #ifdef CANRANK select rank(a) rank(*) k = -1 rank(0) k = 0 rank(1) k = 1 rank(2) k = 2 rank default k = 100 end select #endif xfunc = k end function end program selrank eof ../doit "-s5 --indent-select=5 --indent_select=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Type and contains p 316 module mymod type mytype integer i contains procedure sub end type mytype contains subroutine sub(this) class(mytype) :: this continue end end module mymod program p_typecontains use mymod type(mytype) t end eof cat << eof > expect ! Type and contains p 316 module mymod type mytype integer i contains procedure sub end type mytype contains subroutine sub(this) class(mytype) :: this continue end end module mymod program p_typecontains use mymod type(mytype) t end eof ../doit "-t5 --indent-type=5 --indent_type=5 " "-C4 -ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Deferred bindings and abstract types pp 312-313 module mymod integer i type, abstract :: mytype contains procedure (sub), deferred, pass :: x end type mytype abstract interface subroutine sub(p) import mytype class(mytype) :: p end end interface type, abstract :: mt contains procedure(op), deferred :: plus generic :: operator(+) => plus end type mt abstract interface function op(a,b) result(r) import mt class(mt), intent(in) :: a,b class (mt), allocatable :: r end function end interface end module eof cat << eof > expect ! Deferred bindings and abstract types pp 312-313 module mymod integer i type, abstract :: mytype contains procedure (sub), deferred, pass :: x end type mytype abstract interface subroutine sub(p) import mytype class(mytype) :: p end end interface type, abstract :: mt contains procedure(op), deferred :: plus generic :: operator(+) => plus end type mt abstract interface function op(a,b) result(r) import mt class(mt), intent(in) :: a,b class (mt), allocatable :: r end function end interface end module eof ../doit "-t5 --indent-type=5 --indent_type=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Finalization pp 313-314 module mymod type mytype integer i contains final :: doit end type mytype contains subroutine doit(x) type(mytype) :: x end subroutine doit end module eof cat << eof > expect ! Finalization pp 313-314 module mymod type mytype integer i contains final :: doit end type mytype contains subroutine doit(x) type(mytype) :: x end subroutine doit end module eof ../doit "-t5 --indent-type=5 --indent_type=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Submodules pp 322-324 module base integer i interface integer module function square(i) integer i end function square end interface end module base submodule (base) deriv contains module procedure square square = i*i end procedure square end submodule deriv eof cat << eof > expect ! Submodules pp 322-324 module base integer i interface integer module function square(i) integer i end function square end interface end module base submodule (base) deriv contains module procedure square square = i*i end procedure square end submodule deriv eof ../doit "-m5 --indent-module=5 --indent_module=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Critical sections pp 340-341 program p_critical critical continue end critical l1: critical continue end critical l1 end eof cat << eof > expect ! Critical sections pp 340-341 program p_critical critical continue end critical l1: critical continue end critical l1 end eof ../doit "-x5 --indent-critical=5 --indent_critical=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Interoperability with C pp 367-381 module mymod type, bind(c) :: mytype integer i end type enum, bind(c) enumerator a=1, b=2 enumerator c end enum contains function f() bind(c) continue end function f su broutine sub bind(c) continue end subroutine sub1() bind(c) continue end end module eof cat << eof > expect ! Interoperability with C pp 367-381 module mymod type, bind(c) :: mytype integer i end type enum, bind(c) enumerator a=1, b=2 enumerator c end enum contains function f() bind(c) continue end function f su broutine sub bind(c) continue end subroutine sub1() bind(c) continue end end module eof ../doit "-m5 --indent-module=5 --indent_module=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Change team construct pp 385-388 ! not compiled program p_team use iso_fortran_env type(team_type) myteam change team(myteam) continue end team l1: change team(myteam) continue end team (stat=i)l1 critical continue end critical critical (stat=i) continue end critical l2:critical (stat=i) continue end critical l2 end eof cat << eof > expect ! Change team construct pp 385-388 ! not compiled program p_team use iso_fortran_env type(team_type) myteam change team(myteam) continue end team l1: change team(myteam) continue end team (stat=i)l1 critical continue end critical critical (stat=i) continue end critical l2:critical (stat=i) continue end critical l2 end eof ../doit "-r5--indent-procedure=5 --indent_procedure=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! The include line p 447 program p_include do i=1,10 include 'file.inc' include "file2.inc" continue enddo end eof cat << eof > expect ! The include line p 447 program p_include do i=1,10 include 'file.inc' include "file2.inc" continue enddo end eof ../doit "-ifree" "-ifree -Ia" rc=`expr $rc + $?` ../doit "--include_left=0 --include-left=0" "-ifree -Ia" rc=`expr $rc + $?` cat << eof > expect ! The include line p 447 program p_include do i=1,10 include 'file.inc' include "file2.inc" continue enddo end eof ../doit "--include_left=1 --include-left=1" "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! The include line p 447 program p_include do i=1,10 include 'file.inc' include "file2.inc" continue enddo end eof cat << eof > expect ! The include line p 447 program p_include do i=1,10 include 'file.inc' include "file2.inc" continue enddo end eof ../doit "-ifixed" "-ifixed -Ia" rc=`expr $rc + $?` ../doit "--include_left=0 --include-left=0" "-ifixed -Ia" rc=`expr $rc + $?` cat << eof > expect ! The include line p 447 program p_include do i=1,10 include 'file.inc' include "file2.inc" continue enddo end eof ../doit "--include_left=1 --include-left=1" "-ifixed -Ia" rc=`expr $rc + $?` cat << eof > prog ! The do while statement pp 447-448 program p_dowhile logical l do while (l) continue end do l1: do while(l) continue enddo l1 do 10 while(l) continue 10 continue do 20, while(l) continue 20 continue end eof cat << eof > expect ! The do while statement pp 447-448 program p_dowhile logical l do while (l) continue end do l1: do while(l) continue enddo l1 do 10 while(l) continue 10 continue do 20, while(l) continue 20 continue end eof ../doit "-r5--indent-procedure=5 --indent_procedure=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Character length specification with * p 458 character*10 function f() continue f='abc' end eof cat << eof > expect ! Character length specification with * p 458 character*10 function f() continue f='abc' end eof ../doit "-r5--indent-procedure=5 --indent_procedure=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Entry statement pp 462-463 subroutine sub integer i continue entry sub1 continue end eof cat << eof > expect ! Entry statement pp 462-463 subroutine sub integer i continue entry sub1 continue end eof ../doit "-e5 --indent-entry=5 --indent_entry=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Forall statement and construct pp 463-466 program p_forall integer a(20) forall(i=1:20) a(i) = 3*i ! statement forall(i=1:20) ! construct a(i) = 4*i end forall end eof cat << eof > expect ! Forall statement and construct pp 463-466 program p_forall integer a(20) forall(i=1:20) a(i) = 3*i ! statement forall(i=1:20) ! construct a(i) = 4*i end forall end eof ../doit "-F5 --indent-forall=5 --indent_forall=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! The block data program unit block data common // i data i /1/ end block data eof cat << eof > expect ! The block data program unit block data common // i data i /1/ end block data eof ../doit "-r5 --indent-procedure=5 --indent_procedure=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! The labelled do construct program p_dolabel do 10 i=1,5 continue 10 enddo do 20 i=1,5 continue do 15 j=1,5 continue 15 continue 20 continue do 50 i=1,5 do 50 j=1,5 continue 50 continue end eof cat << eof > expect ! The labelled do construct program p_dolabel do 10 i=1,5 continue 10 enddo do 20 i=1,5 continue do 15 j=1,5 continue 15 continue 20 continue do 50 i=1,5 do 50 j=1,5 continue 50 continue end eof ../doit "-d5 --indent-do=5 --indent_do=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Arithmetic if statement program p_aritif i = 2 if(i) 10,20,30 10 continue 20 continue 30 continue end eof cat << eof > expect ! Arithmetic if statement program p_aritif i = 2 if(i) 10,20,30 10 continue 20 continue 30 continue end eof ../doit "-d5 --indent-do=5 --indent_do=5 " "-ifree -Ia" rc=`expr $rc + $?` cat << eof > prog ! Shared do-loop termination program p_shdolote do 20, i=1,8 do 20 ,j=1,6 continue 20 print *,i*j do 30, i=1,8 do 30, j=1,6 continue 30 continue end eof cat << eof > expect ! Shared do-loop termination program p_shdolote do 20, i=1,8 do 20 ,j=1,6 continue 20 print *,i*j do 30, i=1,8 do 30, j=1,6 continue 30 continue end eof ../doit "-d5 --indent-do=5 --indent_do=5 " "-ifree -Ia" rc=`expr $rc + $?` . ../postlude exit $rc # vim: indentexpr=none findent-4.3.2/test/test21.sh0000755000000000000000000000347314566134066012557 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi if test xyes = "x$ESOPE" ; then ../test-compile.sh ../esope.f rc=$? else rc=0 fi . ../postlude exit $rc findent-4.3.2/test/test22.sh0000755000000000000000000000353414566134066012556 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi rc=0 ../test-compile.sh ../progrelabelfree.f rc=`expr $rc + $?` ../test-compile.sh ../progshufflefree.f rc=`expr $rc + $?` . ../postlude exit $rc findent-4.3.2/test/test23.sh0000755000000000000000000000355014566134066012555 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi rc=0 ../test-compile.sh ../progfixedrelabelfixed.f rc=`expr $rc + $?` ../test-compile.sh ../progfixedshufflefixed.f rc=`expr $rc + $?` . ../postlude exit $rc findent-4.3.2/test/test24.sh0000755000000000000000000010422614566134066012560 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # testing error conditions of relabeling if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi rc=0 cat << eof > prog subroutine s goto 10 10 continue end program p goto 123 end eof cat << eof > expect subroutine s goto 1000 1000 continue end program p goto 123 end eof ../doit "--relabel" "-ifree" " Test001: undefined label format:free" rc=`expr $rc + $?` cat << eof > prog subroutine s goto 10 10 continue end program p goto 123 end eof cat << eof > expect subroutine s goto 1000 1000 continue end program p goto 123 end eof ../doit "--relabel" "-ifixed" " Test002: undefined label format: fixed" rc=`expr $rc + $?` cat << eof > prog subroutine s goto 10 10 continue end program p goto 123 end eof cat << eof > expect !Relabeling error: undefined label: 123 (6); eof ../doit "--query-relabel=1" "-ifree" " Test003: undefined label format:free" rc=`expr $rc + $?` cat << eof > prog subroutine s;continue goto 10 10 continue end program p goto 123 123 continue end eof cat << eof > expect subroutine s;continue goto 10 10 continue end program p goto 123 123 continue end eof ../doit "--relabel" "-ifree" " Test004: subroutine in multistatemen line: free" rc=`expr $rc + $?` cat << eof > prog subroutine s;continue goto 10 10 continue end program p goto 123 123 continue end eof cat << eof > expect subroutine s;continue goto 10 10 continue end program p goto 123 123 continue end eof ../doit "--relabel" "-ifixed" " Test005: subroutine in multistatemen line: fixed" cat << eof > prog subroutine s;continue goto 10 10 continue end program p goto 123 123 continue end eof cat << eof > expect !Relabeling error: subroutine statement part of multi statement line (1); eof ../doit "--query_relabel=1" "-ifixed" " Test006: subroutine in multistatemen line: fixed" rc=`expr $rc + $?` cat << eof > prog subroutine s function f(x) goto 10 10 continue end program p goto 123 123 continue end eof cat << eof > expect subroutine s function f(x) goto 10 10 continue end program p goto 123 123 continue end eof ../doit "--relabel" "-ifree" " Test007: misplaced function definition: free" rc=`expr $rc + $?` cat << eof > prog subroutine s goto 10 continue end program p subroutine f(x) goto 123 continue end eof cat << eof > expect subroutine s goto 10 continue end program p subroutine f(x) goto 123 continue end eof ../doit "--relabel" "-ifixed" " Test008: misplaced subroutine definition: fixed" rc=`expr $rc + $?` cat << eof > prog subroutine s goto 10 10 continue end program p function f(x) goto 123 123 continue end eof cat << eof > expect !subroutine s: !original(def'd ) new (used) ! 10( 3) -> 1000(2) !Relabeling error: misplaced function statement (6); eof ../doit "--query-relabel=2" "-ifree" " Test009: misplaced function definition: free" rc=`expr $rc + $?` cat << eof > prog subroutine s goto (10,20,x),i 10 continue 20 continue end program p goto 123 123 continue end eof cat << eof > expect subroutine s goto (10,20,x),i 10 continue 20 continue end program p goto 123 123 continue end eof ../doit "--relabel" "-ifree" " Test010: computed goto: free" rc=`expr $rc + $?` cat << eof > prog subroutine s goto (10,20,x),i 10 continue 20 continue end program p goto 123 123 continue end eof cat << eof > expect !Relabeling error: error in computed GOTO list (2); eof ../doit "--query-relabel=1" "-ifixed" " Test011: computed goto: fixed" rc=`expr $rc + $?` cat << eof > prog subroutine s assign 20 to i goto i,(10,20,) 10 continue 20 continue end program p goto 123 123 continue end eof cat << eof > expect subroutine s assign 20 to i goto i,(10,20,) 10 continue 20 continue end program p goto 123 123 continue end eof ../doit "--relabel" "-ifixed" " Test012: assigned goto: fixed" rc=`expr $rc + $?` cat << eof > prog subroutine s assign 20 to i goto i,(10,20,) 10 continue 20 continue end program p goto 123 123 continue end eof cat << eof > expect !Relabeling error: error in assigned GOTO list (3); eof ../doit "--query_relabel=1" "-ifixed" " Test013: assigned goto: fixed" rc=`expr $rc + $?` cat << eof > prog subroutine s goto (10,20),i 10 continue 20 continue end program p goto 12& &3 123 continue end eof cat << eof > expect subroutine s goto (1000,1010),i 1000 continue 1010 continue end program p goto 12& &3 123 continue end eof ../doit "--relabel" "-ifree" " Test014: continuation in label: free" rc=`expr $rc + $?` cat << eof > prog subroutine s goto (10,20),i 10 continue 20 continue end program p goto 12 &3 123 continue end eof cat << eof > expect !subroutine s: !original(def'd ) new (used) ! 10( 3) -> 1000(2) ! 20( 4) -> 1010(2) !Relabeling error: label not on one line: 123(8) eof ../doit "--query_relabel --query-relabel=2" "-ifixed" " Test015: continuation in label: fixed" rc=`expr $rc + $?` cat << eof > prog subroutine s goto (10,20,30),i 10 continue 20 continue 30 continue end program p goto (123,& #ifdef X 1) #else 2) #endif 123 continue 1 continue 2 continue end eof cat << eof > expect subroutine s goto (1000,1010,1020),i 1000 continue 1010 continue 1020 continue end program p goto (123,& #ifdef X 1) #else 2) #endif 123 continue 1 continue 2 continue end eof ../doit "--relabel" "-ifree" " Test016: intervening preprocessor statement: free" rc=`expr $rc + $?` cat << eof > prog subroutine s goto (10,20,30),i 10 continue 20 continue 30 continue end program p goto (123, #ifdef X &1) #else &2) #endif 123 continue 1 continue 2 continue end eof cat << eof > expect !Relabeling error: intervening preprocessor statement (12); eof ../doit "--query-relabel=1" "-ifixed" " Test017: intervening preprocessor statement: fixed" rc=`expr $rc + $?` cat << eof > prog subroutine s goto (10,20),i 10 continue 20 continue end program p goto 123 123 continue 1 continue 4 continue 5 continue 9 continue 10 continue end eof cat << eof > expect subroutine s goto (99990,99992),i 99990 continue 99992 continue end program p goto 123 123 continue 1 continue 4 continue 5 continue 9 continue 10 continue end eof ../doit "--relabel=99990,2" "-ifixed" " Test018: label too large: fixed" rc=`expr $rc + $?` cat << eof > prog subroutine s goto (10,20),i 10 continue 20 continue end program p goto 123 123 continue 1 continue 4 continue 5 continue 9 continue 10 continue end eof cat << eof > expect !Relabeling error: label would go out of range: 5 -> 100000 (11); eof ../doit "--query-relabel=1" "-ifree --relabel=99990,2" " Test019: label too large: free" rc=`expr $rc + $?` cat << eof > prog subroutine s goto (10,20),i 10 continue 20 continue end; program p goto 123 123 continue end eof cat << eof > expect subroutine s goto (10,20),i 10 continue 20 continue end; program p goto 123 123 continue end eof ../doit "--relabel" "-ifixed" " Test020: end statement in multi statement line: fixed" rc=`expr $rc + $?` cat << eof > prog subroutine s goto (10,20),i 10 continue 20 continue end; program p goto 123 123 continue end eof cat << eof > expect !Relabeling error: END in multi statement line (5); eof ../doit "--relabel" "-ifree --query-relabel=1" " Test021: end statement in multi statement line: free" rc=`expr $rc + $?` cp ../progrelabelfree.f prog cat << eof > expect !function point_dist: !original(def'd ) new (used) !procedure fun: !original(def'd ) new (used) !function fun: !original(def'd ) new (used) !subroutine x: !original(def'd ) new (used) ! 1( 25) -> 1000(24) !procedure point_dist: !original(def'd ) new (used) ! 10( 31) -> 1010(30) !subroutine mysub: !original(def'd ) new (used) !subroutine mysubomp: !original(def'd ) new (used) ! 10( 45) -> 1020(42,43) !subroutine mysub1: !original(def'd ) new (used) ! 1( 49) -> 1030() !subroutine mysub2: !original(def'd ) new (used) !function myfun: !original(def'd ) new (used) ! 10( 59) -> 1040(57) ! 20( 61) -> 1050(57) ! 30( 62) -> 1060(57) ! 50( 67) -> 1070(59,61,62,64) !program p: !original(def'd ) new (used) ! 1( 80) -> 1160(77) ! 1000( 98) -> 1220(97) ! 1001( 98) -> 1230(96) ! 11( 76) -> 1110() ! 1101( 130) -> 1340(120,123,124,125) ! 1102( 133) -> 1350(123,128) ! 111( 75) -> 1080() ! 112( 75) -> 1090() ! 115( 75) -> 1100() ! 120( 101) -> 1240(100) ! 1200( 129) -> 1330(130,131,132,133,134,136,138) ! 12345( 89) -> 1190(87) ! 130( 102) -> 1250(100,123) ! 2( 80) -> 1150(77) ! 2010( 183) -> 1360(128,136,138,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,165,165,165,166,166,166,167,168,172,172,172,174,174,179,179) ! 2020( 184) -> 1370(143,144,162,165,169,172,175,176,177,180,181,182) ! 3( 79) -> 1140(77) ! 3010( 201) -> 1380(185,187,191,192,193,197,198,199) ! 3020( 202) -> 1390(185,187,191,192,193,197,198,199) ! 3030( 203) -> 1400(185,187,191,192,193,197,198,199) ! 31( 76) -> 1120() ! 5( 86) -> 1180(86) ! 51( 76) -> 1130() ! 511( 84) -> 1170(81,82,83) ! 8( 92) -> 1200(90) ! 9( 95) -> 1210(93) ! 91( 114) -> 1300(104,104,108,108,111,120,123,125,128) ! 92( 115) -> 1310(104,104,108,108,111,120,123,125,128) ! 93( 116) -> 1320(104,104,108,108,120,123,125,128) ! 95( 104) -> 1260() ! 951( 108) -> 1280() ! 96( 104) -> 1270() ! 961( 108) -> 1290() !function f: !original(def'd ) new (used) ! 1( 206) -> 1410() !subroutine subf: !original(def'd ) new (used) ! 1( 210) -> 1420() !subroutine subx: !original(def'd ) new (used) ! 100( 261) -> 1490(230,231,232,233,234,235,237,238,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260) ! 101( 221) -> 1440(220) ! 102( 223) -> 1450(222) ! 103( 225) -> 1460(224) ! 104( 227) -> 1470(226) ! 105( 229) -> 1480(228) ! 110( 261) -> 1500(218,219,233,235,236,237,239,242,243,244,250,253,256,258,260) ! 120( 261) -> 1510(218,219,233,242,243,244,250,253,256,258,260) ! 130( 261) -> 1520(218,250,253) ! 99( 217) -> 1430() !subroutine subx1: !original(def'd ) new (used) ! 100( 298) -> 1530(266,267,268,269,270,271,273,274,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296) ! 110( 298) -> 1540(269,271,272,273,275,278,279,280,286,289,292,294,296) ! 120( 298) -> 1550(269,278,279,280,286,289,292,294,296) ! 130( 298) -> 1560(286,289) !subroutine suby: !original(def'd ) new (used) ! 100( 347) -> 1630(316,317,318,319,320,321,323,324,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346) ! 101( 307) -> 1580(306) ! 102( 309) -> 1590(308) ! 103( 311) -> 1600(310) ! 104( 313) -> 1610(312) ! 105( 315) -> 1620(314) ! 110( 347) -> 1640(304,305,319,321,322,323,325,328,329,330,336,339,342,344,346) ! 120( 347) -> 1650(304,305,319,328,329,330,336,339,342,344,346) ! 130( 347) -> 1660(304,336,339) ! 99( 303) -> 1570() !subroutine suby1: !original(def'd ) new (used) ! 100( 384) -> 1670(352,353,354,355,356,357,359,360,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382) ! 110( 384) -> 1680(355,357,358,359,361,364,365,366,372,375,378,380,382) ! 120( 384) -> 1690(355,364,365,366,372,375,378,380,382) ! 130( 384) -> 1700(372,375) !subroutine old_dec: !original(def'd ) new (used) ! 10( 410) -> 1710(393,398,403) ! 20( 411) -> 1720(405,406) ! 30( 412) -> 1730(408) ! 40( 413) -> 1740(409) ! 50( 414) -> 1750(394,395,396,397,398,399,400,401,401,408) ! 60( 415) -> 1760(401,409) !Relabeling error: intervening preprocessor statement (423); eof ../doit "--query_relabel --query-relabel=2" "" " Test022: query-relabel of larger program: free" rc=`expr $rc + $?` cp ../progfixedrelabelfixed.f prog cat << eof > expect !function point_dist: !original(def'd ) new (used) !procedure fun: !original(def'd ) new (used) !function fun: !original(def'd ) new (used) !subroutine x: !original(def'd ) new (used) ! 1( 25) -> 1000(24) !procedure point_dist: !original(def'd ) new (used) ! 10( 31) -> 1010(30) !subroutine mysub: !original(def'd ) new (used) !subroutine mysubomp: !original(def'd ) new (used) ! 10( 44) -> 1020(41,42) !subroutine mysub1: !original(def'd ) new (used) ! 1( 48) -> 1030() !subroutine mysub2: !original(def'd ) new (used) !function myfun: !original(def'd ) new (used) ! 10( 58) -> 1040(56) ! 20( 60) -> 1050(56) ! 30( 61) -> 1060(56) ! 50( 65) -> 1070(58,60,61,63) !program p: !original(def'd ) new (used) ! 1( 79) -> 1120(75) ! 1000( 98) -> 1180(97) ! 1001( 99) -> 1190(96) ! 11( 74) -> 1090() ! 1101( 135) -> 1300(125,128,129,130) ! 1102( 139) -> 1310(128,133) ! 111( 73) -> 1080() ! 120( 102) -> 1200(101) ! 1200( 134) -> 1290(135,136,137,138,139,140,142,144) ! 12345( 89) -> 1150(87) ! 130( 103) -> 1210(101,128) ! 2( 78) -> 1110(75) ! 2010( 190) -> 1320(133,142,144,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,171,171,171,172,172,173,174,175,179,179,179,181,181,186,186) ! 2020( 191) -> 1330(149,150,168,171,176,179,182,183,184,187,188,189) ! 3( 77) -> 1100(75) ! 3010( 208) -> 1340(192,194,198,199,200,204,205,206) ! 3020( 209) -> 1350(192,194,198,199,200,204,205,206) ! 3030( 210) -> 1360(192,194,198,199,200,204,205,206) ! 5( 86) -> 1140(85) ! 511( 83) -> 1130(80,81,82) ! 8( 92) -> 1160(90) ! 9( 95) -> 1170(93) ! 91( 119) -> 1260(105,106,111,112,116,125,128,130,133) ! 92( 120) -> 1270(105,106,111,112,116,125,128,130,133) ! 93( 121) -> 1280(105,107,111,113,125,128,130,133) ! 95( 106) -> 1220() ! 951( 112) -> 1240() ! 96( 107) -> 1230() ! 961( 113) -> 1250() !function f: !original(def'd ) new (used) ! 28( 214) -> 1370(213) !subroutine subx: !original(def'd ) new (used) ! 29( 219) -> 1380(218) !subroutine subx1: !original(def'd ) new (used) ! 100( 271) -> 1450(239,240,241,242,243,244,246,247,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269) ! 101( 230) -> 1400(229) ! 102( 232) -> 1410(231) ! 103( 234) -> 1420(233) ! 104( 236) -> 1430(235) ! 105( 238) -> 1440(237) ! 110( 272) -> 1460(227,228,242,244,245,246,248,251,252,253,259,262,265,267,269) ! 120( 273) -> 1470(227,228,242,251,252,253,259,262,265,267,269) ! 130( 274) -> 1480(227,259,262) ! 99( 226) -> 1390() !subroutine subx2: !original(def'd ) new (used) ! 100( 312) -> 1490(280,281,282,283,284,285,287,288,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310) ! 110( 313) -> 1500(283,285,286,287,289,292,293,294,300,303,306,308,310) ! 120( 314) -> 1510(283,292,293,294,300,303,306,308,310) ! 130( 315) -> 1520(300,303) !subroutine suby1: !original(def'd ) new (used) ! 100( 366) -> 1590(334,335,336,337,338,339,341,342,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364) ! 101( 325) -> 1540(324) ! 102( 327) -> 1550(326) ! 103( 329) -> 1560(328) ! 104( 331) -> 1570(330) ! 105( 333) -> 1580(332) ! 110( 367) -> 1600(322,323,337,339,340,341,343,346,347,348,354,357,360,362,364) ! 120( 368) -> 1610(322,323,337,346,347,348,354,357,360,362,364) ! 130( 369) -> 1620(322,354,357) ! 99( 321) -> 1530() !subroutine suby2: !original(def'd ) new (used) ! 100( 407) -> 1630(374,375,376,377,378,379,381,382,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404) ! 110( 408) -> 1640(377,379,380,381,383,386,387,388,394,397,400,402,404) ! 120( 409) -> 1650(377,386,387,388,394,397,400,402,404) ! 130( 410) -> 1660(394,397) !subroutine old_dec: !original(def'd ) new (used) ! 10( 435) -> 1670(420,426,428) ! 20( 436) -> 1680(424,425,430,431) ! 30( 437) -> 1690(433) ! 40( 438) -> 1700(434) ! 50( 439) -> 1710(416,417,418,419,420,421,422,423,423,433) ! 60( 440) -> 1720(423,434) !Relabeling error: intervening preprocessor statement (450); eof ../doit "--query_relabel --query-relabel=2" "" " Test023: query-relabel of larger program: fixed" rc=`expr $rc + $?` cat << eof > prog subroutine s goto (10,20),i 10 continue 20 continue end program p goto 123 123 continue continue;contains real function f(x) 20 continue end function f end program p eof cat << eof > expect !Relabeling error: CONTAINS in multi statement line (9); eof ../doit "--relabel" "-ifree --query-relabel=1" " Test024: contains statement in multi statement line: free" rc=`expr $rc + $?` cat << eof > prog subroutine s goto (10,20),i 10 continue 20 continue end program p goto 123 123 continue contains; real function f(x) 20 continue f=10*x end function f end program p eof cat << eof > expect !subroutine s: !original(def'd ) new (used) ! 10( 3) -> 1000(2) ! 20( 4) -> 1010(2) !Relabeling error: CONTAINS in multi statement line (9); eof ../doit "--relabel" "-ifixed --query-relabel=2" " Test025: contains statement in multi statement line: fixed" rc=`expr $rc + $?` cat << eof > prog program paren x = y + & fun(a, & abcd ,& z) x = y + & z + & a; call sub (a, & !comment b, & c) x = y + a; call sub (a, & b, & c) print *,'abc'; call sub(a,& b,& c) #if 0 write(10,'20) x; call sub(a,& b,& c) ' write(10 ' 20) x; call sub(a,& b,& c) write(10"20) x; call sub(a,& b,& c) " #endif contains subroutine sub(a,b,c) end function fun(a,b,c) fun=a end end program subroutine gnikit x = p + fun (a,& b,& c) 100 format(4ha(cd, & 4hx(bc,& i5) 10 call sub1(a,& bcd,& fun(3.0,& 4.0,& 5.0),& [6, & 7, & 8] & ) call sub1(a,& bcd,& fun(3.0,& ! comment 4.0,& ! comment 5.0),& [6, & 7, & 8] & ) contains subroutine sub1(a,b,c,d) integer d(3) end function fun(a,b,c) fun=a end end eof cat << eof > expect program paren x = y + & fun(a, & abcd ,& z) x = y + & z + & a; call sub (a, & !comment b, & c) x = y + a; call sub (a, & b, & c) print *,'abc'; call sub(a,& b,& c) #if 0 write(10,'20) x; call sub(a,& b,& c) ' write(10 ' 20) x; call sub(a,& b,& c) write(10"20) x; call sub(a,& b,& c) " #endif contains subroutine sub(a,b,c) end function fun(a,b,c) fun=a end end program subroutine gnikit x = p + fun (a,& b,& c) 100 format(4ha(cd, & 4hx(bc,& i5) 10 call sub1(a,& bcd,& fun(3.0,& 4.0,& 5.0),& [6, & 7, & 8] & ) call sub1(a,& bcd,& fun(3.0,& ! comment 4.0,& ! comment 5.0),& [6, & 7, & 8] & ) contains subroutine sub1(a,b,c,d) integer d(3) end function fun(a,b,c) fun=a end end eof ../doit "--align_paren --align-paren --align_paren=1 --align-paren=1" "-ifree -I8" " Test026: --align_paren: free" rc=`expr $rc + $?` cat << eof > expect program paren x = y + & fun(a, & abcd ,& z) x = y + & z + & a; call sub (a, & !comment b, & c) x = y + a; call sub (a, & b, & c) print *,'abc'; call sub(a,& b,& c) #if 0 write(10,'20) x; call sub(a,& b,& c) ' write(10 ' 20) x; call sub(a,& b,& c) write(10"20) x; call sub(a,& b,& c) " #endif contains subroutine sub(a,b,c) end function fun(a,b,c) fun=a end end program subroutine gnikit x = p + fun (a,& b,& c) 100 format(4ha(cd, & 4hx(bc,& i5) 10 call sub1(a,& bcd,& fun(3.0,& 4.0,& 5.0),& [6, & 7, & 8] & ) call sub1(a,& bcd,& fun(3.0,& ! comment 4.0,& ! comment 5.0),& [6, & 7, & 8] & ) contains subroutine sub1(a,b,c,d) integer d(3) end function fun(a,b,c) fun=a end end eof ../doit "--align_paren --align-paren --align_paren=1 --align-paren=1 " "-ifree -I8 --label_left=0" " Test027: --align_paren --label_left=0: free" rc=`expr $rc + $?` cat << eof > expect program paren x = y + & fun(a, & abcd ,& z) x = y + & z + & a; call sub (a, & !comment b, & c) x = y + a; call sub (a, & b, & c) print *,'abc'; call sub(a,& b,& c) #if 0 write(10,'20) x; call sub(a,& b,& c) ' write(10 ' 20) x; call sub(a,& b,& c) write(10"20) x; call sub(a,& b,& c) " #endif contains subroutine sub(a,b,c) end function fun(a,b,c) fun=a end end program subroutine gnikit x = p + fun (a,& b,& c) 100 format(4ha(cd, & 4hx(bc,& i5) 10 call sub1(a,& bcd,& fun(3.0,& 4.0,& 5.0),& [6, & 7, & 8] & ) call sub1(a,& bcd,& fun(3.0,& ! comment 4.0,& ! comment 5.0),& [6, & 7, & 8] & ) contains subroutine sub1(a,b,c,d) integer d(3) end function fun(a,b,c) fun=a end end eof ../doit "-kd" "-ifree -I8 -k-" " Test028: -k- -kd: free" rc=`expr $rc + $?` cat << eof > expect program paren x = y + & fun(a, & abcd ,& z) x = y + & z + & a; call sub (a, & !comment b, & c) x = y + a; call sub (a, & b, & c) print *,'abc'; call sub(a,& b,& c) #if 0 write(10,'20) x; call sub(a,& b,& c) ' write(10 ' 20) x; call sub(a,& b,& c) write(10"20) x; call sub(a,& b,& c) " #endif contains subroutine sub(a,b,c) end function fun(a,b,c) fun=a end end program subroutine gnikit x = p + fun (a,& b,& c) 100 format(4ha(cd, & 4hx(bc,& i5) 10 call sub1(a,& bcd,& fun(3.0,& 4.0,& 5.0),& [6, & 7, & 8] & ) call sub1(a,& bcd,& fun(3.0,& ! comment 4.0,& ! comment 5.0),& [6, & 7, & 8] & ) contains subroutine sub1(a,b,c,d) integer d(3) end function fun(a,b,c) fun=a end end eof ../doit "--indent_continuation=default --indent-continuation=default" "-I8 -ifree -k- " " Test029: -k- --indent_continuation=default: free" rc=`expr $rc + $?` cat << eof > expect program paren x = y + & fun(a, & abcd ,& z) x = y + & z + & a; call sub (a, & !comment b, & c) x = y + a; call sub (a, & b, & c) print *,'abc'; call sub(a,& b,& c) #if 0 write(10,'20) x; call sub(a,& b,& c) ' write(10 ' 20) x; call sub(a,& b,& c) write(10"20) x; call sub(a,& b,& c) " #endif contains subroutine sub(a,b,c) end function fun(a,b,c) fun=a end end program subroutine gnikit x = p + fun (a,& b,& c) 100 format(4ha(cd, & 4hx(bc,& i5) 10 call sub1(a,& bcd,& fun(3.0,& 4.0,& 5.0),& [6, & 7, & 8] & ) call sub1(a,& bcd,& fun(3.0,& ! comment 4.0,& ! comment 5.0),& [6, & 7, & 8] & ) contains subroutine sub1(a,b,c,d) integer d(3) end function fun(a,b,c) fun=a end end eof ../doit "-q" "--safe" " Test030: -k- --indent_continuation=default: free" rc=`expr $rc + $?` cat << eof > prog subroutine remred x = p +fun (a, & b,& c) 100 format(4habcd , & 4hx(bc,& i5) 101 format("abcd " , & 'pqr st ' , & i5) call sub1(a, "hello & world " , & 10) !$ call sub1(a, "hello & !$ world " , & !$ 10) call sub1(a, 'hello & world ' , & 10) #if 0 write(10 ' 6) ' a b c ' write(10 " 6) ", a, b, c ! this is not fortran #endif end eof cat << eof > expect subroutine remred x = p +fun (a, & b,& c) 100 format(4habcd , & 4hx(bc,& i5) 101 format("abcd " , & 'pqr st ' , & i5) call sub1(a, "hello & world " , & 10) !$ call sub1(a, "hello & !$ world " , & !$ 10) call sub1(a, 'hello & world ' , & 10) #if 0 write(10 ' 6) ' a b c ' write(10 " 6) ", a, b, c ! this is not fortran #endif end eof ../doit "--ws-remred --ws_remred" "-ifree -I8" " Test031: --ws-remred free" rc=`expr $rc + $?` cat << eof > prog subroutine remred x = p +fun (a, 1 b, 2 c) 100 format(4habcd , 1 4hx(bc, 2 i5) 101 format("abcd " , 1 'pqr st ' , 2 i5) call sub1(a, "hello 1 world " , 2 10) c$ call sub1(a, "hello !$ 1 world " , c$ 2 10) call sub1(a, 'hello 1 world ' , 2 10) #if 0 write(10 ' 6) ' a b c ' write(10 " 6) ", a, b, c ! this is not fortran #endif end eof cat << eof > expect subroutine remred x = p +fun (a, 1 b, 2 c) 100 format(4habcd , 1 4hx(bc, 2 i5) 101 format("abcd " , 1 'pqr st ' , 2 i5) call sub1(a, "hello 1 world " , 2 10) c$ call sub1(a, "hello !$ 1 world " , c$ 2 10) call sub1(a, 'hello 1 world ' , 2 10) #if 0 write(10 ' 6) ' a b c ' write(10 " 6) ", a, b, c ! this is not fortran #endif end eof ../doit "--ws-remred --ws_remred" "-ifixed -I4" " Test032: --ws-remred fixed" rc=`expr $rc + $?` cat << eof > prog subroutine mysub a = & & 3 + & & 4 +& ! comment ! another comment 5 +& & 6 continue !$ x = & !$ & 6 + & !comment !$ & 7 + & !$ 8 end eof cat << eof > expect subroutine mysub a = & & 3 + & & 4 +& ! comment ! another comment 5 +& & 6 continue !$ x = & !$ & 6 + & !comment !$ & 7 + & !$ 8 end eof ../doit "-Ia" "-ifree -Ia" " Test033: defaults for indenting continuation lines" rc=`expr $rc + $?` cat << eof > expect subroutine mysub a = & & 3 + & & 4 +& ! comment ! another comment 5 +& & 6 continue !$ x = & !$ & 6 + & !comment !$ & 7 + & !$ 8 end eof ../doit "-K --indent_ampersand --indent-ampersand" "-ifree -Ia" " Test034: -K --indent_ampersand --indent-ampersand" rc=`expr $rc + $?` cat << eof > expect subroutine mysub a = & & 3 + & & 4 +& ! comment ! another comment 5 +& & 6 continue !$ x = & !$ & 6 + & !comment !$ & 7 + & !$ 8 end eof ../doit "-K --indent_ampersand --indent-ampersand" "-ifree -Ia -k9" " Test035: -K --indent_ampersand --indent-ampersand -k9" rc=`expr $rc + $?` . ../postlude exit $rc # vim: indentexpr=none findent-4.3.2/test/test25.sh0000755000000000000000000000334614566134066012562 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # test availability of man page if test -e prelude ; then grep -q FINDENT ../src/findent.1 fi exit 0 findent-4.3.2/test/test26.sh0000755000000000000000000000465114566134066012563 0ustar00 #!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # testing fortran 2023 features if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi rc=0 cat << eof > prog simple integer function f(x) f=10 end simple subroutine sub(x) continue return end eof cat << eof > expect simple integer function f(x) f=10 end simple subroutine sub(x) continue return end eof ../doit "-ifree" "Test001: 2023 features: free" rc=`expr $rc + $?` cat << eof > prog simple integer function f(x) f=10 end sim ple subroutine sub(x) return end eof cat << eof > expect simple integer function f(x) f=10 end sim ple subroutine sub(x) return end eof ../doit "-ifixed" " Test002: 2023 features: fixed" rc=`expr $rc + $?` . ../postlude exit $rc # vim: indentexpr=none findent-4.3.2/test/test3.sh0000755000000000000000000000341514566134066012473 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi ../test-compile.sh ../progfreefixed.f rc=$? . ../postlude exit $rc findent-4.3.2/test/test4.sh0000755000000000000000000000342114566134066012471 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi ../test-compile.sh ../progfixedfree-dos.f rc=$? . ../postlude exit $rc findent-4.3.2/test/test5.sh0000755000000000000000000000341514566134066012475 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi ../test-compile.sh ../progfixedfree.f rc=$? . ../postlude exit $rc findent-4.3.2/test/test6.sh0000755000000000000000000000341414566134066012475 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi ../test-compile.sh ../progfree-dos.f rc=$? . ../postlude exit $rc findent-4.3.2/test/test7.sh0000755000000000000000000000340714566134066012500 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi ../test-compile.sh ../progfree.f rc=$? . ../postlude exit $rc findent-4.3.2/test/test8.sh0000755000000000000000000000341114566134066012474 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi ../test-compile.sh ../progfree1.f rc=$? . ../postlude exit $rc findent-4.3.2/test/test9.sh0000755000000000000000000000341214566134066012476 0ustar00#!/bin/sh # -copyright- #-# Copyright: 2015-2024 Willem Vermin wvermin@gmail.com #-# #-# License: BSD-3-Clause #-# Redistribution and use in source and binary forms, with or without #-# modification, are permitted provided that the following conditions #-# are met: #-# 1. Redistributions of source code must retain the above copyright #-# notice, this list of conditions and the following disclaimer. #-# 2. Redistributions in binary form must reproduce the above copyright #-# notice, this list of conditions and the following disclaimer in the #-# documentation and/or other materials provided with the distribution. #-# 3. Neither the name of the copyright holder nor the names of its #-# contributors may be used to endorse or promote products derived #-# from this software without specific prior written permission. #-# #-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS #-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT #-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE HOLDERS OR #-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. if test -e prelude ; then . ./prelude else . ./debian/tests/prelude fi ../test-compile.sh ../progfixed1.f rc=$? . ../postlude exit $rc findent-4.3.2/test/vim_findent.ref.in0000644000000000000000000000012214566134066014467 0ustar00" to enable the findent Fortran indent program: " include this file in ~/.vimrc findent-4.3.2/test/vim_fortran.ref.in0000644000000000000000000000013614566134066014520 0ustar00" Vim indent file " Installation: Place this script in the $HOME/.vim/after/indent/ directory findent-4.3.2/test/vim_help.ref.in0000644000000000000000000000015014566134066013771 0ustar00To enable findent for vim: find out in which directory the configuration files for vim are situated, findent-4.3.2/test-driver0000755000000000000000000001141714566134066012312 0ustar00#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2018-03-07.03; # UTC # Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <"$log_file" "$@" >>"$log_file" 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then tweaked_estatus=1 else tweaked_estatus=$estatus fi case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report the test outcome and exit status in the logs, so that one can # know whether the test passed or failed simply by looking at the '.log' # file, without the need of also peaking into the corresponding '.trs' # file (automake bug#11814). echo "$res $test_name (exit status: $estatus)" >>"$log_file" # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: findent-4.3.2/towin0000755000000000000000000000042714566134066011201 0ustar00#!/bin/bash # create findent for windows a=i686-w64-mingw32 b=`gcc -dumpmachine` export CXX="$a-g++ -static" ./configure --build=$b --host=$a 2>&1 | tee /tmp/aap if [ ${PIPESTATUS[0]} -ne 0 ] ; then echo "exiting" exit fi make clean || exit 1 make V=1 -j4 check || exit 1 findent-4.3.2/vim/0000755000000000000000000000000014566134066010703 5ustar00findent-4.3.2/vim/Makefile.am0000644000000000000000000000005414566134066012736 0ustar00EXTRA_DIST = findent.vim fortran.vim README findent-4.3.2/vim/Makefile.in0000644000000000000000000003020314566134066012746 0ustar00# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = vim ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/m4_ax_prog_cc_for_build.m4 \ $(top_srcdir)/m4/m4_ax_prog_cxx_for_build.m4 \ $(top_srcdir)/m4/ax_prog_bison.m4 \ $(top_srcdir)/m4/ax_prog_flex.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_OBJEXT = @BUILD_OBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CPP_FOR_BUILD = @CPP_FOR_BUILD@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXCPPFLAGS_FOR_BUILD = @CXXCPPFLAGS_FOR_BUILD@ CXXCPP_FOR_BUILD = @CXXCPP_FOR_BUILD@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@ CXX_FOR_BUILD = @CXX_FOR_BUILD@ CYGPATH_W = @CYGPATH_W@ DATE = @DATE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CC_FOR_BUILD = @ac_ct_CC_FOR_BUILD@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_CXX_FOR_BUILD = @ac_ct_CXX_FOR_BUILD@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ make_include = @make_include@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = findent.vim fortran.vim README all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu vim/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu vim/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: findent-4.3.2/vim/README0000644000000000000000000000442514566134066011570 0ustar00To enable findent for vim: find out in which directory the configuration files for vim are situated, here we assume it is in $HOME/.vim . Enter the following commands: ############################################## vimroot=$HOME/.vim mkdir -p $vimroot/plugin findent --vim_findent > $vimroot/plugin/findent.vim mkdir -p $vimroot/after/indent findent --vim_fortran > $vimroot/after/indent/fortran.vim ############################################## In ~/.vimrc include the following lines: """""""""""""""""""""""""""""" filetype plugin indent on syntax on """""""""""""""""""""""""""""" If you do not want syntax highlighting, you can switch it off again with: syntax off In ~/.vimrc you can specify: let use_findent = 1 " use findent (default) let use_findent = 0 " do not use findent let findent = "location-of-findent" " default: 'findent' let use_findent_indentexpr = 1 " use findent for indentexpr let use_findent_indentexpr = 0 " do not use findent for indentexpr " see :help indentexpr let findent_flags = "" " specify flags for findent, e.g.: let findent_flags = "-i4" default is "-i".&shiftwidth let findent_setcolumns = 1 " for free format, width of window will " be forced to 132 columns let findent_setcolumns = 0 " no forcing of window width default is 0 In findent.vim, the following mappings are defined (assuming your LocalLeader = \): \w toggle: to determine the indent of the line being edited: use whole buffer (status line: wb) or use the last usable line \f set/change flags for findent \c comment current line \= indent whole buffer Furthermore, command '==' is redefined, such that is does what one would expect. In findent.vim the statusline is redefined. It shows the fortran format (free or fixed) and wb (see \w above) In fortran.vim the format (free or fixed) of the edited file is determined from the extension: fixed: .f .for .fpp .ftn .fortran .f77 free: .f90 .f95 .f03 .f08 If another extension is used (and filetype is fortran, of course), the format is deducted by findent: if in the first 4000 lines a proof is found for free format, the format is assumed to be free, else the format is assumed to be fixed. findent-4.3.2/vim/findent.vim0000644000000000000000000000607014566134066013052 0ustar00" to enable the findent Fortran indent program: " include this file in ~/.vimrc " or place it in ~/.vim/plugin/ as findent.vim "Author: Willem Vermin wvermin@gmail.com "License: fair "Date: nov 2016 " if exists("g:use_findent") if !g:use_findent finish endif endif filetype plugin indent on " set default indent flag, if not already set if !exists("b:findent_flags") let b:findent_flags = "-i".&shiftwidth endif " " the nnoremap commands will define some shortcuts: " for example: " \= will indent whole file " \f let you change finden flags " see the nnoremap commands below " " indent whole buffer, can be used with all filetypes function! Indent() let view=winsaveview() execute "normal! gg=G" call winrestview(view) endfunction " indent whole buffer: nnoremap = :call Indent() function! Get_fortran_format() " b:fortran_format defined in auto/indent/fortran.vim if exists("b:fortran_format") return b:fortran_format endif return "unknown" endfunction function! Get_findent_use_whole_buffer() " b:findent_use_whole_buffer defined in auto/indent/fortran.vim if exists("b:findent_use_whole_buffer") if b:findent_use_whole_buffer if b:use_findent_indentexpr return "wb" endif endif endif return "" endfunction augroup fortfiletype autocmd! " allow tabs in fortran source autocmd Filetype fortran let fortran_have_tabs=1 " fortran_more_precise=1: very slow :syntax on if on end of large file "autocmd Filetype fortran let fortran_more_precise=1 " indent after subroutne etc (not used by findent) autocmd Filetype fortran let fortran_indent_more=1 " indent after do (not used by findent) autocmd Filetype fortran let fortran_do_enddo=1 " comment line: autocmd Filetype fortran nnoremap c I! " Change findent flags " Findent_set_flags defined in after/indent/fortran.vim autocmd Filetype fortran nnoremap f :call Findent_set_flags() " on input: do not create tabs on input autocmd Filetype fortran setlocal expandtab " no max line length autocmd Filetype fortran setlocal textwidth=0 " enable statusline autocmd Filetype fortran setlocal laststatus=2 " use indent of previous line autocmd Filetype fortran setlocal autoindent " define statusline autocmd Filetype fortran setlocal statusline=%<%t\ %m\ %r\ %y\ %{Get_fortran_format()}\ %{Get_findent_use_whole_buffer()}%=%l\ %c\ %LL\ %P " define toggle: use whole buffer for indenting or not autocmd Filetype fortran nnoremap w :call Findent_use_wb_toggle() " define == such that findent is called as if the line has been edited autocmd Filetype fortran nnoremap == il " make syntax aware of above " probably not needed. " uncommented, because autocmd commands in .vimrc are not executed " when a modeline for is presen, as in: " !directions for vi vim: filetype=fortran " autocmd Filetype fortran syntax on augroup END " vim filetype=vim findent-4.3.2/vim/fortran.vim0000644000000000000000000001703414566134066013100 0ustar00" Vim indent file " Installation: Place this script in the $HOME/.vim/after/indent/ directory " as fortran.vim and use it with Vim > 7.1 and findent: " findent.sourceforge.net " Author: Willem Vermin wvermin@gmail.com " License: fair " use findent for indenting, unless use_findent == 0 if !exists("g:use_findent") let b:use_findent = 1 else let b:use_findent = g:use_findent endif " use findent for indenting using indentexpr (see :help indentexpr) " unless use_findent_indentexpr == 0 if !exists("g:use_findent_indentexpr") let b:use_findent_indentexpr = 1 else let b:use_findent_indentexpr = g:use_findent_indentexpr endif " The location of findent: if !exists("g:findent") let g:findent = "findent" endif if !exists("b:use_findent") finish endif if !b:use_findent finish endif " no interesting side-effects caused by settings in FINDENT_FLAGS: let $FINDENT_FLAGS = "" if !exists("b:use_findent_indentexpr") let b:use_findent_indentexpr = 1 endif autocmd BufEnter * unlet! g:fortran_free_source g:fortran_fixed_source autocmd BufEnter * unlet! b:fortran_free_source b:fortran_fixed_source " g:findent is probably set in .vimrc " if not: skip all if !exists("g:findent") finish endif " get fortran format from extension ext " return "free", "fixed" or "unknown" function! Get_format_from_extension(ext) if a:ext =~? '^f$\|^for$\|^fpp$\|^ftn$\|^fortran$\|^f77$' let format = "fixed" elseif a:ext =~? '^f90$\|^f95$\|^f03$\|^f08$' let format = "free" else let format = "unknown" endif return format endfunction " return string that represents external command to determine " if input is free or fixed format. " If no suitable command is found, return "" " The output of this external command must be "free" or "fixed" function! Findent_get_freefixed() let indentparmsq = ' -q' let f = g:findent.indentparmsq if strpart(system(f," continue"),0,4) != "free" let f = "" endif return f endfunction " Return external command to get the indent of the last line of the input " Return "" if no such command can be found " side effect: s:findent_getindent is the command tried function! Findent_get_getindent() let getindent=g:findent.' -Ia -lastindent -i'.b:fortran_format.' '.b:findent_flags let s:findent_getindent = getindent if system(getindent,' continue') == 6 return getindent else return "" endif endfunction " Return external command that indents the input " Return "" if no such command can be found " side effect: s:fortran_indentprog is the command tried function! Findent_get_indentprog() " first a test: let indentparms = ' -Ia -i'.b:fortran_format.' '.b:findent_flags let indentprog = g:findent.indentparms let s:fortran_indentprog = indentprog if strpart(system(indentprog,"continue"),0,8) == "continue" return indentprog else return "" endif endfunction " Returns the indentation of the current line function! Findent_getindent() if b:findent_use_whole_buffer " use whole buffer up to current line to determine indent let startline = 1 else let maxlines = 10*&lines " use at most 'maxlines' previous lines to determine indent let s = max([v:lnum-maxlines,1]) "let startline = system(g:findent." -lastusable -i".b:fortran_format,join(getline(1,v:lnum-1),"\n")) let startline = s - 1 + system(g:findent." -lastusable -i".b:fortran_format,join(getline(s,v:lnum-1),"\n")) endif let startline = max([1,startline]) let getindent = Findent_get_getindent() let lnum = prevnonblank(v:lnum) let ind = system(getindent, join(getline(startline,lnum),"\n")) return ind endfunction function! Findent_set_flags() if !b:have_findent && !b:have_findent_getindent return endif let old = b:findent_flags let b:findent_flags = input("findent flags:",b:findent_flags) if b:have_findent if Findent_get_indentprog() != "" call Findent_set_indentprog() else let x = input( "Cannot use flags '".b:findent_flags."' Will use '".old."'") let b:findent_flags = old return endif endif if b:have_findent_getindent if Findent_get_getindent() != "" call Findent_set_getindent() else let x = input( "Cannot use flags '".b:findent_flags."' Will use '".old."'") let b:findent_flags = old return endif endif endfunction function! Findent_set_indentprog() let p = Findent_get_indentprog() if p == "" echomsg "Warning '".s:fortran_indentprog."' not usable as equalprg" echomsg "Using default for equalprg" setlocal equalprg= let b:have_findent = 0 else execute 'setlocal equalprg='.substitute(p,' ','\\ ','g') let b:have_findent = 1 endif endfunction function! Findent_set_getindent() if Findent_get_getindent() == "" echomsg "Warning '".s:findent_getindent."' not usable as indentexpr" echomsg "Using default for indentexpr" setlocal indentexpr= let b:have_findent_getindent = 0 else setlocal indentexpr=Findent_getindent() setlocal indentkeys=*,*,*,*,!^F,o,O,0# " fixed format: if first character is tab, indent the line if b:fortran_format == "fixed" setlocal indentkeys+=!0 endif let b:have_findent_getindent = 1 endif endfunction function! Findent_use_wb_toggle() if b:use_findent_indentexpr let b:findent_use_whole_buffer = !b:findent_use_whole_buffer if b:findent_use_whole_buffer let p = "ON" else let p = "OFF" endif echomsg "use whole buffer = ".p else echomsg "not using findent for indentexpr" endif endfunction function! Get_free_or_fixed_default() if exists("b:fortran_fixed_source") if b:fortran_fixed_source return "fixed" endif endif if exists("b:fortran_free_source") if b:fortran_free_source return "free" endif endif return "fixed" endfunction "========================================================================= if exists("g:findent_flags") let b:findent_flags = g:findent_flags endif if !exists("b:findent_flags") let b:findent_flags = "-i".&shiftwidth endif if !exists("b:findent_use_whole_buffer") let b:findent_use_whole_buffer = 0 endif if !exists("g:findent") let g:findent = "/usr/bin/findent" endif " determine fixed or free or unknown based on suffix let b:fortran_format = Get_format_from_extension(expand('%:e')) " if format is unknown, try to get it from the source if b:fortran_format == "unknown" " determine command to determine free or fixed let b:findent_freefixed = Findent_get_freefixed() if b:findent_freefixed == "" let b:fortran_format = Get_free_or_fixed_default() echomsg "Cannot determine format using findent, will use" b:fortran_format else let r=system(b:findent_freefixed,join(getline(1,10000),"\n")) if r =~ "free" let b:fortran_format = "free" else let b:fortran_format = "fixed" endif endif endif if b:fortran_format == "free" let g:fortran_free_source = 1 let b:fortran_free_source = 1 let b:fortran_fixed_source = 0 "setlocal colorcolumn=133 if exists("g:findent_setcolumns") if(g:findent_setcolumns) setlocal numberwidth=6 if &columns < 132+&numberwidth let &columns=132+&numberwidth endif endif endif else let g:fortran_fixed_source = 1 let b:fortran_fixed_source = 1 let b:fortran_free_source = 0 "setlocal colorcolumn=6,73 endif call Findent_set_indentprog() if b:use_findent_indentexpr call Findent_set_getindent() endif