| @@ -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." | |||||