| @@ -0,0 +1,22 @@ | |||
| This file lists people who have made significant contribution in the nife | |||
| project. Please see the ChangeLog for specific changes by author. | |||
| ------------------------------------------------------------------------- | |||
| Patrick H. E. Foubet <patrick.foubet@nife-project.org> | |||
| * Original program author, stable series maintainer. | |||
| * Cohesion of language supervisor. Multiple platform maintainer. | |||
| * Stack to Stack protocol developper, and much more. | |||
| Christophe Ondrejec <christophe.ondrejec@nife-project.org> | |||
| * Administrator of the site nife-project.org. | |||
| * Internationalization support head. | |||
| * Package tester. | |||
| Claude Mauvais <claude.mauvais@.nife-project.org> | |||
| * Mathematical functions supervisor and developper. | |||
| * Package tester. | |||
| Bruno Guilbert <bruno.guilbert@nife-project.org> | |||
| * Devices interface tester and developper. | |||
| * Package tester. | |||
| @@ -0,0 +1,340 @@ | |||
| GNU GENERAL PUBLIC LICENSE | |||
| Version 2, June 1991 | |||
| Copyright (C) 1989, 1991 Free Software Foundation, Inc. | |||
| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |||
| Everyone is permitted to copy and distribute verbatim copies | |||
| of this license document, but changing it is not allowed. | |||
| Preamble | |||
| The licenses for most software are designed to take away your | |||
| freedom to share and change it. By contrast, the GNU General Public | |||
| License is intended to guarantee your freedom to share and change free | |||
| software--to make sure the software is free for all its users. This | |||
| General Public License applies to most of the Free Software | |||
| Foundation's software and to any other program whose authors commit to | |||
| using it. (Some other Free Software Foundation software is covered by | |||
| the GNU Library General Public License instead.) You can apply it to | |||
| your programs, too. | |||
| When we speak of free software, we are referring to freedom, not | |||
| price. Our General Public Licenses are designed to make sure that you | |||
| have the freedom to distribute copies of free software (and charge for | |||
| this service if you wish), that you receive source code or can get it | |||
| if you want it, that you can change the software or use pieces of it | |||
| in new free programs; and that you know you can do these things. | |||
| To protect your rights, we need to make restrictions that forbid | |||
| anyone to deny you these rights or to ask you to surrender the rights. | |||
| These restrictions translate to certain responsibilities for you if you | |||
| distribute copies of the software, or if you modify it. | |||
| For example, if you distribute copies of such a program, whether | |||
| gratis or for a fee, you must give the recipients all the rights that | |||
| you have. You must make sure that they, too, receive or can get the | |||
| source code. And you must show them these terms so they know their | |||
| rights. | |||
| We protect your rights with two steps: (1) copyright the software, and | |||
| (2) offer you this license which gives you legal permission to copy, | |||
| distribute and/or modify the software. | |||
| Also, for each author's protection and ours, we want to make certain | |||
| that everyone understands that there is no warranty for this free | |||
| software. If the software is modified by someone else and passed on, we | |||
| want its recipients to know that what they have is not the original, so | |||
| that any problems introduced by others will not reflect on the original | |||
| authors' reputations. | |||
| Finally, any free program is threatened constantly by software | |||
| patents. We wish to avoid the danger that redistributors of a free | |||
| program will individually obtain patent licenses, in effect making the | |||
| program proprietary. To prevent this, we have made it clear that any | |||
| patent must be licensed for everyone's free use or not licensed at all. | |||
| The precise terms and conditions for copying, distribution and | |||
| modification follow. | |||
| GNU GENERAL PUBLIC LICENSE | |||
| TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | |||
| 0. This License applies to any program or other work which contains | |||
| a notice placed by the copyright holder saying it may be distributed | |||
| under the terms of this General Public License. The "Program", below, | |||
| refers to any such program or work, and a "work based on the Program" | |||
| means either the Program or any derivative work under copyright law: | |||
| that is to say, a work containing the Program or a portion of it, | |||
| either verbatim or with modifications and/or translated into another | |||
| language. (Hereinafter, translation is included without limitation in | |||
| the term "modification".) Each licensee is addressed as "you". | |||
| Activities other than copying, distribution and modification are not | |||
| covered by this License; they are outside its scope. The act of | |||
| running the Program is not restricted, and the output from the Program | |||
| is covered only if its contents constitute a work based on the | |||
| Program (independent of having been made by running the Program). | |||
| Whether that is true depends on what the Program does. | |||
| 1. You may copy and distribute verbatim copies of the Program's | |||
| source code as you receive it, in any medium, provided that you | |||
| conspicuously and appropriately publish on each copy an appropriate | |||
| copyright notice and disclaimer of warranty; keep intact all the | |||
| notices that refer to this License and to the absence of any warranty; | |||
| and give any other recipients of the Program a copy of this License | |||
| along with the Program. | |||
| You may charge a fee for the physical act of transferring a copy, and | |||
| you may at your option offer warranty protection in exchange for a fee. | |||
| 2. You may modify your copy or copies of the Program or any portion | |||
| of it, thus forming a work based on the Program, and copy and | |||
| distribute such modifications or work under the terms of Section 1 | |||
| above, provided that you also meet all of these conditions: | |||
| a) You must cause the modified files to carry prominent notices | |||
| stating that you changed the files and the date of any change. | |||
| b) You must cause any work that you distribute or publish, that in | |||
| whole or in part contains or is derived from the Program or any | |||
| part thereof, to be licensed as a whole at no charge to all third | |||
| parties under the terms of this License. | |||
| c) If the modified program normally reads commands interactively | |||
| when run, you must cause it, when started running for such | |||
| interactive use in the most ordinary way, to print or display an | |||
| announcement including an appropriate copyright notice and a | |||
| notice that there is no warranty (or else, saying that you provide | |||
| a warranty) and that users may redistribute the program under | |||
| these conditions, and telling the user how to view a copy of this | |||
| License. (Exception: if the Program itself is interactive but | |||
| does not normally print such an announcement, your work based on | |||
| the Program is not required to print an announcement.) | |||
| These requirements apply to the modified work as a whole. If | |||
| identifiable sections of that work are not derived from the Program, | |||
| and can be reasonably considered independent and separate works in | |||
| themselves, then this License, and its terms, do not apply to those | |||
| sections when you distribute them as separate works. But when you | |||
| distribute the same sections as part of a whole which is a work based | |||
| on the Program, the distribution of the whole must be on the terms of | |||
| this License, whose permissions for other licensees extend to the | |||
| entire whole, and thus to each and every part regardless of who wrote it. | |||
| Thus, it is not the intent of this section to claim rights or contest | |||
| your rights to work written entirely by you; rather, the intent is to | |||
| exercise the right to control the distribution of derivative or | |||
| collective works based on the Program. | |||
| In addition, mere aggregation of another work not based on the Program | |||
| with the Program (or with a work based on the Program) on a volume of | |||
| a storage or distribution medium does not bring the other work under | |||
| the scope of this License. | |||
| 3. You may copy and distribute the Program (or a work based on it, | |||
| under Section 2) in object code or executable form under the terms of | |||
| Sections 1 and 2 above provided that you also do one of the following: | |||
| a) Accompany it with the complete corresponding machine-readable | |||
| source code, which must be distributed under the terms of Sections | |||
| 1 and 2 above on a medium customarily used for software interchange; or, | |||
| b) Accompany it with a written offer, valid for at least three | |||
| years, to give any third party, for a charge no more than your | |||
| cost of physically performing source distribution, a complete | |||
| machine-readable copy of the corresponding source code, to be | |||
| distributed under the terms of Sections 1 and 2 above on a medium | |||
| customarily used for software interchange; or, | |||
| c) Accompany it with the information you received as to the offer | |||
| to distribute corresponding source code. (This alternative is | |||
| allowed only for noncommercial distribution and only if you | |||
| received the program in object code or executable form with such | |||
| an offer, in accord with Subsection b above.) | |||
| The source code for a work means the preferred form of the work for | |||
| making modifications to it. For an executable work, complete source | |||
| code means all the source code for all modules it contains, plus any | |||
| associated interface definition files, plus the scripts used to | |||
| control compilation and installation of the executable. However, as a | |||
| special exception, the source code distributed need not include | |||
| anything that is normally distributed (in either source or binary | |||
| form) with the major components (compiler, kernel, and so on) of the | |||
| operating system on which the executable runs, unless that component | |||
| itself accompanies the executable. | |||
| If distribution of executable or object code is made by offering | |||
| access to copy from a designated place, then offering equivalent | |||
| access to copy the source code from the same place counts as | |||
| distribution of the source code, even though third parties are not | |||
| compelled to copy the source along with the object code. | |||
| 4. You may not copy, modify, sublicense, or distribute the Program | |||
| except as expressly provided under this License. Any attempt | |||
| otherwise to copy, modify, sublicense or distribute the Program is | |||
| void, and will automatically terminate your rights under this License. | |||
| However, parties who have received copies, or rights, from you under | |||
| this License will not have their licenses terminated so long as such | |||
| parties remain in full compliance. | |||
| 5. You are not required to accept this License, since you have not | |||
| signed it. However, nothing else grants you permission to modify or | |||
| distribute the Program or its derivative works. These actions are | |||
| prohibited by law if you do not accept this License. Therefore, by | |||
| modifying or distributing the Program (or any work based on the | |||
| Program), you indicate your acceptance of this License to do so, and | |||
| all its terms and conditions for copying, distributing or modifying | |||
| the Program or works based on it. | |||
| 6. Each time you redistribute the Program (or any work based on the | |||
| Program), the recipient automatically receives a license from the | |||
| original licensor to copy, distribute or modify the Program subject to | |||
| these terms and conditions. You may not impose any further | |||
| restrictions on the recipients' exercise of the rights granted herein. | |||
| You are not responsible for enforcing compliance by third parties to | |||
| this License. | |||
| 7. If, as a consequence of a court judgment or allegation of patent | |||
| infringement or for any other reason (not limited to patent issues), | |||
| conditions are imposed on you (whether by court order, agreement or | |||
| otherwise) that contradict the conditions of this License, they do not | |||
| excuse you from the conditions of this License. If you cannot | |||
| distribute so as to satisfy simultaneously your obligations under this | |||
| License and any other pertinent obligations, then as a consequence you | |||
| may not distribute the Program at all. For example, if a patent | |||
| license would not permit royalty-free redistribution of the Program by | |||
| all those who receive copies directly or indirectly through you, then | |||
| the only way you could satisfy both it and this License would be to | |||
| refrain entirely from distribution of the Program. | |||
| If any portion of this section is held invalid or unenforceable under | |||
| any particular circumstance, the balance of the section is intended to | |||
| apply and the section as a whole is intended to apply in other | |||
| circumstances. | |||
| It is not the purpose of this section to induce you to infringe any | |||
| patents or other property right claims or to contest validity of any | |||
| such claims; this section has the sole purpose of protecting the | |||
| integrity of the free software distribution system, which is | |||
| implemented by public license practices. Many people have made | |||
| generous contributions to the wide range of software distributed | |||
| through that system in reliance on consistent application of that | |||
| system; it is up to the author/donor to decide if he or she is willing | |||
| to distribute software through any other system and a licensee cannot | |||
| impose that choice. | |||
| This section is intended to make thoroughly clear what is believed to | |||
| be a consequence of the rest of this License. | |||
| 8. If the distribution and/or use of the Program is restricted in | |||
| certain countries either by patents or by copyrighted interfaces, the | |||
| original copyright holder who places the Program under this License | |||
| may add an explicit geographical distribution limitation excluding | |||
| those countries, so that distribution is permitted only in or among | |||
| countries not thus excluded. In such case, this License incorporates | |||
| the limitation as if written in the body of this License. | |||
| 9. The Free Software Foundation may publish revised and/or new versions | |||
| of the General Public License from time to time. Such new versions will | |||
| be similar in spirit to the present version, but may differ in detail to | |||
| address new problems or concerns. | |||
| Each version is given a distinguishing version number. If the Program | |||
| specifies a version number of this License which applies to it and "any | |||
| later version", you have the option of following the terms and conditions | |||
| either of that version or of any later version published by the Free | |||
| Software Foundation. If the Program does not specify a version number of | |||
| this License, you may choose any version ever published by the Free Software | |||
| Foundation. | |||
| 10. If you wish to incorporate parts of the Program into other free | |||
| programs whose distribution conditions are different, write to the author | |||
| to ask for permission. For software which is copyrighted by the Free | |||
| Software Foundation, write to the Free Software Foundation; we sometimes | |||
| make exceptions for this. Our decision will be guided by the two goals | |||
| of preserving the free status of all derivatives of our free software and | |||
| of promoting the sharing and reuse of software generally. | |||
| NO WARRANTY | |||
| 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY | |||
| FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN | |||
| OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES | |||
| PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED | |||
| OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | |||
| MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS | |||
| TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE | |||
| PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, | |||
| REPAIR OR CORRECTION. | |||
| 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING | |||
| WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR | |||
| REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, | |||
| INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING | |||
| OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED | |||
| TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY | |||
| YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER | |||
| PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE | |||
| POSSIBILITY OF SUCH DAMAGES. | |||
| END OF TERMS AND CONDITIONS | |||
| How to Apply These Terms to Your New Programs | |||
| If you develop a new program, and you want it to be of the greatest | |||
| possible use to the public, the best way to achieve this is to make it | |||
| free software which everyone can redistribute and change under these terms. | |||
| To do so, attach the following notices to the program. It is safest | |||
| to attach them to the start of each source file to most effectively | |||
| convey the exclusion of warranty; and each file should have at least | |||
| the "copyright" line and a pointer to where the full notice is found. | |||
| <one line to give the program's name and a brief idea of what it does.> | |||
| Copyright (C) <year> <name of author> | |||
| 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, write to the Free Software | |||
| Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |||
| Also add information on how to contact you by electronic and paper mail. | |||
| If the program is interactive, make it output a short notice like this | |||
| when it starts in an interactive mode: | |||
| Gnomovision version 69, Copyright (C) year name of author | |||
| Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. | |||
| This is free software, and you are welcome to redistribute it | |||
| under certain conditions; type `show c' for details. | |||
| The hypothetical commands `show w' and `show c' should show the appropriate | |||
| parts of the General Public License. Of course, the commands you use may | |||
| be called something other than `show w' and `show c'; they could even be | |||
| mouse-clicks or menu items--whatever suits your program. | |||
| You should also get your employer (if you work as a programmer) or your | |||
| school, if any, to sign a "copyright disclaimer" for the program, if | |||
| necessary. Here is a sample; alter the names: | |||
| Yoyodyne, Inc., hereby disclaims all copyright interest in the program | |||
| `Gnomovision' (which makes passes at compilers) written by James Hacker. | |||
| <signature of Ty Coon>, 1 April 1989 | |||
| Ty Coon, President of Vice | |||
| This General Public License does not permit incorporating your program into | |||
| proprietary programs. If your program is a subroutine library, you may | |||
| consider it more useful to permit linking proprietary applications with the | |||
| library. If this is what you want to do, use the GNU Library General | |||
| Public License instead of this License. | |||
| @@ -0,0 +1,19 @@ | |||
| 0.9.27 12 January 2005 | |||
| This has been a long time in the making... Release highlights: | |||
| o New stdio implementation | |||
| o New optimized string functions | |||
| o Major improvements to the shared lib loader | |||
| o Shared libraries work properly on powerpc | |||
| o Debugging works on mips | |||
| o New architectures: frv, nios, nios2, bfin | |||
| o Linux 2.6.x kernel support | |||
| o Lots and lots of bug fixes | |||
| This release is NOT binary compatible with uClibc 0.9.26 or any earlier | |||
| release, so be prepared to recompile your software if you are still using | |||
| an old version of uClibc. | |||
| -Erik | |||
| @@ -0,0 +1,236 @@ | |||
| Installation Instructions | |||
| ************************* | |||
| Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free | |||
| Software Foundation, Inc. | |||
| This file is free documentation; the Free Software Foundation gives | |||
| unlimited permission to copy, distribute and modify it. | |||
| Basic Installation | |||
| ================== | |||
| These are generic installation instructions. | |||
| 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 only 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. If you're | |||
| using `csh' on an old version of System V, you might need to type | |||
| `sh ./configure' instead to prevent `csh' from trying to execute | |||
| `configure' itself. | |||
| Running `configure' takes awhile. 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. | |||
| 4. Type `make install' to install the programs and any data files and | |||
| documentation. | |||
| 5. 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. | |||
| 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=c89 CFLAGS=-O2 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 must use a version of `make' that | |||
| supports the `VPATH' variable, such as 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 `..'. | |||
| If you have to use a `make' that does not support the `VPATH' | |||
| variable, you have 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. | |||
| 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'. | |||
| 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. | |||
| 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'. | |||
| Optional Features | |||
| ================= | |||
| 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. | |||
| 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). Here is a another example: | |||
| /bin/bash ./configure CONFIG_SHELL=/bin/bash | |||
| Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent | |||
| configuration-related scripts to be executed by `/bin/bash'. | |||
| `configure' Invocation | |||
| ====================== | |||
| `configure' recognizes the following options to control how it operates. | |||
| `--help' | |||
| `-h' | |||
| Print a summary of the options to `configure', and exit. | |||
| `--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. | |||
| `configure' also accepts some other, not widely useful, options. Run | |||
| `configure --help' for more details. | |||
| @@ -0,0 +1,8 @@ | |||
| ################################################## | |||
| # Makefile.am for nife project : upper derectory # | |||
| ################################################## | |||
| EXTRA_DIST = src/nife.hlp src/test.sh src/benchm.nif src/ex | |||
| SUBDIRS=src | |||
| @@ -0,0 +1,586 @@ | |||
| # Makefile.in generated by automake 1.9.6 from Makefile.am. | |||
| # @configure_input@ | |||
| # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, | |||
| # 2003, 2004, 2005 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@ | |||
| ################################################## | |||
| # Makefile.am for nife project : upper derectory # | |||
| ################################################## | |||
| srcdir = @srcdir@ | |||
| top_srcdir = @top_srcdir@ | |||
| VPATH = @srcdir@ | |||
| pkgdatadir = $(datadir)/@PACKAGE@ | |||
| pkglibdir = $(libdir)/@PACKAGE@ | |||
| pkgincludedir = $(includedir)/@PACKAGE@ | |||
| top_builddir = . | |||
| am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd | |||
| INSTALL = @INSTALL@ | |||
| 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 = : | |||
| subdir = . | |||
| DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ | |||
| $(srcdir)/Makefile.in $(srcdir)/config.h.in \ | |||
| $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ | |||
| depcomp install-sh missing | |||
| ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | |||
| am__aclocal_m4_deps = $(top_srcdir)/configure.ac | |||
| am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | |||
| $(ACLOCAL_M4) | |||
| am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ | |||
| configure.lineno configure.status.lineno | |||
| mkinstalldirs = $(install_sh) -d | |||
| CONFIG_HEADER = config.h | |||
| CONFIG_CLEAN_FILES = | |||
| SOURCES = | |||
| DIST_SOURCES = | |||
| RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ | |||
| html-recursive info-recursive install-data-recursive \ | |||
| install-exec-recursive install-info-recursive \ | |||
| install-recursive installcheck-recursive installdirs-recursive \ | |||
| pdf-recursive ps-recursive uninstall-info-recursive \ | |||
| uninstall-recursive | |||
| ETAGS = etags | |||
| CTAGS = ctags | |||
| DIST_SUBDIRS = $(SUBDIRS) | |||
| DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) | |||
| distdir = $(PACKAGE)-$(VERSION) | |||
| top_distdir = $(distdir) | |||
| am__remove_distdir = \ | |||
| { test ! -d $(distdir) \ | |||
| || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ | |||
| && rm -fr $(distdir); }; } | |||
| DIST_ARCHIVES = $(distdir).tar.gz | |||
| GZIP_ENV = --best | |||
| distuninstallcheck_listfiles = find . -type f -print | |||
| distcleancheck_listfiles = find . -type f -print | |||
| ACLOCAL = @ACLOCAL@ | |||
| AMDEP_FALSE = @AMDEP_FALSE@ | |||
| AMDEP_TRUE = @AMDEP_TRUE@ | |||
| AMTAR = @AMTAR@ | |||
| AUTOCONF = @AUTOCONF@ | |||
| AUTOHEADER = @AUTOHEADER@ | |||
| AUTOMAKE = @AUTOMAKE@ | |||
| AWK = @AWK@ | |||
| CC = @CC@ | |||
| CCDEPMODE = @CCDEPMODE@ | |||
| CFLAGS = @CFLAGS@ | |||
| CPP = @CPP@ | |||
| CPPFLAGS = @CPPFLAGS@ | |||
| CYGPATH_W = @CYGPATH_W@ | |||
| DEFS = @DEFS@ | |||
| DEPDIR = @DEPDIR@ | |||
| ECHO_C = @ECHO_C@ | |||
| ECHO_N = @ECHO_N@ | |||
| ECHO_T = @ECHO_T@ | |||
| EGREP = @EGREP@ | |||
| EXEEXT = @EXEEXT@ | |||
| GREP = @GREP@ | |||
| INSTALL_DATA = @INSTALL_DATA@ | |||
| INSTALL_PROGRAM = @INSTALL_PROGRAM@ | |||
| INSTALL_SCRIPT = @INSTALL_SCRIPT@ | |||
| INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ | |||
| LDFLAGS = @LDFLAGS@ | |||
| LIBOBJS = @LIBOBJS@ | |||
| LIBS = @LIBS@ | |||
| LTLIBOBJS = @LTLIBOBJS@ | |||
| MAKEINFO = @MAKEINFO@ | |||
| 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@ | |||
| POW_LIB = @POW_LIB@ | |||
| SET_MAKE = @SET_MAKE@ | |||
| SHELL = @SHELL@ | |||
| STRIP = @STRIP@ | |||
| VERSION = @VERSION@ | |||
| ac_ct_CC = @ac_ct_CC@ | |||
| am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ | |||
| am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ | |||
| 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_alias = @build_alias@ | |||
| datadir = @datadir@ | |||
| datarootdir = @datarootdir@ | |||
| docdir = @docdir@ | |||
| dvidir = @dvidir@ | |||
| exec_prefix = @exec_prefix@ | |||
| host_alias = @host_alias@ | |||
| htmldir = @htmldir@ | |||
| includedir = @includedir@ | |||
| infodir = @infodir@ | |||
| install_sh = @install_sh@ | |||
| libdir = @libdir@ | |||
| libexecdir = @libexecdir@ | |||
| localedir = @localedir@ | |||
| localstatedir = @localstatedir@ | |||
| mandir = @mandir@ | |||
| mkdir_p = @mkdir_p@ | |||
| oldincludedir = @oldincludedir@ | |||
| pdfdir = @pdfdir@ | |||
| prefix = @prefix@ | |||
| program_transform_name = @program_transform_name@ | |||
| psdir = @psdir@ | |||
| sbindir = @sbindir@ | |||
| sharedstatedir = @sharedstatedir@ | |||
| sysconfdir = @sysconfdir@ | |||
| target_alias = @target_alias@ | |||
| EXTRA_DIST = src/nife.hlp src/test.sh src/benchm.nif src/ex | |||
| SUBDIRS = src | |||
| all: config.h | |||
| $(MAKE) $(AM_MAKEFLAGS) all-recursive | |||
| .SUFFIXES: | |||
| am--refresh: | |||
| @: | |||
| $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) | |||
| @for dep in $?; do \ | |||
| case '$(am__configure_deps)' in \ | |||
| *$$dep*) \ | |||
| echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ | |||
| cd $(srcdir) && $(AUTOMAKE) --gnu \ | |||
| && exit 0; \ | |||
| exit 1;; \ | |||
| esac; \ | |||
| done; \ | |||
| echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ | |||
| cd $(top_srcdir) && \ | |||
| $(AUTOMAKE) --gnu Makefile | |||
| .PRECIOUS: 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__depfiles_maybe)'; \ | |||
| cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ | |||
| esac; | |||
| $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) | |||
| $(SHELL) ./config.status --recheck | |||
| $(top_srcdir)/configure: $(am__configure_deps) | |||
| cd $(srcdir) && $(AUTOCONF) | |||
| $(ACLOCAL_M4): $(am__aclocal_m4_deps) | |||
| cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) | |||
| config.h: stamp-h1 | |||
| @if test ! -f $@; then \ | |||
| rm -f stamp-h1; \ | |||
| $(MAKE) stamp-h1; \ | |||
| else :; fi | |||
| 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: $(am__configure_deps) | |||
| cd $(top_srcdir) && $(AUTOHEADER) | |||
| rm -f stamp-h1 | |||
| touch $@ | |||
| distclean-hdr: | |||
| -rm -f config.h stamp-h1 | |||
| uninstall-info-am: | |||
| # 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. | |||
| $(RECURSIVE_TARGETS): | |||
| @failcom='exit 1'; \ | |||
| for f in x $$MAKEFLAGS; do \ | |||
| case $$f in \ | |||
| *=* | --[!k]*);; \ | |||
| *k*) failcom='fail=yes';; \ | |||
| esac; \ | |||
| done; \ | |||
| dot_seen=no; \ | |||
| target=`echo $@ | sed s/-recursive//`; \ | |||
| list='$(SUBDIRS)'; 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; \ | |||
| (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" | |||
| mostlyclean-recursive clean-recursive distclean-recursive \ | |||
| maintainer-clean-recursive: | |||
| @failcom='exit 1'; \ | |||
| for f in x $$MAKEFLAGS; do \ | |||
| case $$f in \ | |||
| *=* | --[!k]*);; \ | |||
| *k*) failcom='fail=yes';; \ | |||
| esac; \ | |||
| done; \ | |||
| dot_seen=no; \ | |||
| case "$@" in \ | |||
| distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ | |||
| *) list='$(SUBDIRS)' ;; \ | |||
| esac; \ | |||
| rev=''; for subdir in $$list; do \ | |||
| if test "$$subdir" = "."; then :; else \ | |||
| rev="$$subdir $$rev"; \ | |||
| fi; \ | |||
| done; \ | |||
| rev="$$rev ."; \ | |||
| target=`echo $@ | sed s/-recursive//`; \ | |||
| for subdir in $$rev; do \ | |||
| echo "Making $$target in $$subdir"; \ | |||
| if test "$$subdir" = "."; then \ | |||
| local_target="$$target-am"; \ | |||
| else \ | |||
| local_target="$$target"; \ | |||
| fi; \ | |||
| (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ | |||
| || eval $$failcom; \ | |||
| done && test -z "$$fail" | |||
| tags-recursive: | |||
| list='$(SUBDIRS)'; for subdir in $$list; do \ | |||
| test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ | |||
| done | |||
| ctags-recursive: | |||
| list='$(SUBDIRS)'; for subdir in $$list; do \ | |||
| test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ | |||
| done | |||
| ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) | |||
| list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ | |||
| unique=`for i in $$list; do \ | |||
| if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ | |||
| done | \ | |||
| $(AWK) ' { files[$$0] = 1; } \ | |||
| END { for (i in files) print i; }'`; \ | |||
| mkid -fID $$unique | |||
| tags: TAGS | |||
| TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ | |||
| $(TAGS_FILES) $(LISP) | |||
| tags=; \ | |||
| 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 || \ | |||
| tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ | |||
| fi; \ | |||
| done; \ | |||
| list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ | |||
| unique=`for i in $$list; do \ | |||
| if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ | |||
| done | \ | |||
| $(AWK) ' { files[$$0] = 1; } \ | |||
| END { for (i in files) print i; }'`; \ | |||
| if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ | |||
| test -n "$$unique" || unique=$$empty_fix; \ | |||
| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ | |||
| $$tags $$unique; \ | |||
| fi | |||
| ctags: CTAGS | |||
| CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ | |||
| $(TAGS_FILES) $(LISP) | |||
| tags=; \ | |||
| here=`pwd`; \ | |||
| list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ | |||
| unique=`for i in $$list; do \ | |||
| if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ | |||
| done | \ | |||
| $(AWK) ' { files[$$0] = 1; } \ | |||
| END { for (i in files) print i; }'`; \ | |||
| test -z "$(CTAGS_ARGS)$$tags$$unique" \ | |||
| || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ | |||
| $$tags $$unique | |||
| GTAGS: | |||
| here=`$(am__cd) $(top_builddir) && pwd` \ | |||
| && cd $(top_srcdir) \ | |||
| && gtags -i $(GTAGS_ARGS) $$here | |||
| distclean-tags: | |||
| -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags | |||
| distdir: $(DISTFILES) | |||
| $(am__remove_distdir) | |||
| mkdir $(distdir) | |||
| $(mkdir_p) $(distdir)/src | |||
| @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ | |||
| topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ | |||
| list='$(DISTFILES)'; for file in $$list; do \ | |||
| case $$file in \ | |||
| $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ | |||
| $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ | |||
| esac; \ | |||
| if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ | |||
| dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ | |||
| if test "$$dir" != "$$file" && test "$$dir" != "."; then \ | |||
| dir="/$$dir"; \ | |||
| $(mkdir_p) "$(distdir)$$dir"; \ | |||
| else \ | |||
| dir=''; \ | |||
| fi; \ | |||
| if test -d $$d/$$file; then \ | |||
| if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ | |||
| cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ | |||
| fi; \ | |||
| cp -pR $$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 \ | |||
| test -d "$(distdir)/$$subdir" \ | |||
| || $(mkdir_p) "$(distdir)/$$subdir" \ | |||
| || exit 1; \ | |||
| distdir=`$(am__cd) $(distdir) && pwd`; \ | |||
| top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ | |||
| (cd $$subdir && \ | |||
| $(MAKE) $(AM_MAKEFLAGS) \ | |||
| top_distdir="$$top_distdir" \ | |||
| distdir="$$distdir/$$subdir" \ | |||
| distdir) \ | |||
| || exit 1; \ | |||
| fi; \ | |||
| done | |||
| -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 $(SHELL) $(install_sh) -c -m a+r {} {} \; \ | |||
| || chmod -R a+r $(distdir) | |||
| dist-gzip: distdir | |||
| tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz | |||
| $(am__remove_distdir) | |||
| dist-bzip2: distdir | |||
| tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 | |||
| $(am__remove_distdir) | |||
| dist-tarZ: distdir | |||
| tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z | |||
| $(am__remove_distdir) | |||
| dist-shar: distdir | |||
| shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz | |||
| $(am__remove_distdir) | |||
| dist-zip: distdir | |||
| -rm -f $(distdir).zip | |||
| zip -rq $(distdir).zip $(distdir) | |||
| $(am__remove_distdir) | |||
| dist dist-all: distdir | |||
| tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz | |||
| $(am__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*) \ | |||
| GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ | |||
| *.tar.bz2*) \ | |||
| bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ | |||
| *.tar.Z*) \ | |||
| uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ | |||
| *.shar.gz*) \ | |||
| GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ | |||
| *.zip*) \ | |||
| unzip $(distdir).zip ;;\ | |||
| esac | |||
| chmod -R a-w $(distdir); chmod a+w $(distdir) | |||
| mkdir $(distdir)/_build | |||
| mkdir $(distdir)/_inst | |||
| chmod a-w $(distdir) | |||
| dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ | |||
| && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ | |||
| && cd $(distdir)/_build \ | |||
| && ../configure --srcdir=.. --prefix="$$dc_install_base" \ | |||
| $(DISTCHECK_CONFIGURE_FLAGS) \ | |||
| && $(MAKE) $(AM_MAKEFLAGS) \ | |||
| && $(MAKE) $(AM_MAKEFLAGS) dvi \ | |||
| && $(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 | |||
| $(am__remove_distdir) | |||
| @(echo "$(distdir) archives ready for distribution: "; \ | |||
| list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ | |||
| sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' | |||
| distuninstallcheck: | |||
| @cd $(distuninstallcheck_dir) \ | |||
| && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ | |||
| || { 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: | |||
| $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ | |||
| install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ | |||
| `test -z '$(STRIP)' || \ | |||
| echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install | |||
| mostlyclean-generic: | |||
| clean-generic: | |||
| distclean-generic: | |||
| -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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 $(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 | |||
| info: info-recursive | |||
| info-am: | |||
| install-data-am: | |||
| install-exec-am: | |||
| install-info: install-info-recursive | |||
| install-man: | |||
| 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 | |||
| mostlyclean: mostlyclean-recursive | |||
| mostlyclean-am: mostlyclean-generic | |||
| pdf: pdf-recursive | |||
| pdf-am: | |||
| ps: ps-recursive | |||
| ps-am: | |||
| uninstall-am: uninstall-info-am | |||
| uninstall-info: uninstall-info-recursive | |||
| .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ | |||
| check-am clean clean-generic clean-recursive ctags \ | |||
| ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \ | |||
| dist-tarZ dist-zip distcheck distclean distclean-generic \ | |||
| distclean-hdr distclean-recursive distclean-tags \ | |||
| distcleancheck distdir distuninstallcheck dvi dvi-am html \ | |||
| html-am info info-am install install-am install-data \ | |||
| install-data-am install-exec install-exec-am install-info \ | |||
| install-info-am install-man install-strip installcheck \ | |||
| installcheck-am installdirs installdirs-am maintainer-clean \ | |||
| maintainer-clean-generic maintainer-clean-recursive \ | |||
| mostlyclean mostlyclean-generic mostlyclean-recursive pdf \ | |||
| pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ | |||
| uninstall-info-am | |||
| # 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: | |||
| @@ -0,0 +1,154 @@ | |||
| History of Nife releases : | |||
| 2013-09-25 - Nife 0.44 is released. | |||
| * Fixed a bug causing a "segmentation violation" during compilation | |||
| of the Nife code on some systems as Raspberry Pi A and B and others. | |||
| This bug was reported by Bernard Bonno during tests on a Raspberry Pi | |||
| Model A with 256 Mo of memory. | |||
| * The installation has been tested by Bernard Bonno on a PC i484 | |||
| with a Linux Porteus 2.0. | |||
| All information about Porteus at http://www.porteus.org/. | |||
| 2013-09-09 - Nife 0.43 is released. | |||
| * Establishment of a sub-directory .nife to facilitate debugging and | |||
| store temporary files. | |||
| * Update some functions dependant on working directory. | |||
| * Fixed some bugs in the gplot tools due to new versions of gnuplot. | |||
| * The installation has been tested by Patrick Foubet on a Raspberry Pi | |||
| board Model B with standard Raspbian (Squeeze). | |||
| All information about the board at http://www.raspberrypi.org/faqs. | |||
| 2012-10-23 - Nife 0.405 is released. | |||
| * Fixed a bug in the data transfer protocol STSP. | |||
| * Adding Dt indicators in the list giving by ?n function. | |||
| * Fixed a bug in the netDt> function. | |||
| * The installation has been tested by Patrick Foubet on a Beaglebone | |||
| board (Linux beaglebone 3.2.5+ #1 ... armv7l GNU/Linux) lended by the | |||
| school ESME Sudria for preparing a course on Linux drivers. | |||
| All information about the board at http://beagleboard.org/bone. | |||
| 2012-09-01 - Nife 0.401 is released. | |||
| * Beginning the multi-threading mechanisms based on POSIX thread. | |||
| * Adding programmation tools end: and goto_end. | |||
| * Increasing error tracking : | |||
| - giving the file name and the line number, | |||
| - stopping compilation at first error, | |||
| - allowing load in load. | |||
| - adding functions ?err, noerr, messerr, ?lasterr and onerr: label. | |||
| * Dynamic code tools : | |||
| - "load to load a file in a user function, | |||
| - "exec to compile some code in a user function, | |||
| - functions ' and ` to specify names to be executed latter. | |||
| * Limit for all names at 24 characters. | |||
| * Modifying install variables functions to work in user functions. | |||
| * Adding the free-context loop with do mechanisms : | |||
| - do_next to bypass a loop in free-context, | |||
| - do_leave and *do_leave to leave one or many loops in free-context, | |||
| * Updating the sh command to use the SHELL environment variable. | |||
| 2012-07-05 - Nife 0.341 is released. | |||
| * Adding more fonctions to deal with devices with Comedilib : | |||
| - write fonction available, | |||
| - define a default set of parameters to simplify programs. | |||
| * Update documentation for theses new commands. | |||
| 2012-06-10 - Nife 0.323 is released. | |||
| * Continuing distributed systems tools elaborated with Thomas Pabst : | |||
| - Adding netCompile to load a Nife file on a remote Nife using NetKey. | |||
| If this file contains a call of one or more functions, they will be | |||
| executed, and the result will be send on the Net using NetKey. | |||
| - Adding NetErr to get the Net Error value. | |||
| * Adding the ex directory in src with some program examples : | |||
| - gp.nif, an example for gplot functions, | |||
| - rpc.nif and rpc2.nif for Nife RPC example. | |||
| 2012-06-06 - Nife 0.320 is released. | |||
| * Beginning of the gplot module for use of gnuplot (www.gnuplot.info). | |||
| * adding theses functions : | |||
| - gplot and gplotM (multiple) to create gplots, | |||
| - gplotCmd to append text to the plot command, | |||
| - ?gp to list the gplots, | |||
| - del_gplot to delete a gplot, | |||
| - gplotAdd and gplotRepl (with replacement) to add values to plots, | |||
| - gplotClear to clear a display panel. | |||
| * The installation has been tested by Bruno Guilbert on a Fox board G20 | |||
| (Debian debarm 2.6.38 with CPU Atmel AT91SAM9G20 based on ARM926EJ-S) | |||
| with the students TRSE2 of Ingesup-Paris : | |||
| All information about the board at www.acmesystems.it. | |||
| 2012-05-22 - Nife 0.317 is released. | |||
| * Adding ndepth giving network stack depth using NetKey, | |||
| * Definition of principles for Nife RPC (remote procedure call). | |||
| * Adding netExec to execute a function on a remote Nife using NetKey. | |||
| * The installation has been tested by Dr Alain Empain (ulg.ac.be) on | |||
| Ubuntu Lucid 10.O4 (Linux 2.6.38-15 - x86_64) | |||
| * The installation has been tested by Paul Bartoldi (unige.ch) on | |||
| Ubuntu 12.O4 LTS (Linux 3.0.0-12 - x86_32) | |||
| 2012-05-11 - Nife 0.315 is released. | |||
| * Beginning of distributed systems tools elaborated with Thomas Pabst : | |||
| - automatic evaluation of the dt values at network connection, | |||
| - adding netDt> to get the clock difference value beetween "network" | |||
| and Nife system. | |||
| * The installation has been tested on | |||
| Debian Wheezy Testing (Linux 3.2.0-2 - x86_32) | |||
| 2012-05-04 - Nife 0.311 is released. | |||
| * Modifying errors traps to get a better bug resolution. | |||
| * The installation has been tested by Bernard Perrin (csem.ch) on | |||
| MacOS X Snow Leopard 10.6.8 (Darwin Kernel Vers 10.8.0 - x86_32) | |||
| 2012-03-16 - Nife 0.307 is released. | |||
| * Adding auto-convergent loop : do ... loop | |||
| * Adding standards loop : do ... +loop | |||
| * Possibility to test the loop level and use indexes I, J and K. | |||
| * Adding del_ofunc to delete, by name, the oldest function, | |||
| * Adding del_afunc to delete all functions beginning by a prefix, | |||
| * Adding "exec to execute a user function giving her name on the | |||
| character stack. | |||
| * Adding "Var to create a variable giving her name on the character | |||
| stack. | |||
| * Rename functions sub[] in []-sub and *sub[] in *[]-sub to adopt a | |||
| more logical notation. | |||
| 2012-03-08 - Nife 0.303 is released. | |||
| * This release is specially dedicated to my wife Christine. | |||
| * Now you can use nife with redirection or pîpe : | |||
| nife < fic.nif or cat fic.nif | nife | |||
| Thank you to Denis Bodor for the idea ! | |||
| 2012-02-22 - Nife 0.302 is released. | |||
| * Christophe Ondrejec has validate the site nife-project.org | |||
| * Updating README, NEWS and all informations files. | |||
| * The installation has been tested on : | |||
| - Debian Lenny (Linux 2.6.26-2 - x86_32) | |||
| - Debian Squeeze (Linux 2.6.32-5 - x86_64) | |||
| - Mac OS X (Darwin Kernel Version 8.11.1 - x86_32) | |||
| - Open BSD (Version 5.0 GENERIC#43 - x86_32) | |||
| - Solaris 11 (SunOS v 5.11 - x86_32) | |||
| - Fedora Core 15 (Linux 2.6.38-6 - x86_32) | |||
| - Open Suze 12.1 (Linux 3.1.0-1 - x86_64) | |||
| * Adding a benchmark test. | |||
| 2012-02-13 - Nife 0.300 is released (internal). | |||
| * Upgrading for working on both 32 or 64 bits. | |||
| * Upgrading SCS (Sister Chip Signature) to accept data from machine | |||
| differents on code or addresses but using compatible datas. | |||
| * Integration of the GNU Autotools to generate the packages. | |||
| 2011-11-13 - Nife 0.212 is released. | |||
| * Network tools with STSP (stack to stack protocol) v0.5 : | |||
| ie WITH ScS (Sister chip signature) v 1. | |||
| * correction of function []trot. | |||
| * new function []transp to transpose matrix. | |||
| 2011-11-09 - Nife 0.209 is released. | |||
| * Network tools with STSP (stack to stack protocol) v.0 : | |||
| ie without ScS (Sister chip signature). | |||
| 2011-10-31 - Nife 0.204 is released. | |||
| 2011-10-26 - Nife 0.200 is released. | |||
| 2011-09-18 - Nife 0.113 the first public release on Sourceforge.net. | |||
| @@ -0,0 +1,106 @@ | |||
| nife - Networking Industrial Forth-like Environment. | |||
| Overview | |||
| Nife is a programming language based on the principles set of Forth | |||
| defined by Charles H. Moore in the 1960s. It does not include the | |||
| full functionality of Forth, that is the reason why it is considered | |||
| as a "Forth-like" language. | |||
| His ambition is to offer people who are not computer scientists, and | |||
| need to make measurements, control of remote devices to monitor industrial | |||
| processes, handling of large collections of data, make calculations, of | |||
| filtering, statistics, can easily make their needs in a Linux environment | |||
| at low cost. | |||
| The simplicity of this language that anyone can understand how it works | |||
| in a few minutes and totally control a few hours to a week at most. | |||
| It can also be used more modestly as a super calculator, just to make its | |||
| accounts or calculations of matrix inversion. The public concerned is | |||
| very large. | |||
| It keeps the forth the following characteristics: | |||
| - Mode operation interpretation: as a shell. | |||
| - Loading source files and compilation and execution. | |||
| - Using stacks (digital, logical and characters) requiring the use of | |||
| notation called "reverse-Polish." | |||
| - How to write new features. | |||
| It adds the following possibilities: | |||
| - A true "context-free" language to compile code on the fly. | |||
| - Installation compatible on all Unix-like systems including Linux. | |||
| - Ease of interfacing to additional commands in a program Nife use many | |||
| free tools available in a Linux environment (eg xgraph). | |||
| - Integration of a consistent mathematical library to easily perform | |||
| calculations on a large number of data. | |||
| - Ability to easily add other functions to the base library. | |||
| - Automatic recognition of cards or devices compatible with the library | |||
| COMEDI (http://www.comedi.org) to make data acquisition, signal | |||
| processing, automatic pilot. This is one of its sides "industrial". | |||
| - Variable definition of variable geometry (which may in turn contain | |||
| a scalar, an array of numeric values, a boolean, a string ...) and | |||
| can also become executable variables (ie referring to the code that | |||
| will be called when using the variable). This aspect gives the term | |||
| Nife dynamic language with all that this implies (code compact and | |||
| fast, scalable performance). | |||
| - Management of multi-tasking with the command task that can initiate | |||
| parallel execution of functions, control (whether it is complete, | |||
| refer to the consoles, delete, etc.). | |||
| - Nife programs can communicate with each other via the communication | |||
| tools offered by traditional Unix, internally (within the same system) | |||
| or external interface based on TCP/IP. For this, it has its own | |||
| protocol STSP (stack to stack protocol) for exchanging data directly | |||
| from a numerical stack to an other one. This is one of its aspects | |||
| "Networking". | |||
| - The possible opening towards the use of other devices through the | |||
| integration of specific drivers. | |||
| How to compile and install nife | |||
| Download the nife source code, then: | |||
| tar zxvf nife-x.y.z.tar.gz | |||
| cd nife-x.y.z | |||
| ./configure | |||
| make | |||
| WARNING !! | |||
| make install is not preconized in beta version !! | |||
| You can use it by positionning in the source directory and call the | |||
| command : | |||
| cd src | |||
| ./nife | |||
| You can also lauch the benchmark test : | |||
| ./test.sh | |||
| Web Page | |||
| http://www.nife-project.org | |||
| Mailing List and Bug Reports | |||
| nife-project.org hosts all the nife-related mailing-lists. | |||
| + help-nife@nife-project.org is for those seeking to get help without | |||
| wanting to hear about the technical details of its development. | |||
| + nife-devel@nife-project.org is the list used by the people | |||
| that make Nife and a general development discussion list, with | |||
| moderate traffic. | |||
| To subscribe, go directely to : | |||
| http://nife-project.org/general/newsletter/subone/view-subscribe | |||
| For general bug reports, send a description of the problem to | |||
| nife@seriane.fr or directly to the development list. | |||
| Current Status | |||
| nife is still in beta version. | |||
| Patrick Foubet (patrick.foubet@nife-project.org) | |||
| @@ -0,0 +1,106 @@ | |||
| nife - Networking Industrial Forth-like Environment. | |||
| Overview | |||
| Nife is a programming language based on the principles set of Forth | |||
| defined by Charles H. Moore in the 1960s. It does not include the | |||
| full functionality of Forth, that is the reason why it is considered | |||
| as a "Forth-like" language. | |||
| His ambition is to offer people who are not computer scientists, and | |||
| need to make measurements, control of remote devices to monitor industrial | |||
| processes, handling of large collections of data, make calculations, of | |||
| filtering, statistics, can easily make their needs in a Linux environment | |||
| at low cost. | |||
| The simplicity of this language that anyone can understand how it works | |||
| in a few minutes and totally control a few hours to a week at most. | |||
| It can also be used more modestly as a super calculator, just to make its | |||
| accounts or calculations of matrix inversion. The public concerned is | |||
| very large. | |||
| It keeps the forth the following characteristics: | |||
| - Mode operation interpretation: as a shell. | |||
| - Loading source files and compilation and execution. | |||
| - Using stacks (digital, logical and characters) requiring the use of | |||
| notation called "reverse-Polish." | |||
| - How to write new features. | |||
| It adds the following possibilities: | |||
| - A true "context-free" language to compile code on the fly. | |||
| - Installation compatible on all Unix-like systems including Linux. | |||
| - Ease of interfacing to additional commands in a program Nife use many | |||
| free tools available in a Linux environment (eg xgraph). | |||
| - Integration of a consistent mathematical library to easily perform | |||
| calculations on a large number of data. | |||
| - Ability to easily add other functions to the base library. | |||
| - Automatic recognition of cards or devices compatible with the library | |||
| COMEDI (http://www.comedi.org) to make data acquisition, signal | |||
| processing, automatic pilot. This is one of its sides "industrial". | |||
| - Variable definition of variable geometry (which may in turn contain | |||
| a scalar, an array of numeric values, a boolean, a string ...) and | |||
| can also become executable variables (ie referring to the code that | |||
| will be called when using the variable). This aspect gives the term | |||
| Nife dynamic language with all that this implies (code compact and | |||
| fast, scalable performance). | |||
| - Management of multi-tasking with the command task that can initiate | |||
| parallel execution of functions, control (whether it is complete, | |||
| refer to the consoles, delete, etc.). | |||
| - Nife programs can communicate with each other via the communication | |||
| tools offered by traditional Unix, internally (within the same system) | |||
| or external interface based on TCP/IP. For this, it has its own | |||
| protocol STSP (stack to stack protocol) for exchanging data directly | |||
| from a numerical stack to an other one. This is one of its aspects | |||
| "Networking". | |||
| - The possible opening towards the use of other devices through the | |||
| integration of specific drivers. | |||
| How to compile and install nife | |||
| Download the nife source code, then: | |||
| tar zxvf nife-x.y.z.tar.gz | |||
| cd nife-x.y.z | |||
| ./configure | |||
| make | |||
| WARNING !! | |||
| make install is not preconized in beta version !! | |||
| You can use it by positionning in the source directory and call the | |||
| command : | |||
| cd src | |||
| ./nife | |||
| You can also lauch the benchmark test : | |||
| ./test.sh | |||
| Web Page | |||
| http://www.nife-project.org | |||
| Mailing List and Bug Reports | |||
| nife-project.org hosts all the nife-related mailing-lists. | |||
| + help-nife@nife-project.org is for those seeking to get help without | |||
| wanting to hear about the technical details of its development. | |||
| + nife-devel@nife-project.org is the list used by the people | |||
| that make Nife and a general development discussion list, with | |||
| moderate traffic. | |||
| To subscribe, go directely to : | |||
| http://nife-project.org/general/newsletter/subone/view-subscribe | |||
| For general bug reports, send a description of the problem to | |||
| nife@seriane.fr or directly to the development list. | |||
| Current Status | |||
| nife is still in beta version. | |||
| Patrick Foubet (patrick.foubet@nife-project.org) | |||
| @@ -0,0 +1,850 @@ | |||
| # generated automatically by aclocal 1.9.6 -*- Autoconf -*- | |||
| # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, | |||
| # 2005 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. | |||
| # Copyright (C) 2002, 2003, 2005 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. | |||
| AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) | |||
| # AM_SET_CURRENT_AUTOMAKE_VERSION | |||
| # ------------------------------- | |||
| # Call AM_AUTOMAKE_VERSION so it can be traced. | |||
| # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. | |||
| AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], | |||
| [AM_AUTOMAKE_VERSION([1.9.6])]) | |||
| # AM_AUX_DIR_EXPAND -*- Autoconf -*- | |||
| # Copyright (C) 2001, 2003, 2005 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], | |||
| [dnl Rely on autoconf to set up CDPATH properly. | |||
| AC_PREREQ([2.50])dnl | |||
| # expand $ac_aux_dir to an absolute path | |||
| am_aux_dir=`cd $ac_aux_dir && pwd` | |||
| ]) | |||
| # AM_CONDITIONAL -*- Autoconf -*- | |||
| # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 | |||
| # 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. | |||
| # serial 7 | |||
| # AM_CONDITIONAL(NAME, SHELL-CONDITION) | |||
| # ------------------------------------- | |||
| # Define a conditional. | |||
| AC_DEFUN([AM_CONDITIONAL], | |||
| [AC_PREREQ(2.52)dnl | |||
| ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], | |||
| [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl | |||
| AC_SUBST([$1_TRUE]) | |||
| AC_SUBST([$1_FALSE]) | |||
| 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, 2000, 2001, 2002, 2003, 2004, 2005 | |||
| # 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. | |||
| # serial 8 | |||
| # 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", "GCJ", or "OBJC". | |||
| # 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 | |||
| ifelse([$1], CC, [depcc="$CC" am_compiler_list=], | |||
| [$1], CXX, [depcc="$CXX" am_compiler_list=], | |||
| [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], | |||
| [$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'. | |||
| 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 | |||
| 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 8's {/usr,}/bin/sh. | |||
| touch sub/conftst$i.h | |||
| done | |||
| echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf | |||
| case $depmode in | |||
| 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 | |||
| ;; | |||
| none) break ;; | |||
| esac | |||
| # 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. | |||
| if depmode=$depmode \ | |||
| source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ | |||
| depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ | |||
| $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ | |||
| >/dev/null 2>conftest.err && | |||
| grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && | |||
| grep sub/conftest.${OBJEXT-o} 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, | |||
| [ --disable-dependency-tracking speeds up one-time build | |||
| --enable-dependency-tracking do not reject slow dependency extractors]) | |||
| if test "x$enable_dependency_tracking" != xno; then | |||
| am_depcomp="$ac_aux_dir/depcomp" | |||
| AMDEPBACKSLASH='\' | |||
| fi | |||
| AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) | |||
| AC_SUBST([AMDEPBACKSLASH]) | |||
| ]) | |||
| # Generate code to set up dependency tracking. -*- Autoconf -*- | |||
| # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 | |||
| # 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. | |||
| #serial 3 | |||
| # _AM_OUTPUT_DEPENDENCY_COMMANDS | |||
| # ------------------------------ | |||
| AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], | |||
| [for mf in $CONFIG_FILES; do | |||
| # Strip MF so we end up with the name of the file. | |||
| mf=`echo "$mf" | sed -e 's/:.*$//'` | |||
| # Check whether this is an Automake generated Makefile or not. | |||
| # We used to match only the files named `Makefile.in', but | |||
| # some people rename them; so instead we look at the file content. | |||
| # Grep'ing the first line is not enough: some people post-process | |||
| # each Makefile.in and add a new line on top of each file to say so. | |||
| # So let's grep whole file. | |||
| if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then | |||
| dirpart=`AS_DIRNAME("$mf")` | |||
| else | |||
| continue | |||
| fi | |||
| # Extract the definition of DEPDIR, am__include, and am__quote | |||
| # from the Makefile without running `make'. | |||
| DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` | |||
| test -z "$DEPDIR" && continue | |||
| am__include=`sed -n 's/^am__include = //p' < "$mf"` | |||
| test -z "am__include" && continue | |||
| am__quote=`sed -n 's/^am__quote = //p' < "$mf"` | |||
| # When using ansi2knr, U may be empty or an underscore; expand it | |||
| U=`sed -n 's/^U = //p' < "$mf"` | |||
| # Find all dependency output files, they are included files with | |||
| # $(DEPDIR) in their names. We invoke sed twice because it is the | |||
| # simplest approach to changing $(DEPDIR) to its actual value in the | |||
| # expansion. | |||
| for file in `sed -n " | |||
| s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ | |||
| sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do | |||
| # Make sure the directory exists. | |||
| test -f "$dirpart/$file" && continue | |||
| fdir=`AS_DIRNAME(["$file"])` | |||
| AS_MKDIR_P([$dirpart/$fdir]) | |||
| # echo "creating $dirpart/$file" | |||
| echo '# dummy' > "$dirpart/$file" | |||
| done | |||
| done | |||
| ])# _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. FIXME. This creates each `.P' file that we will | |||
| # 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" ac_aux_dir="$ac_aux_dir"]) | |||
| ]) | |||
| # Do all the work for Automake. -*- Autoconf -*- | |||
| # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 | |||
| # 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. | |||
| # serial 12 | |||
| # 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. | |||
| # 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.58])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 | |||
| # test to see if srcdir already configured | |||
| if test "`cd $srcdir && pwd`" != "`pwd`" && | |||
| test -f $srcdir/config.status; then | |||
| AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) | |||
| 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], | |||
| [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl | |||
| AC_SUBST([PACKAGE], [$1])dnl | |||
| AC_SUBST([VERSION], [$2])], | |||
| [_AM_SET_OPTIONS([$1])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) | |||
| AM_PROG_INSTALL_SH | |||
| AM_PROG_INSTALL_STRIP | |||
| AC_REQUIRE([AM_PROG_MKDIR_P])dnl | |||
| # We need awk for the "check" target. 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)], | |||
| [define([AC_PROG_CC], | |||
| defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl | |||
| AC_PROVIDE_IFELSE([AC_PROG_CXX], | |||
| [_AM_DEPENDENCIES(CXX)], | |||
| [define([AC_PROG_CXX], | |||
| defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl | |||
| ]) | |||
| ]) | |||
| # 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_stamp_count=1 | |||
| for _am_header in $config_headers :; do | |||
| case $_am_header in | |||
| $1 | $1:* ) | |||
| break ;; | |||
| * ) | |||
| _am_stamp_count=`expr $_am_stamp_count + 1` ;; | |||
| esac | |||
| done | |||
| echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) | |||
| # Copyright (C) 2001, 2003, 2005 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 | |||
| install_sh=${install_sh-"$am_aux_dir/install-sh"} | |||
| AC_SUBST(install_sh)]) | |||
| # Copyright (C) 2003, 2005 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. | |||
| # serial 2 | |||
| # 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])]) | |||
| # Check to see how 'make' treats includes. -*- Autoconf -*- | |||
| # Copyright (C) 2001, 2002, 2003, 2005 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. | |||
| # serial 3 | |||
| # AM_MAKE_INCLUDE() | |||
| # ----------------- | |||
| # Check to see how make treats includes. | |||
| AC_DEFUN([AM_MAKE_INCLUDE], | |||
| [am_make=${MAKE-make} | |||
| cat > confinc << 'END' | |||
| am__doit: | |||
| @echo done | |||
| .PHONY: am__doit | |||
| END | |||
| # If we don't find an include directive, just comment out the code. | |||
| AC_MSG_CHECKING([for style of include used by $am_make]) | |||
| am__include="#" | |||
| am__quote= | |||
| _am_result=none | |||
| # First try GNU make style include. | |||
| echo "include confinc" > confmf | |||
| # We grep out `Entering directory' and `Leaving directory' | |||
| # messages which can occur if `w' ends up in MAKEFLAGS. | |||
| # In particular we don't look at `^make:' because GNU make might | |||
| # be invoked under some other name (usually "gmake"), in which | |||
| # case it prints its new name instead of `make'. | |||
| if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then | |||
| am__include=include | |||
| am__quote= | |||
| _am_result=GNU | |||
| fi | |||
| # Now try BSD make style include. | |||
| if test "$am__include" = "#"; then | |||
| echo '.include "confinc"' > confmf | |||
| if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then | |||
| am__include=.include | |||
| am__quote="\"" | |||
| _am_result=BSD | |||
| fi | |||
| fi | |||
| AC_SUBST([am__include]) | |||
| AC_SUBST([am__quote]) | |||
| AC_MSG_RESULT([$_am_result]) | |||
| rm -f confinc confmf | |||
| ]) | |||
| # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- | |||
| # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 | |||
| # 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. | |||
| # serial 4 | |||
| # 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 supports --run. | |||
| # If it does, set am_missing_run to use it, otherwise, to nothing. | |||
| AC_DEFUN([AM_MISSING_HAS_RUN], | |||
| [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl | |||
| test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" | |||
| # Use eval to expand $SHELL | |||
| if eval "$MISSING --run true"; then | |||
| am_missing_run="$MISSING --run " | |||
| else | |||
| am_missing_run= | |||
| AC_MSG_WARN([`missing' script is too old or missing]) | |||
| fi | |||
| ]) | |||
| # Copyright (C) 2003, 2004, 2005 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_MKDIR_P | |||
| # --------------- | |||
| # Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. | |||
| # | |||
| # Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories | |||
| # created by `make install' are always world readable, even if the | |||
| # installer happens to have an overly restrictive umask (e.g. 077). | |||
| # This was a mistake. There are at least two reasons why we must not | |||
| # use `-m 0755': | |||
| # - it causes special bits like SGID to be ignored, | |||
| # - it may be too restrictive (some setups expect 775 directories). | |||
| # | |||
| # Do not use -m 0755 and let people choose whatever they expect by | |||
| # setting umask. | |||
| # | |||
| # We cannot accept any implementation of `mkdir' that recognizes `-p'. | |||
| # Some implementations (such as Solaris 8's) are not thread-safe: if a | |||
| # parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' | |||
| # concurrently, both version can detect that a/ is missing, but only | |||
| # one can create it and the other will error out. Consequently we | |||
| # restrict ourselves to GNU make (using the --version option ensures | |||
| # this.) | |||
| AC_DEFUN([AM_PROG_MKDIR_P], | |||
| [if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then | |||
| # We used to keeping the `.' as first argument, in order to | |||
| # allow $(mkdir_p) to be used without argument. As in | |||
| # $(mkdir_p) $(somedir) | |||
| # where $(somedir) is conditionally defined. However this is wrong | |||
| # for two reasons: | |||
| # 1. if the package is installed by a user who cannot write `.' | |||
| # make install will fail, | |||
| # 2. the above comment should most certainly read | |||
| # $(mkdir_p) $(DESTDIR)$(somedir) | |||
| # so it does not work when $(somedir) is undefined and | |||
| # $(DESTDIR) is not. | |||
| # To support the latter case, we have to write | |||
| # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), | |||
| # so the `.' trick is pointless. | |||
| mkdir_p='mkdir -p --' | |||
| else | |||
| # On NextStep and OpenStep, the `mkdir' command does not | |||
| # recognize any option. It will interpret all options as | |||
| # directories to create, and then abort because `.' already | |||
| # exists. | |||
| for d in ./-p ./--version; | |||
| do | |||
| test -d $d && rmdir $d | |||
| done | |||
| # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. | |||
| if test -f "$ac_aux_dir/mkinstalldirs"; then | |||
| mkdir_p='$(mkinstalldirs)' | |||
| else | |||
| mkdir_p='$(install_sh) -d' | |||
| fi | |||
| fi | |||
| AC_SUBST([mkdir_p])]) | |||
| # Helper functions for option handling. -*- Autoconf -*- | |||
| # Copyright (C) 2001, 2002, 2003, 2005 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. | |||
| # serial 3 | |||
| # _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], | |||
| [AC_FOREACH([_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])]) | |||
| # Check to make sure that the build environment is sane. -*- Autoconf -*- | |||
| # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 | |||
| # 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. | |||
| # serial 4 | |||
| # AM_SANITY_CHECK | |||
| # --------------- | |||
| AC_DEFUN([AM_SANITY_CHECK], | |||
| [AC_MSG_CHECKING([whether build environment is sane]) | |||
| # Just in case | |||
| sleep 1 | |||
| echo timestamp > conftest.file | |||
| # 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 ( | |||
| 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 | |||
| rm -f conftest.file | |||
| 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 | |||
| 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)]) | |||
| # Copyright (C) 2001, 2003, 2005 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="\${SHELL} \$(install_sh) -c -s" | |||
| AC_SUBST([INSTALL_STRIP_PROGRAM])]) | |||
| # Check how to create a tarball. -*- Autoconf -*- | |||
| # Copyright (C) 2004, 2005 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. | |||
| # serial 2 | |||
| # _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. | |||
| AM_MISSING_PROG([AMTAR], [tar]) | |||
| m4_if([$1], [v7], | |||
| [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], | |||
| [m4_case([$1], [ustar],, [pax],, | |||
| [m4_fatal([Unknown tar format])]) | |||
| AC_MSG_CHECKING([how to create a $1 tar archive]) | |||
| # Loop over all known methods to create a tar archive until one works. | |||
| _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' | |||
| _am_tools=${am_cv_prog_tar_$1-$_am_tools} | |||
| # Do not fold the above two line into one, because Tru64 sh and | |||
| # Solaris sh will not grok spaces in the rhs of `-'. | |||
| 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 <conftest.tar]) | |||
| grep GrepMe conftest.dir/file >/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 | |||
| @@ -0,0 +1,143 @@ | |||
| /* config.h.in. Generated from configure.ac by autoheader. */ | |||
| /* Define to 1 if you have the <arpa/inet.h> header file. */ | |||
| #undef HAVE_ARPA_INET_H | |||
| /* Define to 1 if you have the `bzero' function. */ | |||
| #undef HAVE_BZERO | |||
| /* Define to 1 if you have the <comedilib.h> header file. */ | |||
| #undef HAVE_COMEDILIB_H | |||
| /* Define to 1 if you have the `dup2' function. */ | |||
| #undef HAVE_DUP2 | |||
| /* Define to 1 if you have the <fcntl.h> header file. */ | |||
| #undef HAVE_FCNTL_H | |||
| /* Define to 1 if you have the `floor' function. */ | |||
| #undef HAVE_FLOOR | |||
| /* Define to 1 if you have the `fork' function. */ | |||
| #undef HAVE_FORK | |||
| /* Define to 1 if you have the `gethostbyname' function. */ | |||
| #undef HAVE_GETHOSTBYNAME | |||
| /* Define to 1 if you have the `gettimeofday' function. */ | |||
| #undef HAVE_GETTIMEOFDAY | |||
| /* Define to 1 if you have the `inet_ntoa' function. */ | |||
| #undef HAVE_INET_NTOA | |||
| /* Define to 1 if you have the <inttypes.h> header file. */ | |||
| #undef HAVE_INTTYPES_H | |||
| /* Define to 1 if your system has a GNU libc compatible `malloc' function, and | |||
| to 0 otherwise. */ | |||
| #undef HAVE_MALLOC | |||
| /* Define to 1 if you have the <memory.h> header file. */ | |||
| #undef HAVE_MEMORY_H | |||
| /* Define to 1 if you have the <netdb.h> header file. */ | |||
| #undef HAVE_NETDB_H | |||
| /* Define to 1 if you have the `pow' function. */ | |||
| #undef HAVE_POW | |||
| /* Define to 1 if you have the <pthread.h> header file. */ | |||
| #undef HAVE_PTHREAD_H | |||
| /* Define to 1 if you have the `rint' function. */ | |||
| #undef HAVE_RINT | |||
| /* Define to 1 if you have the `socket' function. */ | |||
| #undef HAVE_SOCKET | |||
| /* Define to 1 if stdbool.h conforms to C99. */ | |||
| #undef HAVE_STDBOOL_H | |||
| /* Define to 1 if you have the <stdint.h> header file. */ | |||
| #undef HAVE_STDINT_H | |||
| /* Define to 1 if you have the <stdlib.h> header file. */ | |||
| #undef HAVE_STDLIB_H | |||
| /* Define to 1 if you have the `strchr' function. */ | |||
| #undef HAVE_STRCHR | |||
| /* Define to 1 if you have the <strings.h> header file. */ | |||
| #undef HAVE_STRINGS_H | |||
| /* Define to 1 if you have the <string.h> header file. */ | |||
| #undef HAVE_STRING_H | |||
| /* Define to 1 if you have the <sys/socket.h> header file. */ | |||
| #undef HAVE_SYS_SOCKET_H | |||
| /* Define to 1 if you have the <sys/stat.h> header file. */ | |||
| #undef HAVE_SYS_STAT_H | |||
| /* Define to 1 if you have the <sys/time.h> header file. */ | |||
| #undef HAVE_SYS_TIME_H | |||
| /* Define to 1 if you have the <sys/types.h> header file. */ | |||
| #undef HAVE_SYS_TYPES_H | |||
| /* Define to 1 if you have the <termios.h> header file. */ | |||
| #undef HAVE_TERMIOS_H | |||
| /* Define to 1 if you have the <unistd.h> header file. */ | |||
| #undef HAVE_UNISTD_H | |||
| /* Define to 1 if you have the `vfork' function. */ | |||
| #undef HAVE_VFORK | |||
| /* Define to 1 if you have the <vfork.h> header file. */ | |||
| #undef HAVE_VFORK_H | |||
| /* Define to 1 if `fork' works. */ | |||
| #undef HAVE_WORKING_FORK | |||
| /* Define to 1 if `vfork' works. */ | |||
| #undef HAVE_WORKING_VFORK | |||
| /* Define to 1 if the system has the type `_Bool'. */ | |||
| #undef HAVE__BOOL | |||
| /* 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 you have the ANSI C header files. */ | |||
| #undef STDC_HEADERS | |||
| /* Version number of package */ | |||
| #undef VERSION | |||
| /* Define to rpl_malloc if the replacement function should be used. */ | |||
| #undef malloc | |||
| /* Define to `int' if <sys/types.h> does not define. */ | |||
| #undef pid_t | |||
| /* Define as `fork' if `vfork' does not work. */ | |||
| #undef vfork | |||
| @@ -0,0 +1,39 @@ | |||
| # -*- Autoconf -*- | |||
| # Process this file with autoconf to produce a configure script. | |||
| AC_PREREQ([2.67]) | |||
| AC_INIT([nife], [0.44], [nife@seriane.fr]) | |||
| AM_INIT_AUTOMAKE | |||
| AC_CONFIG_SRCDIR([src/tasks.c]) | |||
| AC_CONFIG_HEADERS([config.h]) | |||
| # Checks for programs. | |||
| AC_PROG_CC | |||
| AC_PROG_MAKE_SET | |||
| # Checks for libraries. | |||
| # Checks for header files. | |||
| AC_CHECK_HEADERS([arpa/inet.h fcntl.h inttypes.h netdb.h stdlib.h string.h strings.h sys/socket.h sys/time.h termios.h unistd.h]) | |||
| AC_CHECK_HEADERS([pthread.h]) | |||
| AC_CHECK_HEADERS([comedilib.h]) | |||
| # Checks for typedefs, structures, and compiler characteristics. | |||
| AC_HEADER_STDBOOL | |||
| AC_TYPE_PID_T | |||
| # Checks for library functions. | |||
| AC_FUNC_FORK | |||
| AC_FUNC_MALLOC | |||
| AC_FUNC_STRTOD | |||
| AC_CHECK_FUNCS([bzero dup2 floor gethostbyname gettimeofday inet_ntoa pow rint socket strchr]) | |||
| AC_SEARCH_LIBS(pow,m) | |||
| AC_SEARCH_LIBS(comedi_get_cmd_src_mask,comedi) | |||
| AC_SEARCH_LIBS(socket,socket) | |||
| AC_SEARCH_LIBS(pthread_create,pthread) | |||
| AC_SEARCH_LIBS(inet_ntoa,nsl) | |||
| AC_CONFIG_FILES([Makefile src/Makefile]) | |||
| AC_OUTPUT | |||
| @@ -0,0 +1,530 @@ | |||
| #! /bin/sh | |||
| # depcomp - compile a program generating dependencies as side-effects | |||
| scriptversion=2005-07-09.11 | |||
| # Copyright (C) 1999, 2000, 2003, 2004, 2005 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, write to the Free Software | |||
| # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | |||
| # 02110-1301, USA. | |||
| # 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 <oliva@dcc.unicamp.br>. | |||
| 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 outputing dependencies. | |||
| libtool Whether libtool is used (yes/no). | |||
| Report bugs to <bug-automake@gnu.org>. | |||
| EOF | |||
| exit $? | |||
| ;; | |||
| -v | --v*) | |||
| echo "depcomp $scriptversion" | |||
| exit $? | |||
| ;; | |||
| esac | |||
| 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" | |||
| # 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 | |||
| 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. | |||
| "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" | |||
| stat=$? | |||
| if test $stat -eq 0; then : | |||
| else | |||
| rm -f "$tmpdepfile" | |||
| exit $stat | |||
| fi | |||
| mv "$tmpdepfile" "$depfile" | |||
| ;; | |||
| gcc) | |||
| ## 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). | |||
| ## - 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 -eq 0; then : | |||
| else | |||
| rm -f "$tmpdepfile" | |||
| exit $stat | |||
| fi | |||
| rm -f "$depfile" | |||
| echo "$object : \\" > "$depfile" | |||
| alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz | |||
| ## 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. | |||
| tr ' ' ' | |||
| ' < "$tmpdepfile" | | |||
| ## 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. | |||
| ## Some versions of the HPUX 10.20 sed can't process this invocation | |||
| ## correctly. Breaking it into two sed invocations is a workaround. | |||
| sed -e 's/^\\$//' -e '/^$/d' -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 -eq 0; then : | |||
| else | |||
| 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 ' ' ' | |||
| ' < "$tmpdepfile" \ | |||
| | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ | |||
| tr ' | |||
| ' ' ' >> $depfile | |||
| echo >> $depfile | |||
| # The second pass generates a dummy entry for each header file. | |||
| tr ' ' ' | |||
| ' < "$tmpdepfile" \ | |||
| | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ | |||
| >> $depfile | |||
| else | |||
| # The sourcefile does not contain any dependencies, so just | |||
| # store a dummy comment line, to avoid errors with the Makefile | |||
| # "include basename.Plo" scheme. | |||
| echo "#dummy" > "$depfile" | |||
| fi | |||
| rm -f "$tmpdepfile" | |||
| ;; | |||
| 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. | |||
| stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` | |||
| tmpdepfile="$stripped.u" | |||
| if test "$libtool" = yes; then | |||
| "$@" -Wc,-M | |||
| else | |||
| "$@" -M | |||
| fi | |||
| stat=$? | |||
| if test -f "$tmpdepfile"; then : | |||
| else | |||
| stripped=`echo "$stripped" | sed 's,^.*/,,'` | |||
| tmpdepfile="$stripped.u" | |||
| fi | |||
| if test $stat -eq 0; then : | |||
| else | |||
| rm -f "$tmpdepfile" | |||
| exit $stat | |||
| fi | |||
| if test -f "$tmpdepfile"; then | |||
| outname="$stripped.o" | |||
| # Each line is of the form `foo.o: dependent.h'. | |||
| # Do two passes, one to just change these to | |||
| # `$object: dependent.h' and one to simply `dependent.h:'. | |||
| sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" | |||
| sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" | |||
| else | |||
| # The sourcefile does not contain any dependencies, so just | |||
| # store a dummy comment line, to avoid errors with the Makefile | |||
| # "include basename.Plo" scheme. | |||
| echo "#dummy" > "$depfile" | |||
| fi | |||
| rm -f "$tmpdepfile" | |||
| ;; | |||
| icc) | |||
| # Intel's C compiler understands `-MD -MF file'. However on | |||
| # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c | |||
| # ICC 7.0 will fill foo.d with something like | |||
| # foo.o: sub/foo.c | |||
| # foo.o: sub/foo.h | |||
| # which is wrong. We want: | |||
| # sub/foo.o: sub/foo.c | |||
| # sub/foo.o: sub/foo.h | |||
| # sub/foo.c: | |||
| # sub/foo.h: | |||
| # ICC 7.1 will output | |||
| # foo.o: sub/foo.c sub/foo.h | |||
| # and will wrap long lines using \ : | |||
| # foo.o: sub/foo.c ... \ | |||
| # sub/foo.h ... \ | |||
| # ... | |||
| "$@" -MD -MF "$tmpdepfile" | |||
| stat=$? | |||
| if test $stat -eq 0; then : | |||
| else | |||
| 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" | |||
| ;; | |||
| 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. | |||
| dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` | |||
| test "x$dir" = "x$object" && dir= | |||
| base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` | |||
| if test "$libtool" = yes; then | |||
| # With Tru64 cc, shared objects can also be used to make a | |||
| # static library. This mecanism is used in libtool 1.4 series to | |||
| # handle both shared and static libraries in a single compilation. | |||
| # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. | |||
| # | |||
| # With libtool 1.5 this exception was removed, and libtool now | |||
| # generates 2 separate objects for the 2 libraries. These two | |||
| # compilations output dependencies in 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.libs/$base.lo.d # libtool 1.4 | |||
| tmpdepfile2=$dir$base.o.d # libtool 1.5 | |||
| tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 | |||
| tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 | |||
| "$@" -Wc,-MD | |||
| else | |||
| tmpdepfile1=$dir$base.o.d | |||
| tmpdepfile2=$dir$base.d | |||
| tmpdepfile3=$dir$base.d | |||
| tmpdepfile4=$dir$base.d | |||
| "$@" -MD | |||
| fi | |||
| stat=$? | |||
| if test $stat -eq 0; then : | |||
| else | |||
| rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" | |||
| exit $stat | |||
| fi | |||
| for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" | |||
| do | |||
| test -f "$tmpdepfile" && break | |||
| done | |||
| if test -f "$tmpdepfile"; then | |||
| sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" | |||
| # That's a tab and a space in the []. | |||
| sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" | |||
| else | |||
| echo "#dummy" > "$depfile" | |||
| fi | |||
| rm -f "$tmpdepfile" | |||
| ;; | |||
| #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 $1 != '--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:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" | |||
| rm -f "$depfile" | |||
| cat < "$tmpdepfile" > "$depfile" | |||
| tr ' ' ' | |||
| ' < "$tmpdepfile" | \ | |||
| ## Some versions of the HPUX 10.20 sed can't process this invocation | |||
| ## correctly. Breaking it into two sed invocations is a workaround. | |||
| 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 $1 != '--mode=compile'; do | |||
| shift | |||
| done | |||
| shift | |||
| fi | |||
| # X makedepend | |||
| shift | |||
| cleared=no | |||
| for arg in "$@"; do | |||
| case $cleared in | |||
| no) | |||
| set ""; shift | |||
| cleared=yes ;; | |||
| esac | |||
| 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. | |||
| -*|$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" | |||
| cat < "$tmpdepfile" > "$depfile" | |||
| sed '1,2d' "$tmpdepfile" | tr ' ' ' | |||
| ' | \ | |||
| ## Some versions of the HPUX 10.20 sed can't process this invocation | |||
| ## correctly. Breaking it into two sed invocations is a workaround. | |||
| 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 $1 != '--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, regardless of -o, | |||
| # because we must use -o when running libtool. | |||
| "$@" || exit $? | |||
| IFS=" " | |||
| for arg | |||
| do | |||
| case "$arg" in | |||
| "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") | |||
| set fnord "$@" | |||
| shift | |||
| shift | |||
| ;; | |||
| *) | |||
| set fnord "$@" "$arg" | |||
| shift | |||
| shift | |||
| ;; | |||
| esac | |||
| done | |||
| "$@" -E | | |||
| sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" | |||
| rm -f "$depfile" | |||
| echo "$object : \\" > "$depfile" | |||
| . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" | |||
| echo " " >> "$depfile" | |||
| . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" | |||
| rm -f "$tmpdepfile" | |||
| ;; | |||
| none) | |||
| exec "$@" | |||
| ;; | |||
| *) | |||
| echo "Unknown depmode $depmode" 1>&2 | |||
| exit 1 | |||
| ;; | |||
| esac | |||
| exit 0 | |||
| # Local Variables: | |||
| # mode: shell-script | |||
| # sh-indentation: 2 | |||
| # eval: (add-hook 'write-file-hooks 'time-stamp) | |||
| # time-stamp-start: "scriptversion=" | |||
| # time-stamp-format: "%:y-%02m-%02d.%02H" | |||
| # time-stamp-end: "$" | |||
| # End: | |||
| @@ -0,0 +1,323 @@ | |||
| #!/bin/sh | |||
| # install - install a program, script, or datafile | |||
| scriptversion=2005-05-14.22 | |||
| # 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. It can only install one file at a time, a restriction | |||
| # shared with many OS's install programs. | |||
| # set DOITPROG to echo to test this script | |||
| # Don't use :- since 4.3BSD and earlier shells don't like it. | |||
| doit="${DOITPROG-}" | |||
| # put in absolute paths if you don't have them in your path; or use env. vars. | |||
| mvprog="${MVPROG-mv}" | |||
| cpprog="${CPPROG-cp}" | |||
| chmodprog="${CHMODPROG-chmod}" | |||
| chownprog="${CHOWNPROG-chown}" | |||
| chgrpprog="${CHGRPPROG-chgrp}" | |||
| stripprog="${STRIPPROG-strip}" | |||
| rmprog="${RMPROG-rm}" | |||
| mkdirprog="${MKDIRPROG-mkdir}" | |||
| chmodcmd="$chmodprog 0755" | |||
| chowncmd= | |||
| chgrpcmd= | |||
| stripcmd= | |||
| rmcmd="$rmprog -f" | |||
| mvcmd="$mvprog" | |||
| src= | |||
| dst= | |||
| dir_arg= | |||
| dstarg= | |||
| no_target_directory= | |||
| 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: | |||
| -c (ignored) | |||
| -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. | |||
| -s $stripprog installed files. | |||
| -t DIRECTORY install into DIRECTORY. | |||
| -T report an error if DSTFILE is a directory. | |||
| --help display this help and exit. | |||
| --version display version info and exit. | |||
| Environment variables override the default commands: | |||
| CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG | |||
| " | |||
| while test -n "$1"; do | |||
| case $1 in | |||
| -c) shift | |||
| continue;; | |||
| -d) dir_arg=true | |||
| shift | |||
| continue;; | |||
| -g) chgrpcmd="$chgrpprog $2" | |||
| shift | |||
| shift | |||
| continue;; | |||
| --help) echo "$usage"; exit $?;; | |||
| -m) chmodcmd="$chmodprog $2" | |||
| shift | |||
| shift | |||
| continue;; | |||
| -o) chowncmd="$chownprog $2" | |||
| shift | |||
| shift | |||
| continue;; | |||
| -s) stripcmd=$stripprog | |||
| shift | |||
| continue;; | |||
| -t) dstarg=$2 | |||
| shift | |||
| shift | |||
| continue;; | |||
| -T) no_target_directory=true | |||
| shift | |||
| continue;; | |||
| --version) echo "$0 $scriptversion"; exit $?;; | |||
| *) # When -d is used, all remaining arguments are directories to create. | |||
| # When -t is used, the destination is already specified. | |||
| test -n "$dir_arg$dstarg" && break | |||
| # Otherwise, the last argument is the destination. Remove it from $@. | |||
| for arg | |||
| do | |||
| if test -n "$dstarg"; then | |||
| # $@ is not empty: it contains at least $arg. | |||
| set fnord "$@" "$dstarg" | |||
| shift # fnord | |||
| fi | |||
| shift # arg | |||
| dstarg=$arg | |||
| done | |||
| break;; | |||
| esac | |||
| done | |||
| if test -z "$1"; 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 | |||
| for src | |||
| do | |||
| # Protect names starting with `-'. | |||
| case $src in | |||
| -*) src=./$src ;; | |||
| esac | |||
| if test -n "$dir_arg"; then | |||
| dst=$src | |||
| src= | |||
| if test -d "$dst"; then | |||
| mkdircmd=: | |||
| chmodcmd= | |||
| else | |||
| mkdircmd=$mkdirprog | |||
| 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 "$dstarg"; then | |||
| echo "$0: no destination specified." >&2 | |||
| exit 1 | |||
| fi | |||
| dst=$dstarg | |||
| # Protect names starting with `-'. | |||
| case $dst in | |||
| -*) dst=./$dst ;; | |||
| esac | |||
| # If destination is a directory, append the input filename; won't work | |||
| # if double slashes aren't ignored. | |||
| if test -d "$dst"; then | |||
| if test -n "$no_target_directory"; then | |||
| echo "$0: $dstarg: Is a directory" >&2 | |||
| exit 1 | |||
| fi | |||
| dst=$dst/`basename "$src"` | |||
| fi | |||
| fi | |||
| # This sed command emulates the dirname command. | |||
| dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` | |||
| # Make sure that the destination directory exists. | |||
| # Skip lots of stat calls in the usual case. | |||
| if test ! -d "$dstdir"; then | |||
| defaultIFS=' | |||
| ' | |||
| IFS="${IFS-$defaultIFS}" | |||
| oIFS=$IFS | |||
| # Some sh's can't handle IFS=/ for some reason. | |||
| IFS='%' | |||
| set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` | |||
| shift | |||
| IFS=$oIFS | |||
| pathcomp= | |||
| while test $# -ne 0 ; do | |||
| pathcomp=$pathcomp$1 | |||
| shift | |||
| if test ! -d "$pathcomp"; then | |||
| $mkdirprog "$pathcomp" | |||
| # mkdir can fail with a `File exist' error in case several | |||
| # install-sh are creating the directory concurrently. This | |||
| # is OK. | |||
| test -d "$pathcomp" || exit | |||
| fi | |||
| pathcomp=$pathcomp/ | |||
| done | |||
| fi | |||
| if test -n "$dir_arg"; then | |||
| $doit $mkdircmd "$dst" \ | |||
| && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ | |||
| && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ | |||
| && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ | |||
| && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } | |||
| else | |||
| dstfile=`basename "$dst"` | |||
| # Make a couple of temp file names in the proper directory. | |||
| dsttmp=$dstdir/_inst.$$_ | |||
| rmtmp=$dstdir/_rm.$$_ | |||
| # Trap to clean up those temp files at exit. | |||
| trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 | |||
| trap '(exit $?); exit' 1 2 13 15 | |||
| # Copy the file name to the temp name. | |||
| $doit $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 "$dsttmp"; } && | |||
| # Now rename the file to the real destination. | |||
| { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 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. | |||
| { | |||
| if test -f "$dstdir/$dstfile"; then | |||
| $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ | |||
| || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ | |||
| || { | |||
| echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 | |||
| (exit 1); exit 1 | |||
| } | |||
| else | |||
| : | |||
| fi | |||
| } && | |||
| # Now rename the file to the real destination. | |||
| $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" | |||
| } | |||
| } | |||
| fi || { (exit 1); exit 1; } | |||
| done | |||
| # The final little trick to "correctly" pass the exit status to the exit trap. | |||
| { | |||
| (exit 0); exit 0 | |||
| } | |||
| # Local variables: | |||
| # eval: (add-hook 'write-file-hooks 'time-stamp) | |||
| # time-stamp-start: "scriptversion=" | |||
| # time-stamp-format: "%:y-%02m-%02d.%02H" | |||
| # time-stamp-end: "$" | |||
| # End: | |||
| @@ -0,0 +1,360 @@ | |||
| #! /bin/sh | |||
| # Common stub for a few missing GNU programs while installing. | |||
| scriptversion=2005-06-08.21 | |||
| # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 | |||
| # Free Software Foundation, Inc. | |||
| # Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 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, write to the Free Software | |||
| # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | |||
| # 02110-1301, USA. | |||
| # 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 | |||
| run=: | |||
| # In the cases where this matters, `missing' is being run in the | |||
| # srcdir already. | |||
| if test -f configure.ac; then | |||
| configure_ac=configure.ac | |||
| else | |||
| configure_ac=configure.in | |||
| fi | |||
| msg="missing on your system" | |||
| case "$1" in | |||
| --run) | |||
| # Try to run requested program, and just exit if it succeeds. | |||
| run= | |||
| shift | |||
| "$@" && exit 0 | |||
| # Exit code 63 means version mismatch. This often happens | |||
| # when the user try to use an ancient version of a tool on | |||
| # a file that requires a minimum version. In this case we | |||
| # we should proceed has if the program had been absent, or | |||
| # if --run hadn't been passed. | |||
| if test $? = 63; then | |||
| run=: | |||
| msg="probably too old" | |||
| fi | |||
| ;; | |||
| -h|--h|--he|--hel|--help) | |||
| echo "\ | |||
| $0 [OPTION]... PROGRAM [ARGUMENT]... | |||
| Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an | |||
| error status if there is no known handling for PROGRAM. | |||
| Options: | |||
| -h, --help display this help and exit | |||
| -v, --version output version information and exit | |||
| --run try to run the given command, and emulate it if it fails | |||
| Supported PROGRAM values: | |||
| aclocal touch file \`aclocal.m4' | |||
| autoconf touch file \`configure' | |||
| autoheader touch file \`config.h.in' | |||
| automake touch all \`Makefile.in' files | |||
| bison create \`y.tab.[ch]', if possible, from existing .[ch] | |||
| flex create \`lex.yy.c', if possible, from existing .c | |||
| help2man touch the output file | |||
| lex create \`lex.yy.c', if possible, from existing .c | |||
| makeinfo touch the output file | |||
| tar try tar, gnutar, gtar, then tar without non-portable flags | |||
| yacc create \`y.tab.[ch]', if possible, from existing .[ch] | |||
| Send bug reports to <bug-automake@gnu.org>." | |||
| 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 | |||
| # Now exit if we have it, but it failed. Also exit now if we | |||
| # don't have it and --version was passed (most likely to detect | |||
| # the program). | |||
| case "$1" in | |||
| lex|yacc) | |||
| # Not GNU programs, they don't have --version. | |||
| ;; | |||
| tar) | |||
| if test -n "$run"; then | |||
| echo 1>&2 "ERROR: \`tar' requires --run" | |||
| exit 1 | |||
| elif test "x$2" = "x--version" || test "x$2" = "x--help"; then | |||
| exit 1 | |||
| fi | |||
| ;; | |||
| *) | |||
| if test -z "$run" && ($1 --version) > /dev/null 2>&1; then | |||
| # We have it, but it failed. | |||
| exit 1 | |||
| elif test "x$2" = "x--version" || test "x$2" = "x--help"; then | |||
| # Could not run --version or --help. This is probably someone | |||
| # running `$TOOL --version' or `$TOOL --help' to check whether | |||
| # $TOOL exists and not knowing $TOOL uses missing. | |||
| exit 1 | |||
| fi | |||
| ;; | |||
| esac | |||
| # If it does not exist, or fails to run (possibly an outdated version), | |||
| # try to emulate it. | |||
| case "$1" in | |||
| aclocal*) | |||
| echo 1>&2 "\ | |||
| WARNING: \`$1' is $msg. You should only need it if | |||
| you modified \`acinclude.m4' or \`${configure_ac}'. You might want | |||
| to install the \`Automake' and \`Perl' packages. Grab them from | |||
| any GNU archive site." | |||
| touch aclocal.m4 | |||
| ;; | |||
| autoconf) | |||
| echo 1>&2 "\ | |||
| WARNING: \`$1' is $msg. You should only need it if | |||
| you modified \`${configure_ac}'. You might want to install the | |||
| \`Autoconf' and \`GNU m4' packages. Grab them from any GNU | |||
| archive site." | |||
| touch configure | |||
| ;; | |||
| autoheader) | |||
| echo 1>&2 "\ | |||
| WARNING: \`$1' is $msg. You should only need it if | |||
| you modified \`acconfig.h' or \`${configure_ac}'. You might want | |||
| to install the \`Autoconf' and \`GNU m4' packages. Grab them | |||
| from any GNU archive site." | |||
| files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` | |||
| test -z "$files" && files="config.h" | |||
| touch_files= | |||
| for f in $files; do | |||
| case "$f" in | |||
| *:*) touch_files="$touch_files "`echo "$f" | | |||
| sed -e 's/^[^:]*://' -e 's/:.*//'`;; | |||
| *) touch_files="$touch_files $f.in";; | |||
| esac | |||
| done | |||
| touch $touch_files | |||
| ;; | |||
| automake*) | |||
| echo 1>&2 "\ | |||
| WARNING: \`$1' is $msg. You should only need it if | |||
| you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. | |||
| You might want to install the \`Automake' and \`Perl' packages. | |||
| Grab them from any GNU archive site." | |||
| find . -type f -name Makefile.am -print | | |||
| sed 's/\.am$/.in/' | | |||
| while read f; do touch "$f"; done | |||
| ;; | |||
| autom4te) | |||
| echo 1>&2 "\ | |||
| WARNING: \`$1' is needed, but is $msg. | |||
| You might have modified some files without having the | |||
| proper tools for further handling them. | |||
| You can get \`$1' as part of \`Autoconf' from any GNU | |||
| archive site." | |||
| file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` | |||
| test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` | |||
| if test -f "$file"; then | |||
| touch $file | |||
| else | |||
| test -z "$file" || exec >$file | |||
| echo "#! /bin/sh" | |||
| echo "# Created by GNU Automake missing as a replacement of" | |||
| echo "# $ $@" | |||
| echo "exit 0" | |||
| chmod +x $file | |||
| exit 1 | |||
| fi | |||
| ;; | |||
| bison|yacc) | |||
| echo 1>&2 "\ | |||
| WARNING: \`$1' $msg. You should only need it if | |||
| you modified a \`.y' file. You may need the \`Bison' package | |||
| in order for those modifications to take effect. You can get | |||
| \`Bison' from any GNU archive site." | |||
| rm -f y.tab.c y.tab.h | |||
| if [ $# -ne 1 ]; then | |||
| eval LASTARG="\${$#}" | |||
| case "$LASTARG" in | |||
| *.y) | |||
| SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` | |||
| if [ -f "$SRCFILE" ]; then | |||
| cp "$SRCFILE" y.tab.c | |||
| fi | |||
| SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` | |||
| if [ -f "$SRCFILE" ]; then | |||
| cp "$SRCFILE" y.tab.h | |||
| fi | |||
| ;; | |||
| esac | |||
| fi | |||
| if [ ! -f y.tab.h ]; then | |||
| echo >y.tab.h | |||
| fi | |||
| if [ ! -f y.tab.c ]; then | |||
| echo 'main() { return 0; }' >y.tab.c | |||
| fi | |||
| ;; | |||
| lex|flex) | |||
| echo 1>&2 "\ | |||
| WARNING: \`$1' is $msg. You should only need it if | |||
| you modified a \`.l' file. You may need the \`Flex' package | |||
| in order for those modifications to take effect. You can get | |||
| \`Flex' from any GNU archive site." | |||
| rm -f lex.yy.c | |||
| if [ $# -ne 1 ]; then | |||
| eval LASTARG="\${$#}" | |||
| case "$LASTARG" in | |||
| *.l) | |||
| SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` | |||
| if [ -f "$SRCFILE" ]; then | |||
| cp "$SRCFILE" lex.yy.c | |||
| fi | |||
| ;; | |||
| esac | |||
| fi | |||
| if [ ! -f lex.yy.c ]; then | |||
| echo 'main() { return 0; }' >lex.yy.c | |||
| fi | |||
| ;; | |||
| help2man) | |||
| echo 1>&2 "\ | |||
| WARNING: \`$1' is $msg. You should only need it if | |||
| you modified a dependency of a manual page. You may need the | |||
| \`Help2man' package in order for those modifications to take | |||
| effect. You can get \`Help2man' from any GNU archive site." | |||
| file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` | |||
| if test -z "$file"; then | |||
| file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` | |||
| fi | |||
| if [ -f "$file" ]; then | |||
| touch $file | |||
| else | |||
| test -z "$file" || exec >$file | |||
| echo ".ab help2man is required to generate this page" | |||
| exit 1 | |||
| fi | |||
| ;; | |||
| makeinfo) | |||
| echo 1>&2 "\ | |||
| WARNING: \`$1' is $msg. You should only need it if | |||
| you modified a \`.texi' or \`.texinfo' file, or any other file | |||
| indirectly affecting the aspect of the manual. The spurious | |||
| call might also be the consequence of using a buggy \`make' (AIX, | |||
| DU, IRIX). You might want to install the \`Texinfo' package or | |||
| the \`GNU make' package. Grab either from any GNU archive site." | |||
| # The file to touch is that specified with -o ... | |||
| file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` | |||
| if test -z "$file"; then | |||
| # ... or it is the one specified with @setfilename ... | |||
| infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` | |||
| file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` | |||
| # ... or it is derived from the source name (dir/f.texi becomes f.info) | |||
| test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info | |||
| fi | |||
| # If the file does not exist, the user really needs makeinfo; | |||
| # let's fail without touching anything. | |||
| test -f $file || exit 1 | |||
| touch $file | |||
| ;; | |||
| tar) | |||
| shift | |||
| # We have already tried tar in the generic part. | |||
| # Look for gnutar/gtar before invocation to avoid ugly error | |||
| # messages. | |||
| if (gnutar --version > /dev/null 2>&1); then | |||
| gnutar "$@" && exit 0 | |||
| fi | |||
| if (gtar --version > /dev/null 2>&1); then | |||
| gtar "$@" && exit 0 | |||
| fi | |||
| firstarg="$1" | |||
| if shift; then | |||
| case "$firstarg" in | |||
| *o*) | |||
| firstarg=`echo "$firstarg" | sed s/o//` | |||
| tar "$firstarg" "$@" && exit 0 | |||
| ;; | |||
| esac | |||
| case "$firstarg" in | |||
| *h*) | |||
| firstarg=`echo "$firstarg" | sed s/h//` | |||
| tar "$firstarg" "$@" && exit 0 | |||
| ;; | |||
| esac | |||
| fi | |||
| echo 1>&2 "\ | |||
| WARNING: I can't seem to be able to run \`tar' with the given arguments. | |||
| You may want to install GNU tar or Free paxutils, or check the | |||
| command line arguments." | |||
| exit 1 | |||
| ;; | |||
| *) | |||
| echo 1>&2 "\ | |||
| WARNING: \`$1' is needed, and is $msg. | |||
| You might have modified some files without having the | |||
| proper tools for further handling them. Check the \`README' file, | |||
| it often tells you about the needed prerequisites for installing | |||
| this package. You may also peek at any GNU archive site, in case | |||
| some other package would contain this missing \`$1' program." | |||
| exit 1 | |||
| ;; | |||
| esac | |||
| exit 0 | |||
| # Local variables: | |||
| # eval: (add-hook 'write-file-hooks 'time-stamp) | |||
| # time-stamp-start: "scriptversion=" | |||
| # time-stamp-format: "%:y-%02m-%02d.%02H" | |||
| # time-stamp-end: "$" | |||
| # End: | |||
| @@ -0,0 +1,27 @@ | |||
| ################################ | |||
| # Makefile.am for nife project # | |||
| ################################ | |||
| bin_PROGRAMS = nife | |||
| nife_SOURCES = nife.c nife.h conf.h \ | |||
| mth.c mth.h \ | |||
| err.c err.h \ | |||
| histo.c histo.h \ | |||
| lib.c lib.h \ | |||
| foncs.c foncs.h \ | |||
| stackN.c stackN.h \ | |||
| stackL.c stackL.h \ | |||
| stackC.c stackC.h \ | |||
| stackF.c stackF.h \ | |||
| stackV.c stackV.h \ | |||
| tasks.c tasks.h \ | |||
| libmath.c libmath.h \ | |||
| libmathc99.c \ | |||
| help.c help.h \ | |||
| dev.c dev.h \ | |||
| net.c net.h \ | |||
| gplot.c gplot.h \ | |||
| scs.c scs.h \ | |||
| debug.c debug.h | |||
| # nife_LDADD = libm.a | |||
| @@ -0,0 +1,446 @@ | |||
| # Makefile.in generated by automake 1.9.6 from Makefile.am. | |||
| # @configure_input@ | |||
| # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, | |||
| # 2003, 2004, 2005 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@ | |||
| ################################ | |||
| # Makefile.am for nife project # | |||
| ################################ | |||
| srcdir = @srcdir@ | |||
| top_srcdir = @top_srcdir@ | |||
| VPATH = @srcdir@ | |||
| pkgdatadir = $(datadir)/@PACKAGE@ | |||
| pkglibdir = $(libdir)/@PACKAGE@ | |||
| pkgincludedir = $(includedir)/@PACKAGE@ | |||
| top_builddir = .. | |||
| am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd | |||
| INSTALL = @INSTALL@ | |||
| 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 = : | |||
| bin_PROGRAMS = nife$(EXEEXT) | |||
| subdir = src | |||
| DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in | |||
| ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 | |||
| am__aclocal_m4_deps = $(top_srcdir)/configure.ac | |||
| am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ | |||
| $(ACLOCAL_M4) | |||
| mkinstalldirs = $(install_sh) -d | |||
| CONFIG_HEADER = $(top_builddir)/config.h | |||
| CONFIG_CLEAN_FILES = | |||
| am__installdirs = "$(DESTDIR)$(bindir)" | |||
| binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) | |||
| PROGRAMS = $(bin_PROGRAMS) | |||
| am_nife_OBJECTS = nife.$(OBJEXT) mth.$(OBJEXT) err.$(OBJEXT) \ | |||
| histo.$(OBJEXT) lib.$(OBJEXT) foncs.$(OBJEXT) stackN.$(OBJEXT) \ | |||
| stackL.$(OBJEXT) stackC.$(OBJEXT) stackF.$(OBJEXT) \ | |||
| stackV.$(OBJEXT) tasks.$(OBJEXT) libmath.$(OBJEXT) \ | |||
| libmathc99.$(OBJEXT) help.$(OBJEXT) dev.$(OBJEXT) \ | |||
| net.$(OBJEXT) gplot.$(OBJEXT) scs.$(OBJEXT) debug.$(OBJEXT) | |||
| nife_OBJECTS = $(am_nife_OBJECTS) | |||
| nife_LDADD = $(LDADD) | |||
| DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) | |||
| depcomp = $(SHELL) $(top_srcdir)/depcomp | |||
| am__depfiles_maybe = depfiles | |||
| COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ | |||
| $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) | |||
| CCLD = $(CC) | |||
| LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ | |||
| SOURCES = $(nife_SOURCES) | |||
| DIST_SOURCES = $(nife_SOURCES) | |||
| ETAGS = etags | |||
| CTAGS = ctags | |||
| DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) | |||
| ACLOCAL = @ACLOCAL@ | |||
| AMDEP_FALSE = @AMDEP_FALSE@ | |||
| AMDEP_TRUE = @AMDEP_TRUE@ | |||
| AMTAR = @AMTAR@ | |||
| AUTOCONF = @AUTOCONF@ | |||
| AUTOHEADER = @AUTOHEADER@ | |||
| AUTOMAKE = @AUTOMAKE@ | |||
| AWK = @AWK@ | |||
| CC = @CC@ | |||
| CCDEPMODE = @CCDEPMODE@ | |||
| CFLAGS = @CFLAGS@ | |||
| CPP = @CPP@ | |||
| CPPFLAGS = @CPPFLAGS@ | |||
| CYGPATH_W = @CYGPATH_W@ | |||
| DEFS = @DEFS@ | |||
| DEPDIR = @DEPDIR@ | |||
| ECHO_C = @ECHO_C@ | |||
| ECHO_N = @ECHO_N@ | |||
| ECHO_T = @ECHO_T@ | |||
| EGREP = @EGREP@ | |||
| EXEEXT = @EXEEXT@ | |||
| GREP = @GREP@ | |||
| INSTALL_DATA = @INSTALL_DATA@ | |||
| INSTALL_PROGRAM = @INSTALL_PROGRAM@ | |||
| INSTALL_SCRIPT = @INSTALL_SCRIPT@ | |||
| INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ | |||
| LDFLAGS = @LDFLAGS@ | |||
| LIBOBJS = @LIBOBJS@ | |||
| LIBS = @LIBS@ | |||
| LTLIBOBJS = @LTLIBOBJS@ | |||
| MAKEINFO = @MAKEINFO@ | |||
| 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@ | |||
| POW_LIB = @POW_LIB@ | |||
| SET_MAKE = @SET_MAKE@ | |||
| SHELL = @SHELL@ | |||
| STRIP = @STRIP@ | |||
| VERSION = @VERSION@ | |||
| ac_ct_CC = @ac_ct_CC@ | |||
| am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ | |||
| am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ | |||
| 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_alias = @build_alias@ | |||
| datadir = @datadir@ | |||
| datarootdir = @datarootdir@ | |||
| docdir = @docdir@ | |||
| dvidir = @dvidir@ | |||
| exec_prefix = @exec_prefix@ | |||
| host_alias = @host_alias@ | |||
| htmldir = @htmldir@ | |||
| includedir = @includedir@ | |||
| infodir = @infodir@ | |||
| install_sh = @install_sh@ | |||
| libdir = @libdir@ | |||
| libexecdir = @libexecdir@ | |||
| localedir = @localedir@ | |||
| localstatedir = @localstatedir@ | |||
| mandir = @mandir@ | |||
| mkdir_p = @mkdir_p@ | |||
| oldincludedir = @oldincludedir@ | |||
| pdfdir = @pdfdir@ | |||
| prefix = @prefix@ | |||
| program_transform_name = @program_transform_name@ | |||
| psdir = @psdir@ | |||
| sbindir = @sbindir@ | |||
| sharedstatedir = @sharedstatedir@ | |||
| sysconfdir = @sysconfdir@ | |||
| target_alias = @target_alias@ | |||
| nife_SOURCES = nife.c nife.h conf.h \ | |||
| mth.c mth.h \ | |||
| err.c err.h \ | |||
| histo.c histo.h \ | |||
| lib.c lib.h \ | |||
| foncs.c foncs.h \ | |||
| stackN.c stackN.h \ | |||
| stackL.c stackL.h \ | |||
| stackC.c stackC.h \ | |||
| stackF.c stackF.h \ | |||
| stackV.c stackV.h \ | |||
| tasks.c tasks.h \ | |||
| libmath.c libmath.h \ | |||
| libmathc99.c \ | |||
| help.c help.h \ | |||
| dev.c dev.h \ | |||
| net.c net.h \ | |||
| gplot.c gplot.h \ | |||
| scs.c scs.h \ | |||
| debug.c debug.h | |||
| all: all-am | |||
| .SUFFIXES: | |||
| .SUFFIXES: .c .o .obj | |||
| $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) | |||
| @for dep in $?; do \ | |||
| case '$(am__configure_deps)' in \ | |||
| *$$dep*) \ | |||
| cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ | |||
| && exit 0; \ | |||
| exit 1;; \ | |||
| esac; \ | |||
| done; \ | |||
| echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ | |||
| cd $(top_srcdir) && \ | |||
| $(AUTOMAKE) --gnu src/Makefile | |||
| .PRECIOUS: 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__depfiles_maybe)'; \ | |||
| cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ | |||
| esac; | |||
| $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) | |||
| cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh | |||
| $(top_srcdir)/configure: $(am__configure_deps) | |||
| cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh | |||
| $(ACLOCAL_M4): $(am__aclocal_m4_deps) | |||
| cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh | |||
| install-binPROGRAMS: $(bin_PROGRAMS) | |||
| @$(NORMAL_INSTALL) | |||
| test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" | |||
| @list='$(bin_PROGRAMS)'; for p in $$list; do \ | |||
| p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ | |||
| if test -f $$p \ | |||
| ; then \ | |||
| f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ | |||
| echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ | |||
| $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ | |||
| else :; fi; \ | |||
| done | |||
| uninstall-binPROGRAMS: | |||
| @$(NORMAL_UNINSTALL) | |||
| @list='$(bin_PROGRAMS)'; for p in $$list; do \ | |||
| f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ | |||
| echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ | |||
| rm -f "$(DESTDIR)$(bindir)/$$f"; \ | |||
| done | |||
| clean-binPROGRAMS: | |||
| -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) | |||
| nife$(EXEEXT): $(nife_OBJECTS) $(nife_DEPENDENCIES) | |||
| @rm -f nife$(EXEEXT) | |||
| $(LINK) $(nife_LDFLAGS) $(nife_OBJECTS) $(nife_LDADD) $(LIBS) | |||
| mostlyclean-compile: | |||
| -rm -f *.$(OBJEXT) | |||
| distclean-compile: | |||
| -rm -f *.tab.c | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug.Po@am__quote@ | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dev.Po@am__quote@ | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/err.Po@am__quote@ | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/foncs.Po@am__quote@ | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gplot.Po@am__quote@ | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/help.Po@am__quote@ | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/histo.Po@am__quote@ | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib.Po@am__quote@ | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmath.Po@am__quote@ | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmathc99.Po@am__quote@ | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mth.Po@am__quote@ | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/net.Po@am__quote@ | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nife.Po@am__quote@ | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scs.Po@am__quote@ | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stackC.Po@am__quote@ | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stackF.Po@am__quote@ | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stackL.Po@am__quote@ | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stackN.Po@am__quote@ | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stackV.Po@am__quote@ | |||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tasks.Po@am__quote@ | |||
| .c.o: | |||
| @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ | |||
| @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi | |||
| @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ | |||
| @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | |||
| @am__fastdepCC_FALSE@ $(COMPILE) -c $< | |||
| .c.obj: | |||
| @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ | |||
| @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi | |||
| @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ | |||
| @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | |||
| @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` | |||
| uninstall-info-am: | |||
| ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) | |||
| list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ | |||
| unique=`for i in $$list; do \ | |||
| if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ | |||
| done | \ | |||
| $(AWK) ' { files[$$0] = 1; } \ | |||
| END { for (i in files) print i; }'`; \ | |||
| mkid -fID $$unique | |||
| tags: TAGS | |||
| TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ | |||
| $(TAGS_FILES) $(LISP) | |||
| tags=; \ | |||
| here=`pwd`; \ | |||
| list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ | |||
| unique=`for i in $$list; do \ | |||
| if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ | |||
| done | \ | |||
| $(AWK) ' { files[$$0] = 1; } \ | |||
| END { for (i in files) print i; }'`; \ | |||
| if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ | |||
| test -n "$$unique" || unique=$$empty_fix; \ | |||
| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ | |||
| $$tags $$unique; \ | |||
| fi | |||
| ctags: CTAGS | |||
| CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ | |||
| $(TAGS_FILES) $(LISP) | |||
| tags=; \ | |||
| here=`pwd`; \ | |||
| list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ | |||
| unique=`for i in $$list; do \ | |||
| if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ | |||
| done | \ | |||
| $(AWK) ' { files[$$0] = 1; } \ | |||
| END { for (i in files) print i; }'`; \ | |||
| test -z "$(CTAGS_ARGS)$$tags$$unique" \ | |||
| || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ | |||
| $$tags $$unique | |||
| GTAGS: | |||
| here=`$(am__cd) $(top_builddir) && pwd` \ | |||
| && cd $(top_srcdir) \ | |||
| && gtags -i $(GTAGS_ARGS) $$here | |||
| distclean-tags: | |||
| -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags | |||
| distdir: $(DISTFILES) | |||
| @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ | |||
| topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ | |||
| list='$(DISTFILES)'; for file in $$list; do \ | |||
| case $$file in \ | |||
| $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ | |||
| $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ | |||
| esac; \ | |||
| if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ | |||
| dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ | |||
| if test "$$dir" != "$$file" && test "$$dir" != "."; then \ | |||
| dir="/$$dir"; \ | |||
| $(mkdir_p) "$(distdir)$$dir"; \ | |||
| else \ | |||
| dir=''; \ | |||
| fi; \ | |||
| if test -d $$d/$$file; then \ | |||
| if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ | |||
| cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ | |||
| fi; \ | |||
| cp -pR $$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 $(PROGRAMS) | |||
| installdirs: | |||
| for dir in "$(DESTDIR)$(bindir)"; 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: | |||
| $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ | |||
| install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ | |||
| `test -z '$(STRIP)' || \ | |||
| echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install | |||
| mostlyclean-generic: | |||
| clean-generic: | |||
| distclean-generic: | |||
| -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-binPROGRAMS clean-generic mostlyclean-am | |||
| distclean: distclean-am | |||
| -rm -rf ./$(DEPDIR) | |||
| -rm -f Makefile | |||
| distclean-am: clean-am distclean-compile distclean-generic \ | |||
| distclean-tags | |||
| dvi: dvi-am | |||
| dvi-am: | |||
| html: html-am | |||
| info: info-am | |||
| info-am: | |||
| install-data-am: | |||
| install-exec-am: install-binPROGRAMS | |||
| install-info: install-info-am | |||
| install-man: | |||
| installcheck-am: | |||
| maintainer-clean: maintainer-clean-am | |||
| -rm -rf ./$(DEPDIR) | |||
| -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-info-am | |||
| .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ | |||
| clean-generic ctags 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-exec install-exec-am \ | |||
| install-info install-info-am install-man install-strip \ | |||
| installcheck installcheck-am installdirs maintainer-clean \ | |||
| maintainer-clean-generic mostlyclean mostlyclean-compile \ | |||
| mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ | |||
| uninstall-am uninstall-binPROGRAMS uninstall-info-am | |||
| # nife_LDADD = libm.a | |||
| # 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: | |||
| @@ -0,0 +1,15 @@ | |||
| # Benchmark test v 1 | |||
| echo_off | |||
| about | |||
| : f | |||
| time 1000000 ramp 1 - .1 * sin time | |||
| ; | |||
| : test | |||
| f rot - # call the function and put result on the top | |||
| .000001 * # transform it in secondes | |||
| cr " Result =" "type . # print the result | |||
| " secs" "type cr # add S.I legend | |||
| ; | |||
| test | |||
| exit | |||
| @@ -0,0 +1,37 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* conf.h */ | |||
| #ifndef __NIFE_CONF_H__ | |||
| #define __NIFE_CONF_H__ | |||
| #ifdef HAVE_CONFIG_H | |||
| #include "../config.h" | |||
| #else | |||
| #define VERSION "0.44" | |||
| #endif | |||
| #ifdef HAVE_COMEDILIB_H | |||
| #define _WITH_COMEDILIB | |||
| #endif | |||
| /* | |||
| #ifdef HAVE_PTHREAD_H | |||
| #define _MULTI_THREADING_ | |||
| #define _REENTRANT | |||
| #endif | |||
| */ | |||
| #endif | |||
| @@ -0,0 +1,82 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* debug.c */ | |||
| #include "conf.h" | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <unistd.h> | |||
| #include <string.h> | |||
| #include <sys/types.h> | |||
| #include <sys/stat.h> | |||
| #include <fcntl.h> | |||
| #include "nife.h" | |||
| #include "mth.h" | |||
| #include "debug.h" | |||
| int Debug=1; /* OK by default */ | |||
| void D_Reset(void) | |||
| { | |||
| int fd; | |||
| char NF[24]; | |||
| chdir(".nife"); | |||
| if (Debug) { | |||
| sprintf(NF,".nife_%d.log",getpid()); | |||
| if ((fd=open(NF,O_CREAT|O_RDWR|O_TRUNC,0644)) < 0) perror(NF); | |||
| else { | |||
| dup2(fd,2); | |||
| close(fd); | |||
| } | |||
| } else dup2(1,2); | |||
| chdir(".."); | |||
| } | |||
| void D_Update(void) | |||
| { | |||
| if (Debug) Debug=0; | |||
| else Debug=1; | |||
| D_Reset(); | |||
| } | |||
| void D_Trace(char * M) | |||
| { | |||
| if (Debug) { | |||
| fprintf(stderr," %s",M); | |||
| fflush(stderr); | |||
| } | |||
| } | |||
| static char D_Mes[20]; | |||
| void * Malloc(int s) | |||
| { | |||
| void * M; | |||
| D_Trace("\n"); | |||
| M=malloc(s); | |||
| sprintf(D_Mes,"Malloc %d : %lx\n",s,(long)M); | |||
| D_Trace(D_Mes); | |||
| return M; | |||
| } | |||
| void Free(void *A) | |||
| { | |||
| D_Trace("\n"); | |||
| sprintf(D_Mes,"Free : %lx\n",(long)A); | |||
| D_Trace(D_Mes); | |||
| free(A); | |||
| } | |||
| @@ -0,0 +1,29 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* debug.h */ | |||
| #ifndef __NIFE_DEBUG_H__ | |||
| #define __NIFE_DEBUG_H__ | |||
| extern int Debug; | |||
| extern void D_Reset(void); | |||
| extern void D_Update(void); | |||
| extern void D_Trace(char * M); | |||
| extern void * Malloc(int s); | |||
| extern void Free(void * A); | |||
| #endif | |||
| @@ -0,0 +1,318 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* dev.c */ | |||
| #ifdef HAVE_CONFIG_H | |||
| #include "../config.h" | |||
| #endif | |||
| #ifdef HAVE_COMEDILIB_H | |||
| #define _WITH_COMEDILIB | |||
| #endif | |||
| #include <stdio.h> | |||
| #include <string.h> | |||
| static int DFL_did=0, DFL_sid=0, DFL_cid=0; | |||
| #ifdef _WITH_COMEDILIB | |||
| #include <comedilib.h> | |||
| static char *subdev_types[]={ | |||
| "unused", | |||
| "analog input", | |||
| "analog output", | |||
| "digital input", | |||
| "digital output", | |||
| "digital I/O", | |||
| "counter", | |||
| "timer", | |||
| "memory", | |||
| "calibration", | |||
| "processor", | |||
| "serial digital I/O" | |||
| }; | |||
| static comedi_t *it; | |||
| static long n_it = -1; | |||
| static char *cmd_src(int src,char *buf) | |||
| { | |||
| buf[0]=0; | |||
| if(src&TRIG_NONE)strcat(buf,"none|"); | |||
| if(src&TRIG_NOW)strcat(buf,"now|"); | |||
| if(src&TRIG_FOLLOW)strcat(buf, "follow|"); | |||
| if(src&TRIG_TIME)strcat(buf, "time|"); | |||
| if(src&TRIG_TIMER)strcat(buf, "timer|"); | |||
| if(src&TRIG_COUNT)strcat(buf, "count|"); | |||
| if(src&TRIG_EXT)strcat(buf, "ext|"); | |||
| if(src&TRIG_INT)strcat(buf, "int|"); | |||
| #ifdef TRIG_OTHER | |||
| if(src&TRIG_OTHER)strcat(buf, "other|"); | |||
| #endif | |||
| if(strlen(buf)==0){ | |||
| sprintf(buf,"unknown(0x%08x)",src); | |||
| }else{ | |||
| buf[strlen(buf)-1]=0; | |||
| } | |||
| return buf; | |||
| } | |||
| static void probe_max_1chan(comedi_t *it,int s) | |||
| { | |||
| comedi_cmd cmd; | |||
| char buf[100]; | |||
| printf(" command fast 1chan:\n"); | |||
| if(comedi_get_cmd_generic_timed(it, s, &cmd, 1, 1)<0){ | |||
| printf(" not supported\n"); | |||
| }else{ | |||
| printf(" start: %s %d\n", | |||
| cmd_src(cmd.start_src,buf),cmd.start_arg); | |||
| printf(" scan_begin: %s %d\n", | |||
| cmd_src(cmd.scan_begin_src,buf),cmd.scan_begin_arg); | |||
| printf(" convert: %s %d\n", | |||
| cmd_src(cmd.convert_src,buf),cmd.convert_arg); | |||
| printf(" scan_end: %s %d\n", | |||
| cmd_src(cmd.scan_end_src,buf),cmd.scan_end_arg); | |||
| printf(" stop: %s %d\n", | |||
| cmd_src(cmd.stop_src,buf),cmd.stop_arg); | |||
| } | |||
| } | |||
| static void get_command_stuff(comedi_t *it,int s) | |||
| { | |||
| comedi_cmd cmd; | |||
| char buf[100]; | |||
| if(comedi_get_cmd_src_mask(it,s,&cmd)<0){ | |||
| printf("not supported\n"); | |||
| }else{ | |||
| printf("\n"); | |||
| printf(" start: %s\n",cmd_src(cmd.start_src,buf)); | |||
| printf(" scan_begin: %s\n",cmd_src(cmd.scan_begin_src,buf)); | |||
| printf(" convert: %s\n",cmd_src(cmd.convert_src,buf)); | |||
| printf(" scan_end: %s\n",cmd_src(cmd.scan_end_src,buf)); | |||
| printf(" stop: %s\n",cmd_src(cmd.stop_src,buf)); | |||
| probe_max_1chan(it,s); | |||
| } | |||
| } | |||
| static int devOpen(long n) | |||
| { | |||
| char filename[24]; | |||
| if (n == n_it) return 1; /* deja fait */ | |||
| n_it=-1; | |||
| sprintf(filename,"/dev/comedi%ld",n); | |||
| if (! (it = comedi_open(filename))) { | |||
| printf("%s : Error access !\n",filename); | |||
| return 0; | |||
| } | |||
| n_it = n; | |||
| return 1; | |||
| } | |||
| #endif /* for _WITH_COMEDILIB */ | |||
| /* *********************************************************************/ | |||
| #include "stackN.h" | |||
| #include "dev.h" | |||
| #include "err.h" | |||
| #define LBUFD 200 | |||
| static char buf[LBUFD]; | |||
| void IF_listDev (void) | |||
| { | |||
| FILE * fd; | |||
| int id,ns; | |||
| char driver[24], nomdev[24]; | |||
| if ((fd = fopen("/proc/comedi","r")) == NULL) | |||
| printf("No devices !\n"); | |||
| else { | |||
| while (fgets(buf,LBUFD,fd) != NULL) { | |||
| ns = -1; | |||
| sscanf(buf,"%d: %s %s %d\n",&id,driver,nomdev,&ns); | |||
| if (ns != -1) | |||
| printf(" %2d : %-20s driver %-20s %4d subdevices\n",id,nomdev,driver,ns); | |||
| } | |||
| } | |||
| } | |||
| #ifdef _WITH_COMEDILIB | |||
| static void show_subdev(int i, int V) | |||
| { | |||
| int j, type, chan,n_chans, n_ranges, subdev_flags; | |||
| comedi_range *rng; | |||
| printf("subdevice %d :",i); | |||
| type = comedi_get_subdevice_type(it, i); | |||
| printf(" type %d (%s) ",type,subdev_types[type]); | |||
| if (type==COMEDI_SUBD_UNUSED) return; | |||
| subdev_flags = comedi_get_subdevice_flags(it, i); | |||
| printf("- flags 0x%08x\n",subdev_flags); | |||
| n_chans=comedi_get_n_channels(it,i); | |||
| printf(" nb of channels : %d",n_chans); | |||
| if(!comedi_maxdata_is_chan_specific(it,i)){ | |||
| printf(" - max data value = %lu\n",(unsigned long)comedi_get_maxdata(it,i,0)); | |||
| } else { | |||
| printf("\n max data value: (channel specific)\n"); | |||
| for(chan=0;chan<n_chans;chan++){ | |||
| printf(" chan%d: %lu\n",chan, | |||
| (unsigned long)comedi_get_maxdata(it,i,chan)); | |||
| } | |||
| } | |||
| if (V >= n_chans) { | |||
| printf("Error : CId must be < %d !!\n", n_chans); | |||
| return; | |||
| } | |||
| printf(" ranges (Volts) :"); | |||
| if(!comedi_range_is_chan_specific(it,i)){ | |||
| n_ranges=comedi_get_n_ranges(it,i,0); | |||
| printf(" all chans:"); | |||
| for(j=0;j<n_ranges;j++){ | |||
| rng=comedi_get_range(it,i,0,j); | |||
| printf(" [%g,%g]",rng->min,rng->max); | |||
| } | |||
| printf("\n"); | |||
| } else { | |||
| printf("\n"); | |||
| for (chan=0;chan<n_chans;chan++){ | |||
| n_ranges=comedi_get_n_ranges(it,i,chan); | |||
| printf(" chan%d:",chan); | |||
| for (j=0;j<n_ranges;j++){ | |||
| rng=comedi_get_range(it,i,chan,j); | |||
| printf(" [%g,%g]",rng->min,rng->max); | |||
| } | |||
| printf("\n"); | |||
| } | |||
| } | |||
| printf(" command : "); | |||
| get_command_stuff(it,i); | |||
| } | |||
| #endif | |||
| void IF_showDev (void) | |||
| { | |||
| long n; | |||
| if (!getParLong(&n)) return; | |||
| #ifdef _WITH_COMEDILIB | |||
| int i, n_subdev; | |||
| if (! devOpen(n)) return; | |||
| printf("overall info:\n"); | |||
| printf(" version code : 0x%06x\n", comedi_get_version_code(it)); | |||
| printf(" driver name : %s\n", comedi_get_driver_name(it)); | |||
| printf(" board name : %s\n", comedi_get_board_name(it)); | |||
| printf(" nb subdevices : %d\n", n_subdev = comedi_get_n_subdevices(it)); | |||
| for (i = 0; i < n_subdev; i++) { | |||
| show_subdev(i,0); | |||
| } | |||
| #else | |||
| messErr(17); | |||
| #endif | |||
| } | |||
| void IF_devShowDflt (void) | |||
| { | |||
| #ifdef _WITH_COMEDILIB | |||
| int n_subdev; | |||
| printf("Default : DId=%d, SId=%d CId=%d\n", DFL_did, DFL_sid, DFL_cid); | |||
| if (! devOpen(DFL_did)) return; | |||
| printf("overall info:\n"); | |||
| printf(" version code : 0x%06x\n", comedi_get_version_code(it)); | |||
| printf(" driver name : %s\n", comedi_get_driver_name(it)); | |||
| printf(" board name : %s\n", comedi_get_board_name(it)); | |||
| printf(" nb subdevices : %d\n", n_subdev = comedi_get_n_subdevices(it)); | |||
| if (DFL_sid < n_subdev) | |||
| show_subdev(DFL_sid,DFL_cid); | |||
| else printf("Error : SId must be < %d !!\n", n_subdev); | |||
| #else | |||
| messErr(17); | |||
| #endif | |||
| } | |||
| static void dev_read(int did, int sid, int cid) | |||
| { | |||
| #ifdef _WITH_COMEDILIB | |||
| lsampl_t data; | |||
| if (! devOpen(did)) return; | |||
| if (comedi_data_read(it,sid,cid,0,0,&data) < 0) | |||
| messErr(18); | |||
| else putLong((long)data); | |||
| #else | |||
| messErr(17); | |||
| #endif | |||
| } | |||
| void IF_devDflR (void) | |||
| { | |||
| dev_read(DFL_did, DFL_sid, DFL_cid); | |||
| } | |||
| void IF_devRead (void) | |||
| { | |||
| long n, sd, ch; | |||
| if (!getParLong(&ch)) return; | |||
| if (!getParLong(&sd)) return; | |||
| if (!getParLong(&n)) return; | |||
| dev_read(n, sd, ch); | |||
| } | |||
| void IF_devDflt (void) | |||
| { | |||
| long n, sd, ch; | |||
| if (!getParLong(&ch)) return; | |||
| if (!getParLong(&sd)) return; | |||
| if (!getParLong(&n)) return; | |||
| DFL_did=n; | |||
| DFL_sid=sd; | |||
| DFL_cid=ch; | |||
| } | |||
| static void dev_write(int did, int sid, int cid, long d) | |||
| { | |||
| #ifdef _WITH_COMEDILIB | |||
| lsampl_t data; | |||
| if (! devOpen(did)) return; | |||
| data = (lsampl_t)d; | |||
| if (comedi_data_write(it,sid,cid,0,0,data) < 0) | |||
| messErr(18); | |||
| #else | |||
| messErr(17); | |||
| #endif | |||
| } | |||
| void IF_devWrite (void) | |||
| { | |||
| long d, n, sd, ch; | |||
| if (!getParLong(&ch)) return; | |||
| if (!getParLong(&sd)) return; | |||
| if (!getParLong(&n)) return; | |||
| if (!getParLong(&d)) return; | |||
| dev_write(n, sd, ch, d); | |||
| return; | |||
| } | |||
| void IF_devDflW (void) | |||
| { | |||
| long d; | |||
| if (!getParLong(&d)) return; | |||
| dev_write(DFL_did, DFL_sid, DFL_cid, d); | |||
| return; | |||
| } | |||
| @@ -0,0 +1,30 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* dev.h */ | |||
| #ifndef __NIFE_DEV_H__ | |||
| #define __NIFE_DEV_H__ | |||
| extern void IF_listDev (void); | |||
| extern void IF_showDev (void); | |||
| extern void IF_devRead (void); | |||
| extern void IF_devWrite (void); | |||
| extern void IF_devDflt (void); | |||
| extern void IF_devShowDflt (void); | |||
| extern void IF_devDflW (void); | |||
| extern void IF_devDflR (void); | |||
| #endif | |||
| @@ -0,0 +1,189 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| #include "conf.h" | |||
| /* err.c */ | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <unistd.h> | |||
| #include "nife.h" | |||
| #include "mth.h" | |||
| #include "err.h" | |||
| #include "histo.h" | |||
| #include "stackF.h" | |||
| #include "stackN.h" | |||
| #include "stackL.h" | |||
| #include "stackC.h" | |||
| char * InExec; | |||
| static int ERROR=0, LASTERR=0; | |||
| static void *ADDRERR=VIDE, *ADDRONE=VIDE; | |||
| void tellOnErr (void*A) | |||
| { | |||
| ADDRONE=A; | |||
| if (A != VIDE) LASTERR=0; | |||
| } | |||
| void majLastErr(void*A) | |||
| { | |||
| /* if (LASTERR != ERROR) {*/ | |||
| LASTERR=ERROR; | |||
| ADDRERR=A; | |||
| /* }*/ | |||
| } | |||
| void razErr(void) | |||
| { | |||
| ERROR=0; | |||
| } | |||
| int noErr(void) | |||
| { | |||
| return ERROR; | |||
| } | |||
| static char *TabErr[] = { | |||
| "No error", | |||
| "no such error", | |||
| "empty stack", | |||
| "sizes are differents", | |||
| "not enought elements on the stack", | |||
| "empty logical stack", | |||
| "empty character stack", | |||
| "empty function stack", | |||
| "function code is present", | |||
| "string too long", | |||
| "command not found", /* 10 */ | |||
| "code type invalid", | |||
| "need one array on top", | |||
| "only allowed in a function code", | |||
| "IF instruction missing", | |||
| "already in function", | |||
| "loading error", | |||
| "no comedilib", | |||
| "invalid argument", | |||
| "not enought elements on the character stack", | |||
| "not enought elements on the logical stack", /* 20 */ | |||
| "function not found", | |||
| "BEGIN instruction missing", | |||
| "empty variable stack", | |||
| "variable not found", | |||
| "not possible in function code", | |||
| "no more task possible", | |||
| "task is running", | |||
| "task not exists", | |||
| "value must be greater than zero", | |||
| "value must be greater than 1", /* 30 */ | |||
| "create socket error", | |||
| "net is off", | |||
| "gethostbyname error, server not found", | |||
| "start server error", | |||
| "net message error", | |||
| "need a scalar on the top", | |||
| "not possible with Universal NetKey", | |||
| "not a Sister Chip System", | |||
| "DO instruction missing", | |||
| "net protocol error", /* 40 */ | |||
| "network system unknown", | |||
| "gnuplot not found", | |||
| "file open error", | |||
| "back compile limit missing", | |||
| "too many loads", | |||
| "label onerr: already found", | |||
| "label end: already found", | |||
| "inside compilation aborted" | |||
| }; | |||
| #define ERR_MAX 48 | |||
| void stopErr(char *M, char *F) | |||
| { | |||
| fprintf(stderr,"ERREUR : %s !!\n",M); | |||
| if (F != NULL) perror(F); | |||
| if (inSonProc) exit(1); | |||
| termReset(); | |||
| exit(1); | |||
| } | |||
| static void traiteErr(int n, char * L) | |||
| { | |||
| ERROR=n; | |||
| if (D_Cod==0) { | |||
| if (ECHOOFF) printf("\n"); | |||
| printf("%s : %s !!\a\n",L,TabErr[n]); | |||
| } | |||
| if (inSonProc) exit(1); | |||
| if (fctEnCours) { | |||
| if (D_Cod==0) printf("Compilation aborted !\n"); | |||
| else | |||
| if (ADDRONE == VIDE) printf("Inside compilation aborted !\n"); | |||
| _MODIF_fctEnCours_(0); | |||
| rmLastFct(); | |||
| } | |||
| if (ADDRONE != VIDE) return; | |||
| if (FD_IN) { | |||
| printf("In loading file %s : line %d !\n", getFDname(),getFDlig()); | |||
| closeFD(); | |||
| } | |||
| if (iTERM) { | |||
| printf("In loading stdin : line %d !\n", getFDlig()); | |||
| close(FD_IN); /* pipe ou autre */ | |||
| dup(iTERM); /* stdin on term */ | |||
| iTERM = 0; | |||
| } | |||
| } | |||
| void messErr(int n) | |||
| { | |||
| char M[50]; | |||
| if ((n < 0) || (n > ERR_MAX)) n = 1; | |||
| sprintf(M,"Error in '%s'",InExec); | |||
| traiteErr(n,M); | |||
| } | |||
| void messErr2(int n, char * M) | |||
| { | |||
| if ((n < 0) || (n > ERR_MAX)) n = 1; | |||
| traiteErr(n,M); | |||
| } | |||
| void IF_NoError(void) | |||
| { | |||
| putLong((long)LASTERR); | |||
| } | |||
| void IF_LibError(void) | |||
| { | |||
| long P; | |||
| getParLong(&P); | |||
| putString(TabErr[(int)P]); | |||
| } | |||
| void IF_IsError(void) | |||
| { | |||
| if (LASTERR) putBool(TRUE); | |||
| else putBool(FALSE); | |||
| } | |||
| void IF_showError(void) | |||
| { | |||
| if (ERROR) | |||
| printf("%s : %s !!\n",InExec,TabErr[ERROR]); | |||
| else | |||
| printf("%s : %s.\n",codByAddr(ADDRERR),TabErr[LASTERR]); | |||
| } | |||
| @@ -0,0 +1,34 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* err.h */ | |||
| #ifndef __NIFE_ERR_H__ | |||
| #define __NIFE_ERR_H__ | |||
| extern char * InExec; | |||
| extern void tellOnErr (void*A); | |||
| extern void razErr(void); | |||
| extern void majLastErr(void*A); | |||
| extern int noErr(void); | |||
| extern void stopErr(char *M, char *NomFctSystem); | |||
| extern void messErr(int N); | |||
| extern void messErr2(int N, char * Lib); | |||
| extern void IF_showError(void); | |||
| extern void IF_IsError(void); | |||
| extern void IF_NoError(void); | |||
| extern void IF_LibError(void); | |||
| #endif | |||
| @@ -0,0 +1,49 @@ | |||
| # test gplot | |||
| # Ci-dessous des exemples d'utilisation des commandes de la librairie gplot.c | |||
| # dont les noms apparaissent dans les "tools" (?libT). | |||
| echo_off | |||
| # creation d'un gplot simple (1 seule courbe) | |||
| " plot1.dat" " Essai de Courbe" gplot | |||
| # ajout d'un texte supplémentaire dans la commande plot | |||
| " smooth csplines, cos(x)" 1 gplotCmd | |||
| # creation d'un plot de 4 courbes | |||
| " plotM.dat" " Essai multi Courbes" 4 gplotM | |||
| # fonction qui ajoute 100 pts dans le gplot no 1, un par seconde. | |||
| # chaque pt est compose du temps (t) en x et de sin(t) en y. | |||
| : test 100 0 do | |||
| time 10000000. / dup sin 2 >array 1 gplotAdd 1 sleep loop ; | |||
| # la meme chose mais en replaçant, c'est a dire en enlevant le pt le plus ancien | |||
| # a chaque fois que l'on en ajoute un. | |||
| : test2 100 0 do | |||
| time 10000000. / dup sin 2 >array 1 gplotRepl 1 sleep loop ; | |||
| # fonction qui ajoute 100 pts dans le gplot no 2, un par seconde. | |||
| # chaque pt est compose de t en x et de sin(t), cos(t), sin2(t), cos2(t) en y. | |||
| : testM | |||
| 100 0 do time 10000000. / dup dup sin swap dup cos swap dup sin dup * swap cos | |||
| dup * 5 >array 2 gplotAdd 1 sleep loop ; | |||
| # la meme chose que testM mais en replaçant, c'est a dire en enlevant le pt le | |||
| # plus ancien a chaque fois que l'on en ajoute un. | |||
| : testM2 | |||
| 100 0 do time 10000000. / dup dup sin swap dup cos swap dup sin dup * swap cos | |||
| dup * 5 >array 2 gplotRepl 1 sleep loop ; | |||
| # Ici on fait en parrallele test ET testM, c'est-à-dire un affichage sur les 2! | |||
| : testG | |||
| 100 0 do time 10000000. / | |||
| dup dup sin 2 >array 1 gplotAdd | |||
| dup dup sin swap dup cos swap dup sin dup * swap cos | |||
| dup * 5 >array 2 gplotAdd 1 sleep loop ; | |||
| # Meme chose que testG en remplaçant. | |||
| : testG2 | |||
| 100 0 do time 10000000. / | |||
| dup dup sin 2 >array 1 gplotRepl | |||
| dup dup sin swap dup cos swap dup sin dup * swap cos | |||
| dup * 5 >array 2 gplotRepl 1 sleep loop ; | |||
| @@ -0,0 +1,21 @@ | |||
| # exemple de Nife RPC | |||
| echo_off | |||
| # 1) Mettre les fichiers rep.nif et rep2.nif dans le repertoire de nife | |||
| # 2) Connecter la machine au reseau (Me netOn) | |||
| # 3) Puis en connecter une autre (par exemple Test) | |||
| # 4) Sur la machine locale faire : load rpc.nif | |||
| # Puis : titi | |||
| # Puis : " rpc2.nif" " Test" netCompile | |||
| # 5) Verifier avec : ?s ?ns | |||
| # 6) Recuperer le resultat et nettoyer le reseau : net> ndrop | |||
| # titi met NetKey a 0xcafe puis fabrique une rampe de 30 elts | |||
| # et l'envoie sur le Net stack | |||
| : titi | |||
| 0xcafe NetKey | |||
| 30 ramp 1 >net | |||
| ; | |||
| @@ -0,0 +1,9 @@ | |||
| # exemple 2 de Nife RPC | |||
| echo_off | |||
| # envoi d'une autre fct titi et execution | |||
| # titi calcule 2sin2(x)/cos(2x) | |||
| : titi | |||
| dup sin dup * 2 * swap 2 * cos / ; | |||
| titi | |||
| @@ -0,0 +1,270 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* foncs.c liste des fonctions systeme */ | |||
| #include "conf.h" | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| #include <signal.h> | |||
| #include <unistd.h> | |||
| #include <time.h> | |||
| #include <sys/time.h> | |||
| #include <sys/resource.h> | |||
| #include <sys/types.h> | |||
| #include <sys/wait.h> | |||
| #include "nife.h" | |||
| #include "mth.h" | |||
| #include "err.h" | |||
| #include "foncs.h" | |||
| #include "histo.h" | |||
| #include "stackN.h" | |||
| #include "stackC.h" | |||
| void IF_exit(void) { _MODIF_RUN_(0); } | |||
| long long Nife_time(struct timeval tv) | |||
| { | |||
| long long v; | |||
| /* il y a 10958 jours entre le 1/1/1970 et le 1/1/2000 */ | |||
| v=(long long)((long)tv.tv_usec) + | |||
| ((long long)(tv.tv_sec - 946771200L)*(long long)1000000); | |||
| return v; | |||
| } | |||
| void IF_time(void) | |||
| { | |||
| struct timeval tv; | |||
| long long v; | |||
| gettimeofday(&tv,NULL); | |||
| v=Nife_time(tv); | |||
| putLong(v); | |||
| } | |||
| void IF_sleep(void) | |||
| { | |||
| long t; | |||
| if (getParLong(&t)) sleep((unsigned int)t); | |||
| } | |||
| void IF_sh (void) | |||
| { | |||
| int pid; | |||
| char * Sh; | |||
| _MODIF_WAITPID_(1); | |||
| if ((pid = fork()) == -1) stopErr("IF_sh","fork"); | |||
| if (pid == 0) { /* fils */ | |||
| _MODIF_inSonProc_(1); | |||
| termReset(); | |||
| dup2(1,2); | |||
| if ((Sh=getenv("SHELL")) == NULL) execlp("sh", "nife-sh",NULL); | |||
| else execlp(Sh,"nife-sh",NULL); | |||
| perror("sh"); | |||
| exit(1); | |||
| } | |||
| waitpid(pid,NULL,0); | |||
| _MODIF_WAITPID_(0); | |||
| termInit(); | |||
| printf("Come back to nife !\n"); | |||
| } | |||
| void runCommand (char * com) | |||
| { | |||
| int pid; | |||
| char * Sh; | |||
| _MODIF_WAITPID_(1); | |||
| if ((pid = fork()) == -1) stopErr("runComm","fork"); | |||
| if (pid == 0) { /* fils */ | |||
| _MODIF_inSonProc_(1); | |||
| termReset(); | |||
| if ((Sh=getenv("SHELL")) == NULL) execlp("sh","sh","-c",com,NULL); | |||
| else execlp(Sh,"sh","-c",com,NULL); | |||
| perror("sh"); | |||
| exit(1); | |||
| } | |||
| waitpid(pid,NULL,0); | |||
| _MODIF_WAITPID_(0); | |||
| termInit(); | |||
| printf("\n"); | |||
| } | |||
| void IF_toCsv(void) | |||
| { | |||
| int i, lib=0; | |||
| long t; | |||
| char *f, *s, *e; | |||
| void *M; | |||
| FILE * fd; | |||
| if (getParLong(&t)) { | |||
| if (!isNTabSameDim((int)t)) { | |||
| messErr(3); | |||
| return; | |||
| } | |||
| if (!isNString(1)) { | |||
| messErr(6); | |||
| return; | |||
| } | |||
| f = getString(); | |||
| s = f; | |||
| e = f + strlen(f); | |||
| while (s < e) { | |||
| if (*s == ';') { *s= '\0'; s++; break; } | |||
| s++; | |||
| } | |||
| if (strlen(s) > 0) lib=1; | |||
| if ((M = malloc(strlen(f)+5)) == NULL) stopErr("IF_toCsv","malloc"); | |||
| sprintf((char*)M,"%s.csv",f); | |||
| fd = fopen((char*)M,"w+"); | |||
| free(M); | |||
| for (i=0; i<(int)t; i++) { | |||
| if (lib) { | |||
| if (strlen(s) > 0) { | |||
| f = s; | |||
| while (s < e) { | |||
| if (*s == ';') { *s= '\0'; s++; break; } | |||
| s++; | |||
| } | |||
| fprintf(fd,"%s;",f); | |||
| } else | |||
| fprintf(fd,"lig%d;",i+1); | |||
| } | |||
| IF_inFile_1d(fd, ';', 1); | |||
| } | |||
| fclose(fd); | |||
| free((void*)f); | |||
| } | |||
| } | |||
| static void lanceXgraph(int mode, int tit) | |||
| { | |||
| FILE * fd; | |||
| char nf[30]; | |||
| sprintf(nf,".nife/Nife_%d.gx",getpid()); | |||
| fd = fopen(nf,"w+"); | |||
| fprintf(fd,"Device: Postscript\nDisposition: To File\nTitleText: "); | |||
| if (tit) fprintf(fd,"%s\n",getString()); | |||
| else fprintf(fd,"Data from Nife %s\n",VERSION); | |||
| if (mode) IF_inFile_2(fd); else IF_inFile_1(fd); | |||
| fclose(fd); | |||
| execlp("xgraph","xgraph",nf,NULL); | |||
| } | |||
| static void gen_Xgraph (int m, int t) | |||
| { | |||
| int pid; | |||
| if (m) { | |||
| if (!isNTabSameDim(2)) { | |||
| messErr(3); | |||
| return; | |||
| } | |||
| } else { | |||
| if (!is1Tab()) { | |||
| messErr(12); | |||
| return; | |||
| } | |||
| } | |||
| if (t) { | |||
| if (!isNString(1)) { | |||
| messErr(6); | |||
| return; | |||
| } | |||
| } | |||
| if ((pid = fork()) == -1) stopErr("IF_yXgraph","fork"); | |||
| if (pid == 0) { /* fils */ | |||
| _MODIF_inSonProc_(1); | |||
| setsid(); | |||
| lanceXgraph(m,t); | |||
| perror("xgraph"); | |||
| exit(1); | |||
| } | |||
| IF_drop(); | |||
| if (m) IF_drop(); | |||
| if (t) IF_dropC(); | |||
| /* test if xgraph is executed */ | |||
| if (kill(pid,SIGWINCH) == -1) | |||
| if (errno == ESRCH) messErr(10); | |||
| } | |||
| void IF_yXgraph (void) | |||
| { | |||
| gen_Xgraph(0,0); | |||
| } | |||
| void IF_ytXgraph (void) | |||
| { | |||
| gen_Xgraph(0,1); | |||
| } | |||
| void IF_xyXgraph (void) | |||
| { | |||
| gen_Xgraph(1,0); | |||
| } | |||
| void IF_xytXgraph (void) | |||
| { | |||
| gen_Xgraph(1,1); | |||
| } | |||
| static void printLimits(char * M,char *U, struct rlimit * L) | |||
| { | |||
| printf("Limites %-10s : ",M); | |||
| if (L->rlim_cur == RLIM_INFINITY) printf("infini"); | |||
| else printf("%ld",L->rlim_cur); | |||
| if (L->rlim_cur == RLIM_INFINITY) printf("/infini"); | |||
| else printf("/%ld",L->rlim_cur); | |||
| printf(" %s\n",U); | |||
| } | |||
| void IF_resUsage(void) | |||
| { | |||
| struct rusage R; | |||
| struct rlimit L; | |||
| if (getrusage(RUSAGE_SELF,&R) == 0) { | |||
| printf("Temps processus : %ld.%.6ld\n",R.ru_utime.tv_sec,R.ru_utime.tv_usec); | |||
| printf("Temps système : %ld.%.6ld\n",R.ru_utime.tv_sec,R.ru_utime.tv_usec); | |||
| /* non significatif ************** | |||
| printf("Taille résidente maximale : %ld\n",R.ru_maxrss); | |||
| printf("Taille des données non partagées : %ld\n",R.ru_idrss); | |||
| printf("Taille de Pile : %ld\n",R.ru_isrss); | |||
| **********************************/ | |||
| printf("Demandes de pages : %ld\n",R.ru_minflt); | |||
| printf("Nombre de fautes de pages : %ld\n",R.ru_majflt); | |||
| printf("Changts de contexte volontaires : %ld\n",R.ru_nvcsw); | |||
| printf("Changts de contexte involontaires: %ld\n",R.ru_nivcsw); | |||
| } else perror("getrusage"); | |||
| /* | |||
| if (getrlimit(RLIMIT_AS,&L) == 0) { printLimits("AS","octets",&L); | |||
| } else perror("getrlimit AS"); | |||
| ***************/ | |||
| if (getrlimit(RLIMIT_CORE,&L) == 0) { printLimits("CORE","octets",&L); | |||
| } else perror("getrlimit CORE"); | |||
| if (getrlimit(RLIMIT_CPU,&L) == 0) { printLimits("CPU","sec.",&L); | |||
| } else perror("getrlimit CPU"); | |||
| /* not in Solaris *************** | |||
| if (getrlimit(RLIMIT_RSS,&L) == 0) { printLimits("RSS","pages",&L); | |||
| } else perror("getrlimit RSS"); */ | |||
| if (getrlimit(RLIMIT_DATA,&L) == 0) { printLimits("DATA","pages",&L); | |||
| } else perror("getrlimit DATA"); | |||
| if (getrlimit(RLIMIT_STACK,&L) == 0) { printLimits("STACK","octets",&L); | |||
| } else perror("getrlimit STACK"); | |||
| /* not in Solaris *************** | |||
| if (getrlimit(RLIMIT_NPROC,&L) == 0) { printLimits("NPROC","processus",&L); | |||
| } else perror("getrlimit NPROC"); */ | |||
| if (getrlimit(RLIMIT_NOFILE,&L) == 0) { printLimits("NOFILE","file desc.",&L); | |||
| } else perror("getrlimit NOFILE"); | |||
| } | |||
| @@ -0,0 +1,35 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* liste des fonctions systeme */ | |||
| #ifndef __NIFE_FONCS_H__ | |||
| #define __NIFE_FONCS_H__ | |||
| extern long long Nife_time(struct timeval); | |||
| extern void IF_exit(void); | |||
| extern void IF_time(void); | |||
| extern void IF_sleep(void); | |||
| extern void IF_sh(void); | |||
| extern void IF_toCsv(void); | |||
| extern void IF_yXgraph(void); | |||
| extern void IF_ytXgraph(void); | |||
| extern void IF_xyXgraph(void); | |||
| extern void IF_xytXgraph(void); | |||
| extern void IF_resUsage(void); | |||
| extern void runCommand( char * C); | |||
| #endif | |||
| @@ -0,0 +1,370 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* liste des fonctions liees a gnuplot */ | |||
| /* gplot.c */ | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| #include <signal.h> | |||
| #include <unistd.h> | |||
| #include <sys/types.h> | |||
| #include <sys/stat.h> | |||
| #include <fcntl.h> | |||
| #include "gplot.h" | |||
| #include "nife.h" | |||
| #include "mth.h" | |||
| #include "stackN.h" | |||
| #include "stackC.h" | |||
| #include "err.h" | |||
| #define GPO_STD 0 /* standard */ | |||
| #define GPO_MRG 0x100 /* merge */ | |||
| struct GPlot { | |||
| short id; | |||
| short op;/* options + nb plots */ | |||
| FILE *p; /* pipe */ | |||
| char *t; /* title */ | |||
| char *f; /* file */ | |||
| char *a; /* command append */ | |||
| int pid; /* pid */ | |||
| void *n; /* next */ | |||
| }; | |||
| static short GPid=0; | |||
| static void *stackGP = VIDE; | |||
| /* file manipulations */ | |||
| static void GPF_init(char *f) | |||
| { | |||
| int fd; | |||
| chdir(".nife"); | |||
| if ((fd = creat(f,0600)) != -1) { | |||
| write(fd,"# Nife auto-generated GNUplot file !\n",37); | |||
| close(fd); | |||
| } | |||
| chdir(".."); | |||
| } | |||
| static void GPF_del(char *f) | |||
| { | |||
| unlink(f); | |||
| } | |||
| static void GPF_supL(char * f, int n) | |||
| { | |||
| void * M; | |||
| char *f2; | |||
| char l[512]; | |||
| FILE *fIn, *fOut; | |||
| int i=1; | |||
| if ((M = malloc(strlen(f)+5)) == NULL) stopErr("GPF_supL","malloc"); | |||
| f2 = (char*)M; | |||
| strcpy(f2,f); | |||
| f2 += strlen(f); | |||
| strcpy(f2,".wni"); | |||
| f2 = (char*)M; | |||
| if ((fIn = fopen(f, "r")) != NULL) { | |||
| if ((fOut = fopen(f2, "w")) != NULL) { | |||
| while (fgets(l, sizeof(l), fIn)) { | |||
| if (i != n) fputs(l, fOut); | |||
| i++; | |||
| } | |||
| fclose(fOut); | |||
| } | |||
| fclose(fIn); | |||
| rename(f2, f); | |||
| } | |||
| free(M); | |||
| } | |||
| /* struct GPlot functions */ | |||
| static void eraseGP(struct GPlot *F) | |||
| { | |||
| GPF_del(F->f); | |||
| free((void*)F->t); | |||
| free((void*)F->f); | |||
| if (F->a != NULL) free((void*)F->a); | |||
| free((void*)F); | |||
| } | |||
| static void GP_initial(struct GPlot * N) | |||
| { | |||
| fprintf(N->p, "set term x11 title \"Nife GPlot %d\" size 400,300\n", N->id); | |||
| fprintf(N->p, "unset mouse\n"); | |||
| } | |||
| static void GP_create(short op, char *T, char *F) | |||
| { | |||
| int pid, p[2]; | |||
| void * M; | |||
| struct GPlot *N; | |||
| if ((M = malloc(sizeof(struct GPlot)))==NULL) stopErr("GP_create","malloc"); | |||
| N = (struct GPlot*)M; | |||
| N->id = ++GPid; | |||
| N->op = op; | |||
| N->t = T; | |||
| N->f = F; | |||
| N->a = NULL; | |||
| N->n = stackGP; | |||
| GPF_init(N->f); | |||
| /* Old method ********** | |||
| N->p = popen("gnuplot -p -raise","w"); | |||
| *********/ | |||
| if (pipe(p) != 0) stopErr("GP_create","pipe"); | |||
| N->p = fdopen(p[1], "w"); /* w side */ | |||
| if ((pid = fork()) == -1) { | |||
| fprintf(stderr,"GP_create : error fork !\n"); | |||
| eraseGP(N); | |||
| } else { | |||
| if (pid == 0) { /* fils */ | |||
| dup2(p[0],0); | |||
| close(p[0]); | |||
| close(p[1]); | |||
| _MODIF_inSonProc_(1); | |||
| setsid(); | |||
| execlp("gnuplot", "Nife_gplot", "-p", "-raise", NULL); | |||
| perror("gnuplot"); | |||
| exit(1); | |||
| } else { | |||
| N->pid = pid; | |||
| close(p[0]); | |||
| stackGP = M; | |||
| GP_initial(N); | |||
| } | |||
| } | |||
| } | |||
| static void GP_del(short id) | |||
| { | |||
| void ** PNext; | |||
| struct GPlot * N; | |||
| PNext = &stackGP; | |||
| while (*PNext != VIDE) { | |||
| N = (struct GPlot*) *PNext; | |||
| if (N->id == id) { | |||
| *PNext = N->n; | |||
| /* stop gnuplot */ | |||
| fprintf(N->p,"exit\n"); | |||
| fflush(N->p); | |||
| kill(N->pid,SIGKILL); | |||
| eraseGP(N); | |||
| return; | |||
| } | |||
| PNext = &N->n; | |||
| } | |||
| messErr(42); | |||
| } | |||
| void IF_delAllGP(void) | |||
| { | |||
| struct GPlot * N; | |||
| while (stackGP != VIDE) { | |||
| N = (struct GPlot*) stackGP; | |||
| stackGP = N->n; | |||
| /* stop gnuplot */ | |||
| fprintf(N->p,"exit\n"); | |||
| fflush(N->p); | |||
| kill(N->pid,SIGKILL); | |||
| eraseGP(N); | |||
| } | |||
| GPid=0; | |||
| } | |||
| static struct GPlot * GP_getPlot(short id) | |||
| { | |||
| void ** PNext; | |||
| struct GPlot * N; | |||
| PNext = &stackGP; | |||
| while (*PNext != VIDE) { | |||
| N = (struct GPlot*) *PNext; | |||
| if (N->id == id) { | |||
| return N; | |||
| } | |||
| PNext = &N->n; | |||
| } | |||
| messErr(42); | |||
| return NULL; | |||
| } | |||
| static void GP_plot(struct GPlot * N) | |||
| { | |||
| int i; | |||
| fprintf(N->p, "set term x11 title \"Nife GPlot %d\"\n", N->id); | |||
| fprintf(N->p, "plot "); | |||
| for (i=0; i<(N->op&0xFF); i++) { | |||
| if (i) fprintf(N->p,", "); | |||
| fprintf(N->p,"\"%s\" using 1:%d title \"",N->f, i+2); | |||
| if (i) fprintf(N->p,"col %d",i+1); | |||
| else fprintf(N->p,"%s",N->t); | |||
| fprintf(N->p,"\" with lines "); | |||
| if (N->a != NULL) fprintf(N->p,"%s",N->a); | |||
| } | |||
| fprintf(N->p,"\n"); | |||
| fflush(N->p); | |||
| } | |||
| static void GP_updApp(short id, char * a) | |||
| { | |||
| struct GPlot * N; | |||
| if ((N = GP_getPlot(id)) != NULL) { | |||
| if (N->a != NULL) free((void*)N->a); | |||
| N->a = a; | |||
| /* redraw gnuplot */ | |||
| GP_plot(N); | |||
| return; | |||
| } | |||
| free((void*)a); | |||
| } | |||
| static void GP_addData(short id) | |||
| { | |||
| struct GPlot * N; | |||
| FILE *fd; | |||
| if ((N = GP_getPlot(id)) != NULL) { | |||
| /* Add data to file */ | |||
| fd = fopen(N->f,"a"); | |||
| IF_inFile_1d(fd, ' ', 0); | |||
| fclose(fd); | |||
| /* redraw gnuplot */ | |||
| GP_plot(N); | |||
| } | |||
| } | |||
| static void GP_replData(short id) | |||
| { | |||
| struct GPlot * N; | |||
| FILE *fd; | |||
| if ((N = GP_getPlot(id)) != NULL) { | |||
| /* delete the second line */ | |||
| GPF_supL(N->f,2); | |||
| /* Add data to file */ | |||
| fd = fopen(N->f,"a"); | |||
| IF_inFile_1d(fd, ' ', 0); | |||
| fclose(fd); | |||
| /* redraw gnuplot */ | |||
| GP_plot(N); | |||
| } | |||
| } | |||
| void IF_gplot_new(void) | |||
| { | |||
| char *t, *f; | |||
| if (!isNString(2)) { | |||
| messErr(6); | |||
| return; | |||
| } | |||
| t = getString(); | |||
| f = getString(); | |||
| GP_create(GPO_STD|1,t,f); | |||
| } | |||
| void IF_gplot_newM(void) | |||
| { | |||
| char *t, *f; | |||
| long n; | |||
| if (getParLong(&n)) { | |||
| if (!isNString(2)) { | |||
| messErr(6); | |||
| return; | |||
| } | |||
| t = getString(); | |||
| f = getString(); | |||
| GP_create(GPO_STD|(short)n,t,f); | |||
| } | |||
| } | |||
| void IF_gplot_del(void) | |||
| { | |||
| long t; | |||
| if (getParLong(&t)) { | |||
| GP_del((short)t); | |||
| } | |||
| } | |||
| void IF_gplot_clear(void) | |||
| { | |||
| long t; | |||
| struct GPlot * N; | |||
| if (getParLong(&t)) { | |||
| if ((N = GP_getPlot((short)t)) != NULL) { | |||
| GPF_init(N->f); | |||
| /* redraw gnuplot */ | |||
| GP_plot(N); | |||
| } | |||
| } | |||
| } | |||
| void IF_gplot_commapp(void) | |||
| { | |||
| long t; | |||
| char *a; | |||
| if (getParLong(&t)) { | |||
| if (!isNString(1)) { | |||
| messErr(6); | |||
| return; | |||
| } | |||
| a = getString(); | |||
| GP_updApp((short)t,a); | |||
| } | |||
| } | |||
| void IF_gplot_append(void) | |||
| { | |||
| long t; | |||
| if (getParLong(&t)) { | |||
| if (!is1Tab()) { | |||
| messErr(12); | |||
| return; | |||
| } | |||
| GP_addData((short)t); | |||
| } | |||
| } | |||
| void IF_gplot_replace(void) | |||
| { | |||
| long t; | |||
| if (getParLong(&t)) { | |||
| if (!is1Tab()) { | |||
| messErr(12); | |||
| return; | |||
| } | |||
| GP_replData((short)t); | |||
| } | |||
| } | |||
| void IF_show_stackGP(void) | |||
| { | |||
| void * Next; | |||
| struct GPlot * N; | |||
| if (stackGP != VIDE) | |||
| printf(" id |NbP| filename | Title | Options\n"); | |||
| Next = stackGP; | |||
| while (Next != VIDE) { | |||
| N = (struct GPlot*) Next; | |||
| printf("%5d|%3d|%-12s|%-25s|%s\n",N->id,N->op&0xFF,N->f, N->t, N->a); | |||
| Next = N->n; | |||
| } | |||
| printf("<end of GNUPlot list>\n"); | |||
| } | |||
| @@ -0,0 +1,31 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* liste des fonctions liees a gnuplot */ | |||
| #ifndef __NIFE_GPLOT_H__ | |||
| #define __NIFE_GPLOT_H__ | |||
| extern void IF_delAllGP(void); | |||
| extern void IF_gplot_new(void); | |||
| extern void IF_gplot_newM(void); | |||
| extern void IF_gplot_del(void); | |||
| extern void IF_gplot_clear(void); | |||
| extern void IF_gplot_commapp(void); | |||
| extern void IF_gplot_append(void); | |||
| extern void IF_gplot_replace(void); | |||
| extern void IF_show_stackGP(void); | |||
| #endif | |||
| @@ -0,0 +1,55 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* help.c */ | |||
| #include <stdio.h> | |||
| #include <string.h> | |||
| #include "help.h" | |||
| #include "nife.h" | |||
| #define LHLP 200 /* longueur MAX des lignes du fichier hlp */ | |||
| static char buf[LHLP]; | |||
| void helpStd(char * L) | |||
| { | |||
| FILE * fd; | |||
| int debut=0,l; | |||
| dropTrSuite(); | |||
| if ((fd = fopen("nife.hlp","r")) == NULL) { | |||
| perror("help file"); | |||
| return; | |||
| } else { | |||
| while (fgets(buf,LHLP,fd) != NULL) { | |||
| if (debut) { | |||
| if (buf[0] != ' ') break; | |||
| } else { | |||
| if (buf[0] == ' ') continue; | |||
| l=strlen(L); | |||
| if (strncmp(L,buf,l)!=0) continue; | |||
| if (buf[l]!=' ') continue; | |||
| debut=1; | |||
| } | |||
| printf("%s",buf); | |||
| } | |||
| } | |||
| if (debut==0) printf("No help find !\n"); | |||
| fclose(fd); | |||
| } | |||
| void IF_help(void) | |||
| { | |||
| putTrSuite(helpStd); | |||
| } | |||
| @@ -0,0 +1,23 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* help.h */ | |||
| #ifndef __NIFE_HELP_H__ | |||
| #define __NIFE_HELP_H__ | |||
| extern void IF_help(void); | |||
| #endif | |||
| @@ -0,0 +1,460 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* histo.c */ | |||
| #include "conf.h" | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| #include <signal.h> | |||
| #include <sys/types.h> | |||
| #include <sys/wait.h> | |||
| #include <sys/stat.h> | |||
| #include <fcntl.h> | |||
| #include <termios.h> | |||
| #include <unistd.h> | |||
| #include "histo.h" | |||
| #include "nife.h" | |||
| #include "mth.h" | |||
| #include "err.h" | |||
| #include "lib.h" | |||
| #include "debug.h" | |||
| #define HISTOMAX 100 | |||
| static char * HIST[HISTOMAX]; | |||
| static int iH=0, iHt, iHl, iHFull=0; | |||
| #define FDMAX 128 | |||
| static int iFD=0; | |||
| static int FD_T[FDMAX], FD_L[FDMAX]; /* fd table and line numbers */ | |||
| static void *FD_N[FDMAX]; | |||
| void IF_showFD(void) | |||
| { | |||
| printf("iFD=%d FD_T=%d FD_L=%d\n",iFD, FD_T[iFD], FD_L[iFD]); | |||
| } | |||
| void addFD(int fd, char*S) | |||
| { | |||
| void *M; | |||
| iFD++; | |||
| /* printf("addFD iFD=%d\n",iFD); */ | |||
| if (iFD == FDMAX) { | |||
| iFD--; | |||
| messErr(45); | |||
| return; | |||
| } | |||
| _MODIF_FD_IN_(fd); | |||
| FD_T[iFD]=fd; | |||
| FD_L[iFD]=0; | |||
| if ((M = malloc(strlen(S)+1)) == NULL) stopErr("addFD","malloc"); | |||
| #ifdef DEBUG_M | |||
| printf("New String address : %lu \n",(unsigned long)M); | |||
| #endif | |||
| strcpy((char*)M,S); | |||
| FD_N[iFD]=M; | |||
| } | |||
| void closeFD(void) | |||
| { | |||
| /* printf("closeFD iFD=%d\n",iFD); */ | |||
| close(FD_IN); | |||
| free(FD_N[iFD]); | |||
| iFD--; | |||
| if (iFD) _MODIF_FD_IN_(FD_T[iFD]); | |||
| else _MODIF_FD_IN_(0); | |||
| } | |||
| int getFDlig(void) | |||
| { | |||
| return FD_L[iFD]; | |||
| } | |||
| char * getFDname(void) | |||
| { | |||
| return (char*)FD_N[iFD]; | |||
| } | |||
| void incFDlig(void) | |||
| { | |||
| FD_L[iFD]++; | |||
| } | |||
| void razHisto(void) | |||
| { | |||
| int i; | |||
| for(i=0;i<iH;i++) free((void*)HIST[i]); | |||
| iH=0; | |||
| } | |||
| void putHisto(char *C) | |||
| { | |||
| int L; | |||
| if ((L=strlen(C)) == 0) return; | |||
| HIST[iH] = (char*)malloc(L+1); | |||
| if (HIST[iH] != NULL) { | |||
| strcpy(HIST[iH],C); | |||
| iHt=iH; /* depart recherche */ | |||
| iH++; | |||
| iHl=iH; | |||
| if (iH == HISTOMAX) { | |||
| iHFull=1; | |||
| iH=0; | |||
| } | |||
| } | |||
| } | |||
| char * getHisto(char S) /* Sens A remonte, B descend */ | |||
| { | |||
| char * C; | |||
| if (S == 'B') { | |||
| if (iHt == iH-1) { | |||
| iHl=iH; | |||
| printf("\a"); | |||
| fflush(stdout); | |||
| C = NULL; | |||
| } else { | |||
| iHt++; | |||
| if (iHt == HISTOMAX) iHt=0; | |||
| if (iHl==iHt) iHt++; | |||
| C = HIST[iHt]; | |||
| iHl=iHt; | |||
| } | |||
| } else { /* A */ | |||
| if (iHt == -1) { | |||
| iHl=iHt; | |||
| printf("\a"); | |||
| fflush(stdout); | |||
| C = NULL; | |||
| } else { | |||
| if (iHl==iHt) iHt--; | |||
| iHl=iHt; | |||
| C = HIST[iHt--]; | |||
| if ((iHt < 0) && (iHFull)) iHt = HISTOMAX-1; | |||
| } | |||
| } | |||
| return(C); | |||
| } | |||
| static struct termios t0, t1; | |||
| int iTERM=0; | |||
| void termInit(void) | |||
| { | |||
| for (iTERM=0; iTERM<3; iTERM++) { | |||
| if (tcgetattr(iTERM, &t0) != -1) break; | |||
| if (iTERM<2) continue; | |||
| perror("No terminal found ! tcgetattr"); /* sauvegarde */ | |||
| exit(2); | |||
| } | |||
| if (tcgetattr(iTERM, &t1) == -1) perror("tcgetattr"); | |||
| /* cfmakeraw(&t1); */ | |||
| t1.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | |||
| | INLCR | IGNCR | ICRNL | IXON); | |||
| /* t1.c_oflag &= ~OPOST; */ | |||
| t1.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN); | |||
| t1.c_cflag &= ~(CSIZE | PARENB); | |||
| t1.c_cflag |= CS8; | |||
| if (tcsetattr(iTERM, TCSAFLUSH, &t1) == -1) perror("tcsetattr"); /* raw */ | |||
| } | |||
| void termReset(void) | |||
| { | |||
| if (tcsetattr(iTERM, TCSAFLUSH, &t0) == -1) perror("tcsetattr");/*restaure*/ | |||
| } | |||
| void enleve1(char * s) | |||
| { | |||
| char * w; | |||
| w=s; | |||
| while (*w != '\0') *w++ = *(w+1); | |||
| } | |||
| void insertC(char c, char * s) | |||
| { | |||
| char *w; | |||
| w=s; | |||
| while (*w != '\0') w++; | |||
| while (w >= s) { *(w+1) = *w; w--; } | |||
| *s=c; | |||
| } | |||
| int lireLigne(int fd, char *b, char *s, int nc) | |||
| /* fd = file descriptor | |||
| b = adresse du buffer | |||
| nc = nb de caracteres possible (longueur du buffer */ | |||
| { | |||
| char *d, *f, c, c2, c3, *h, *w, *Wl, *rac; | |||
| int n, i, l, ls=0, ins=0, ignTild=0, nbT=0; | |||
| unsigned int j; | |||
| /* printf("lireLigne ... \n"); */ | |||
| d = b; | |||
| f = b+nc; | |||
| while(d<f-ls) { | |||
| if (noErr()) { | |||
| n = -1; | |||
| break; | |||
| } | |||
| /* fprintf(stderr,"d-b=%d ins=%d s=<%s> b=<%s>\n",d-b,ins,s,b); */ | |||
| if ((n=read(fd,d,1)) != 1) break; | |||
| c=*d; | |||
| if (ignTild && (c == '~')) { | |||
| ignTild=0; continue; | |||
| } | |||
| if ((c > 31) && (c < 127)) { /* de SPACE a TILDE */ | |||
| if (!((FD_IN || iTERM) && ECHOOFF)) { | |||
| printf("%c",c); | |||
| if (ins) { | |||
| if (ins==2) /* rewrite */ | |||
| enleve1(s); | |||
| if(*s =='\0') ins=0; | |||
| else { | |||
| printf("%s",s); | |||
| for (j=0; j<strlen(s); j++) printf("\b"); | |||
| } | |||
| } | |||
| } | |||
| fflush(stdout); | |||
| d++; | |||
| } else { | |||
| switch (c) { | |||
| case '\t': /* tab */ | |||
| if (d>b) { | |||
| *d='\0'; | |||
| w=d-1; | |||
| while ((w>b) && (!(isSepa(*w,1)))) w--; | |||
| if (isSepa(*w,0)) w++; | |||
| /* fprintf(stderr,"d-b=%d w=<%s>\n",d-b,w); */ | |||
| if (strlen(w) > 0) { | |||
| j=nbLibBegin(w, &rac); | |||
| /* fprintf(stderr,"j=%d w=<%s>\n",j,w); */ | |||
| if (j==0) printf("\a"); | |||
| else { | |||
| if (j==1) { | |||
| Wl=getLibBegin(w); | |||
| i=strlen(Wl)-strlen(w); | |||
| /* fprintf(stderr,"i=%d Wl=<%s>\n",i,Wl); */ | |||
| if (i>0) { | |||
| strcpy(w,Wl); | |||
| printf("%s ",d); | |||
| d+=i; | |||
| *d++ = ' '; | |||
| if (ins) { | |||
| printf("%s ",s); | |||
| for (j=0; j<(strlen(s)+1); j++) printf("\b"); | |||
| } | |||
| } else { /* XXXX */ | |||
| if (i==0) { | |||
| printf (" "); | |||
| *d++ = ' '; | |||
| } | |||
| } | |||
| } else { | |||
| if (rac != NULL) { | |||
| i=strlen(rac)-strlen(w); | |||
| strcpy(w,rac); | |||
| printf("%s",d); | |||
| d+=i; | |||
| if (ins) { | |||
| printf("%s ",s); | |||
| for (j=0; j<(strlen(s)+1); j++) printf("\b"); | |||
| } | |||
| } else { | |||
| nbT++; | |||
| if (nbT>1) { | |||
| nbT=0; | |||
| printf("\n"); | |||
| listLibBegin(w); | |||
| *d='\0'; | |||
| printf("> %s",b); | |||
| if (ins) { | |||
| printf("%s ",s); | |||
| for (j=0; j<(strlen(s)+1); j++) printf("\b"); | |||
| } | |||
| fflush(stdout); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| fflush(stdout); | |||
| } | |||
| } | |||
| break; | |||
| case '\177': | |||
| if (d>b) { | |||
| printf("\b \b"); | |||
| if (ins) { | |||
| printf("%s ",s); | |||
| for (j=0; j<(strlen(s)+1); j++) printf("\b"); | |||
| } | |||
| fflush(stdout); | |||
| d--; | |||
| } | |||
| break; | |||
| case '\n': | |||
| case '\r': | |||
| if ((FD_IN || iTERM) && ECHOOFF) printf("."); | |||
| else { | |||
| printf("\n"); | |||
| if (ins) { | |||
| if (d+strlen(s) < f) { | |||
| sprintf(d,"%s",s); | |||
| d+=strlen(s); | |||
| } else return(-1); | |||
| } | |||
| } | |||
| goto finBoucle; | |||
| /* gestion des caracteres speciaux */ | |||
| case '\033': /* ESCAPE */ | |||
| ignTild=1; | |||
| read(fd,&c2,1); | |||
| read(fd,&c3,1); | |||
| if (c2 == '[') { | |||
| switch(c3) { | |||
| case '2' : /* Insert */ | |||
| if (ins) { | |||
| ins++; | |||
| if (ins==3) ins=1; | |||
| } | |||
| break; | |||
| case '3' : /* Suppr */ | |||
| if (ins) { | |||
| enleve1(s); | |||
| if(*s =='\0') ins=0; | |||
| printf("%s \b",s); | |||
| for (j=0; j<strlen(s); j++) printf("\b"); | |||
| fflush(stdout); | |||
| } | |||
| break; | |||
| case 'A' : | |||
| case 'B' : | |||
| ins = 0; | |||
| /* efface la ligne en cours */ | |||
| l=d-b; | |||
| for(i=0;i<l;i++) printf("\b \b"); | |||
| fflush(stdout); | |||
| d=b; | |||
| *d = '\0'; | |||
| if ((h=getHisto(c3)) != NULL) { | |||
| strcpy(b,h); | |||
| d=b+strlen(h); | |||
| /* | |||
| printf("\n%s (iH=%d iHt=%d)\n",h,iH,iHt); | |||
| *d='\0'; | |||
| */ | |||
| printf("%s",b); | |||
| fflush(stdout); | |||
| } | |||
| break; | |||
| case 'C' : /* -> */ | |||
| if (ins) { | |||
| *d = *s; | |||
| printf("%c",*d++); | |||
| enleve1(s); | |||
| if(*s =='\0') ins=0; | |||
| else { | |||
| printf("%s",s); | |||
| for (j=0; j<strlen(s); j++) printf("\b"); | |||
| } | |||
| fflush(stdout); | |||
| } | |||
| break; | |||
| case 'D' : /* <- */ | |||
| if (d>b) { | |||
| if (ins==0) { | |||
| ins=1; | |||
| *d='\0'; | |||
| strcpy(s,d-1); | |||
| } else insertC(*(d-1),s); | |||
| d--; | |||
| printf("\b"); | |||
| fflush(stdout); | |||
| } | |||
| break; | |||
| default: | |||
| printf("\nESC [ %d (%c) !\n",(int)c3, c3); | |||
| *d='\0'; | |||
| printf("> %s",b); | |||
| fflush(stdout); | |||
| } | |||
| } else { | |||
| if (c2 == 'O') { | |||
| switch(c3) { | |||
| case 'P' : /* F1 */ | |||
| break; | |||
| case 'Q' : /* F2 */ | |||
| break; | |||
| case 'R' : /* F3 */ | |||
| break; | |||
| case 'S' : /* F4 */ | |||
| break; | |||
| } | |||
| } else { | |||
| printf("\nESC %d %d (%c) !\n",(int)c2,(int)c3, c3); | |||
| *d='\0'; | |||
| printf("> %s",b); | |||
| fflush(stdout); | |||
| } | |||
| } | |||
| break; | |||
| default : | |||
| /* | |||
| printf("\nCar = %d !\n",(int)c); | |||
| *d='\0'; | |||
| printf("> %s",b); | |||
| fflush(stdout); | |||
| */ | |||
| break; | |||
| } | |||
| } | |||
| if (ins) ls = strlen(s); | |||
| } | |||
| finBoucle: | |||
| /* printf("fin lireLigne!\n"); */ | |||
| if ((n<1) && (FD_IN !=0)) { | |||
| closeFD(); /* fichier loader */ | |||
| if (ECHOOFF) printf("\n"); | |||
| return 0; | |||
| } | |||
| if ((n<1) && iTERM) { | |||
| close(FD_IN); /* pipe ou autre */ | |||
| dup(iTERM); /* stdin on term */ | |||
| iTERM = 0; | |||
| if (ECHOOFF) printf("\n"); | |||
| return 0; | |||
| } | |||
| if (d == f) { /* cas du buffer trop petit */ | |||
| /* d=b; | |||
| while (*d != '\n') read(fd,d,1); | |||
| **** not in raw mode */ | |||
| #ifdef DEBUG | |||
| printf("lireLigne : erreur !\n"); | |||
| #endif | |||
| return(-1); | |||
| } | |||
| *d = '\0'; | |||
| #ifdef DEBUG | |||
| printf("lireLigne : retour <%s> !\n",b); | |||
| #endif | |||
| if (!FD_IN) putHisto(b); | |||
| incFDlig(); | |||
| return(strlen(b)); | |||
| } | |||
| @@ -0,0 +1,32 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* histo.h */ | |||
| #ifndef __NIFE_HISTO_H__ | |||
| #define __NIFE_HISTO_H__ | |||
| extern int iTERM; | |||
| extern void IF_showFD(void); | |||
| extern void addFD(int fd, char *N); | |||
| extern void closeFD(void); | |||
| extern int getFDlig(void); | |||
| extern char * getFDname(void); | |||
| extern int lireLigne(int fd, char * buf, char * buf2, int max); | |||
| extern void termInit(void); | |||
| extern void termReset(void); | |||
| #endif | |||
| @@ -0,0 +1,642 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| #include "conf.h" | |||
| /* lib.c librairie de base */ | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| #include "nife.h" | |||
| #include "mth.h" | |||
| #include "err.h" | |||
| #include "histo.h" | |||
| #include "foncs.h" | |||
| #include "tasks.h" | |||
| #include "stackN.h" | |||
| #include "stackL.h" | |||
| #include "stackC.h" | |||
| #include "stackF.h" | |||
| #include "stackV.h" | |||
| #include "libmath.h" | |||
| #include "help.h" | |||
| #include "dev.h" | |||
| #include "net.h" | |||
| #include "gplot.h" | |||
| #include "debug.h" | |||
| /* familles des fonctions */ | |||
| #define F_CORE 1 /* Core */ | |||
| #define F_MATH 2 /* Mathematiques */ | |||
| #define F_PROG 4 /* Programmation, variables, tasks, ... */ | |||
| #define F_TOOL 8 /* External Tools Graphical or others */ | |||
| #define F_DEV 16 /* devices, comedi interfaces, ... */ | |||
| #define F_NET 32 /* networking functions */ | |||
| #define F_USR 64 /* user system functions */ | |||
| struct fonction { | |||
| char * nam; | |||
| void (* fct)(void); | |||
| short typ; /* 0 fct, 1 instruction, 2 externe, 3 usr fct */ | |||
| short fam; /* cf F_xxx ci-dessus */ | |||
| }; | |||
| #define NBFONC 400 | |||
| #define NBCMOY 12 /* nb de car. en moyenne */ | |||
| static char Libelles[NBFONC*NBCMOY], *pLibs=Libelles; | |||
| static struct fonction Fonctions[NBFONC]; | |||
| static int NBFonc=0; | |||
| int InstallOn=0; | |||
| static void IF_INSTALL(void) { InstallOn=1; } | |||
| static void IF_INSTALLF(void) { InstallOn=2; } | |||
| static void IF_INSTALLV(void) { InstallOn=3; } | |||
| /* for dynamic functions */ | |||
| static void IF_DF_INIT(void) { InstallOn=8; } | |||
| static void IF_DF_START(void) { InstallOn=9; } | |||
| static void IF_DF_STOP(void) { InstallOn=10; } | |||
| static void addFoncT(char *l, void (*f)(void), short T, short F) | |||
| { | |||
| char *LMax; | |||
| if (NBFonc >= NBFONC) stopErr("addFonc : NBFONC !",NULL); | |||
| LMax = Libelles + (NBFONC*NBCMOY); | |||
| if (pLibs + strlen(l) + 1 >= LMax) stopErr("addFonc : Libelles !",NULL); | |||
| Fonctions[NBFonc].nam = pLibs; | |||
| Fonctions[NBFonc].typ = T; | |||
| Fonctions[NBFonc].fam = F; | |||
| Fonctions[NBFonc++].fct = f; | |||
| strcpy(pLibs,l); | |||
| pLibs += strlen(l); | |||
| *pLibs++ = '\0'; | |||
| } | |||
| static void addFonc(char *l, void (*f)(void)) | |||
| { | |||
| addFoncT(l,f,0,F_CORE); | |||
| } | |||
| static void addFonM(char *l, void (*f)(void)) | |||
| { | |||
| addFoncT(l,f,0,F_MATH); | |||
| } | |||
| static void addFonP(char *l, void (*f)(void)) | |||
| { | |||
| addFoncT(l,f,0,F_PROG); | |||
| } | |||
| static void addFonG(char *l, void (*f)(void)) | |||
| { | |||
| addFoncT(l,f,0,F_TOOL); | |||
| } | |||
| static void addFonD(char *l, void (*f)(void)) | |||
| { | |||
| addFoncT(l,f,0,F_DEV); | |||
| } | |||
| static void addFonN(char *l, void (*f)(void)) | |||
| { | |||
| addFoncT(l,f,0,F_NET); | |||
| } | |||
| void addFonU(char *l, void *A) | |||
| { | |||
| PFV f; | |||
| f = (PFV)A; | |||
| addFoncT(l,f,0,F_USR); | |||
| } | |||
| static void addFonE(char *l, void (*f)(void), short F) /* External functions */ | |||
| { /* not beetween : and ;*/ | |||
| addFoncT(l,f,2,F); | |||
| } | |||
| static void addInst(char *l, void (*f)(void)) | |||
| { | |||
| addFoncT(l,f,1,F_PROG); | |||
| } | |||
| static char **ListFonc = (char**)NULL; | |||
| static void Show_library(int NbF) | |||
| { | |||
| int i,j=0; | |||
| for (i=0;i<NbF;i++) { | |||
| /* printf("%-13s",Fonctions[i].nam);*/ | |||
| printf("%-13s",ListFonc[i]); | |||
| j++; | |||
| if (j == 6) { | |||
| j=0; | |||
| printf("\n"); | |||
| } | |||
| } | |||
| if (j) printf("\n"); | |||
| } | |||
| static int triList(short F) | |||
| { | |||
| void * M; | |||
| char * T; | |||
| int i,j, NbF; | |||
| if (ListFonc != (char**)NULL) free((void*)ListFonc); | |||
| if ((M = malloc(sizeof(char*)* NBFonc)) == NULL) stopErr("triList","malloc"); | |||
| ListFonc = (char**)M; | |||
| j=0; | |||
| for(i=0;i<NBFonc;i++) { | |||
| if (Fonctions[i].fam & F) ListFonc[j++]=Fonctions[i].nam; | |||
| } | |||
| NbF = j; | |||
| for(i=0; i<NbF-1; i++) /* avant NbF-2 */ | |||
| for(j=i+1; j<NbF; j++) | |||
| if(strcmp(ListFonc[j],ListFonc[i]) < 0) { | |||
| T=ListFonc[i]; ListFonc[i]=ListFonc[j]; ListFonc[j]=T; | |||
| } | |||
| return NbF; | |||
| } | |||
| void listLibBegin(char * b) | |||
| { | |||
| int i,j=0,l,n; | |||
| l=strlen(b); | |||
| n=triList(0xFF); | |||
| for(i=0;i<n;i++) { | |||
| if (strncmp(ListFonc[i],b,l)==0){ | |||
| printf("%-13s",ListFonc[i]); | |||
| j++; | |||
| if (j == 6) { | |||
| j=0; | |||
| printf("\n"); | |||
| } | |||
| } else | |||
| if (strncmp(ListFonc[i],b,l)>0) break; | |||
| } | |||
| if (j) printf("\n"); | |||
| } | |||
| char * getLibBegin(char * b) | |||
| { | |||
| int i,l; | |||
| l=strlen(b); | |||
| for(i=0;i<NBFonc;i++) { | |||
| if (strncmp(Fonctions[i].nam,b,l)==0) break; | |||
| } | |||
| if (i==NBFonc) return NULL; | |||
| return Fonctions[i].nam; | |||
| } | |||
| static char Rac[20]; /* longueur maxi d'une commande */ | |||
| int nbLibBegin(char * b, char ** r) | |||
| { | |||
| int i,n, first=1; | |||
| unsigned int j, l,t=0; | |||
| n=triList(0xFF); | |||
| l=strlen(b); | |||
| *Rac='\0'; | |||
| for (i=0;i<n;i++) { | |||
| if (strncmp(ListFonc[i],b,l)>0) break; | |||
| if (strncmp(ListFonc[i],b,l)==0) { | |||
| t++; | |||
| if (first) { | |||
| strcpy(Rac,ListFonc[i]); | |||
| first=0; | |||
| } else { | |||
| if (strlen(Rac) > l) { | |||
| for(j=l;j<strlen(Rac);j++) | |||
| if (strncmp(Rac,ListFonc[i],j) != 0) break; | |||
| if (j!=strlen(Rac)) Rac[j-1]='\0'; | |||
| else | |||
| if (Rac[j-1] != ListFonc[i][j-1]) Rac[j-1]='\0'; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| if (strlen(Rac) > l) *r = Rac; | |||
| else *r = NULL; | |||
| return(t); | |||
| } | |||
| void IF_show_liball(void) | |||
| { | |||
| Show_library(triList(0xFF)); | |||
| } | |||
| void IF_show_libstd(void) | |||
| { | |||
| Show_library(triList(F_CORE)); | |||
| } | |||
| void IF_show_libmath(void) | |||
| { | |||
| Show_library(triList(F_MATH)); | |||
| } | |||
| void IF_show_libprog(void) | |||
| { | |||
| Show_library(triList(F_PROG)); | |||
| } | |||
| void IF_show_libtools(void) | |||
| { | |||
| Show_library(triList(F_TOOL)); | |||
| } | |||
| void IF_show_libdev(void) | |||
| { | |||
| Show_library(triList(F_DEV)); | |||
| } | |||
| void IF_show_libnet(void) | |||
| { | |||
| Show_library(triList(F_NET)); | |||
| } | |||
| void IF_show_libusr(void) | |||
| { | |||
| Show_library(triList(F_USR)); | |||
| } | |||
| void initLib(void) | |||
| { | |||
| addFonc(".",IF_point); | |||
| addFonc("+",IF_plus); | |||
| addFonc("-",IF_moins); | |||
| addFonc("=",IF_Legal); | |||
| addFonc("<>",IF_Ldiff); | |||
| addFonc(">",IF_Lsup); | |||
| addFonc("<",IF_Linf); | |||
| addFonc(">=",IF_Lsupeg); | |||
| addFonc("<=",IF_Linfeg); | |||
| addFonc("*",IF_mult); | |||
| addFonc("/",IF_div); | |||
| addFonc("neg",IF_neg); | |||
| addFonc("min",IF_min); | |||
| addFonc("max",IF_max); | |||
| addFonc("modulo",IF_modulo); | |||
| addFonc("**",IF_puiss); | |||
| addFonc("[]-sub",IF_subTab); | |||
| addFonc("[]sub",IF_subTabR); | |||
| addFonc("*[]-sub",IF_NsubTab); | |||
| addFonc("*[]sub",IF_NsubTabR); | |||
| addFonc("[]rev",IF_TabRev); | |||
| addFonc("*[]rev",IF_NTabRev); | |||
| addFonc("[]crot",IF_TabTransp); | |||
| addFonc("[]transp",IF_TabTranspN); | |||
| addFonc("[]trot",IF_TabTranspT); | |||
| addFonc("[]>>",IF_TNShiftR); | |||
| addFonc("[]<<",IF_TNShiftL); | |||
| addFonc("*[]>>",IF_NTNShiftR); | |||
| addFonc("*[]<<",IF_NTNShiftL); | |||
| addFonc("[]>",IF_TShiftR); | |||
| addFonc("[]<",IF_TShiftL); | |||
| addFonc("*[]>",IF_NTShiftR); | |||
| addFonc("*[]<",IF_NTShiftL); | |||
| addFonc("[]min",IF_TABMin); | |||
| addFonc("[]max",IF_TABMax); | |||
| addFonc("[]sum",IF_TABSum); | |||
| addFonc("[]prod",IF_TABProd); | |||
| addFonc("[]min/max",IF_TABMinMax); | |||
| addFonc(">array",IF_toArray); | |||
| addFonc(">scalar",IF_toScalar); | |||
| addFonc(">-scalar",IF_toScalarR); | |||
| addFonc("\"",IF_debString); | |||
| addFonc("\"drop",IF_dropC); | |||
| addFonc("\"dup",IF_dupC); | |||
| addFonc("\"over",IF_overC); | |||
| addFonc("\"swap",IF_swapC); | |||
| addFonc("\"type",IF_typeC); | |||
| addFonc("\"cat",IF_catC); | |||
| addFonc("\"cats",IF_catsC); | |||
| addFonc("cr",IF_crC); | |||
| addFonc("\"time",IF_timeC); | |||
| addFonc("\"date",IF_dateC); | |||
| addFonc("sleep",IF_sleep); | |||
| addFonc("sh",IF_sh); | |||
| addFonc("?drop",IF_dropL); | |||
| addFonc("?dup",IF_dupL); | |||
| addFonc("?swap",IF_swapL); | |||
| addFonc("?over",IF_overL); | |||
| addFonc("?t/f",IF_typeL); | |||
| addFonc("and",IF_andL); | |||
| addFonc("or",IF_orL); | |||
| addFonc("xor",IF_xorL); | |||
| addFonP("fdrop",rmLastFct); | |||
| addFonE("del_func",IF_delFct, F_PROG); | |||
| addFonE("del_afunc",IF_delAFct, F_PROG); | |||
| addFonE("del_ofunc",IF_delOFct, F_PROG); | |||
| addFonE("fscan",IF_scanFct, F_PROG); | |||
| addFonc("?cs",IF_show_stackC); | |||
| addFonP("?f",IF_show_stackF); | |||
| /* addFonP("?l",IF_showFD); for debugging */ | |||
| addFonP("?v",IF_show_stackV); | |||
| addFonE("del_var",IF_delVar,F_PROG); | |||
| addFonP("vdrop",rmLastVar); | |||
| addFonP("reset_var",IF_setVarI); | |||
| addFonP(">v",IF_setVarN); | |||
| addFonP("?>v",IF_setVarB); | |||
| addFonP("\">v",IF_setVarC); | |||
| addFonP("in",IF_setVarLF); | |||
| addFonP("install",IF_INSTALL); | |||
| addFonP("install_f",IF_INSTALLF); | |||
| addFonP("install_v",IF_INSTALLV); | |||
| addFonP("df_init",IF_DF_INIT); | |||
| addFonP("df_start",IF_DF_START); | |||
| addFonP("df_stop",IF_DF_STOP); | |||
| addFonc("?ls",IF_show_stackL); | |||
| addFonc("?s",IF_show_stack); | |||
| addFonc("?libs",IF_show_liball); | |||
| addFonc("?lib",IF_show_libstd); | |||
| addFonc("?libM",IF_show_libmath); | |||
| addFonc("?libT",IF_show_libtools); | |||
| addFonc("?libP",IF_show_libprog); | |||
| addFonc("?libD",IF_show_libdev); | |||
| addFonc("?libN",IF_show_libnet); | |||
| addFonc("?libU",IF_show_libusr); | |||
| addFonc("?lasterr",IF_showError); | |||
| addFonc("?err",IF_IsError); | |||
| addFonc("noerr",IF_NoError); | |||
| addFonc("messerr",IF_LibError); | |||
| addFonc("ls_clear",IF_stackL_clear); | |||
| addFonc("cs_clear",IF_stackC_clear); | |||
| addFonc("REAL",IF_REAL); | |||
| addFonc("INTEGER",IF_INTEGER); | |||
| addFonc("echo_on",IF_ECHOON); | |||
| addFonc("echo_off",IF_ECHOFF); | |||
| addFonc("DEBUG_I/O",D_Update); | |||
| addFonc("NBTAB",IF_NBTAB); | |||
| addFonc("NBLIG",IF_NBLIG); | |||
| addFonE("Var",IF_debVar, F_PROG); | |||
| addFonc("\"Var",IF_debVarCS); | |||
| addFonP("var_off",IF_VAROFF); | |||
| addFonP("var_up",IF_VARUP); | |||
| addFonP("var_down",IF_VARDOWN); | |||
| addFonc("?vars",IF_vars); | |||
| addFonc("drop",IF_drop); | |||
| addFonc("dup",IF_dup); | |||
| addFonc("swap",IF_swap); | |||
| addFonc("over",IF_over); | |||
| addFonc("pick",IF_pick); | |||
| addFonc("rot",IF_rot); | |||
| addFonc("unrot",IF_unrot); | |||
| addFonc("roll",IF_roll); | |||
| addFonc("unroll",IF_unroll); | |||
| addFonc("*drop",IF_Ndrop); | |||
| addFonc("*dup",IF_Ndup); | |||
| addFonc("depth",IF_depth); | |||
| addFonc("exit",IF_exit); | |||
| addFonc("false",IF_false); | |||
| addFonc("not",negBool); | |||
| addFonc("ramp",IF_ramp); | |||
| addFonc("dramp",IF_dramp); | |||
| addFonc("rusage",IF_resUsage); | |||
| addFonc("s_clear",IF_stack_clear); | |||
| addFonM("inv",IF_inv); | |||
| addFonM("sqrt",IF_sqrt); | |||
| addFonM("cbrt",IF_cbrt); | |||
| addFonM("round",IF_round); | |||
| addFonM("floor",IF_floor); | |||
| addFonM("ceil",IF_ceil); | |||
| addFonM("sgn",IF_sgn); | |||
| addFonM("abs",IF_abs); | |||
| addFonM("pi",IF_pi); | |||
| addFonM("sin",IF_sin); | |||
| addFonM("cos",IF_cos); | |||
| addFonM("tan",IF_tan); | |||
| addFonM("asin",IF_asin); | |||
| addFonM("acos",IF_acos); | |||
| addFonM("atan",IF_atan); | |||
| addFonM("sinh",IF_sinh); | |||
| addFonM("cosh",IF_cosh); | |||
| addFonM("tanh",IF_tanh); | |||
| addFonM("asinh",IF_asinh); | |||
| addFonM("acosh",IF_acosh); | |||
| addFonM("atanh",IF_atanh); | |||
| addFonM("ln",IF_ln); | |||
| addFonM("log",IF_log); | |||
| addFonM("exp",IF_exp); | |||
| addFonM("j0",IF_j0); | |||
| addFonM("j1",IF_j1); | |||
| addFonM("y0",IF_y0); | |||
| addFonM("y1",IF_y1); | |||
| addFonc("time",IF_time); | |||
| addFonc("true",IF_true); | |||
| addFonc("about",IF_about); | |||
| addFonc("vers",IF_vers); | |||
| addFonE("load",IF_Load, F_PROG); | |||
| addFonP("\"load",IF_LoadCS); | |||
| addFonP("\"exec",IF_ExecCS); | |||
| addFonP("\"execf",IF_ExecCSf); | |||
| addInst("\"execk",IF_EXEK); | |||
| addFonG(">csv",IF_toCsv); | |||
| addFonG("y_xgraph",IF_yXgraph); | |||
| addFonG("yt_xgraph",IF_ytXgraph); | |||
| addFonG("xy_xgraph",IF_xyXgraph); | |||
| addFonG("xyt_xgraph",IF_xytXgraph); | |||
| addFonG("?gp",IF_show_stackGP); | |||
| addFonG("gplot",IF_gplot_new); | |||
| addFonG("gplotM",IF_gplot_newM); | |||
| addFonG("gplotRaz",IF_delAllGP); | |||
| addFonG("gplotCmd",IF_gplot_commapp); | |||
| addFonG("gplotAdd",IF_gplot_append); | |||
| addFonG("gplotRepl",IF_gplot_replace); | |||
| addFonG("del_gplot",IF_gplot_del); | |||
| addFonG("gplotClear",IF_gplot_clear); | |||
| addFonP(":",IF_debFct); | |||
| addFonP(":!",IF_debFctS); | |||
| addFonP("Task",IF_NewTask); | |||
| addFonP("?t",IF_show_Tasks); | |||
| addFonP("?task_run",IF_statusTask); | |||
| addFonP("del_task",IF_delTask); | |||
| addFonP("\"f",IF_execCS); | |||
| addFonP("\"v",IF_execCSv); | |||
| addFonP("\"f?",IF_execCSl); | |||
| addFonP("\"v?",IF_execCSvl); | |||
| addFonP("stop_task",IF_stopTask); | |||
| addFonP("?console",IF_showCons); | |||
| addInst(";",IF_finFct); | |||
| addInst("'",IF_debBackC); | |||
| addInst("`",IF_debBackC1); | |||
| addInst("return",IF_RET); | |||
| addInst("if",IF_IF); | |||
| addInst("else",IF_ELSE); | |||
| addInst("then",IF_THEN); | |||
| addInst("begin",IF_BEGIN); | |||
| addInst("again",IF_AGAIN); | |||
| addInst("until",IF_UNTIL); | |||
| addInst("while",IF_WHILE); | |||
| addInst("repeat",IF_REPEAT); | |||
| addInst("do",IF_DO); | |||
| addFonc("do_leave",IF_DO_Leave); | |||
| addFonc("*do_leave",IF_DO_MLeave); | |||
| addFonc("do_next",IF_DO_Next); | |||
| /* addFonc("?do",IF_DO_Show); for debugging */ | |||
| addFonc("ndo",IF_nDO); | |||
| addInst("loop",IF_LOOP); | |||
| addInst("+loop",IF_PLOOP); | |||
| addInst("I",IF_I_DO); | |||
| addInst("J",IF_J_DO); | |||
| addInst("K",IF_K_DO); | |||
| addInst("break",IF_BREAK); | |||
| addInst("myself",IF_MYSELF); | |||
| addInst("onerr:",IF_ONERR); | |||
| addInst("end:",IF_END); | |||
| addInst("goto_end",IF_JEND); | |||
| addFonE("help",IF_help, F_CORE); | |||
| addFonD("?dev",IF_listDev); | |||
| addFonD("dev_info",IF_showDev); | |||
| addFonD("dev_read",IF_devRead); | |||
| addFonD("dev_write",IF_devWrite); | |||
| addFonD("dev_dflt",IF_devDflt); | |||
| addFonD("?dev_dflt",IF_devShowDflt); | |||
| addFonD("dev_dflW",IF_devDflW); | |||
| addFonD("dev_dflR",IF_devDflR); | |||
| addFonN("?n",IF_netList); | |||
| addFonN("netOn",IF_netOn); | |||
| addFonN("netOff",IF_netOff); | |||
| addFonN("netDt>",IF_netDt); | |||
| addFonN("netExec",IF_netExec); | |||
| addFonN("netCompile",IF_netCompile); | |||
| addFonN("ndepth",IF_netDepth); | |||
| addFonN("stopServer",IF_netStopS); | |||
| addFonN("NetServer",IF_NetServer); | |||
| addFonN("srusage",IF_netRusage); | |||
| addFonN("NetKey",IF_NetKey); | |||
| addFonN("NetErr",IF_NetErrVal); | |||
| addFonN("Me",IF_Me); | |||
| addFonN("?ns",IF_netStackList); | |||
| addFonN(">net",IF_netU2S); | |||
| addFonN("net>",IF_netS2U); | |||
| addFonN("ndrop",IF_netDropS); | |||
| /* triList(); */ | |||
| } | |||
| void * libByName(char * L) | |||
| { | |||
| int i; | |||
| for (i=0;i<NBFonc;i++) { | |||
| if (strcmp(L,Fonctions[i].nam) == 0) { | |||
| if (Fonctions[i].typ) break; | |||
| else return((void*)Fonctions[i].fct); | |||
| } | |||
| } | |||
| return VIDE; | |||
| } | |||
| int execLibNrpc(char *C) | |||
| { | |||
| int i; | |||
| if (sigsetjmp(ENV_INT,1)) { | |||
| return 0; | |||
| } | |||
| if (IF_execFct(C)) return 1; | |||
| for (i=0;i<NBFonc;i++) { | |||
| if (strcmp(C,Fonctions[i].nam) == 0) { | |||
| switch (Fonctions[i].typ) { | |||
| case 1: | |||
| case 3: /* usr fct */ | |||
| return 0; | |||
| break; | |||
| default: /* typ = 0 et 2 */ | |||
| Fonctions[i].fct(); | |||
| break; | |||
| } | |||
| return 1; | |||
| } | |||
| } | |||
| if (IF_execVar(C)) return 1; /* VARS DOWN */ | |||
| return 0; | |||
| } | |||
| int execLib(char *C) | |||
| { | |||
| int i; | |||
| void * A; | |||
| short T=0; | |||
| InExec = C; | |||
| D_Trace(C); | |||
| if (sigsetjmp(ENV_INT,1)) { | |||
| interInfos("execLib",C); | |||
| return 1; | |||
| } | |||
| if (InstallOn) { | |||
| switch (InstallOn) { | |||
| case 1 : /* lib first */ | |||
| A=libByName(C); | |||
| if (A==VIDE) { | |||
| A=fctByName(C); | |||
| if (A!=VIDE) T=2; | |||
| } else T=1; | |||
| break; | |||
| case 2 : /* user functions first */ | |||
| A=fctByName(C); | |||
| if (A==VIDE) { | |||
| A=libByName(C); | |||
| if (A!=VIDE) T=1; | |||
| } else T=2; | |||
| break; | |||
| case 3 : /* variables only */ | |||
| A=varByName(C); | |||
| if (A!=VIDE) T=3; | |||
| break; | |||
| case 8 : /* df_init */ | |||
| A=fctByName(C); | |||
| updDynFct(A,0); | |||
| break; | |||
| case 9 : /* df_start */ | |||
| A=fctByName(C); | |||
| updDynFct(A,1); | |||
| break; | |||
| case 10 : /* df_stop */ | |||
| A=fctByName(C); | |||
| updDynFct(A,2); | |||
| break; | |||
| default : | |||
| break; | |||
| } | |||
| _MODIF_FCT_INST_(A); | |||
| _MODIF_FCT_TYP_(T); | |||
| InstallOn=0; | |||
| return 1; | |||
| } | |||
| if ((VARS==2) && (IF_execVar(C))) return 1; /* VARS UP */ | |||
| if (IF_execFct(C)) return 1; | |||
| for (i=0;i<NBFonc;i++) { | |||
| /* printf("execLib : teste %s !\n", Fonctions[i].nam); */ | |||
| if (strcmp(C,Fonctions[i].nam) == 0) { | |||
| switch (Fonctions[i].typ) { | |||
| case 1: | |||
| if (fctEnCours) Fonctions[i].fct(); | |||
| else messErr(13); | |||
| break; | |||
| case 2: | |||
| if (fctEnCours) messErr(25); | |||
| else Fonctions[i].fct(); | |||
| break; | |||
| case 3: /* usr fct */ | |||
| break; | |||
| default: /* typ = 0 */ | |||
| if (fctEnCours) { | |||
| if (strcmp(C,":") == 0) messErr(15); | |||
| else { | |||
| if (strcmp(C,"\"") == 0) Fonctions[i].fct(); | |||
| else makeFct(T_LIB,(void*)Fonctions[i].fct); | |||
| } | |||
| } else Fonctions[i].fct(); | |||
| break; | |||
| } | |||
| return 1; | |||
| } | |||
| } | |||
| if ((VARS==1) && (IF_execVar(C))) return 1; /* VARS DOWN */ | |||
| /* printf("execLib : appel putVal(%s)\n",C); */ | |||
| return(putVal(C)); | |||
| } | |||
| char * libByAddr(void *A) | |||
| { | |||
| PFC f; | |||
| int i; | |||
| f = (PFC)A; | |||
| for (i=0;i<NBFonc;i++) { | |||
| if (f == (PFC)(Fonctions[i].fct)) return Fonctions[i].nam; | |||
| } | |||
| return NULL; | |||
| } | |||
| @@ -0,0 +1,33 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* lib.h */ | |||
| #ifndef __NIFE_LIB_H__ | |||
| #define __NIFE_LIB_H__ | |||
| #define LCOM 30 /* longueur maxi d'une commande */ | |||
| extern int InstallOn; | |||
| extern void initLib(void); | |||
| extern int execLibNrpc(char * C); | |||
| extern int execLib(char * C); | |||
| extern char * libByAddr(void *A); | |||
| extern void listLibBegin(char *b); | |||
| extern char * getLibBegin(char *b); | |||
| extern int nbLibBegin(char *b, char **rac); | |||
| extern void addFonU(char *l, void *A); | |||
| #endif | |||
| @@ -0,0 +1,82 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* libmath.c */ | |||
| #include "conf.h" | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <inttypes.h> | |||
| #include <math.h> | |||
| #include "stackN.h" | |||
| static double inv(double a) | |||
| { | |||
| double v; | |||
| if (a==0.0) v=HUGE; | |||
| else v = (double)1.0/a; | |||
| return v; | |||
| } | |||
| static long long L_round(double v) { return (long long)rint(v); } | |||
| static long long L_floor(double v) { return (long long)floor(v); } | |||
| static long long L_ceil(double v) { return (long long)ceil(v); } | |||
| static long long L_sgn(double v) | |||
| { | |||
| if (v > 0.0) return (long long)1; | |||
| if (v < 0.0) return (long long)-1; | |||
| return (long long)0; | |||
| } | |||
| void IF_pi(void) | |||
| { | |||
| putDouble(M_PI); | |||
| } | |||
| void IF_inv(void) { IF_fctD_1(inv); } | |||
| void IF_sqrt(void) { IF_fctD_1(sqrt); } | |||
| void IF_cbrt(void) { IF_fctD_1(cbrt); } | |||
| void IF_round(void) { IF_fctD_1L(L_round); } | |||
| void IF_floor(void) { IF_fctD_1L(L_floor); } | |||
| void IF_ceil(void) { IF_fctD_1L(L_ceil); } | |||
| void IF_sgn(void) { IF_fctD_1LB(L_sgn); } | |||
| /* fct trigonometriques */ | |||
| void IF_sin(void) { IF_fctD_1(sin); } | |||
| void IF_asin(void) { IF_fctD_1(asin); } | |||
| void IF_cos(void) { IF_fctD_1(cos); } | |||
| void IF_acos(void) { IF_fctD_1(acos); } | |||
| void IF_tan(void) { IF_fctD_1(tan); } | |||
| void IF_atan(void) { IF_fctD_1(atan); } | |||
| void IF_sinh(void) { IF_fctD_1(sinh); } | |||
| void IF_asinh(void) { IF_fctD_1(asinh); } | |||
| void IF_cosh(void) { IF_fctD_1(cosh); } | |||
| void IF_acosh(void) { IF_fctD_1(acosh); } | |||
| void IF_tanh(void) { IF_fctD_1(tanh); } | |||
| void IF_atanh(void) { IF_fctD_1(atanh); } | |||
| /* fct logarithmiques et exponentielles */ | |||
| void IF_ln(void) { IF_fctD_1(log); } | |||
| void IF_log(void) { IF_fctD_1(log10); } | |||
| void IF_exp(void) { IF_fctD_1(exp); } | |||
| /* fonctions de Bessel */ | |||
| void IF_j0(void) { IF_fctD_1(j0); } | |||
| void IF_j1(void) { IF_fctD_1(j1); } | |||
| void IF_y0(void) { IF_fctD_1(y0); } | |||
| void IF_y1(void) { IF_fctD_1(y1); } | |||
| @@ -0,0 +1,53 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* libmath.h */ | |||
| #ifndef __NIFE_LIBMATH_H__ | |||
| #define __NIFE_LIBMATH_H__ | |||
| extern void IF_inv(void); | |||
| extern void IF_sqrt(void); | |||
| extern void IF_cbrt(void); | |||
| extern void IF_round(void); | |||
| extern void IF_floor(void); | |||
| extern void IF_ceil(void); | |||
| extern void IF_sgn(void); | |||
| extern void IF_abs(void); | |||
| extern void IF_pi(void); | |||
| extern void IF_sin(void); | |||
| extern void IF_cos(void); | |||
| extern void IF_tan(void); | |||
| extern void IF_asin(void); | |||
| extern void IF_acos(void); | |||
| extern void IF_atan(void); | |||
| extern void IF_sinh(void); | |||
| extern void IF_cosh(void); | |||
| extern void IF_tanh(void); | |||
| extern void IF_asinh(void); | |||
| extern void IF_acosh(void); | |||
| extern void IF_atanh(void); | |||
| extern void IF_ln(void); | |||
| extern void IF_log(void); | |||
| extern void IF_exp(void); | |||
| extern void IF_j0(void); | |||
| extern void IF_j1(void); | |||
| extern void IF_y0(void); | |||
| extern void IF_y1(void); | |||
| #endif | |||
| @@ -0,0 +1,28 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* libmathc99.c */ | |||
| #include "conf.h" | |||
| #define _ISOC99_SOURCE | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <inttypes.h> | |||
| #include <math.h> | |||
| #include "stackN.h" | |||
| void IF_abs(void) { IF_fctB_1(llabs,fabs); } | |||
| @@ -0,0 +1,212 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* mth.c : for multi-threading implementation */ | |||
| #include "conf.h" | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include "nife.h" | |||
| #include "mth.h" | |||
| #include "err.h" | |||
| #ifdef _MULTI_THREADING_ | |||
| struct TH_Base { | |||
| void * stk_N; | |||
| void * Fct_Inst; | |||
| uint32_t netKEY; | |||
| int i_stkL; | |||
| int i_stkC; | |||
| int Fd_In; | |||
| int i_Ts; | |||
| char * stk_C[LSTACKC]; | |||
| short NbLig; | |||
| short NbTab; | |||
| short Vars; | |||
| short FcType; | |||
| bool stk_L[LSTACKL]; | |||
| bool Double; | |||
| bool EchoOff; | |||
| bool Run; | |||
| bool WaitPid; | |||
| bool fctEnC; | |||
| bool strEnC; | |||
| bool inSonP; | |||
| char BufC[MAXSTRING]; | |||
| char BufP[LBUF]; | |||
| char BufP2[LBUF]; | |||
| PFC trSuite[NBTRSUITE]; | |||
| jmp_buf Env_Int; | |||
| }; | |||
| pthread_key_t | |||
| k_Base, /* the base structure */ | |||
| k_StkN, /* Numerical stack */ | |||
| k_StkL, /* Logical stack */ | |||
| k_iStL, /* index of Logical stack */ | |||
| k_StkC, /* Character stack */ | |||
| k_iStC, /* index of Character stack */ | |||
| k_FdIn, /* File Descriptor input */ | |||
| k_iTs, /* index of TraiteSuite */ | |||
| k_bufC, /* buffer for Character stack */ | |||
| k_bufP, /* buffer for Principal Input */ | |||
| k_bufP2, /* buffer for Secondary Input */ | |||
| k_trSu, /* table PFC traiteSuite */ | |||
| k_FIns, /* Fct_Inst Fct to be install Lib or User */ | |||
| k_EnvI, /* Env_Int */ | |||
| k_NetK, /* NetKey */ | |||
| k_NLig, /* NbLig */ | |||
| k_NTab, /* NbTab */ | |||
| k_Vars, /* VARS */ | |||
| k_FTyp, /* FCT_TYP */ | |||
| k_Doub, /* Double On/Off */ | |||
| k_Run, /* RUN On/Off */ | |||
| k_WPid, /* WAITPID On/Off */ | |||
| k_fEnC, /* fctEnCours On/Off */ | |||
| k_sEnC, /* stringEnCours On/Off */ | |||
| k_inSP, /* inSonProc On/Off */ | |||
| k_Echo; /* EchoOff On/Off */ | |||
| static pthread_once_t k_Init = PTHREAD_ONCE_INIT; | |||
| static void make_keys() | |||
| { | |||
| pthread_key_create(&k_Base, free); | |||
| pthread_key_create(&k_StkN, NULL); | |||
| pthread_key_create(&k_StkL, NULL); | |||
| pthread_key_create(&k_iStL, NULL); | |||
| pthread_key_create(&k_StkC, NULL); | |||
| pthread_key_create(&k_iStC, NULL); | |||
| pthread_key_create(&k_FdIn, NULL); | |||
| pthread_key_create(&k_iTs, NULL); | |||
| pthread_key_create(&k_bufC, NULL); | |||
| pthread_key_create(&k_bufP, NULL); | |||
| pthread_key_create(&k_bufP2, NULL); | |||
| pthread_key_create(&k_trSu, NULL); | |||
| pthread_key_create(&k_FIns, NULL); | |||
| pthread_key_create(&k_EnvI, NULL); | |||
| pthread_key_create(&k_NetK, NULL); | |||
| pthread_key_create(&k_NLig, NULL); | |||
| pthread_key_create(&k_NTab, NULL); | |||
| pthread_key_create(&k_Vars, NULL); | |||
| pthread_key_create(&k_FTyp, NULL); | |||
| pthread_key_create(&k_Doub, NULL); | |||
| pthread_key_create(&k_Run, NULL); | |||
| pthread_key_create(&k_WPid, NULL); | |||
| pthread_key_create(&k_fEnC, NULL); | |||
| pthread_key_create(&k_sEnC, NULL); | |||
| pthread_key_create(&k_inSP, NULL); | |||
| pthread_key_create(&k_Echo, NULL); | |||
| } | |||
| void TH_create(void) /* create current thread variables */ | |||
| { | |||
| void * M; | |||
| struct TH_Base * A; | |||
| pthread_once(&k_Init, make_keys); | |||
| if ((M = pthread_getspecific(k_Base)) == NULL) { | |||
| if ((M=malloc(sizeof(struct TH_Base)))==NULL) | |||
| stopErr("TH_create","malloc"); | |||
| pthread_setspecific(k_Base, M); | |||
| /* initialisation */ | |||
| A = (struct TH_Base *)M; | |||
| A->stk_N = VIDE; | |||
| A->Fct_Inst = VIDE; | |||
| A->netKEY = 0; | |||
| A->NbLig = 10; | |||
| A->NbTab = 6; | |||
| A->Vars = 1; | |||
| A->FcType = 0; | |||
| A->EchoOff = 0; | |||
| A->Double = 0; | |||
| A->Run = 1; | |||
| A->WaitPid = 0; | |||
| A->fctEnC = 0; | |||
| A->strEnC = 0; | |||
| A->inSonP = 0; | |||
| A->i_stkL = 0; | |||
| A->i_stkC = 0; | |||
| A->Fd_In = 0; | |||
| A->i_Ts = 0; | |||
| pthread_setspecific(k_StkN, (void*)&(A->stk_N)); | |||
| pthread_setspecific(k_FIns, (void*)&(A->Fct_Inst)); | |||
| pthread_setspecific(k_NetK, (void*)&(A->netKEY)); | |||
| pthread_setspecific(k_NLig, (void*)&(A->NbLig)); | |||
| pthread_setspecific(k_NTab, (void*)&(A->NbTab)); | |||
| pthread_setspecific(k_Vars, (void*)&(A->Vars)); | |||
| pthread_setspecific(k_FTyp, (void*)&(A->FcType)); | |||
| pthread_setspecific(k_Echo, (void*)&(A->EchoOff)); | |||
| pthread_setspecific(k_Doub, (void*)&(A->Double)); | |||
| pthread_setspecific(k_StkL, (void*)(A->stk_L)); | |||
| pthread_setspecific(k_iStL, (void*)&(A->i_stkL)); | |||
| pthread_setspecific(k_StkC, (void*)(A->stk_C)); | |||
| pthread_setspecific(k_iStC, (void*)&(A->i_stkC)); | |||
| pthread_setspecific(k_FdIn, (void*)&(A->Fd_In)); | |||
| pthread_setspecific(k_iTs, (void*)&(A->i_Ts)); | |||
| pthread_setspecific(k_bufC, (void*)(A->BufC)); | |||
| pthread_setspecific(k_bufP, (void*)(A->BufP)); | |||
| pthread_setspecific(k_bufP2, (void*)(A->BufP2)); | |||
| pthread_setspecific(k_trSu, (void*)(A->trSuite)); | |||
| pthread_setspecific(k_Run, (void*)&(A->Run)); | |||
| pthread_setspecific(k_WPid, (void*)&(A->WaitPid)); | |||
| pthread_setspecific(k_fEnC, (void*)&(A->fctEnC)); | |||
| pthread_setspecific(k_sEnC, (void*)&(A->strEnC)); | |||
| pthread_setspecific(k_inSP, (void*)&(A->inSonP)); | |||
| pthread_setspecific(k_EnvI, (void*)&(A->Env_Int)); | |||
| } | |||
| } | |||
| void TH_init(void) | |||
| { | |||
| TH_create(); | |||
| } | |||
| #else /* NOT _MULTI_THREADING_ */ | |||
| void * G_StackN = VIDE; | |||
| int G_Double=0; /* 0 si LONG, 1 si DOUBLE */ | |||
| int G_EchoOff=0; /* 0 si echo on, 1 si echo off */ | |||
| int G_NBTAB=6; /* nb d'elements de tableau affiches */ | |||
| int G_NBLIG=10; /* nb de lignes du stack affichees */ | |||
| short G_VARS=1, /* 0 VAR_OFF , 1 VAR_DOWN (default), 2 VAR_UP */ | |||
| G_FCT_TYP=0; /* 0 None (default) , 1 Lib Fct , 2 User Fct */ | |||
| void * G_F_INS=VIDE; /* fct lib ou usr a installer */ | |||
| uint32_t G_NetKey=0; | |||
| bool G_stackL[LSTACKL]; | |||
| int G_i_stackL=0; | |||
| char * G_stackC[LSTACKC]; | |||
| int G_i_stackC=0; | |||
| char G_bufC[MAXSTRING]; | |||
| short G_Run=1; | |||
| short G_WAITPID=0; | |||
| short G_strEnCours=0; | |||
| short G_fctEnCours=0; | |||
| short G_inSonProc=0; | |||
| int G_FD_IN = 0; /* lecture sur stdin par defaut */ | |||
| int G_iTS=0; | |||
| char G_bufP[LBUF]; | |||
| char G_bufP2[LBUF]; | |||
| PFC G_traiteSuite [NBTRSUITE]; | |||
| jmp_buf G_ENV_INT; | |||
| void TH_init(void) /* do nothing */ | |||
| { | |||
| return; | |||
| } | |||
| #endif /* _MULTI_THREADING_ */ | |||
| @@ -0,0 +1,210 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* mth.h : for multi-threading implementation */ | |||
| extern void TH_init(void); | |||
| #ifndef __NIFE_MTH_H__ | |||
| #define __NIFE_MTH_H__ | |||
| #include <stdio.h> | |||
| #include <stdint.h> | |||
| #include <setjmp.h> | |||
| #include <pthread.h> | |||
| #define LSTACKL 512 | |||
| #define LSTACKC 512 | |||
| #define MAXSTRING 512 | |||
| #define NBTRSUITE 10 | |||
| #define LBUF 512 | |||
| #define VIDE ((void*)NULL) | |||
| #ifdef _MULTI_THREADING_ | |||
| extern pthread_key_t k_Base, k_StkN, k_FIns, k_NetK, k_NLig, k_NTab, k_Vars, | |||
| k_FTyp, k_Doub, k_Echo, k_StkL, k_iStL, k_StkC, k_iStC, k_bufC, k_Run, | |||
| k_WPid, k_fEnC, k_sEnC, k_inSP, k_iTs, k_FdIn, k_bufP, k_bufP2, k_trSu, | |||
| k_EnvI; | |||
| #define StackN *((void**)pthread_getspecific(k_StkN)) | |||
| #define _MODIF_STACKN_(x) *((void**)pthread_getspecific(k_StkN))=x | |||
| #define _ADDR_STACKN_ (void**)pthread_getspecific(k_StkN) | |||
| #define DOUBLE *((bool*)pthread_getspecific(k_Doub)) | |||
| #define _MODIF_DOUBLE_(x) *((bool*)pthread_getspecific(k_Doub))=x | |||
| #define ECHOOFF *((bool*)pthread_getspecific(k_Echo)) | |||
| #define _MODIF_ECHOOFF_(x) *((bool*)pthread_getspecific(k_Echo))=x | |||
| #define NBLIG *((short*)pthread_getspecific(k_NLig)) | |||
| #define _MODIF_NBLIG_(x) *((short*)pthread_getspecific(k_NLig))=x | |||
| #define NBTAB *((short*)pthread_getspecific(k_NTab)) | |||
| #define _MODIF_NBTAB_(x) *((short*)pthread_getspecific(k_NTab))=x | |||
| #define VARS *((short*)pthread_getspecific(k_Vars)) | |||
| #define _MODIF_VARS_(x) *((short*)pthread_getspecific(k_Vars))=x | |||
| #define FCT_TYP *((short*)pthread_getspecific(k_FTyp)) | |||
| #define _MODIF_FCT_TYP_(x) *((short*)pthread_getspecific(k_FTyp))=x | |||
| #define FCT_INST *((void**)pthread_getspecific(k_FIns)) | |||
| #define _MODIF_FCT_INST_(x) *((void**)pthread_getspecific(k_FIns))=x | |||
| #define NetKey *((uint32_t*)pthread_getspecific(k_NetK)) | |||
| #define _MODIF_NetKey_(x) *((uint32_t*)pthread_getspecific(k_NetK))=x | |||
| #define _ADDV_NetKey_ pthread_getspecific(k_NetK) | |||
| #define stackL ((bool*)pthread_getspecific(k_StkL)) | |||
| #define i_StackL *((int*)pthread_getspecific(k_iStL)) | |||
| #define _MODIF_i_StackL_(x) *((int*)pthread_getspecific(k_iStL))=x | |||
| #define stackC ((char**)pthread_getspecific(k_StkC)) | |||
| #define i_StackC *((int*)pthread_getspecific(k_iStC)) | |||
| #define _MODIF_i_StackC_(x) *((int*)pthread_getspecific(k_iStC))=x | |||
| #define bufC ((char*)pthread_getspecific(k_bufC)) | |||
| #define bufP ((char*)pthread_getspecific(k_bufP)) | |||
| #define bufP2 ((char*)pthread_getspecific(k_bufP2)) | |||
| #define traiteSuite ((PFC*)pthread_getspecific(k_trSu)) | |||
| #define RUN *((bool*)pthread_getspecific(k_Run)) | |||
| #define _MODIF_RUN_(x) *((bool*)pthread_getspecific(k_Run))=x | |||
| #define WAITPID *((bool*)pthread_getspecific(k_WPid)) | |||
| #define _MODIF_WAITPID_(x) *((bool*)pthread_getspecific(k_WPid))=x | |||
| #define stringEnCours *((bool*)pthread_getspecific(k_sEnC)) | |||
| #define _MODIF_stringEnCours_(x) *((bool*)pthread_getspecific(k_sEnC))=x | |||
| #define fctEnCours *((bool*)pthread_getspecific(k_fEnC)) | |||
| #define _MODIF_fctEnCours_(x) *((bool*)pthread_getspecific(k_fEnC))=x | |||
| #define inSonProc *((bool*)pthread_getspecific(k_inSP)) | |||
| #define _MODIF_inSonProc_(x) *((bool*)pthread_getspecific(k_inSP))=x | |||
| #define FD_IN *((int*)pthread_getspecific(k_FdIn)) | |||
| #define _MODIF_FD_IN_(x) *((int*)pthread_getspecific(k_FdIn))=x | |||
| #define iTS *((int*)pthread_getspecific(k_iTs)) | |||
| #define _MODIF_iTS_(x) *((int*)pthread_getspecific(k_iTs))=x | |||
| #define ENV_INT (jmp_buf*)pthread_getspecific(k_EnvI) | |||
| #else /* *************** NOT _MULTI_THREADING_ ******************** */ | |||
| extern void * G_StackN; | |||
| extern int G_Double; | |||
| extern int G_EchoOff; | |||
| extern int G_NBTAB; | |||
| extern int G_NBLIG; | |||
| extern short G_VARS; | |||
| extern short G_FCT_TYP; | |||
| extern void * G_F_INS; | |||
| extern uint32_t G_NetKey; | |||
| extern bool G_stackL[]; | |||
| extern int G_i_stackL; | |||
| extern char * G_stackC[]; | |||
| extern int G_i_stackC; | |||
| extern char G_bufC[]; | |||
| extern short G_Run; | |||
| extern short G_WAITPID; | |||
| extern short G_strEnCours; | |||
| extern short G_fctEnCours; | |||
| extern short G_inSonProc; | |||
| extern int G_FD_IN; | |||
| extern int G_iTS; | |||
| extern char G_bufP[]; | |||
| extern char G_bufP2[]; | |||
| extern PFC G_traiteSuite[]; | |||
| /* a regler */ | |||
| extern jmp_buf G_ENV_INT; | |||
| #define RUN G_Run | |||
| #define _MODIF_RUN_(x) G_Run=(x) | |||
| #define WAITPID G_WAITPID | |||
| #define _MODIF_WAITPID_(x) G_WAITPID=(x) | |||
| #define stringEnCours G_strEnCours | |||
| #define _MODIF_stringEnCours_(x) G_strEnCours=(x) | |||
| #define fctEnCours G_fctEnCours | |||
| #define _MODIF_fctEnCours_(x) G_fctEnCours=(x) | |||
| #define inSonProc G_inSonProc | |||
| #define _MODIF_inSonProc_(x) G_inSonProc=(x) | |||
| #define FD_IN G_FD_IN | |||
| #define _MODIF_FD_IN_(x) G_FD_IN=(x) | |||
| #define iTS G_iTS | |||
| #define _MODIF_iTS_(x) G_iTS=(x) | |||
| #define stackL G_stackL | |||
| #define i_StackL G_i_stackL | |||
| #define _MODIF_i_StackL_(x) G_i_stackL=(x) | |||
| #define stackC G_stackC | |||
| #define i_StackC G_i_stackC | |||
| #define _MODIF_i_StackC_(x) G_i_stackC=(x) | |||
| #define bufC G_bufC | |||
| #define bufP G_bufP | |||
| #define bufP2 G_bufP2 | |||
| #define traiteSuite G_traiteSuite | |||
| #define StackN G_StackN | |||
| #define _MODIF_STACKN_(x) G_StackN=(x) | |||
| #define _ADDR_STACKN_ &G_StackN | |||
| #define DOUBLE G_Double | |||
| #define _MODIF_DOUBLE_(x) G_Double=(x) | |||
| #define ECHOOFF G_EchoOff | |||
| #define _MODIF_ECHOOFF_(x) G_EchoOff=(x) | |||
| #define NBLIG G_NBLIG | |||
| #define _MODIF_NBLIG_(x) G_NBLIG=(x) | |||
| #define NBTAB G_NBTAB | |||
| #define _MODIF_NBTAB_(x) G_NBTAB=(x) | |||
| #define VARS G_VARS | |||
| #define _MODIF_VARS_(x) G_VARS=(x) | |||
| #define FCT_TYP G_FCT_TYP | |||
| #define _MODIF_FCT_TYP_(x) G_FCT_TYP=(x) | |||
| #define FCT_INST G_F_INS | |||
| #define _MODIF_FCT_INST_(x) G_F_INS=(x) | |||
| #define NetKey G_NetKey | |||
| #define _MODIF_NetKey_(x) G_NetKey=(x) | |||
| #define _ADDV_NetKey_ (void*)&G_NetKey | |||
| #define ENV_INT G_ENV_INT | |||
| #endif /* _MULTI_THREADING_ */ | |||
| #endif | |||
| @@ -0,0 +1,45 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* net.h */ | |||
| #ifndef __NIFE_NET_H__ | |||
| #define __NIFE_NET_H__ | |||
| #include <stdint.h> | |||
| #define UNI_KEY 0xffffffff | |||
| extern char NetServer[]; | |||
| extern void IF_NetServer(void); | |||
| extern void IF_Me(void); | |||
| extern void IF_netOn(void); | |||
| extern void IF_netOff(void); | |||
| extern void IF_netDt(void); | |||
| extern void IF_netDepth(void); | |||
| extern void IF_netList(void); | |||
| extern void IF_netStopS(void); | |||
| extern void IF_netDropS(void); | |||
| extern void IF_netRusage (void); | |||
| extern void IF_netStackList (void); | |||
| extern void IF_netU2S (void); | |||
| extern void IF_netS2U (void); | |||
| extern void IF_netExec (void); | |||
| extern void IF_netCompile (void); | |||
| extern void sendData(int s, void * b, uint32_t n); | |||
| extern void sendDataC(void * b, uint32_t n); | |||
| #endif | |||
| @@ -0,0 +1,325 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* nife.c */ | |||
| #include "conf.h" | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| #include <signal.h> | |||
| #include <sys/types.h> | |||
| #include <sys/wait.h> | |||
| #include <sys/stat.h> | |||
| #include <fcntl.h> | |||
| #include <unistd.h> | |||
| #include "nife.h" | |||
| #include "mth.h" | |||
| #include "err.h" | |||
| #include "lib.h" | |||
| #include "stackC.h" | |||
| #include "stackF.h" | |||
| #include "histo.h" | |||
| #include "tasks.h" | |||
| #include "debug.h" | |||
| #include "net.h" | |||
| #include "gplot.h" | |||
| static char sepa[] = " \t\n"; | |||
| void putTrSuite(void (*f)(char*)) | |||
| { | |||
| int i; | |||
| i=iTS; | |||
| traiteSuite[i++]=f; | |||
| _MODIF_iTS_(i); | |||
| if (iTS==NBTRSUITE) fprintf(stderr,"traiteSuite limit raise !\n"); | |||
| } | |||
| void dropTrSuite(void) | |||
| { | |||
| int i; | |||
| i=iTS-1; | |||
| _MODIF_iTS_(i); | |||
| if (iTS < 0) fprintf(stderr,"traiteSuite index negative !\n"); | |||
| } | |||
| PFC getTrSuite(void) | |||
| { | |||
| if (iTS<1) return (PFC)NULL; | |||
| else return(traiteSuite[iTS-1]); | |||
| } | |||
| void interInfos(char *F, char*P) | |||
| { | |||
| fprintf(stderr, " Error in %s ( %s ) !!\n",F,P); | |||
| if (errno) perror(F); | |||
| if (inSonProc) { | |||
| sleep(2); exit(1); | |||
| } | |||
| } | |||
| void Interrupt(int S) | |||
| { | |||
| int status; | |||
| switch(S) { | |||
| case SIGCHLD : | |||
| if(WAITPID) return; | |||
| while (waitpid(-1, &status, WNOHANG) > 0); | |||
| return; | |||
| break; | |||
| case SIGSEGV : | |||
| printf("Segmentation Error !!\n"); | |||
| exit(1); | |||
| break; | |||
| case SIGPIPE : | |||
| printf("Pipe is broken"); | |||
| break; | |||
| case SIGFPE : | |||
| printf("Floating Point"); | |||
| break; | |||
| case SIGALRM : | |||
| printf("Compilation"); | |||
| break; | |||
| default : | |||
| printf("Signal %d",S); | |||
| break; | |||
| } | |||
| siglongjmp(ENV_INT,1); | |||
| } | |||
| void IF_about(void) | |||
| { | |||
| char Lib[8]; | |||
| *Lib='\0'; | |||
| #ifdef _MULTI_THREADING_ | |||
| strcpy(Lib,"mt-"); | |||
| #endif | |||
| printf("nife (Networking Industrial Forth-like Environment) - version %s%s-%ld/%ld\n\t (c) S.E.R.I.A.N.E. 2009-13\n",Lib,VERSION,sizeof(long)*8,sizeof(double)*8); | |||
| } | |||
| int isSepa(char c, int m) | |||
| { | |||
| unsigned int i; | |||
| if (m == 1) /* '\0 fait partie du lot */ | |||
| if (c == (char)'\0') return 1; | |||
| for (i=0; i<strlen(sepa);i++) | |||
| if (c == sepa[i]) return 1; | |||
| return 0; | |||
| } | |||
| int traiteMot(char *M) | |||
| { | |||
| int Err=0; | |||
| PFC tS; | |||
| if (sigsetjmp(ENV_INT,1)) { | |||
| interInfos("traiteMot",M); | |||
| return 1; | |||
| } | |||
| /* printf("traiteMot <%s> iTS=%d\n",M,iTS); */ | |||
| tS = getTrSuite(); | |||
| if (tS != (PFC)NULL) tS(M); | |||
| else | |||
| if (! execLib(M)) { Err=1; messErr2(10,M); } | |||
| if (ITASK) exit(0); /* non interpretation in task ! */ | |||
| return Err; | |||
| } | |||
| static void traiteLigne(char *b) | |||
| { | |||
| char *mot, *d, *f, *w; | |||
| d=b; f=b+strlen(d); | |||
| #ifdef DEBUG | |||
| printf("traiteLigne : <%s>\n",d); | |||
| #endif | |||
| while (d<f) { | |||
| if (noErr()) break; | |||
| /* recherche du 1er mot */ | |||
| if (stringEnCours) { | |||
| mot = d; | |||
| while (1) { | |||
| if((d = strchr(d,'"')) == NULL) { | |||
| d=mot+strlen(mot); | |||
| break; | |||
| } | |||
| if (*(d-1) == '\\') { | |||
| w = d-1; | |||
| while (*w != '\0') { | |||
| *w = *(w+1); | |||
| w++; | |||
| } | |||
| continue; | |||
| } | |||
| d++; | |||
| if (!isSepa(*d,1)) continue; | |||
| break; | |||
| } | |||
| } else { | |||
| /* on ignore les commentaires */ | |||
| if ((mot = strchr(d, (int)'#')) != NULL) { | |||
| *mot = '\0'; | |||
| f = mot; | |||
| } | |||
| while (isSepa(*d,0)) d++; /* on avance tant que separateurs */ | |||
| mot = d; | |||
| while (!isSepa(*d,1)) d++; /* on avance si nonSepa ET non \0 */ | |||
| } | |||
| *d++ = '\0'; /* fin de la commande */ | |||
| if (strlen(mot)>0) | |||
| if (traiteMot(mot)) break; /* abort if error */ | |||
| } | |||
| } | |||
| void compileFile(char * f) | |||
| { | |||
| FILE *F; | |||
| int i=0; | |||
| if ((F = fopen(f,"r")) != NULL) { | |||
| while (fgets(bufP, LBUF,F)) { | |||
| if (noErr()) { | |||
| printf("In file %s line %d !\n",f,i); | |||
| break; | |||
| } | |||
| traiteLigne(bufP); | |||
| i++; | |||
| } | |||
| fclose(F); | |||
| } | |||
| } | |||
| static void lectFic(char *L) | |||
| { | |||
| int fd; | |||
| dropTrSuite(); | |||
| if ((fd = open(L,O_RDONLY)) == -1) { | |||
| perror(L); | |||
| messErr(16); | |||
| } else addFD(fd,L); | |||
| } | |||
| void IF_LoadCS(void) | |||
| { | |||
| char * f; | |||
| f = getString(); | |||
| if (f != NULL) { | |||
| compileFile(f); | |||
| free((void*)f); | |||
| } | |||
| } | |||
| void IF_ExecCS(void) | |||
| { | |||
| char * f; | |||
| f = getString(); | |||
| if (f != NULL) { | |||
| if (strlen(f)>0) traiteLigne(f); | |||
| free((void*)f); | |||
| } | |||
| } | |||
| void * makeFunction(char * f) | |||
| { | |||
| void *M; | |||
| if ((M = malloc(strlen(f)+8)) == NULL) stopErr("makeFunction","malloc"); | |||
| sprintf((char*)M,": _f %s ;",f); | |||
| traiteLigne((char*)M); | |||
| free(M); | |||
| if (noErr() == 0) { | |||
| M = fctByName("_f"); | |||
| return M; | |||
| } | |||
| messErr(48); | |||
| return VIDE; | |||
| } | |||
| void IF_ExecCSf(void) | |||
| { | |||
| char * f; | |||
| void *C; | |||
| f = getString(); | |||
| if (f != NULL) { | |||
| C = VIDE; | |||
| if (strlen(f)>0) C = makeFunction(f); | |||
| free((void*)f); | |||
| if (C != VIDE) { | |||
| IF_execFct("_f"); | |||
| rmLastFct(); | |||
| } | |||
| } | |||
| } | |||
| void IF_Load(void) | |||
| { | |||
| putTrSuite(lectFic); | |||
| } | |||
| int main(int N, char *P[]) | |||
| { | |||
| int n; | |||
| char *dirW = ".nife"; | |||
| if (N > 2) { | |||
| fprintf(stderr,"nife [nif-file]\n"); | |||
| return(1); | |||
| } | |||
| if ((sizeof(void*) != sizeof(long)) || | |||
| (sizeof(double) != sizeof(long long))) { | |||
| fprintf(stderr,"Nife open-source don't runs on these machine !\n"); | |||
| return(2); | |||
| } | |||
| signal(SIGUSR1,SIG_IGN); | |||
| signal(SIGINT,Interrupt); | |||
| signal(SIGTERM,Interrupt); | |||
| signal(SIGPIPE,Interrupt); | |||
| signal(SIGCHLD,Interrupt); | |||
| signal(SIGQUIT,Interrupt); | |||
| signal(SIGSEGV,Interrupt); | |||
| signal(SIGFPE,Interrupt); | |||
| signal(SIGALRM,Interrupt); | |||
| /* work in ./.nife for facilities of debugging !! */ | |||
| if (chdir(dirW) != 0) { | |||
| if (mkdir(dirW, 0755) == -1) { | |||
| perror("mkdir"); return 1; | |||
| } | |||
| if (chdir(dirW) != 0) { | |||
| perror("chdir"); return 1; | |||
| } | |||
| } | |||
| termInit(); /* may stop if no term found */ | |||
| TH_init(); | |||
| initLib(); | |||
| D_Reset(); | |||
| if (N==2) { | |||
| IF_Load(); | |||
| lectFic(P[1]); | |||
| } else | |||
| printf("Welcome to Nife : Just stack it !\n"); | |||
| while (RUN) { | |||
| if ((FD_IN+iTERM) == 0) { | |||
| printf("> "); | |||
| fflush(stdout); | |||
| } | |||
| razErr(); | |||
| if ((n=lireLigne(FD_IN,bufP,bufP2,LBUF)) == -1) | |||
| printf("Line too long!\n"); | |||
| else | |||
| if (n>0) traiteLigne(bufP); | |||
| } | |||
| IF_delAllGP(); | |||
| IF_netStopS(); | |||
| IF_netOff(); | |||
| termReset(); | |||
| printf("Bye !\n"); | |||
| return 0; | |||
| } | |||
| @@ -0,0 +1,44 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* nife.h */ | |||
| #ifndef __NIFE_NIFE_H__ | |||
| #define __NIFE_NIFE_H__ | |||
| #include <setjmp.h> | |||
| #include <errno.h> | |||
| #define LDFLT 24 /* default length for names */ | |||
| extern jmp_buf ENV_INT; | |||
| extern void interInfos(char *P, char*M); | |||
| typedef void (*PFV) (void); | |||
| typedef void (*PFC) (char *); | |||
| typedef unsigned char bool; | |||
| extern int isSepa(char c, int m); | |||
| extern void IF_about(void); | |||
| extern void IF_Load(void); | |||
| extern void IF_LoadCS(void); | |||
| extern void * makeFunction(char *S); | |||
| extern void IF_ExecCS(void); | |||
| extern void IF_ExecCSf(void); | |||
| extern void putTrSuite(PFC); | |||
| extern void dropTrSuite(void); | |||
| extern void compileFile(char *); | |||
| extern PFC getTrSuite(void); | |||
| #endif | |||
| @@ -0,0 +1,642 @@ | |||
| " { -- string } | |||
| begins a string wich is terminated by itself. The first blank is a separator. | |||
| The character \ masks the character " as end of string. | |||
| ' : { string -- } | |||
| begins, into a function (beetween : and ;), a string which represents a name of | |||
| a user function, or a variable. This string will be interpreted and executed | |||
| during the function execution. | |||
| There is no verification : if the name does not exist, it does nothing. | |||
| ` : { string -- } | |||
| begins, into a function (beetween : and ;), a string which represents a name of | |||
| a user function, or a variable. This string will be interpreted and executed | |||
| during the function execution. At the first time the code is updated if the | |||
| function or the variable is found. | |||
| There is no verification : if the name does not exist, it does nothing. | |||
| "cat : { str1 str2 -- 'str1str2' } | |||
| catenates the two elements on the top string stack entry. | |||
| "cats : { str1 str2 -- 'str1 str2' } | |||
| catenates the two elements on the top string stack entry with a space beetween. | |||
| "date : { -- date_string } | |||
| puts the date string (JJ/MM/AAAA) on the top string stack entry. | |||
| "drop : { str1 -- } | |||
| removes the top string stack entry. | |||
| "dup : { str1 -- str1 str1 } | |||
| duplicates the top string stack entry. | |||
| "over : { str2 str1 -- str2 str1 str2 } | |||
| duplicates the second string stack entry onto the top of the stack. | |||
| "swap : { str2 str1 -- str1 str2 } | |||
| exchanges the top two string stack entries. | |||
| "time : { -- time_string } | |||
| put the time string (hh:mm:ss) on the top string stack entry. | |||
| "type : { str1 -- } | |||
| displays and removes the top string stack entry. | |||
| "f : { fname -- } | |||
| executes the function fname. An error occurs if the function does not exist. | |||
| "v : { vname -- } | |||
| executes the variable vname. An error occurs if the variable does not exist. | |||
| "f? : { fname -- } ( -- T/F ) | |||
| executes the function fname. In succes TRUE is putting on the logical stack, if | |||
| not FALSE. | |||
| "v? : { vname -- } ( -- T/F ) | |||
| executes the variable vname. In succes TRUE is putting on the logical stack, if | |||
| not FALSE. | |||
| "exec : { "code" -- } | |||
| executes the code in a string on the top of the character stack. | |||
| Does nothing if the string is empty. | |||
| "execf : { "code" -- } | |||
| executes the code in a string on the top of the character stack as the content | |||
| of a function. At each time the function is dynamicaly compiled and executed. | |||
| Does nothing if the string is empty. | |||
| "execk : { "code" -- } | |||
| compiles the code in a string on the top of the character stack as the content | |||
| of a function. At the first time the function is dynamicaly compiled, keep as | |||
| a user function and executed. On other times the string is removed and the user | |||
| function is simply executed. | |||
| Does nothing if the string is empty. | |||
| * : [ e1 e2 -- result ] | |||
| calculates the multiplication : e1 * e2. | |||
| If e1 and e2 are arrays, they must have the same dimension and the result will | |||
| be an array of this dimension with result[i] = e1[i] * e2[i]. | |||
| If e1 or e2 is an array the function adapts itself. | |||
| As this operation is commutative the result will be the same if the array is in | |||
| first or second position. | |||
| ** : [ e1 e2 -- result ] | |||
| calculates the power : e1 ** e2. | |||
| If e1 and e2 are arrays, they must have the same dimension and the result will | |||
| be an array of this dimension with result[i] = e1[i] ** e2[i]. | |||
| If e1 or e2 is an array the function adapts itself. | |||
| WARNING : As this operation is NOT commutative the result will NOT be the same | |||
| if the array is in first or second position. | |||
| *[]< : [ tab1 tab2 ... tabn n -- tab1 tab2 ... tabn ] | |||
| left shift n arrays. The same as []< with n tabs. | |||
| *[]<< : [ tab1 tab2 ... tabn n i -- tab1 tab2 ... tabn ] | |||
| left shift of i elements on n array. The same as []<< with n tabs. | |||
| *[]> : [ tab1 tab2 ... tabn n -- tab1 tab2 ... tabn ] | |||
| right shift n arrays. The same as []> with n tabs. | |||
| *[]>> : [ tab1 tab2 ... tabn n i -- tab1 tab2 ... tabn ] | |||
| right shift of i elements on n array. The same as []>> with n tabs. | |||
| *[]rev : [ tab1 tab2 ... tabn n -- tab1 tab2 ... tabn ] | |||
| reverse n arrays. The same as []rev with n tabs. | |||
| *drop : [ En+1 En ... E1 n -- En+1 ] | |||
| removes the top n number stack entries from the stack. | |||
| *dup : [ En ... E1 n -- En ... E1 En ... E1 ] | |||
| duplicates the top n entries on the number stack. | |||
| + : [ e1 e2 -- result ] | |||
| calculates the addition : e1 + e2. | |||
| If e1 and e2 are arrays, they must have the same dimension and the result will | |||
| be an array of this dimension with result[i] = e1[i] + e2[i]. | |||
| If e1 or e2 is an array the function adapts itself. | |||
| As this operation is commutative the result will be the same if the array is in | |||
| first or second position. | |||
| - : [ e1 e2 -- result ] | |||
| calculates the soustraction : e1 - e2. | |||
| If e1 and e2 are arrays, they must have the same dimension and the result will | |||
| be an array of this dimension with result[i] = e1[i] - e2[i]. | |||
| If e1 or e2 is an array the function adapts itself. | |||
| WARNING : As this operation is NOT commutative the result will NOT be the same | |||
| if the array is in first or second position. | |||
| . : [ e -- ] | |||
| displays and removes the top number stack entry. | |||
| / : [ e1 e2 -- result ] | |||
| calculates the division : e1 / e2. | |||
| If e1 and e2 are arrays, they must have the same dimension and the result will | |||
| be an array of this dimension with result[i] = e1[i] / e2[i]. | |||
| If e1 or e2 is an array the function adapts itself. | |||
| WARNING : As this operation is NOT commutative the result will NOT be the same | |||
| if the array is in first or second position. | |||
| < : [ e1 e2 -- ] ( -- bool ) | |||
| evaluates the less than test and put the result, true or false, on the logical | |||
| stack. | |||
| If e1 and e2 are arrays, they must have the same dimension and the result will | |||
| be a AND of the comparison of each elements : e1[i] < e2[i]. | |||
| If e1 or e2 is an array the function adapts itself. | |||
| WARNING : As this operation is NOT commutative the result will NOT be the same | |||
| if the array is in first or second position. | |||
| <= : [ e1 e2 -- ] ( -- bool ) | |||
| evaluates the less or equal than test and put the result, true or false, on the | |||
| logical stack. | |||
| If e1 and e2 are arrays, they must have the same dimension and the result will | |||
| be a AND of the comparison of each elements : e1[i] < e2[i]. | |||
| If e1 or e2 is an array the function adapts itself. | |||
| WARNING : As this operation is NOT commutative the result will NOT be the same | |||
| if the array is in first or second position. | |||
| <> : [ e1 e2 -- ] ( -- bool ) | |||
| evaluates the not equal test and put the result, true or false, on the logical | |||
| stack. | |||
| If e1 and e2 are arrays, they must have the same dimension and the result will | |||
| be a AND of the comparison of each elements : e1[i] < e2[i]. | |||
| If e1 or e2 is an array the function adapts itself. | |||
| WARNING : As this operation is NOT commutative the result will NOT be the same | |||
| if the array is in first or second position. | |||
| = : [ e1 e2 -- ] ( -- bool ) | |||
| evaluates the equal test and put the result on the logical stack. | |||
| If e1 and e2 are arrays, they must have the same dimension and the result will | |||
| be a AND of the comparison of each elements : e1[i] < e2[i]. | |||
| If e1 or e2 is an array the function adapts itself. | |||
| As this operation is commutative the result will be the same if the array is in | |||
| first or second position. | |||
| > : [ e1 e2 -- ] ( -- bool ) | |||
| evaluates the greater than test and put the result on the logical stack. | |||
| If e1 and e2 are arrays, they must have the same dimension and the result will | |||
| be a AND of the comparison of each elements : e1[i] < e2[i]. | |||
| If e1 or e2 is an array the function adapts itself. | |||
| WARNING : As this operation is NOT commutative the result will NOT be the same | |||
| if the array is in first or second position. | |||
| >-scalar : [ [v1, ... ,vn] -- vn ... v2 v1 ] | |||
| transforms the array, on the top of the stack, with n elements, in n scalars. | |||
| The first value of the array will be the scalar on the top. | |||
| >= : [ e1 e2 -- ] ( -- bool ) | |||
| evaluates the greater or equal than test and put the result, true or false, on | |||
| the logical stack. | |||
| If e1 and e2 are arrays, they must have the same dimension and the result will | |||
| be a AND of the comparison of each elements : e1[i] < e2[i]. | |||
| If e1 or e2 is an array the function adapts itself. | |||
| WARNING : As this operation is NOT commutative the result will NOT be the same | |||
| if the array is in first or second position. | |||
| >array : [ e1 e2 .... eN n -- array ] | |||
| take n elements to make an array. Each element ei may be an array. | |||
| >scalar : [ [v1, ... ,vn] -- v1 v2 ... vn ] | |||
| transforms the array, on the top of the stack, with n elements, in n scalars. | |||
| The last value of the array will be the scalar on the top. | |||
| ?cs : | |||
| displays the character (string) stack. | |||
| ?drop : ( bool1 -- ) | |||
| removes the top logical stack entry. | |||
| ?dup : ( bool1 -- bool1 bool1 ) | |||
| duplicates the top logical stack entry. | |||
| ?lib : | |||
| displays the names of base library functions. | |||
| ?libD : | |||
| displays the names of devices library functions. | |||
| ?libN : | |||
| displays the names of network library functions. | |||
| ?libT : | |||
| displays the names of tools library functions. Theses tools are built on extern | |||
| Linux tools (gnuplot, xgraph, ...). | |||
| ?libM : | |||
| displays the names of math library functions. | |||
| ?libP : | |||
| displays the names of programming library functions. | |||
| ?libU : | |||
| displays the names of user system functions. | |||
| ?libs : | |||
| displays the names of all libraries functions. | |||
| ?ls : | |||
| displays the logical stack. | |||
| ?over : ( bool2 bool1 -- bool2 bool1 bool2 ) | |||
| duplicates the second logical stack entry onto the top of the stack. | |||
| ?s : | |||
| display the number stack. | |||
| ?swap : ( bool2 bool1 -- bool1 bool2 ) | |||
| exchanges the top two logical stack entries. | |||
| ?t/f : ( bool -- ) | |||
| displays and removes the top logical stack entry. | |||
| ?vars : | |||
| display the list of constants of the system environment. | |||
| DEBUG_I/O : | |||
| toggle to set debug mode on or off. | |||
| INTEGER : | |||
| sets the default type to INTEGER. | |||
| NBLIG : [ n -- ] | |||
| sets the variable NBLIG to n. | |||
| NBLIG is used to limit the display of the stack. | |||
| NBTAB : [ n -- ] | |||
| sets the variable NBTAB to n. | |||
| NBTAB is used to limit the display of the stack. | |||
| REAL : | |||
| sets the default type to REAL. | |||
| []< : [ [v1,v2,...vn] -- [v2, ... ,vn,v1] ] | |||
| left shift of 1 element on an array. | |||
| []<< : [ [v1,v2,...vn] i -- [vi+1, ... ,vn,v1,v2 ... vi] ] | |||
| left shift of i elements on an array. | |||
| []> : [ [v1,v2,...vn] -- [vn,v1,v2, ... ,vn-1] ] | |||
| right shift of 1 element on an array. | |||
| []>> : [ [vn,vn-1,...,v2,v1] i -- [vi, ... ,v2,v1,vn ... vi+1] ] | |||
| right shift of i elements on an array. | |||
| []crot : [ tab1 tab2 ... tabN n -- Ntab1 ... NtabP ] | |||
| clock rotation on n arrays of P elements. Ntab1 will be composed with the lasts | |||
| elements of tab1 ... tabN and NtabP with firsts elements of tab1 ... tabN. | |||
| []max : [ [v1,v2,...vn] -- vMax ] | |||
| replace the array on the top of the stack by the maximum value. | |||
| []min : [ [v1,v2,...vn] -- vMin ] | |||
| replace the array on the top of the stack by the minimum value. | |||
| []min/max : [ [v1,v2,...vn] -- vMin vMax ] | |||
| replace the array on the top of the stack by the minimum and maximum values. | |||
| []prod : [ [v1,v2,...vn] -- v1*v2*...*vn ] | |||
| replace the array on the top of the stack by the product of all values. | |||
| []rev : [ [v1,v2,...vn] -- [vn ... v2,v1] ] | |||
| reverse an array. | |||
| []sum : [ [v1,v2,...vn] -- v1+v2+...+vn ] | |||
| replace the array on the top of the stack by the sum of all values. | |||
| []trot : [ tab1 tab2 ... tabN n -- Ntab1 ... NtabP ] | |||
| trigonometric rotation with n arrays of P elements. Ntab1 will be composed with | |||
| the firsts elements of tabN ... tab1 and NtabP with firsts elements of tabN ... | |||
| tab1. | |||
| []transp : [ tab1 tab2 ... tabN n -- Ntab1 ... NtabP ] | |||
| computes the transpose of the matrix composed with n arrays of P elements. | |||
| Ntab1 will be composed by the last line of this matrix and NtabP with the first | |||
| line. | |||
| about : | |||
| displays the name of the system and the version. | |||
| and : ( A B -- AandB ) | |||
| replaces the two booleans on the top of logical stack by the AND. | |||
| cr : | |||
| displays carriage-return (new line). | |||
| depth : [ -- Stack_Depth ] | |||
| returns the number of entries on the current number stack to the number stack. | |||
| dramp : [ n -- [-n, ...,-1,0,1,2, ...,n] ] | |||
| builds an array with 2n+1 elements and initialize it with a ramp (-n to n). It is in fact a double ramp. | |||
| drop : [ E -- ] | |||
| removes the top number stack entry. | |||
| dup : [ E -- E E ] | |||
| duplicates the top number stack entry. | |||
| echo_off : | |||
| sets the echo mode off. | |||
| echo_on : | |||
| sets the echo mode off. | |||
| exit : | |||
| terminates the program. | |||
| false : ( -- false ) | |||
| puts false on the top of the logical stack. | |||
| help : | |||
| this help !! Need a word following. | |||
| ls_clear : ( bool1 bool2 ... boolN -- ) | |||
| clears the logical stack. | |||
| cs_clear : { str1 ... strn -- } | |||
| clears the character stack. | |||
| max : [ e1 e2 -- result ] | |||
| calculates the maximun of e1 and e2. | |||
| If e1 and e2 are arrays, they must have the same dimension and the result will | |||
| be an array of this dimension with result[i] = max(e1[i], e2[i]). | |||
| If e1 or e2 is an array the function adapts itself. | |||
| As this operation is commutative the result will be the same if the array is in | |||
| first or second position. | |||
| min : [ e1 e2 -- result ] | |||
| calculates the minimun of e1 and e2. | |||
| If e1 and e2 are arrays, they must have the same dimension and the result will | |||
| be an array of this dimension with result[i] = min(e1[i], e2[i]). | |||
| If e1 or e2 is an array the function adapts itself. | |||
| As this operation is commutative the result will be the same if the array is in | |||
| first or second position. | |||
| modulo : [ e1 e2 -- result ] | |||
| calculates the rest of the division : e1 / e2. | |||
| If e1 and e2 are arrays, they must have the same dimension and the result will | |||
| be an array of this dimension with result[i] = e1[i] modulo e2[i]. | |||
| If e1 or e2 is an array the function adapts itself. | |||
| WARNING : As this operation is NOT commutative the result will NOT be the same | |||
| if the array is in first or second position. | |||
| abs : [ v -- |v| ] | |||
| take absolute value of the value on the top of the stack. | |||
| neg : [ v -- -v ] | |||
| negates the value on the top of the stack. Equivalent to "-1 *". | |||
| not : ( A -- notA ) | |||
| replaces the boolean on the top of logical stack by his negation. | |||
| or : ( A B -- AorB ) | |||
| replaces the two booleans on the top of logical stack by the OR. | |||
| over : [ E2 E1 -- E2 E1 E2 ] | |||
| duplicates the second number stack entry onto the top of the stack. | |||
| pick : [ En ... E1 n -- En ... E1 En ] | |||
| copies the n-th number stack entry onto the top of the stack. | |||
| ramp : [ n -- [1,2, ...,n] ] | |||
| builds an array with n elements and initialize it with a ramp (1 to n). | |||
| roll : [ En En-1 ... E1 n -- En-1 ... E1 En ] | |||
| moves the n-th number stack entry to the top of the stack. | |||
| rot : [ E3 E2 E1 -- E2 E1 E3 ] | |||
| rotates the third number stack entry to the top of the stack. | |||
| rusage : | |||
| display a board of ressources usage. | |||
| s_clear : [ e1 ... en -- ] | |||
| clears the number stack. | |||
| sh : | |||
| puts nife in background and open a shell. To come back in the program just exit | |||
| the shell. | |||
| sleep : [ n -- ] | |||
| sleep during n seconds. | |||
| swap : [ E2 E1 -- E1 E2 ] | |||
| exchanges the top two number stack entries. | |||
| time : [ -- N ] | |||
| puts the time in microseconds on the top of the stack. | |||
| true : ( -- true ) | |||
| puts true on the top of the logical stack. | |||
| unroll : [ En-1 ... E2 E1 n -- E1 En-1 ... E2 ] | |||
| moves the top number stack entry to the n-th position on the stack. | |||
| unrot : [ E3 E2 E1 -- E1 E3 E2 ] | |||
| rotates the top number stack entry to the third position on the stack. This is | |||
| the reverse effect of "rot". | |||
| xor : ( A B -- AxorB ) | |||
| replaces the two booleans on the top of logical stack by the XOR. | |||
| vers : [ -- version ] | |||
| puts the version value on the top of the stack. | |||
| ">v : { string -- } | |||
| initializes a variable with the top character stack entry. | |||
| The name of the variable must follow this instruction. His previous content is | |||
| lost. | |||
| : : | |||
| begins a function definition which the name is the first word following it. The end is indicate by ;. | |||
| :! : | |||
| begins a system function definition which the name is the first word following | |||
| it. The end is indicate by ;. A such function take place in the User System | |||
| functions list and cannot be removed. | |||
| ; : | |||
| ends a function definition that was begin by :. | |||
| >v : [ E -- ] | |||
| initializes a variable with the top stack entry. | |||
| The name of the variable must follow this instruction. His previous content is | |||
| lost. | |||
| ?>v : ( boolean -- ) | |||
| initializes a variable with the top logical stack entry. | |||
| The name of the variable must follow this instruction. His previous content is | |||
| lost. | |||
| ?console : [ n -- ] | |||
| displays the background console of task number n. | |||
| ?f : | |||
| display the function stack. | |||
| ?t : | |||
| display the task stack. | |||
| ?task_run : [ n -- ] ( -- true/false ) | |||
| tests if the task number n is running and put a boolean on the logical stack. | |||
| ?v : | |||
| display the variable stack. | |||
| Task : [ -- no_task ] | |||
| creates a task from a function. The name of the function must following it. | |||
| The avaibles names are thoses giving by ?f. In success, the task number is on | |||
| the numerical stack. | |||
| Var : | |||
| creates an empty global variable which the name is the first word following it. | |||
| The variables are multiforms and can content scalar, array, boolean, string or | |||
| a function name. In this case, it is an executable variable. | |||
| "Var : | |||
| creates an empty global variable which the name is on the character stack. | |||
| The variables are multiforms and can content scalar, array, boolean, string or | |||
| a function name. In this case, it is an executable variable. | |||
| again : | |||
| use in function programmation to create an infinite loop. For example : | |||
| : f1 ... begin ... again ... ; | |||
| This must be done into a function (beetween : and ;). | |||
| begin : | |||
| use in function programmation to create a loop. For example : | |||
| : f1 ... begin ... [condition] while ... repeat ... ; | |||
| : f2 ... begin ... [condition] until ... ; | |||
| or infinite loop : | |||
| : f3 ... begin ... again ... ; | |||
| This must be done into a function (beetween : and ;). | |||
| break : | |||
| use in function programmation to exit a loop. For example : | |||
| : f1 ... begin ... [condition] if ... break then ... again ... ; | |||
| This must be done into a function (beetween : and ;). | |||
| del_func : | |||
| delete the more recent version of a function. | |||
| The name of the function must follow this instruction. | |||
| del_afunc : | |||
| delete all functions beginning by a prefix. | |||
| The prefix of the function must follow this instruction. | |||
| del_ofunc : | |||
| delete the oldest version of a function. | |||
| The name of the function must follow this instruction. | |||
| del_task : [ n -- ] | |||
| delete the task number n. | |||
| del_var : | |||
| delete a variable. The name of the variable must follow this instruction. | |||
| else : | |||
| use to make a test. For example : | |||
| toto 1 > if 12 else -7 then | |||
| At execution time, if toto is greater than 1 12 is put on the stack else -7 is | |||
| put. Then dup is executed. | |||
| This must be done into a function (beetween : and ;). | |||
| fdrop : | |||
| removes the top function stack entry. In fact, the last function created. | |||
| fscan : | |||
| display the result of reverse engineering scanner for a function. | |||
| The name of the function must follow this instruction. | |||
| if : | |||
| use to make a test. For example : | |||
| toto 1 > if 12 else -7 then | |||
| At execution time, if toto is greater than 1 12 is put on the stack else -7 is | |||
| put. Then dup is executed. | |||
| This must be done into a function (beetween : and ;). | |||
| in : | |||
| used to complete the install commands. | |||
| Example : install f1 in var | |||
| install : | |||
| installs a function in a variable. The name must follow this instruction. | |||
| This name will be search first in libraries and after in user functions. | |||
| Example : install drop in var | |||
| install_f : | |||
| installs a function in a variable. The name must follow this instruction. | |||
| This name will be search first in user functions and after in libraries. | |||
| Example : install_f f1 in var | |||
| install_v : | |||
| installs the content of a variable in another variable. The source name must | |||
| follow this instruction. | |||
| This name will be search only in variables list. | |||
| Example : install_v v1 in v2 | |||
| load : | |||
| loads a source file. The name of the file must follow this instruction. | |||
| "load : { "filename" -- } | |||
| loads a source file taking the name of the file on the top of character stack. | |||
| myself : | |||
| use in a function definition to call the function herself (recursive case). | |||
| This must be done into a function (beetween : and ;). | |||
| repeat : | |||
| use in function programmation to create a loop. For example : | |||
| : fonction ... begin ... [condition] while ... repeat ... ; | |||
| This must be done into a function (beetween : and ;). | |||
| reset_var : | |||
| resets a variable. The name of the variable must follow this instruction. | |||
| return : | |||
| ends the execution into a function. | |||
| stop_task : [ n -- ] | |||
| stop the task number n. | |||
| then : | |||
| use to make a test. For example : | |||
| toto 1 > if 12 else -7 then | |||
| At execution time, if toto is greater than 1 12 is put on the stack else -7 is | |||
| put. Then dup is executed. | |||
| This must be done into a function (beetween : and ;). | |||
| until : | |||
| use in function programmation to create a loop. For example : | |||
| : f1 ... begin ... [condition] until ... ; | |||
| This must be done into a function (beetween : and ;). | |||
| var_down : | |||
| set DOWN execution of variables. | |||
| To execute an instruction seach first in user functions, and then in system | |||
| libraries, and finaly in variables. | |||
| var_off : | |||
| set OFF execution of variables. | |||
| To execute an instruction seach first in user functions and then in system | |||
| libraries. No seach in variables. | |||
| var_up : | |||
| set UP execution of variables. | |||
| To execute an instruction seach first in variables, then in user functions and | |||
| finaly in system libraries. | |||
| while : | |||
| use in function programmation to create a loop. For example : | |||
| : fonction ... begin ... [condition] while ... repeat ... ; | |||
| This must be done into a function (beetween : and ;). | |||
| vdrop : | |||
| removes the top variable stack entry. In fact, the last variable created. | |||
| >csv [ tab1 tab2 ... tabn n -- ] { "filename;libtabn; ... ;libtab1" -- } | |||
| create a file filename.csv with the n arrays on the top of the stack. The title of each line can be present after the filename without ".csv", separate by ';'. | |||
| >net : [ E1 E2 ... En n -- ] | |||
| transfert the n elements from local stack to Net stack using NetKey. | |||
| ?n : | |||
| display the Net informations. | |||
| ?ns : | |||
| display the Net stack using NetKey. | |||
| ndepth : [ -- Net_Stack_Depth ] | |||
| returns the number of entries on the Net stack using NetKey. | |||
| NetKey : [ key -- ] | |||
| change the value of NetKey. It is a 32 bits INTEGER. | |||
| NetErr : [ -- err_value ] | |||
| put the Net Error value on the top of the stack. It is the negative of NetKey! | |||
| NetServer : { "ServerName" -- } | |||
| change the default NetServer (localhost). | |||
| ndrop : | |||
| drop the elements on the Net stack using NetKey. | |||
| net> : [ -- E1 E2 ... En ] | |||
| transfert all elements from Net stack to local stack using NetKey. | |||
| netDt> : [ -- dt ] | |||
| get the dt value. It represents the difference between the clock of the network | |||
| and the local clock. | |||
| This value must be used before sending time value to the net stack, or after | |||
| getting time value from the net stack. For examples : | |||
| On system A : | |||
| time netDt> + 1 >net # transform the local time in network scale and send it. | |||
| On system B : | |||
| net> netDt> - # get the time of A and translate it in local scale. | |||
| netOff : | |||
| disconnect from Nife network. | |||
| netOn : { "UserName" -- } | |||
| connect to Nife network using the NetServer variable. The UserName is memorized | |||
| and can be get by Me. | |||
| Me : { -- "UserName" } | |||
| put on the top of character stack the username. It is the name given with the | |||
| last netOn command, or, if absent, the content of environment variables, in | |||
| order : NIFENAME, LOGNAME, USERNAME, USER or "Nobody" if variables are absent. | |||
| netExec : { "func_name" "UserName" -- } | |||
| send a Nife RPC call to execute the function func_name on the system Username. | |||
| The result will be send on the network using the current NetKey. If UserName is | |||
| not existant, an error occurs. But if func_name does not exist, or fails in the | |||
| execution, the negative value of NetKey (NetErr) is returned on the net stack. | |||
| netCompile : { "source_file" "UserName" -- } | |||
| send a Nife source file to compile it (like load) on the system Username. | |||
| If source file does not exist, or UserName is absent an error occurs. If the | |||
| file containts function call, the result will be send on the network using | |||
| the current NetKey. | |||
| If an error occurs during the compilation or the execution, the negative value | |||
| of NetKey (NetErr) is returned on the net stack. | |||
| srusage : | |||
| display a board of NetServer ressources usage. | |||
| stopServer : | |||
| Tell the NetServer to stop after netOff if no other user is present. | |||
| []-sub : [ [v1,v2,...,vl,...,vn] l -- [v1,v2,...,vl] ] | |||
| extract a left sub-array from an array. If l > n fill zeros on left side. | |||
| []sub : [ [vn,...,vl,...,v2,v1] l -- [vl,...,v2,v1] ] | |||
| extract a right sub-array from an array. If l > n fill zeros on right side. | |||
| *[]-sub : [ tab1 tab2 ... tabN N l -- tabl1 tabl2 ... tablN ] | |||
| extract a left sub-array like sub[] from N arrays. The N arrays have l elements after execution. | |||
| *[]sub : [ tab1 tab2 ... tabN N l -- tabl1 tabl2 ... tablN ] | |||
| extract a right sub-array like []sub from N arrays. All arrays have l elements after execution. | |||
| do : [ limit val -- ] | |||
| use in function programmation to create a loop with an index going from val to | |||
| limit. Use loop for auto-convergent loop. For examples : | |||
| : f1 5 0 do ... loop ... ; | |||
| a loop with an index going from 0 to 4 incremented by 1 (i = 0,1,2,3,4). | |||
| : f 0 5 do ... loop ... ; | |||
| a loop with an index going from 5 to 1 decremented by 1 (i = 5,4,3,2,1). | |||
| : f2 15 1 do ... 3 +loop ... ; | |||
| a loop with an index going from 1 to 15 incremented by 3 (i = 1,4,7,10,13). | |||
| This must be done into a function (beetween : and ;). | |||
| loop : | |||
| use in function programmation to create an auto-convergent loop with do using | |||
| the default 1 by 1 progression. For example : | |||
| : f 5 0 do ... loop ... ; | |||
| a loop with an index going from 0 to 4 incremented by 1 (i = 0,1,2,3,4). | |||
| : f 0 5 do ... loop ... ; | |||
| a loop with an index going from 5 to 1 decremented by 1 (i = 5,4,3,2,1). | |||
| This must be done into a function (beetween : and ;). | |||
| +loop : [ inc -- ] | |||
| use in function programmation to create a loop with do using the value inc for | |||
| incrementation. For example : | |||
| : f 15 1 do ... 3 +loop ... ; | |||
| a loop with an index going from 1 to 15 incremented by 3 (i = 1,4,7,10,13). | |||
| This must be done into a function (beetween : and ;). | |||
| ndo : [ n -- ] | |||
| returns the number of do-loop in the running context. | |||
| It's usefull before using the indexes I J or K. | |||
| I : [ -- val ] | |||
| returns the value of the index of the current do-loop. | |||
| This must be done into a function (beetween : and ;). | |||
| J : [ -- val ] | |||
| returns the value of the index of the do-loop containing the current one. | |||
| This must be done into a function (beetween : and ;). | |||
| K : [ -- val ] | |||
| returns the value of the index of the second level do-loop containing the | |||
| current one. | |||
| This must be done into a function (beetween : and ;). | |||
| do_next : [ -- ] | |||
| free-context instruction to bypass the end of a loop and go to the next step. | |||
| do_leave : [ -- ] | |||
| free-context instruction to finish the current loop. | |||
| *do_leave : [ n -- ] | |||
| free-context instruction to finish the n currents loops. | |||
| ?gp : | |||
| display the gplot stack. | |||
| del_gplot : [ n -- ] | |||
| delete the gplot number n. The file is deleted but the screen is keeped. | |||
| gplot : { "filename" "title" -- } | |||
| create a gplot for one plot having as title "title" and working with the file | |||
| filename. | |||
| gplotM : [ n -- ] { "filename" "title" -- } | |||
| create a gplot for n (Multiple) plots having as title "title" and working with | |||
| the file filename. | |||
| gplotCmd : [ n -- ] { "options" -- } | |||
| updating the string command option of gplot number n. | |||
| gplotClear : [ n -- ] | |||
| clear the file of the gplot number n. | |||
| gplotAdd : [ tab n -- ] | |||
| add at the end of the file of gplot number n, a line with data of tab. | |||
| gplotRepl : [ tab n -- ] | |||
| remove the first line and add at the end of the file of gplot number n, a line | |||
| with data of tab. | |||
| gplotRaz : | |||
| remove all gplots. The files are deleted but the screens are keeped. | |||
| ?dev : | |||
| lists all the devices available. The DID is at the beginning of the lines. | |||
| dev_dflt : [ DID SID CID -- ] | |||
| defines default values in order Device ID, Subdevice ID and Channel ID. | |||
| ?dev_dflt : | |||
| shows informations about the default values device (DID, SID, CID). | |||
| dev_dflR : [ -- VAL ] | |||
| read the device using the default values DID, SID and CID. | |||
| dev_dflW : [ VAL -- ] | |||
| write the value VAL on the device using the default values DID, SID and CID. | |||
| dev_info : [ DID -- ] | |||
| shows informations about device DID. | |||
| dev_read : [ DID SID CID -- VAL ] | |||
| read the device DID, sub-device SID and channel CID, and put the value on the | |||
| numeric stack. | |||
| dev_write : [ VAL DID SID CID -- ] | |||
| write the value VAL on the device DID, subdevice SID and channel CID. | |||
| cos : [ v -- cos(v) ] | |||
| compute the cosinus of the value on the top of the stack. | |||
| sin : [ v -- sin(v) ] | |||
| compute the sinus of the value on the top of the stack. | |||
| onerr: : | |||
| defines, into a function (beetween : and ;), a label for programming an errors | |||
| treatment in case of an error occurs. | |||
| end: : | |||
| defines, into a function (beetween : and ;), a label for programming a end | |||
| treatment. In case of an error occurs, theses instructions will be executed if | |||
| this label is AFTER the onerr: label. | |||
| goto_end : | |||
| instruction, into a function (beetween : and ;), to go to the end: label. | |||
| ?err : ( -- T/F ) | |||
| tests if an error have occured and put true or false, on the logical stack. | |||
| ?lasterr : | |||
| displays the last error elements. | |||
| messerr : [ n -- ] { -- "error message" } | |||
| puts on the character stack the error message number n. | |||
| noerr : [ -- n ] | |||
| gives the number of last error. | |||
| @@ -0,0 +1,123 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* scs.c */ | |||
| /* Scs means Sister Chip Signature */ | |||
| #include <stdio.h> | |||
| #include <sys/types.h> | |||
| #include "scs.h" | |||
| static struct Ref { /* Representatives data */ | |||
| double D; | |||
| char C1; | |||
| char C2; | |||
| short S; | |||
| char C3; | |||
| int I; | |||
| char C4; | |||
| long long LL; | |||
| } E; | |||
| static uint32_t MyScs=0; | |||
| static void Scs_init(void) | |||
| { | |||
| E.C1 = 'N'; | |||
| E.C2 = 'i'; | |||
| E.C3 = 'f'; | |||
| E.C4 = 'e'; | |||
| E.D = 2.7182818284590452354; /* e */ | |||
| E.S = 763; | |||
| E.I = 33497; | |||
| E.LL = (long long) 762572642; | |||
| } | |||
| uint32_t getScs(void) | |||
| { | |||
| int i,l; | |||
| unsigned char *t, k; | |||
| uint32_t r; | |||
| if (MyScs == 0) { | |||
| Scs_init(); | |||
| l = sizeof(E); | |||
| t =(unsigned char*)&E; | |||
| r=0; | |||
| k=0; | |||
| for (i=0; i<l; i++) { | |||
| /* printf("%d : k=%d %u r=0x%.8lx\n",i,(int)k,(unsigned int)t[i],r);*/ | |||
| switch(k) { | |||
| case 0: | |||
| r+=(unsigned int)t[i]; | |||
| break; | |||
| case 1: | |||
| r+=(unsigned int)(((int)t[i])<<5); | |||
| break; | |||
| case 2: | |||
| r+=(unsigned int)(((int)t[i])<<10); | |||
| break; | |||
| default: | |||
| r+=(unsigned int)(((int)t[i])<<15); | |||
| break; | |||
| } | |||
| if (++k==4) k=0; | |||
| } | |||
| /* printf("Key : l=%d r=%lu (0x%.8lx)\n",l,r,r); */ | |||
| MyScs = r + (uint32_t)(l<<24); | |||
| } | |||
| return MyScs; | |||
| } | |||
| /* ******************** for tests ************************************ | |||
| int main(int N, char*P[]) | |||
| { | |||
| int i; | |||
| unsigned char *d, *f; | |||
| unsigned short *ds, *fs; | |||
| unsigned int *di, *fi; | |||
| unsigned long long *dl, *fl; | |||
| printf("short : %.2d\n", sizeof(short)); | |||
| printf("int : %.2d\n", sizeof(int)); | |||
| printf("size_t : %.2d\n", sizeof(size_t)); | |||
| printf("long : %.2d\n", sizeof(long)); | |||
| printf("long long : %.2d\n", sizeof(long long)); | |||
| printf("float : %.2d\n", sizeof(float)); | |||
| printf("double : %.2d\n", sizeof(double)); | |||
| printf("long double : %.2d\n", sizeof(long double)); | |||
| printf("E : %.2d\n", sizeof(E)); | |||
| Scs_init(); | |||
| d=(char*)&E; | |||
| f=d+sizeof(E); | |||
| while (d < f) printf("%.2x",(int)*d++); | |||
| printf("\n"); | |||
| ds=(short*)&E; | |||
| fs=ds+(sizeof(E)/sizeof(short)); | |||
| while (ds < fs) printf("%4x",(int)*ds++); | |||
| printf("\n"); | |||
| di=(int*)&E; | |||
| fi=di+(sizeof(E)/sizeof(int)); | |||
| while (di < fi) printf("%8x",*di++); | |||
| printf("\n"); | |||
| dl=(long long*)&E; | |||
| fl=dl+(sizeof(E)/sizeof(long long)); | |||
| while (dl < fl) printf("%.16llx",*dl++); | |||
| printf("\n"); | |||
| printf("D : %.2d s=%.2d\n",(void*)(&E.D)-(void*)(&E),sizeof(E.D)); | |||
| printf("S : %.2d s=%.2d\n",(void*)(&E.S)-(void*)(&E),sizeof(E.S)); | |||
| printf("I : %.2d s=%.2d\n",(void*)(&E.I)-(void*)(&E),sizeof(E.I)); | |||
| printf("LL: %.2d s=%.2d\n",(void*)(&E.LL)-(void*)(&E),sizeof(E.LL)); | |||
| printf("MyScs = 0x%.8lx\n",getScs()); | |||
| printf("MyScs = 0x%.8lx\n",getScs()); | |||
| } | |||
| ****************/ | |||
| @@ -0,0 +1,26 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* scs.h */ | |||
| /* Scs means Sister Chip Signature */ | |||
| #ifndef __NIFE_SCS_H__ | |||
| #define __NIFE_SCS_H__ | |||
| #include <stdint.h> | |||
| extern uint32_t getScs(void); | |||
| #endif | |||
| @@ -0,0 +1,243 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| #include "conf.h" | |||
| /* stackC.c */ | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| #include <time.h> | |||
| #include "nife.h" | |||
| #include "mth.h" | |||
| #include "err.h" | |||
| #include "stackC.h" | |||
| #include "stackF.h" | |||
| /* #define DEBUG_M */ | |||
| void putString(char * S) | |||
| { | |||
| void * M; | |||
| int i; | |||
| i = i_StackC; | |||
| if (i == LSTACKC) stopErr("putString",NULL); | |||
| if ((M = malloc(strlen(S)+1)) == NULL) stopErr("putString","malloc"); | |||
| #ifdef DEBUG_M | |||
| printf("New String address : %lu \n",(unsigned long)M); | |||
| #endif | |||
| strcpy((char*)M,S); | |||
| if (fctEnCours) makeFct(T_CHA,M); | |||
| else { | |||
| stackC[i++] = (char*)M; | |||
| _MODIF_i_StackC_(i); | |||
| } | |||
| } | |||
| char * getString(void) /* NOT free() !!! */ | |||
| { | |||
| int i; | |||
| i = i_StackC; | |||
| if (i) { | |||
| i--; | |||
| _MODIF_i_StackC_(i); | |||
| return(stackC[i]); | |||
| } | |||
| messErr(6); | |||
| return NULL; | |||
| } | |||
| int isNString(int n) | |||
| { | |||
| if (i_StackC >= n) return 1; | |||
| return 0; | |||
| } | |||
| void IF_dropC(void) | |||
| { | |||
| char * S; | |||
| S=getString(); | |||
| #ifdef DEBUG_M | |||
| printf("Del String address : %lu \n",(unsigned long)S); | |||
| #endif | |||
| if (S != NULL) free((void*)S); | |||
| } | |||
| static void IF_dupC_i(int i) | |||
| { | |||
| char * S; | |||
| int I; | |||
| I = i_StackC; | |||
| if (I>=i) { | |||
| S = stackC[I-i]; | |||
| putString(S); | |||
| } | |||
| else messErr(19); | |||
| } | |||
| void IF_dupC(void) | |||
| { | |||
| IF_dupC_i(1); | |||
| } | |||
| void IF_overC(void) | |||
| { | |||
| IF_dupC_i(2); | |||
| } | |||
| void IF_swapC(void) | |||
| { | |||
| char * S; | |||
| int I; | |||
| I = i_StackC; | |||
| if (I>1) { | |||
| S = stackC[I-1]; | |||
| stackC[I-1] = stackC[I-2]; | |||
| stackC[I-2] = S; | |||
| } | |||
| else messErr(19); | |||
| } | |||
| void IF_stackC_clear(void) | |||
| { | |||
| while (i_StackC) IF_dropC(); | |||
| } | |||
| static void IF_catC_i(int i) | |||
| { | |||
| char * S1, * S2, *S; | |||
| int l, I; | |||
| I = i_StackC; | |||
| if (I>1) { | |||
| S1 = stackC[I-2]; | |||
| S2 = stackC[I-1]; | |||
| l = strlen(S1) + strlen(S2) + i + 1; | |||
| if ((S = (char*)malloc(l+1)) == NULL) stopErr("IF_catC_i","malloc"); | |||
| strcpy(S,S1); | |||
| if (i) strcat(S, " "); | |||
| strcat(S,S2); | |||
| IF_dropC(); | |||
| IF_dropC(); | |||
| I = i_StackC; | |||
| stackC[I++]=S; | |||
| _MODIF_i_StackC_(I); | |||
| } | |||
| else messErr(19); | |||
| } | |||
| void IF_catC(void) | |||
| { | |||
| IF_catC_i(0); | |||
| } | |||
| void IF_catsC(void) | |||
| { | |||
| IF_catC_i(1); | |||
| } | |||
| void IF_crC(void) | |||
| { | |||
| printf("\n"); | |||
| } | |||
| static void Get_Date_Time(int x) | |||
| { | |||
| struct tm * T; | |||
| time_t t0; | |||
| char b[12]; | |||
| t0 = time(NULL); | |||
| T = localtime(&t0); | |||
| if (x) sprintf(b,"%.2d/%.2d/%.4d",T->tm_mday,T->tm_mon+1,T->tm_year+1900); | |||
| else sprintf(b,"%.2d:%.2d:%.2d",T->tm_hour,T->tm_min,T->tm_sec); | |||
| putString(b); | |||
| } | |||
| void IF_dateC(void) | |||
| { | |||
| Get_Date_Time(1); | |||
| } | |||
| void IF_timeC(void) | |||
| { | |||
| Get_Date_Time(0); | |||
| } | |||
| void IF_typeC(void) | |||
| { | |||
| int i; | |||
| i = i_StackC; | |||
| if (i) { | |||
| printf("%s",stackC[i-1]); | |||
| IF_dropC(); | |||
| } | |||
| else messErr(6); | |||
| } | |||
| void IF_show_stackC(void) | |||
| { | |||
| int i,j=0,I; | |||
| char s; | |||
| I=i_StackC; | |||
| for(i=I-1;i>=0;i--) { | |||
| #ifdef DEBUG_M | |||
| printf(" %.5d : \"%s\" Add=%lu",strlen(stackC[i]),stackC[i], | |||
| (unsigned long)(stackC[i])); | |||
| #else | |||
| printf(" %.5d : \"%s\"",(int)strlen(stackC[i]),stackC[i]); | |||
| #endif | |||
| if (j==0) printf(" <- top"); | |||
| printf("\n"); | |||
| j++; | |||
| if (j==NBLIG) break; | |||
| } | |||
| if (i>0) { | |||
| if (i==1) s=' '; | |||
| else s='s'; | |||
| printf(" ... and %d other%c string%c !\n",I-NBLIG,s,s); | |||
| } else printf("<end of character stack>\n"); | |||
| } | |||
| void suiteString(char *S) | |||
| { | |||
| int end=0; | |||
| if ((strlen(bufC)+strlen(S)+1) > MAXSTRING) { | |||
| dropTrSuite(); | |||
| _MODIF_stringEnCours_(0); | |||
| messErr(9); | |||
| return; | |||
| } | |||
| if (S[strlen(S)-1] == '"') { | |||
| S[strlen(S)-1] = '\0'; | |||
| end=1; | |||
| } | |||
| strcat(bufC,S); | |||
| if (end) { | |||
| dropTrSuite(); | |||
| _MODIF_stringEnCours_(0); | |||
| putString(bufC); | |||
| } | |||
| } | |||
| void IF_debString(void) | |||
| { | |||
| bufC[0]='\0'; | |||
| putTrSuite(suiteString); | |||
| _MODIF_stringEnCours_(1); | |||
| } | |||
| @@ -0,0 +1,38 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* stackC.h */ | |||
| #ifndef __NIFE_STACKC_H__ | |||
| #define __NIFE_STACKC_H__ | |||
| extern void IF_stackC_clear(void); | |||
| extern void putString(char * S); | |||
| extern char * getString(void); | |||
| extern int isNString(int n); | |||
| extern void IF_dropC(void); | |||
| extern void IF_dupC(void); | |||
| extern void IF_overC(void); | |||
| extern void IF_swapC(void); | |||
| extern void IF_catC(void); | |||
| extern void IF_catsC(void); | |||
| extern void IF_crC(void); | |||
| extern void IF_typeC(void); | |||
| extern void IF_timeC(void); | |||
| extern void IF_dateC(void); | |||
| extern void IF_show_stackC(void); | |||
| extern void IF_debString(void); | |||
| #endif | |||
| @@ -0,0 +1,120 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* stackF.h */ | |||
| #ifndef __NIFE_STACKF_H__ | |||
| #define __NIFE_STACKF_H__ | |||
| extern int FctInTask; | |||
| typedef unsigned char Code; | |||
| #define T_NOP ((Code)0) /* No OPeration */ | |||
| #define T_RET ((Code)1) /* RETURN in function */ | |||
| #define T_NUM ((Code)2) /* Numeric element */ | |||
| #define T_CHA ((Code)3) /* Character element */ | |||
| #define T_LIB ((Code)4) /* Standard Library function */ | |||
| #define T_FCT ((Code)5) /* User function */ | |||
| #define T_IF ((Code)6) /* IF */ | |||
| #define T_ELSE ((Code)7) /* THEN */ | |||
| #define T_THEN ((Code)8) /* ELSE */ | |||
| #define T_JMP ((Code)9) /* JUMP depl */ | |||
| #define T_BEGI ((Code)10)/* BEGIN */ | |||
| #define T_AGAI ((Code)11)/* AGAIN */ | |||
| #define T_UNTI ((Code)12)/* UNTIL */ | |||
| #define T_WHIL ((Code)13)/* WHILE */ | |||
| #define T_REPE ((Code)14)/* REPEAT */ | |||
| #define T_DO ((Code)15)/* DO */ | |||
| #define T_LOOP ((Code)16)/* LOOP */ | |||
| #define T_PLOO ((Code)17)/* +LOOP */ | |||
| #define T_BREA ((Code)18)/* BREAK in all loops */ | |||
| #define T_GOTO ((Code)19)/* GOTO */ | |||
| #define T_MYSF ((Code)20)/* MYSELF for current function */ | |||
| #define T_IFN ((Code)21)/* IF NOT */ | |||
| #define T_IFD ((Code)22)/* IF in DO */ | |||
| #define T_DO_I ((Code)23)/* INDEX of DO */ | |||
| #define T_DO_J ((Code)24)/* INDEX of DO PREVIOUS LEVEL */ | |||
| #define T_DO_K ((Code)25)/* INDEX of DO 2 LEVELS UP */ | |||
| #define T_VAR ((Code)26)/* Variable */ | |||
| #define T_BKC ((Code)27)/* Back Compilation */ | |||
| #define T_BKC1 ((Code)28)/* Back Compilation on 1st time */ | |||
| #define T_ONER ((Code)29)/* onerr: for current function */ | |||
| #define T_END ((Code)30)/* end: for current function */ | |||
| #define T_JEND ((Code)31)/* goto end: for current function */ | |||
| #define T_EXEK ((Code)32)/* "execk code */ | |||
| #define T_FCTD ((Code)33)/* Dynamic User function */ | |||
| #define T_FCTP ((Code)34)/* Primary Dynamic User function */ | |||
| #define T_FCTDW ((Code)35)/* Dynamic User function without remove string */ | |||
| #define T_CHAS ((Code)36)/* Character element Stopped */ | |||
| #define T_VARS ((Code)37)/* Variable Stopped */ | |||
| #define T_FCTDS ((Code)38)/* Dynamic User funct. Stopped */ | |||
| #define T_FCTDWS ((Code)39)/* Dynamic User funct. Stopped without remove str. */ | |||
| #define T_EXEKS ((Code)40)/* "execk code Stopped */ | |||
| extern int D_Cod; | |||
| extern void IF_show_stackF(void); | |||
| extern void IF_debFct(void); | |||
| extern void IF_debFctS(void); | |||
| extern void IF_finFct(void); | |||
| extern void updDynFct(void *A, int Mode); | |||
| extern void rmLastFct(void); | |||
| extern void makeFct(Code c, void * E); | |||
| extern int IF_execFct(char * L); | |||
| extern void IF_delFct(void); | |||
| extern void IF_delAFct(void); | |||
| extern void IF_delOFct(void); | |||
| extern void IF_scanFct(void); | |||
| extern void IF_DO_Leave(void); | |||
| extern void IF_DO_MLeave(void); | |||
| extern void IF_DO_Next(void); | |||
| extern void IF_DO_Show(void); | |||
| extern void execCode(void *C); | |||
| extern void * fctByName(char *L); | |||
| extern void * fctByCode(void *C); | |||
| extern void execFctV(void * A); | |||
| extern char * fctByAddr(void *A); | |||
| extern char * codByAddr(void *A); | |||
| extern void IF_nDO(void); | |||
| extern void IF_execCS(void); | |||
| extern void IF_execCSv(void); | |||
| extern void IF_execCSl(void); | |||
| extern void IF_execCSvl(void); | |||
| extern void IF_RET(void); | |||
| extern void IF_IF(void); | |||
| extern void IF_THEN(void); | |||
| extern void IF_ELSE(void); | |||
| extern void IF_BEGIN(void); | |||
| extern void IF_AGAIN(void); | |||
| extern void IF_UNTIL(void); | |||
| extern void IF_WHILE(void); | |||
| extern void IF_REPEAT(void); | |||
| extern void IF_BREAK(void); | |||
| extern void IF_MYSELF(void); | |||
| extern void IF_ONERR(void); | |||
| extern void IF_END(void); | |||
| extern void IF_JEND(void); | |||
| extern void IF_DO(void); | |||
| extern void IF_LOOP(void); | |||
| extern void IF_PLOOP(void); | |||
| extern void IF_I_DO(void); | |||
| extern void IF_J_DO(void); | |||
| extern void IF_K_DO(void); | |||
| extern void IF_EXEK(void); | |||
| extern void IF_debBackC(void); | |||
| extern void IF_debBackC1(void); | |||
| #endif | |||
| @@ -0,0 +1,180 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* stackL.c */ | |||
| #include "conf.h" | |||
| #include <stdio.h> | |||
| #include "nife.h" | |||
| #include "mth.h" | |||
| #include "err.h" | |||
| #include "stackL.h" | |||
| void IF_stackL_clear(void) | |||
| { | |||
| _MODIF_i_StackL_(0); | |||
| } | |||
| void putBool(bool B) | |||
| { | |||
| int i; | |||
| i=i_StackL; | |||
| stackL[i++] = B; | |||
| _MODIF_i_StackL_(i); | |||
| if (i == LSTACKL) stopErr("putBool",NULL); | |||
| } | |||
| void IF_dupL(void) | |||
| { | |||
| int i; | |||
| i=i_StackL; | |||
| if (i) { | |||
| putBool(stackL[i-1]); | |||
| } else messErr(5); | |||
| } | |||
| void IF_swapL(void) | |||
| { | |||
| bool B; | |||
| int i; | |||
| i=i_StackL; | |||
| if (i > 1) { | |||
| B = stackL[i-1]; | |||
| stackL[i-1] = stackL[i-2]; | |||
| stackL[i-2] = B; | |||
| } else messErr(20); | |||
| } | |||
| void IF_andL(void) | |||
| { | |||
| bool B; | |||
| int i; | |||
| i=i_StackL; | |||
| if (i > 1) { | |||
| B = stackL[i-1] & stackL[i-2]; | |||
| stackL[i-2] = B; | |||
| i--; | |||
| _MODIF_i_StackL_(i); | |||
| } else messErr(20); | |||
| } | |||
| void IF_orL(void) | |||
| { | |||
| bool B; | |||
| int i; | |||
| i=i_StackL; | |||
| if (i > 1) { | |||
| B = stackL[i-1] | stackL[i-2]; | |||
| stackL[i-2] = B; | |||
| i--; | |||
| _MODIF_i_StackL_(i); | |||
| } else messErr(20); | |||
| } | |||
| void IF_xorL(void) | |||
| { | |||
| bool B; | |||
| int i; | |||
| i=i_StackL; | |||
| if (i> 1) { | |||
| if (stackL[i-1] == stackL[i-2]) B=FALSE; | |||
| else B = TRUE; | |||
| stackL[i-2] = B; | |||
| i--; | |||
| _MODIF_i_StackL_(i); | |||
| } else messErr(20); | |||
| } | |||
| void IF_overL(void) | |||
| { | |||
| int i; | |||
| i=i_StackL; | |||
| if (i > 1) { | |||
| putBool(stackL[i-2]); | |||
| } else messErr(20); | |||
| } | |||
| bool getBool(void) | |||
| { | |||
| int i; | |||
| i=i_StackL; | |||
| if (i) { | |||
| i--; | |||
| _MODIF_i_StackL_(i); | |||
| return(stackL[i]); | |||
| } else messErr(5); | |||
| return -1; | |||
| } | |||
| void IF_typeL(void) | |||
| { | |||
| int i; | |||
| i=i_StackL; | |||
| if (i) { | |||
| i--; | |||
| _MODIF_i_StackL_(i); | |||
| if(stackL[i]) printf("true\n"); | |||
| else printf("false\n"); | |||
| } else messErr(5); | |||
| } | |||
| void negBool(void) | |||
| { | |||
| int i; | |||
| i=i_StackL; | |||
| if (i) { | |||
| i--; | |||
| if(stackL[i]) stackL[i]= FALSE; | |||
| else stackL[i]= TRUE; | |||
| } else messErr(5); | |||
| } | |||
| void IF_true(void) | |||
| { | |||
| putBool(TRUE); | |||
| } | |||
| void IF_false(void) | |||
| { | |||
| putBool(FALSE); | |||
| } | |||
| void IF_dropL(void) | |||
| { | |||
| getBool(); | |||
| } | |||
| void IF_show_stackL(void) | |||
| { | |||
| int i,j=0,I; | |||
| char s; | |||
| I=i_StackL; | |||
| for(i=I-1;i>=0;i--) { | |||
| if (stackL[i]) printf(" TRUE"); | |||
| else printf(" FALSE"); | |||
| if (j==0) printf(" <- top"); | |||
| printf("\n"); | |||
| j++; | |||
| if (j==NBLIG) break; | |||
| } | |||
| if (i>0) { | |||
| if (i==1) s=' '; | |||
| else s='s'; | |||
| printf(" ... and %d other%c boolean%c !\n",I-NBLIG,s,s); | |||
| } else printf("<end of logical stack>\n"); | |||
| } | |||
| @@ -0,0 +1,40 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* stackL.h */ | |||
| #ifndef __NIFE_STACKL_H__ | |||
| #define __NIFE_STACKL_H__ | |||
| #define TRUE ((bool)1) | |||
| #define FALSE ((bool)0) | |||
| extern void IF_stackL_clear(void); | |||
| extern void putBool(bool); | |||
| extern bool getBool(void); | |||
| extern void negBool(void); | |||
| extern void IF_dropL(void); | |||
| extern void IF_dupL(void); | |||
| extern void IF_swapL(void); | |||
| extern void IF_overL(void); | |||
| extern void IF_typeL(void); | |||
| extern void IF_andL(void); | |||
| extern void IF_orL(void); | |||
| extern void IF_xorL(void); | |||
| extern void IF_true(void); | |||
| extern void IF_false(void); | |||
| extern void IF_show_stackL(void); | |||
| #endif | |||
| @@ -0,0 +1,125 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* stackN.h */ | |||
| #ifndef __NIFE_STACKN_H__ | |||
| #define __NIFE_STACKN_H__ | |||
| #include <stdint.h> | |||
| #define _VERIF_STACK_ if (StackN == VIDE) { messErr(2); return; } | |||
| extern int lAdrNum(void); | |||
| extern int putVal(char *V); | |||
| extern void putLong(long long V); | |||
| extern void putDouble(double d); | |||
| extern int getParLong(long *V); | |||
| extern void insertVal(void *A); | |||
| extern void putVar(void *A); | |||
| extern void * getVar(void); | |||
| extern void IF_vers(void); | |||
| extern void IF_drop(void); | |||
| extern void IF_stack_clear(void); | |||
| extern void printNumber(void * N); | |||
| extern void numVarOff(void * N); | |||
| extern void * duplicateNum(void * S, int vSoff); | |||
| extern void IF_show_stack(void); | |||
| extern void IF_ramp(void); | |||
| extern void IF_dramp(void); | |||
| extern void IF_REAL(void); | |||
| extern void IF_INTEGER(void); | |||
| extern void IF_ECHOFF(void); | |||
| extern void IF_ECHOON(void); | |||
| extern void IF_NBTAB(void); | |||
| extern void IF_NBLIG(void); | |||
| extern void IF_VAROFF(void); | |||
| extern void IF_VARUP(void); | |||
| extern void IF_VARDOWN(void); | |||
| extern void IF_vars(void); | |||
| extern void IF_point(void); | |||
| extern void IF_swap(void); | |||
| extern void IF_dup(void); | |||
| extern void IF_over(void); | |||
| extern void IF_pick(void); | |||
| extern void IF_rot(void); | |||
| extern void IF_unrot(void); | |||
| extern void IF_roll(void); | |||
| extern void IF_unroll(void); | |||
| extern void IF_Ndrop(void); | |||
| extern void IF_Ndup(void); | |||
| extern void IF_depth(void); | |||
| extern int nbOnStack(void *A); | |||
| extern void IF_toArray(void); | |||
| extern void IF_toScalar(void); | |||
| extern void IF_toScalarR(void); | |||
| extern void IF_fctD_1(double(*f)(double)); | |||
| extern void IF_fctD_1L(long long(*f)(double)); | |||
| extern void IF_fctD_1LB(long long(*f)(double)); | |||
| extern void IF_fctB_1(long long (*f1)(long long), double(*f2)(double)); | |||
| extern void IF_plus(void); | |||
| extern void IF_moins(void); | |||
| extern void IF_mult(void); | |||
| extern void IF_div(void); | |||
| extern void IF_neg(void); | |||
| extern void IF_min(void); | |||
| extern void IF_max(void); | |||
| extern void IF_modulo(void); | |||
| extern void IF_puiss(void); | |||
| extern void IF_Legal(void); | |||
| extern void IF_Ldiff(void); | |||
| extern void IF_Lsup(void); | |||
| extern void IF_Linf(void); | |||
| extern void IF_Lsupeg(void); | |||
| extern void IF_Linfeg(void); | |||
| extern void IF_inFile_1(FILE * fd); | |||
| extern void IF_inFile_1d(FILE * fd, char delim, int virg); | |||
| extern void IF_inFile_2(FILE * fd); | |||
| void IF_TShiftR(void); | |||
| void IF_TShiftL(void); | |||
| void IF_NTShiftR(void); | |||
| void IF_NTShiftL(void); | |||
| void IF_TNShiftR(void); | |||
| void IF_TNShiftL(void); | |||
| void IF_NTNShiftR(void); | |||
| void IF_NTNShiftL(void); | |||
| void IF_subTab(void); | |||
| void IF_subTabR(void); | |||
| void IF_NsubTab(void); | |||
| void IF_NsubTabR(void); | |||
| void IF_TabRev(void); | |||
| void IF_NTabRev(void); | |||
| void IF_TabTransp(void); | |||
| void IF_TabTranspN(void); | |||
| void IF_TabTranspT(void); | |||
| extern int is1Tab(void); | |||
| extern int is2Tab(void); | |||
| extern int isNTabSameDim(int n); | |||
| extern void IF_TABMin(void); | |||
| extern void IF_TABMax(void); | |||
| extern void IF_TABProd(void); | |||
| extern void IF_TABSum(void); | |||
| extern void IF_TABMinMax(void); | |||
| /* net functions */ | |||
| extern void IF_NetKey(void); | |||
| extern void IF_NetErrVal(void); | |||
| extern void StackToNet(long n); | |||
| extern void NetToStack(int s, uint32_t k); | |||
| extern int NetDepth(uint32_t k); | |||
| extern void IF_show_netStack(uint32_t k); | |||
| extern void IF_netDrop(uint32_t k); | |||
| #endif | |||
| @@ -0,0 +1,390 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| #include "conf.h" | |||
| /* stackV.c */ | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| #include <strings.h> | |||
| #include "nife.h" | |||
| #include "mth.h" | |||
| #include "err.h" | |||
| #include "lib.h" | |||
| #include "stackV.h" | |||
| #include "stackF.h" | |||
| #include "stackN.h" | |||
| #include "stackC.h" | |||
| #include "stackL.h" | |||
| /* types of var */ | |||
| #define VT_I 0 /* Initial = INTERGER NULL */ | |||
| #define VT_B 1 /* BOOLEAN */ | |||
| #define VT_C 2 /* CHARACTER STRING */ | |||
| #define VT_N 3 /* NUMBER */ | |||
| #define VT_L 4 /* LIB FUNCTION */ | |||
| #define VT_F 5 /* USER FUNCTION */ | |||
| #define VT_V 9 /* VARIABLE (for "install_v ... in" only) */ | |||
| #define VT_NO -1 /* cf ci-dessous */ | |||
| static void * stackV = VIDE; | |||
| /* modeExeVar guide le traitement des variables | |||
| * si affectation : un des VT_x sinon -1 | |||
| * *************************************/ | |||
| static int modeExeVar=VT_NO; | |||
| struct Var { | |||
| char *l; /* libelle */ | |||
| void *n; /* next */ | |||
| union { | |||
| bool b; | |||
| void *a; /* adresse num/char/code */ | |||
| }; | |||
| short t; /* type */ | |||
| }; | |||
| static void cpVar(void * S, void *D) | |||
| { | |||
| struct Var *vS, *vD; | |||
| if (S==D) return; | |||
| vS = (struct Var *)S; | |||
| vD = (struct Var *)D; | |||
| vD->t = vS->t; | |||
| vD->a = vS->a; | |||
| /* duplication if number !! */ | |||
| if (vD->t == VT_N) | |||
| vD->a = duplicateNum(vS->a, 0); | |||
| } | |||
| void initVar(char *Lib) | |||
| { | |||
| void * M, *L; | |||
| struct Var * N; | |||
| if ((M = malloc(sizeof(struct Var))) == NULL) stopErr("initVar","malloc"); | |||
| if ((L = malloc(strlen(Lib)+1)) == NULL) stopErr("initVar","malloc"); | |||
| strcpy((char*)L,Lib); | |||
| N = (struct Var*)M; | |||
| N->l = (char*)L; | |||
| N->n = stackV; | |||
| N->t = VT_I; | |||
| stackV = M; | |||
| } | |||
| static void setCodeVar(struct Var * Elt, short t, void* A) | |||
| { | |||
| switch (Elt->t) { /* TODO VT_F */ | |||
| case VT_C : | |||
| free(Elt->a); | |||
| break; | |||
| case VT_N : | |||
| if (nbOnStack(Elt->a) == 0) free(Elt->a); | |||
| else numVarOff(Elt->a); | |||
| break; | |||
| default : /* VT_I, VT_B, VT_L, VT_F */ | |||
| break; | |||
| } | |||
| Elt->t = t; | |||
| Elt->a = A; | |||
| } | |||
| static void rmVar(void **Ref, struct Var * Elt) | |||
| { | |||
| if (Elt->t==VT_N) setCodeVar(Elt, VT_I, VIDE); | |||
| *Ref = Elt->n; | |||
| free((void*)Elt->l); | |||
| free((void*)Elt); | |||
| } | |||
| void rmLastVar(void) | |||
| { | |||
| if (stackV != VIDE) rmVar(&stackV, (struct Var *)stackV); | |||
| else messErr(23); | |||
| } | |||
| void IF_show_stackV(void) | |||
| { | |||
| void * Next; | |||
| struct Var * N; | |||
| Next = stackV; | |||
| while (Next != VIDE) { | |||
| N = (struct Var*) Next; | |||
| printf(" %-25s : Type ",N->l); | |||
| switch(N->t) { | |||
| case VT_I : | |||
| printf("initial (NULL)"); | |||
| break; | |||
| case VT_B : | |||
| printf("Boolean "); | |||
| if (N->b) printf("TRUE"); else printf("FALSE"); | |||
| break; | |||
| case VT_C : | |||
| printf("String \"%s\"", (char*)N->a); | |||
| break; | |||
| case VT_N : | |||
| printf("Number "); | |||
| printNumber(N->a); | |||
| break; | |||
| case VT_L : | |||
| printf("Lib. Fct. %s", libByAddr(N->a)); | |||
| break; | |||
| case VT_F : | |||
| printf("User Fct. %s", fctByAddr(N->a)); | |||
| break; | |||
| } | |||
| printf("\n"); | |||
| Next = N->n; | |||
| } | |||
| printf("<end of variable list>\n"); | |||
| } | |||
| static void newVar(char * S) | |||
| { | |||
| char Lib[LDFLT+1]; | |||
| strncpy(Lib,S,LDFLT); | |||
| Lib[LDFLT]='\0'; | |||
| initVar(Lib); | |||
| dropTrSuite(); | |||
| } | |||
| void IF_debVar(void) | |||
| { | |||
| putTrSuite(newVar); | |||
| } | |||
| void IF_debVarCS(void) | |||
| { | |||
| char *v; | |||
| v = getString(); | |||
| if (v != NULL) { | |||
| initVar(v); | |||
| free((void*)v); | |||
| } | |||
| } | |||
| void * varByName(char * L) | |||
| { | |||
| void * Next; | |||
| struct Var * N; | |||
| Next = stackV; | |||
| while (Next != VIDE) { | |||
| N = (struct Var*) Next; | |||
| if (strcmp(N->l,L)==0) return(Next); | |||
| Next = N->n; | |||
| } | |||
| return VIDE; | |||
| } | |||
| char * varByAddr(void * A) /* non optimise mais C'EST FAIT EXPRES !! */ | |||
| { | |||
| void * Next; | |||
| struct Var * N; | |||
| Next = stackV; | |||
| while (Next != VIDE) { | |||
| N = (struct Var*) Next; | |||
| if (Next==A) return(N->l); | |||
| Next = N->n; | |||
| } | |||
| return NULL; | |||
| } | |||
| char * varByAddrA(void * A) | |||
| { | |||
| void * Next; | |||
| struct Var * N; | |||
| Next = stackV; | |||
| while (Next != VIDE) { | |||
| N = (struct Var*) Next; | |||
| if (N->a==A) return(N->l); | |||
| Next = N->n; | |||
| } | |||
| return NULL; | |||
| } | |||
| int isVarChar(void * A) | |||
| { | |||
| struct Var * N; | |||
| N = (struct Var*) A; | |||
| if (N->t == VT_C) return 1; | |||
| return 0; | |||
| } | |||
| static void exec_Var(void * A) | |||
| { | |||
| void * C; | |||
| struct Var * N; | |||
| void (*f) (void); | |||
| N = (struct Var*) A; | |||
| /* printf("executeVar %s %d !!\n",N->l, N->t);*/ | |||
| switch(N->t) { | |||
| case VT_B : | |||
| putBool(N->b); | |||
| break; | |||
| case VT_C : | |||
| putString((char*)N->a); | |||
| break; | |||
| case VT_N : | |||
| if (nbOnStack(N->a) > 0) { | |||
| C = duplicateNum(N->a,1); | |||
| N->a = C; | |||
| } | |||
| putVar(N->a); | |||
| break; | |||
| case VT_L : | |||
| f = (PFV)(N->a); | |||
| f(); | |||
| break; | |||
| case VT_F : | |||
| execFctV(N->a); | |||
| break; | |||
| default : /* VT_I */ | |||
| break; | |||
| } | |||
| } | |||
| static void delVar(char * L) | |||
| { | |||
| void ** PNext; | |||
| struct Var * N; | |||
| dropTrSuite(); | |||
| PNext = &stackV; | |||
| while (*PNext != VIDE) { | |||
| N = (struct Var*) *PNext; | |||
| if (strcmp(N->l,L)==0) { | |||
| rmVar(PNext, N); | |||
| return; | |||
| } | |||
| PNext = &N->n; | |||
| } | |||
| messErr(24); | |||
| } | |||
| void IF_delVar(void) | |||
| { | |||
| putTrSuite(delVar); | |||
| } | |||
| void putInVar(void * A, short t) | |||
| { | |||
| struct Var * N; | |||
| N = (struct Var*) A; | |||
| switch(t) { | |||
| case VT_B : | |||
| setCodeVar(N, t, VIDE); | |||
| N->b = getBool(); | |||
| break; | |||
| case VT_C : | |||
| setCodeVar(N, t, getString()); | |||
| break; | |||
| case VT_N : | |||
| setCodeVar(N, t, getVar()); | |||
| break; | |||
| case VT_L : | |||
| case VT_F : | |||
| setCodeVar(N, t, FCT_INST); | |||
| break; | |||
| default : | |||
| setCodeVar(N, VT_I, VIDE); | |||
| break; | |||
| } | |||
| } | |||
| /* PLUS UTILISEE *********************** | |||
| static void updateVar(char * L, short t) | |||
| { | |||
| void * Next; | |||
| struct Var * N; | |||
| Next = stackV; | |||
| while (Next != VIDE) { | |||
| N = (struct Var*) Next; | |||
| if (strcmp(N->l,L)==0) { | |||
| putInVar(Next, t); | |||
| return; | |||
| } | |||
| Next = N->n; | |||
| } | |||
| messErr(24); | |||
| } | |||
| *****************/ | |||
| void IF_setVarN(void) | |||
| { | |||
| modeExeVar=VT_N; | |||
| } | |||
| void IF_setVarC(void) | |||
| { | |||
| modeExeVar=VT_C; | |||
| } | |||
| void IF_setVarB(void) | |||
| { | |||
| modeExeVar=VT_B; | |||
| } | |||
| void IF_setVarI(void) | |||
| { | |||
| modeExeVar=VT_I; | |||
| } | |||
| void IF_setVarLF(void) | |||
| { | |||
| switch (FCT_TYP) { | |||
| case 0 : | |||
| modeExeVar=VT_I; | |||
| break; | |||
| case 1 : | |||
| modeExeVar=VT_L; | |||
| break; | |||
| case 2 : | |||
| modeExeVar=VT_F; | |||
| break; | |||
| case 3 : | |||
| modeExeVar=VT_V; | |||
| break; | |||
| } | |||
| } | |||
| void executeVar(void * A) | |||
| { | |||
| if (fctEnCours) makeFct(T_VAR, A); | |||
| else { | |||
| if (modeExeVar == VT_NO) exec_Var(A); | |||
| else { | |||
| if (modeExeVar == VT_V) cpVar(FCT_INST,A); | |||
| else putInVar(A, modeExeVar); | |||
| modeExeVar=VT_NO; | |||
| } | |||
| } | |||
| } | |||
| int IF_execVar(char * L) | |||
| { | |||
| void * Next; | |||
| struct Var * N; | |||
| Next = stackV; | |||
| while (Next != VIDE) { | |||
| N = (struct Var*) Next; | |||
| if (strcmp(N->l,L)==0) { | |||
| executeVar(Next); | |||
| return 1; | |||
| } | |||
| Next = N->n; | |||
| } | |||
| return 0; | |||
| } | |||
| @@ -0,0 +1,39 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* stackV.h */ | |||
| #ifndef __NIFE_STACKV_H__ | |||
| #define __NIFE_STACKV_H__ | |||
| extern void IF_debVar(void); | |||
| extern void IF_debVarCS(void); | |||
| extern void IF_show_stackV(void); | |||
| extern void IF_delVar(void); | |||
| extern void rmLastVar(void); | |||
| extern int IF_execVar(char *L); | |||
| extern int isVarChar(void *A); | |||
| extern void * varByName(char *L); | |||
| extern char * varByAddr(void *A); | |||
| extern char * varByAddrA(void *A); | |||
| extern void putInVar(void *A, short t); | |||
| extern void IF_setVarI(void); | |||
| extern void IF_setVarB(void); | |||
| extern void IF_setVarC(void); | |||
| extern void IF_setVarN(void); | |||
| extern void IF_setVarLF(void); | |||
| extern void executeVar(void *); | |||
| #endif | |||
| @@ -0,0 +1,167 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| #include "conf.h" | |||
| /* task.c gestion des taches */ | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <unistd.h> | |||
| #include <time.h> | |||
| #include <signal.h> | |||
| #include <sys/time.h> | |||
| #include <sys/resource.h> | |||
| #include <sys/types.h> | |||
| #include <sys/wait.h> | |||
| #include <sys/stat.h> | |||
| #include <fcntl.h> | |||
| #include "nife.h" | |||
| #include "mth.h" | |||
| #include "err.h" | |||
| #include "tasks.h" | |||
| #include "foncs.h" | |||
| #include "histo.h" | |||
| #include "stackN.h" | |||
| #include "stackF.h" | |||
| #include "stackL.h" | |||
| int ITASK=0; /* no de tache */ | |||
| #define MAX_TASK 10 | |||
| static pid_t TASKp[MAX_TASK]; /* pid */ | |||
| static void * TASKf[MAX_TASK]; /* func */ | |||
| void IF_NewTask (void) | |||
| { | |||
| int i; | |||
| for (i=0;i<MAX_TASK;i++) if (TASKp[i]==0) break; | |||
| if (i<MAX_TASK) { | |||
| FctInTask = i+1; | |||
| } else { | |||
| FctInTask = -1; | |||
| messErr(26); | |||
| } | |||
| } | |||
| static char FLib[24]; | |||
| static char * FicCons(int t) | |||
| { | |||
| sprintf(FLib,".nife/Cons%d.log",t); | |||
| return FLib; | |||
| } | |||
| int MakeTask (void * A) | |||
| { | |||
| int i, pid; | |||
| char * NF; | |||
| i = FctInTask-1; | |||
| if ((pid = fork()) == -1) stopErr("IF_NewTask","fork"); | |||
| if (pid == 0) { /* fils */ | |||
| ITASK=FctInTask; /* TASK 0 is the interractive */ | |||
| NF = FicCons(ITASK); | |||
| if ((i=open(NF,O_CREAT|O_RDWR|O_TRUNC,0600)) < 0) perror(NF); | |||
| else { | |||
| dup2(i,1); | |||
| dup2(i,2); | |||
| close(i); | |||
| close(0); | |||
| } | |||
| } else { | |||
| TASKp[i] = pid; | |||
| putLong(FctInTask); | |||
| TASKf[i]=A; | |||
| FctInTask=0; | |||
| } | |||
| return(pid); | |||
| } | |||
| void IF_show_Tasks(void) | |||
| { | |||
| int i; | |||
| for (i=0;i<MAX_TASK;i++) { | |||
| if (TASKp[i] != 0) { | |||
| printf(" %.2d : %s (",i+1,codByAddr(TASKf[i])); | |||
| if (kill(TASKp[i],SIGUSR1) ==0) printf("running"); | |||
| else printf("stopped"); | |||
| printf(")\n"); | |||
| } | |||
| } | |||
| printf("<end of tasks list>\n"); | |||
| } | |||
| void IF_statusTask(void) | |||
| { | |||
| long V; | |||
| int i; | |||
| if (getParLong(&V)) { | |||
| i = V -1; | |||
| if (TASKp[i] != 0) { | |||
| if (kill(TASKp[i],SIGUSR1)==0) { | |||
| putBool(TRUE); | |||
| return; | |||
| } | |||
| } | |||
| } | |||
| putBool(FALSE); | |||
| } | |||
| void IF_stopTask(void) | |||
| { | |||
| long V; | |||
| int i; | |||
| if (getParLong(&V)) { | |||
| i = V -1; | |||
| if (TASKp[i] != 0) { | |||
| _MODIF_WAITPID_(1); | |||
| if (kill(TASKp[i],SIGKILL) == 0) | |||
| waitpid(TASKp[i],NULL,0); | |||
| _MODIF_WAITPID_(0); | |||
| } | |||
| } | |||
| } | |||
| void IF_delTask(void) | |||
| { | |||
| long V; | |||
| int i; | |||
| if (getParLong(&V)) { | |||
| i = V -1; | |||
| if (TASKp[i] != 0) { | |||
| if (kill(TASKp[i],SIGUSR1)==0) { | |||
| messErr(27); | |||
| return; | |||
| } | |||
| } | |||
| } | |||
| TASKp[i] = 0; | |||
| } | |||
| void IF_showCons( void) | |||
| { | |||
| long V; | |||
| int i; | |||
| char * NF, comm[30]; | |||
| if (getParLong(&V)) { | |||
| i = V -1; | |||
| if (TASKp[i] != 0) { | |||
| NF = FicCons((int)V); | |||
| sprintf(comm,"more %s",NF); | |||
| runCommand(comm); | |||
| } | |||
| else messErr(28); | |||
| } | |||
| } | |||
| @@ -0,0 +1,32 @@ | |||
| /* Copyright (C) 2011-2013 Patrick H. E. Foubet - S.E.R.I.A.N.E. | |||
| 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 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 <http://www.gnu.org/licenses/> | |||
| *******************************************************************/ | |||
| /* tasks.h */ | |||
| #ifndef __NIFE_TASKS_H__ | |||
| #define __NIFE_TASKS_H__ | |||
| extern int ITASK; | |||
| extern void IF_NewTask(void); | |||
| extern void IF_show_Tasks(void); | |||
| extern void IF_statusTask(void); | |||
| extern void IF_stopTask(void); | |||
| extern void IF_delTask(void); | |||
| extern void IF_showCons(void); | |||
| extern int MakeTask(void * A); | |||
| #endif | |||
| @@ -0,0 +1,12 @@ | |||
| #! /bin/sh | |||
| if test -x nife | |||
| then | |||
| ./nife benchm.nif | |||
| uname -a | |||
| echo "If your system is not present in the NEWS file, and if you have some time" | |||
| echo "Take a screen-shot and send your test at nife@seriane.fr" | |||
| echo "Thank you helping us in this challenge !" | |||
| else | |||
| echo "You are not in the src directory or you have not run 'make'" | |||
| fi | |||
| echo "The Nife Team." | |||