diff --git a/.githooks/prepare-commit-msg b/.githooks/prepare-commit-msg index b1a3d072df..9d784cbbb0 100755 --- a/.githooks/prepare-commit-msg +++ b/.githooks/prepare-commit-msg @@ -5,4 +5,4 @@ if [ -s .changed ]; then The following files were formatted by clang-format: ${GIT_COMMIT_FORMATTED_FILES} EOM -fi \ No newline at end of file +fi diff --git a/.github/workflows/debian-builder-workflow.yaml b/.github/workflows/debian-builder-workflow.yaml index 2b64c0c2ef..6f01e1d818 100644 --- a/.github/workflows/debian-builder-workflow.yaml +++ b/.github/workflows/debian-builder-workflow.yaml @@ -55,7 +55,7 @@ jobs: echo "$GITHUB_CONTEXT" env: GITHUB_CONTEXT: ${{ toJson(github) }} - + - name: Cancel any previous run of the same workflow on the same branch uses: styfle/cancel-workflow-action@0.4.1 with: @@ -69,11 +69,11 @@ jobs: ref: '${{ github.event.ref }}' fetch-depth: '0' path: 'machinekit-hal' - - # DANGER: Changing value imageNameRoot in settings JSON will mean + + # DANGER: Changing value imageNameRoot in settings JSON will mean # a new Docker image name! # Public Docker images in GitHub Packages cannot be deleted, - # every change will stay visible 'forever' in form of old packages + # every change will stay visible 'forever' in form of old packages - name: > Prepare data matrix with operating system and architecture combinations from JSON file @@ -84,14 +84,14 @@ jobs: jq -c --arg IMAGE_NAME_ROOT "$IMAGE_NAME_ROOT" \ '{include: [.allowedCombinations[]+.osVersions[] | select(.osVersionNumber == .releaseNumber) | - ((.architecture|ascii_downcase) + "_" + (.osVersionNumber|tostring)) + ((.architecture|ascii_downcase) + "_" + (.osVersionNumber|tostring)) as $tag | (.distributionID|ascii_downcase) as $distribution | {osDistribution: .distributionID, osVersionNumber: .osVersionNumber, architecture: .architecture, osVersionCodename: .distributionCodename, - dockerImage: {basename: $IMAGE_NAME_ROOT | + dockerImage: {basename: $IMAGE_NAME_ROOT | sub( "@DISTRIBUTION@"; $distribution ) | sub( "@TAG@"; $tag ), tag: $tag} @@ -202,7 +202,7 @@ jobs: exists in the current Git history if: env.BuildDockerImage != 'true' run: | - if git cat-file -e ${GIT_COMMIT_SHA} 2> /dev/null + if git cat-file -e ${GIT_COMMIT_SHA} 2> /dev/null then printf "%b" \ "Git commit $GIT_COMMIT_SHA from which the current cached" \ @@ -229,7 +229,7 @@ jobs: "==========================================================\n" while IFS= read -r line; do if [[ $line =~ $DOCKER_REGEX ]] - then + then printf "%b" \ "Found file $line matching the regular expression" \ " for Debian builder files.\n" @@ -244,7 +244,7 @@ jobs: BEFORE_COMMIT_SHA: ${{ steps.docker_metadata_normalizer.outputs.git_sha }} DOCKER_REGEX: '^debian/.{1,}$' working-directory: ./machinekit-hal - + - name: Prepare matrixes for creation of following jobs id: data_matrix_normalizer run: | @@ -252,14 +252,14 @@ jobs: if [[ "${{ env.BuildDockerImage }}" != "true" ]] then MAIN_MATRIX=$(jq -c --argjson DOCKER_METADATA "$DOCKER_METADATA_JSON" \ - '.include[].dockerImage |= . as $base_matrix | - $base_matrix + ($DOCKER_METADATA[] | + '.include[].dockerImage |= . as $base_matrix | + $base_matrix + ($DOCKER_METADATA[] | select(.basename == $base_matrix.basename))' \ <<< "$SUPPORTED_SYSTEMS_JSON") else MAIN_MATRIX="$SUPPORTED_SYSTEMS_JSON" fi - OS_MATRIX=$(jq -c '{include: [.include[] | + OS_MATRIX=$(jq -c '{include: [.include[] | select(.architecture == "amd64")]}' <<< "$MAIN_MATRIX") echo "::set-output name=matrix::$MAIN_MATRIX" echo "::set-output name=osMatrix::$OS_MATRIX" @@ -274,7 +274,7 @@ jobs: env: SUPPORTED_SYSTEMS_JSON: '${{ steps.system_combinations_normalizer.outputs.matrix }}' DOCKER_METADATA_JSON: '${{ steps.docker_data_downloader.outputs.image_data }}' - + - name: > Check if Cloudsmith authorization token is present in GitHub secrets storage @@ -353,17 +353,17 @@ jobs: strategy: matrix: ${{ fromJson(needs.prepareState.outputs.MainMatrix) }} fail-fast: false - + steps: # Building packages needs deep clone for the ability to create a version - # number by counting all commits + # number by counting all commits - name: Clone Machinekit-HAL repository uses: actions/checkout@v2 with: ref: '${{ github.event.ref }}' fetch-depth: '0' path: 'build/machinekit-hal' - + - name: Prepare specific Python version for Machinekit-HAL build scripts if: needs.prepareState.outputs.BuildDockerImages == 'true' uses: actions/setup-python@v2 @@ -467,7 +467,7 @@ jobs: - name: Sign the package with Machinekit Builder Signer Key if: > - github.event_name == 'push' && + github.event_name == 'push' && needs.prepareState.outputs.HasSigningKey == 'true' run: | mkdir ${ROOT_DIR}/secrets_mountpoint @@ -513,7 +513,7 @@ jobs: - name: > Prepare base Docker image for installation of packages - of Machinekit-HAL on ${{ matrix.osDistribution }} + of Machinekit-HAL on ${{ matrix.osDistribution }} ${{ matrix.osVersionCodename}} if: matrix.architecture == 'amd64' run: | @@ -587,7 +587,7 @@ jobs: esac printf "This job is going to use $RENAMEARCH as an achitecture tag\n" echo "::set-output name=architecture::$RENAMEARCH" - + - name: Prepare specific Python version for Machinekit-HAL build scripts if: needs.prepareState.outputs.BuildDockerImages == 'true' uses: actions/setup-python@v2 @@ -596,7 +596,7 @@ jobs: - name: Install Python SH tool to runner VM environment if: needs.prepareState.outputs.BuildDockerImages == 'true' - run: pip install sh + run: pip install sh - name: Prepare the Docker image run: | @@ -651,11 +651,11 @@ jobs: DOCKER_IMAGE: 'docker.pkg.github.com/${{ github.repository }}/${{ matrix.dockerImage.basename }}:latest' working-directory: ./build/machinekit-hal - # This has a chance to cause problems when developing multiple branches + # This has a chance to cause problems when developing multiple branches # simultaneously all or some of which use different builder configuration, - # one way how to solve it is to use different tags for different branches, - # but with the current state with Github Packages when one cannot delete - # public packages (there is discussion on github.community it will be) + # one way how to solve it is to use different tags for different branches, + # but with the current state with Github Packages when one cannot delete + # public packages (there is discussion on github.community it will be) # and fact that Github doesn't say how much space is available for Open # Source repository, I am going to let it be limited to :latest for now buildContainerImagesForUpload: @@ -723,13 +723,13 @@ jobs: "$TRY" TRY=$(( $TRY + 1 )) done - exit ${RETVAL} + exit ${RETVAL} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_OWNER: ${{ github.actor }} MAX_TRIES: 50 DOCKER_IMAGE: 'docker.pkg.github.com/${{ github.repository }}/${{ matrix.dockerImage.basename }}:latest' - + - name: Upload the container image to third party registry if: needs.prepareState.outputs.HasSpecificDockerRegistry == 'true' run: | @@ -754,7 +754,7 @@ jobs: "$TRY" TRY=$(( $TRY + 1 )) done - exit ${RETVAL} + exit ${RETVAL} env: DOCKER_IMAGE: 'docker.pkg.github.com/${{ github.repository }}/${{ matrix.dockerImage.basename }}:latest' MAX_TRIES: 50 @@ -770,18 +770,18 @@ jobs: needs.prepareState.outputs.HasCloudsmithToken == 'true' && github.event_name == 'push' needs: [buildMachinekitHALDebianPackages, testMachinekitHALBuild, prepareState] - + steps: - name: Download all built artifacts from GitHub storage uses: actions/download-artifact@v2 with: path: ./artifacts - + - name: > Show artifacts downloaded from GitHub storage in directory structure run: ls -R working-directory: ./artifacts - + - name: Prepare specific Python version for Cloudsmith CLI uses: actions/setup-python@v2 with: @@ -793,17 +793,17 @@ jobs: cloudsmith --help cloudsmith whoami env: - CLOUDSMITH_API_KEY: '${{ secrets.CLOUDSMITH_TOKEN }}' + CLOUDSMITH_API_KEY: '${{ secrets.CLOUDSMITH_TOKEN }}' - name: Upload the Debian packages to Cloudsmith hosting service run: | test_array=() CLOUDSMITH_REPLY=$(cloudsmith list repos --output-format json) FOUND_NAMESPACE=$(echo "$CLOUDSMITH_REPLY" | \ - jq -e -r --arg INPUTREGEX "$REPOSITORY_REGEX" '.data[] | + jq -e -r --arg INPUTREGEX "$REPOSITORY_REGEX" '.data[] | select(.slug|test($INPUTREGEX)) | .namespace') FOUND_REPOSITORY=$(echo "$CLOUDSMITH_REPLY" | \ - jq -e -r --arg INPUTREGEX "$REPOSITORY_REGEX" '.data[] | + jq -e -r --arg INPUTREGEX "$REPOSITORY_REGEX" '.data[] | select(.slug|test($INPUTREGEX)) | .slug') if [ "$FOUND_REPOSITORY" == "" -o "$FOUND_REPOSITORY" == "null" \ -o "$FOUND_NAMESPACE" == "" -o "$FOUND_NAMESPACE" == "null" ] diff --git a/COPYING b/COPYING index 20a20bff13..b9a17724b8 100644 --- a/COPYING +++ b/COPYING @@ -24,9 +24,9 @@ to any specific national law. GNU GENERAL PUBLIC LICENSE and GNU LESSER GENERAL PUBLIC LICENSE are included in their entirety below. - + ****************************************************************** - + GNU GENERAL PUBLIC LICENSE Version 2, June 1991 @@ -84,7 +84,7 @@ 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 @@ -139,7 +139,7 @@ above, provided that you also meet all of these conditions: 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 @@ -197,7 +197,7 @@ 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 @@ -254,7 +254,7 @@ 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 @@ -307,7 +307,7 @@ 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 @@ -372,7 +372,7 @@ Public License instead of this License. GNU LESSER GENERAL PUBLIC LICENSE -Version 2.1, February 1999 +Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA @@ -386,414 +386,414 @@ 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 Licenses are -intended to guarantee your freedom to share and change free software--to -make sure the software is free for all its users. +share and change it. By contrast, the GNU General Public Licenses are +intended to guarantee your freedom to share and change free software--to +make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially -designated software packages--typically libraries--of the Free Software +designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but -we suggest you first think carefully about whether this license or the -ordinary General Public License is the better strategy to use in any -particular case, based on the explanations below. - -When we speak of free software, we are referring to freedom of use, 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 and use pieces of it +we suggest you first think carefully about whether this license or the +ordinary General Public License is the better strategy to use in any +particular case, based on the explanations below. + +When we speak of free software, we are referring to freedom of use, 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 and use pieces of it in new free programs; and that you are informed that you can do these -things. +things. -To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. +To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. -You must make sure that they, too, receive or can get the source code. +You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object -files to the recipients, so that they can relink them with the library +files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show -them these terms so they know their rights. +them these terms so they know their rights. -We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. +We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is -no warranty for the free library. Also, if the library is modified by -someone else and passed on, the recipients should know that what they +no warranty for the free library. Also, if the library is modified by +someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation -will not be affected by problems that might be introduced by others. +will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any -free program. We wish to make sure that a company cannot effectively +free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license -from a patent holder. Therefore, we insist that any patent license +from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full -freedom of use specified in this license. +freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain -libraries in order to permit linking those libraries into non-free programs. +libraries in order to permit linking those libraries into non-free programs. -When a program is linked with a library, whether statically or using a +When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined -work, a derivative of the original library. The ordinary General Public +work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax -criteria for linking other code with the library. +criteria for linking other code with the library. -We call this license the "Lesser" General Public License because it does +We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. -It also provides other free software developers Less of an advantage over -competing non-free programs. These disadvantages are the reason we use the -ordinary General Public License for many libraries. However, the Lesser -license provides advantages in certain special circumstances. +It also provides other free software developers Less of an advantage over +competing non-free programs. These disadvantages are the reason we use the +ordinary General Public License for many libraries. However, the Lesser +license provides advantages in certain special circumstances. -For example, on rare occasions, there may be a special need to encourage +For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto -standard. To achieve this, non-free programs must be allowed to use the +standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as -widely used non-free libraries. In this case, there is little to gain by -limiting the free library to free software only, so we use the Lesser -General Public License. +widely used non-free libraries. In this case, there is little to gain by +limiting the free library to free software only, so we use the Lesser +General Public License. In other cases, permission to use a particular library in non-free programs -enables a greater number of people to use a large body of free software. -For example, permission to use the GNU C Library in non-free programs -enables many more people to use the whole GNU operating system, as well -as its variant, the GNU/Linux operating system. +enables a greater number of people to use a large body of free software. +For example, permission to use the GNU C Library in non-free programs +enables many more people to use the whole GNU operating system, as well +as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' -freedom, it does ensure that the user of a program that is linked with the -Library has the freedom and the wherewithal to run that program using a -modified version of the Library. +freedom, it does ensure that the user of a program that is linked with the +Library has the freedom and the wherewithal to run that program using a +modified version of the Library. The precise terms and conditions for copying, distribution and modification -follow. Pay close attention to the difference between a "work based on the +follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived -from the library, whereas the latter must be combined with the library in -order to run. +from the library, whereas the latter must be combined with the library in +order to run. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized -party saying it may be distributed under the terms of this Lesser General +party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as -"you". +"you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some -of those functions and data) to form executables. +of those functions and data) to form executables. -The "Library", below, refers to any such software library or work which -has been distributed under these terms. A "work based on the Library" -means either the Library or any derivative work under copyright law: +The "Library", below, refers to any such software library or work which +has been distributed under these terms. A "work based on the Library" +means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either -verbatim or with modifications and/or translated straightforwardly into +verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation -in the term "modification".) +in the term "modification".) "Source code" for a work means the preferred form of the work for making -modifications to it. For a library, 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 library. +modifications to it. For a library, 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 library. Activities other than copying, distribution and modification are not covered -by this License; they are outside its scope. The act of running a program -using the Library is not restricted, and output from such a program is -covered only if its contents constitute a work based on the Library +by this License; they are outside its scope. The act of running a program +using the Library is not restricted, and output from such a program is +covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether -that is true depends on what the Library does and what the program that -uses the Library does. +that is true depends on what the Library does and what the program that +uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete 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 distribute a copy of this -License along with the Library. +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 distribute a copy of this +License along with the Library. -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. +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 Library or any portion of it, -thus forming a work based on the Library, and copy and distribute such -modifications or work under the terms of Section 1 above, provided that -you also meet all of these conditions: +2. You may modify your copy or copies of the Library or any portion of it, +thus forming a work based on the Library, 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) The modified work must itself be a software library. +a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating -that you changed the files and the date of any change. -c) You must cause the whole of the work to be licensed at no charge -to all third parties under the terms of this License. -d) If a facility in the modified Library refers to a function or a +that you changed the files and the date of any change. +c) You must cause the whole of the work to be licensed at no charge +to all third parties under the terms of this License. +d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, -then you must make a good faith effort to ensure that, in the event an -application does not supply such function or table, the facility still -operates, and performs whatever part of its purpose remains meaningful. +then you must make a good faith effort to ensure that, in the event an +application does not supply such function or table, the facility still +operates, and performs whatever part of its purpose remains meaningful. -(For example, a function in a library to compute square roots has a +(For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does -not supply it, the square root function must still compute square roots.) +not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, 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 +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 Library, the distribution of the whole must be -on the terms of this License, whose permissions for other licensees extend +which is a work based on the Library, 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. +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 Library. +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 Library. In addition, mere aggregation of another work not based on the Library with -the Library (or with a work based on the Library) on a volume of a storage -or distribution medium does not bring the other work under the scope of -this License. +the Library (or with a work based on the Library) on a volume of a storage +or distribution medium does not bring the other work under the scope of +this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must -alter all the notices that refer to this License, so that they refer to the -ordinary GNU General Public License, version 2, instead of to this License. +alter all the notices that refer to this License, so that they refer to the +ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not -make any other change in these notices. +make any other change in these notices. -Once this change is made in a given copy, it is irreversible for that copy, -so the ordinary GNU General Public License applies to all subsequent copies -and derivative works made from that copy. +Once this change is made in a given copy, it is irreversible for that copy, +so the ordinary GNU General Public License applies to all subsequent copies +and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library -into a program that is not a library. +into a program that is not a library. -4. You may copy and distribute the Library (or a portion or derivative of -it, under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you accompany it with the complete +4. You may copy and distribute the Library (or a portion or derivative of +it, under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you 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. +interchange. If distribution of 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 satisfies the requirement to distribute the source -code, even though third parties are not compelled to copy the source -along with the object code. +from the same place satisfies the requirement to distribute the source +code, even though third parties are not compelled to copy the source +along with the object code. -5. A program that contains no derivative of any portion of the Library, +5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with -it, is called a "work that uses the Library". Such a work, in isolation, -is not a derivative work of the Library, and therefore falls outside the -scope of this License. +it, is called a "work that uses the Library". Such a work, in isolation, +is not a derivative work of the Library, and therefore falls outside the +scope of this License. However, linking a "work that uses the Library" with the Library creates -an executable that is a derivative of the Library (because it contains -portions of the Library), rather than a "work that uses the library". -The executable is therefore covered by this License. Section 6 states -terms for distribution of such executables. - -When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. -The threshold for this to be true is not precisely defined by law. +an executable that is a derivative of the Library (because it contains +portions of the Library), rather than a "work that uses the library". +The executable is therefore covered by this License. Section 6 states +terms for distribution of such executables. + +When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. +The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure -layouts and accessors, and small macros and small inline functions -(ten lines or less in length), then the use of the object file is +layouts and accessors, and small macros and small inline functions +(ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library -will still fall under Section 6.) +will still fall under Section 6.) -Otherwise, if the work is a derivative of the Library, you may +Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether -or not they are linked directly with the Library itself. +or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link -a "work that uses the Library" with the Library to produce a work -containing portions of the Library, and distribute that work under +a "work that uses the Library" with the Library to produce a work +containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of -the work for the customer's own use and reverse engineering for -debugging such modifications. +the work for the customer's own use and reverse engineering for +debugging such modifications. -You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered +You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the +during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do -one of these things: +directing the user to the copy of this License. Also, you must do +one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the -work (which must be distributed under Sections 1 and 2 above); and, if -the work is an executable linked with the Library, with the complete -machine-readable "work that uses the Library", as object code and/or -source code, so that the user can modify the Library and then relink -to produce a modified executable containing the modified Library. (It -is understood that the user who changes the contents of definitions -files in the Library will not necessarily be able to recompile the -application to use the modified definitions.) +work (which must be distributed under Sections 1 and 2 above); and, if +the work is an executable linked with the Library, with the complete +machine-readable "work that uses the Library", as object code and/or +source code, so that the user can modify the Library and then relink +to produce a modified executable containing the modified Library. (It +is understood that the user who changes the contents of definitions +files in the Library will not necessarily be able to recompile the +application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. -A suitable mechanism is one that (1) uses at run time a copy of the -library already present on the user's computer system, rather than -copying library functions into the executable, and (2) will operate +A suitable mechanism is one that (1) uses at run time a copy of the +library already present on the user's computer system, rather than +copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the -version that the work was made with. -c) Accompany the work with a written offer, valid for at least three +version that the work was made with. +c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, -above, for a charge no more than the cost of performing this distribution. +above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a -designated place, offer equivalent access to copy the above specified -materials from the same place. +designated place, offer equivalent access to copy the above specified +materials from the same place. e) Verify that the user has already received a copy of these materials or -that you have already sent this user a copy. +that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" -must include any data and utility programs needed for reproducing the +must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be -distributed need not include anything that is normally distributed (in +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. +and so on) of the operating system on which the executable runs, unless +that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of -other proprietary libraries that do not normally accompany the operating +other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library -together in an executable that you distribute. +together in an executable that you distribute. -7. You may place library facilities that are a work based on the Library -side-by-side in a single library together with other library facilities +7. You may place library facilities that are a work based on the Library +side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided -that the separate distribution of the work based on the Library and of the -other library facilities is otherwise permitted, and provided that you do -these two things: +that the separate distribution of the work based on the Library and of the +other library facilities is otherwise permitted, and provided that you do +these two things: a) Accompany the combined library with a copy of the same work based on the -Library, uncombined with any other library facilities. This must be -distributed under the terms of the Sections above. +Library, uncombined with any other library facilities. This must be +distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part -of it is a work based on the Library, and explaining where to find the -accompanying uncombined form of the same work. +of it is a work based on the Library, and explaining where to find the +accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library -except as expressly provided under this License. Any attempt otherwise to +except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library 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. +their licenses terminated so long as such parties remain in full compliance. 9. 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 Library or its derivative works. These actions are prohibited by law +it. However, nothing else grants you permission to modify or distribute +the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance -of this License to do so, and all its terms and conditions for copying, -distributing or modifying the Library or works based on it. +of this License to do so, and all its terms and conditions for copying, +distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), -the recipient automatically receives a license from the original licensor to -copy, distribute, link with or modify the Library subject to these terms and -conditions. You may not impose any further restrictions on the recipients' +the recipient automatically receives a license from the original licensor to +copy, distribute, link with or modify the Library 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 with this License. +compliance by third parties with this License. -11. 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 +11. 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 +so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute -the Library at all. For example, if a patent license would not permit -royalty-free redistribution of the Library by all those who receive +the Library at all. For example, if a patent license would not permit +royalty-free redistribution of the Library 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 Library. +satisfy both it and this License would be to refrain entirely from +distribution of the Library. -If any portion of this section is held invalid or unenforceable under +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. +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 +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. +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. +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain -countries either by patents or by copyrighted interfaces, the original -copyright holder who places the Library under this License may add an +countries either by patents or by copyrighted interfaces, the original +copyright holder who places the Library 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 +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. +written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser 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. +to address new problems or concerns. -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and "any +Each version is given a distinguishing version number. If the Library +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 Library does not specify a license version -number, you may choose any version ever published by the Free Software -Foundation. +either of that version or of any later version published by the Free +Software Foundation. If the Library does not specify a license version +number, you may choose any version ever published by the Free Software +Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author -to ask for permission. For software which is copyrighted by the Free Software +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. +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 +NO WARRANTY -15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR +15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE -STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE -LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, +STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE +LIBRARY "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 +FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, -YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. 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 LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE +THE LIBRARY 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 LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA +OR INABILITY TO USE THE LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS diff --git a/README.md b/README.md index 1435843933..631f6fdced 100644 --- a/README.md +++ b/README.md @@ -215,4 +215,4 @@ The source code is hosted publicly on [GitHUB](https://github.com/machinekit/mac This software is released under the **GPLv2**, with some parts under the **LGPL**. See the file COPYING for more details. |![Warning](https://img.icons8.com/ios-filled/50/000000/warning-shield.png)| For more detailed information consult specific files with source code implementing given functionality. There should be explicit licensing. | -|:---:|---| \ No newline at end of file +|:---:|---| diff --git a/debian/bootstrap b/debian/bootstrap index 6ea6dbf532..7d8e5a6995 100755 --- a/debian/bootstrap +++ b/debian/bootstrap @@ -91,14 +91,14 @@ _process_options(){ # TODO: # This whole should be taken only as an initial commit -# The colorful output logging with icons and timestamps is currently missing +# The colorful output logging with icons and timestamps is currently missing # and the code should act accordingly when the output is being piped to other # programs (the colors should be automatically turned off, icons and time # stripped off) _write_out() { local level=$1 local message="${@:2}" - + printf "%b" \ "$message\n"; } @@ -178,7 +178,7 @@ search_for_xenomai() { search_for_readline(){ local library="$(apt-cache search libeditreadline-dev)" - local retval="$?" + local retval="$?" if ((retval != 0 )) then log_error "Command 'apt-cache search libeditreadline-dev' returned error code $retval!" @@ -192,7 +192,7 @@ search_for_readline(){ fi local library="$(apt-cache search libreadline-gplv2-dev)" - local retval="$?" + local retval="$?" if ((retval != 0 )) then log_error "Command 'apt-cache search libreadline-gplv2-dev' returned error code $retval!" @@ -235,7 +235,7 @@ check_necessity_of_pasm() { check_necessity_of_importlib_resourses() { local python="$(apt-cache show python3.6)" - local retval="$?" + local retval="$?" if ((retval != 0 )) then log_error "Command 'apt-cache show python3-importlib-resources' returned error code $retval!" @@ -254,7 +254,7 @@ test_dir(){ local version_file="$1/VERSION" local readme_file="$1/README.md" local copying_file="$1/COPYING" - + if [[ -f "$version_file" && -f "$readme_file" && -f "$copying_file" ]] then read first_line < "$version_file" @@ -336,7 +336,7 @@ _main(){ find_dir retval=$? if (( retval != 0 )) - then + then log_error "Could not find Machinekit-HAL repository root directory" failure fi @@ -344,7 +344,7 @@ _main(){ test_dir "$MK_PATH" retval=$? if (( retval != 0 )) - then + then log_error "Specified Machinekit-HAL repository root directory" \ "not valid!" failure diff --git a/debian/buildcontainerimage.py b/debian/buildcontainerimage.py index c7ad301aca..62bacb0b5a 100755 --- a/debian/buildcontainerimage.py +++ b/debian/buildcontainerimage.py @@ -1,5 +1,4 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- ##################################################################### # Description: buildcontainerimages.py diff --git a/debian/buildpackages.py b/debian/buildpackages.py index ae6f4d788f..f211f10c0d 100755 --- a/debian/buildpackages.py +++ b/debian/buildpackages.py @@ -1,5 +1,4 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- ##################################################################### # Description: buildpackages.py diff --git a/debian/buildsystem/Dockerfile b/debian/buildsystem/Dockerfile index 422f107a8d..ea9f5b84f0 100644 --- a/debian/buildsystem/Dockerfile +++ b/debian/buildsystem/Dockerfile @@ -65,7 +65,7 @@ RUN apt-get update && apt-get install -y \ curl \ apt-transport-https \ - lsb-release \ + lsb-release \ ca-certificates && \ curl -1sLf \ 'https://dl.cloudsmith.io/public/machinekit/machinekit/cfg/setup/bash.deb.sh' \ diff --git a/debian/buildsystem/README.md b/debian/buildsystem/README.md index 726379cf26..0b7fea4396 100644 --- a/debian/buildsystem/README.md +++ b/debian/buildsystem/README.md @@ -43,4 +43,4 @@ is on best effort basis. - To test the Machinekit-HAL repository with `runtests` tool, `cd` into parent directory of a Machinekit-HAL source tree: # Run runtests Machinekit-HAL repository for $TAG and $DISTRIBUTION - docker run -it --rm -u "$(id -u):$(id -g)" -v "$(pwd):/home/machinekit/build" -w "/home/machinekit/build/machinekit-hal" machinekit-hal-$DISTRIBUTION-builder-v.$TAG debian/ripruntests.py \ No newline at end of file + docker run -it --rm -u "$(id -u):$(id -g)" -v "$(pwd):/home/machinekit/build" -w "/home/machinekit/build/machinekit-hal" machinekit-hal-$DISTRIBUTION-builder-v.$TAG debian/ripruntests.py diff --git a/debian/buildsystem/base-entrypoint.sh b/debian/buildsystem/base-entrypoint.sh old mode 100644 new mode 100755 diff --git a/debian/buildsystem/doctor-multiarch-apt-repositories.sh b/debian/buildsystem/doctor-multiarch-apt-repositories.sh old mode 100644 new mode 100755 index 8a9e4caaca..b3b9baf727 --- a/debian/buildsystem/doctor-multiarch-apt-repositories.sh +++ b/debian/buildsystem/doctor-multiarch-apt-repositories.sh @@ -63,14 +63,14 @@ USAGEHEREDOC # TODO: # This whole should be taken only as an initial commit -# The colorful output logging with icons and timestamps is currently missing +# The colorful output logging with icons and timestamps is currently missing # and the code should act accordingly when the output is being piped to other # programs (the colors should be automatically turned off, icons and time # stripped off) _write_out() { local level=$1 local message="${@:2}" - + printf "%b" \ "$message\n"; } @@ -181,7 +181,7 @@ add_architecture_to_existing_entry(){ done < ${1} echo -e "$OUTPUT" >| ${1} - return 0 + return 0 } copy_and_transform_repositories(){ @@ -340,11 +340,11 @@ attend_to_ubuntu(){ *) add_architecture_to_existing_entry "$SOURCES_FILE" \ "$HOST_ARCHITECTURE" \ - "$address_from_regex" + "$address_from_regex" if (( retval != 0 )) then return ${retval} - fi + fi ;; esac ;; @@ -394,7 +394,7 @@ _main(){ then failure fi - + lsb_release_installed retval=$? if (( retval != 0 )) @@ -428,7 +428,7 @@ _main(){ "=============================================================\n" \ "$OUTPUT\n" \ "=============================================================\n" - + success } diff --git a/debian/configure.py b/debian/configure.py index 636dac3bc6..8bb7d97efa 100755 --- a/debian/configure.py +++ b/debian/configure.py @@ -1,5 +1,4 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- ##################################################################### # Description: configure.py diff --git a/debian/control.in b/debian/control.in index faaf36f5fe..45997d2f47 100644 --- a/debian/control.in +++ b/debian/control.in @@ -121,7 +121,7 @@ Description: Machinekit-HAL's runtests (acceptance tests) Package: machinekit-hal Conflicts: machinekit Architecture: any -Depends: +Depends: ${shlibs:Depends}, ${python3:Depends}, ${misc:Depends}, @@ -184,7 +184,7 @@ Description: Machinekit-HAL's Python unmanaged modules - drivers #Package: machinekit-hal-dev #Architecture: any -#Depends: +#Depends: # make, # g++, # ${misc:Depends}, diff --git a/debian/copyright b/debian/copyright index d13018bea2..600e106b05 100644 --- a/debian/copyright +++ b/debian/copyright @@ -1,5 +1,5 @@ Debianization of Machinekit-HAL suite of packages is being maintained -by various authors in git at https://github.com/machinekit/machinekit-hal +by various authors in git at https://github.com/machinekit/machinekit-hal or invarious forked repositories. Copyright: diff --git a/debian/machinekit-hal-dev.cpack-components b/debian/machinekit-hal-dev.cpack-components deleted file mode 100644 index 8b13789179..0000000000 --- a/debian/machinekit-hal-dev.cpack-components +++ /dev/null @@ -1 +0,0 @@ - diff --git a/debian/runtests.py b/debian/runtests.py index d06ead989e..b867763215 100755 --- a/debian/runtests.py +++ b/debian/runtests.py @@ -1,5 +1,4 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- ##################################################################### # Description: runtests.py @@ -103,7 +102,7 @@ def __init__(self, self.build_directory = self.build_directory.resolve() if not self.build_directory.is_dir(): self.build_directory.mkdir() # Throws in case Path is another object - + self.parallel_jobs = parallel_jobs def disable_zeroconf(self) -> None: @@ -187,7 +186,7 @@ def configure(self, def build(self, target: str = None, - sudo: bool = False) -> None: + sudo: bool = False) -> None: build_additional = list() if target is not None: @@ -402,7 +401,7 @@ def __call__(self, parser, namespace, values, option_string=None): parser.add_argument("--no-python-tests", action="store_true", help="Do not run python tests") - + parser.add_argument("-j", "--jobs", dest="jobs", diff --git a/src/.clang-format b/src/.clang-format index a91f146f78..54a3390a9e 100644 --- a/src/.clang-format +++ b/src/.clang-format @@ -11,4 +11,4 @@ AllowAllParametersOfDeclarationOnNextLine: false AllowShortIfStatementsOnASingleLine: WithoutElse AllowShortCaseLabelsOnASingleLine: true AllowShortFunctionsOnASingleLine: true -ColumnLimit: 80 \ No newline at end of file +ColumnLimit: 80 diff --git a/src/.gitignore b/src/.gitignore index b67a96b0a8..aff9d0918c 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -23,4 +23,3 @@ machinetalk/webtalk/zws.pb.cc machinetalk/webtalk/zws.pb.h machinetalk/tutorial/htdocs/js/machinetalk - diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8581f55953..e9b9221407 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -31,6 +31,9 @@ set(THREADS_PREFER_PTHREAD_FLAG TRUE) option(BUILD_PYTHON_DISTRIBUTIONS "Build Python3 distribution packages" TRUE) +# TODO: Allow sitting this from option and/or automatically check this exists +set(BASH_SHEBANG "#!/usr/bin/env bash") + # Define the outer rules for output directories for build artifacts set(MACHINEKIT_HAL_ARTIFACTS_MOUNTPOINT_DIRECTORY "${CMAKE_BINARY_DIR}/$") diff --git a/src/executables/bitfile/src/bitfile.py b/src/executables/bitfile/src/bitfile.py index 990adad9a9..57746501a1 100644 --- a/src/executables/bitfile/src/bitfile.py +++ b/src/executables/bitfile/src/bitfile.py @@ -100,7 +100,7 @@ def tostring(self): result += chunkdata return result - + def tofile(self, file): return file.write(self.tostring()) diff --git a/src/executables/bitfile/src/pyproject.toml.in b/src/executables/bitfile/src/pyproject.toml.in index 83dcb23cd8..e28675a3e7 100644 --- a/src/executables/bitfile/src/pyproject.toml.in +++ b/src/executables/bitfile/src/pyproject.toml.in @@ -55,4 +55,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/executables/comp/src/comp.g b/src/executables/comp/src/comp.g index c3c459f933..e6007abf02 100644 --- a/src/executables/comp/src/comp.g +++ b/src/executables/comp/src/comp.g @@ -1,4 +1,3 @@ -#!/usr/bin/env python3 # This is 'comp', a tool to write HAL boilerplate # Copyright 2006 Jeff Epler # @@ -712,13 +711,13 @@ def build_usr(tempdir, filename, mode, origfilename, installdir): cmake_build = f"cmake --build {cmake_builddir} {_config}" cmake_install = f"cmake --install {cmake_builddir} {_config}" - + _generate = subprocess.run(cmake_generate, shell=True, check=True) _build = subprocess.run(cmake_build, shell=True, check=True) - + if mode == INSTALL: _install = subprocess.run(cmake_install, shell=True, check=True) - + if mode == COMPILE: # Copying out with the build RPATH # TODO: Does this really make sense? @@ -800,18 +799,18 @@ def build_rt(tempdir, filename, mode, origfilename, installdir): _config = f"--config {_config}" # Generator should be taken from the CMAKE_GENERATOR evironment variable # by CMake automatically - + cmake_generate = f"cmake -S {tempdir} -B {cmake_builddir}" cmake_build = f"cmake --build {cmake_builddir} {_config}" cmake_install = f"cmake --install {cmake_builddir} {_config}" - + _generate = subprocess.run(cmake_generate, shell=True, check=True) _build = subprocess.run(cmake_build, shell=True, check=True) - + if mode == INSTALL: _install = subprocess.run(cmake_install, shell=True, check=True) - + if mode == COMPILE: # Copying out with the build RPATH # TODO: Does this really make sense? diff --git a/src/executables/comp/src/pyproject.toml.in b/src/executables/comp/src/pyproject.toml.in index 999bf644c1..7d9997eb6c 100644 --- a/src/executables/comp/src/pyproject.toml.in +++ b/src/executables/comp/src/pyproject.toml.in @@ -55,4 +55,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/executables/fix_uuid/src/fix-uuid b/src/executables/fix_uuid/src/fix-uuid index efb44c877d..3c37c7be19 100755 --- a/src/executables/fix_uuid/src/fix-uuid +++ b/src/executables/fix_uuid/src/fix-uuid @@ -1,14 +1,14 @@ -# !/bin/bash +#!/bin/bash if [ "$#" -lt 2 ]; then echo "fix-uuid requires 2 args, an inifile path and a new MKUUID" - exit -1 + exit -1 else INIFILE=$1 NEWUUID=$2 fi -# check machinekit.ini and if it contains old uuid, replace with +# check machinekit.ini and if it contains old uuid, replace with # new one from command line if [ -f $INIFILE ]; then diff --git a/src/executables/halcmd/src/halcmd_completion.c b/src/executables/halcmd/src/halcmd_completion.c index 71a3437873..b417a7c9dd 100644 --- a/src/executables/halcmd/src/halcmd_completion.c +++ b/src/executables/halcmd/src/halcmd_completion.c @@ -92,7 +92,7 @@ static const char *status_table[] = { }; static const char *pintype_table[] = { - "bit", "float", "u32", "s32", + "bit", "float", "u32", "s32", NULL }; @@ -108,7 +108,7 @@ static const char **string_table = NULL; foreach_args_t cargs; -static inline void zero_foreach_args(foreach_args_t *a) +static inline void zero_foreach_args(foreach_args_t *a) { memset((void *)a, 0, sizeof(foreach_args_t)); } @@ -156,8 +156,8 @@ static int yield_pinmatch(hal_object_ptr o, foreach_args_t *args) { int sz = strcspn(args->user_ptr1, " \t"); - if ( sz == strlen(hh_get_name(&o.pin->hdr)) && - strncmp(args->user_ptr1, hh_get_name(&o.pin->hdr), sz) == 0 ) + if ( sz == strlen(hh_get_name(&o.pin->hdr)) && + strncmp(args->user_ptr1, hh_get_name(&o.pin->hdr), sz) == 0 ) { match_type = o.pin->type; match_direction = o.pin->dir; @@ -167,12 +167,12 @@ int sz = strcspn(args->user_ptr1, " \t"); return 0; } -static void check_match_type_pin(const char *name) +static void check_match_type_pin(const char *name) { zero_foreach_args(&cargs); cargs.type = HAL_PIN; cargs.user_ptr1 = (char *) name; - + halg_yield(0, &cargs, yield_pinmatch); } @@ -182,8 +182,8 @@ static int yield_signalmatch(hal_object_ptr o, foreach_args_t *args) { int sz = strcspn(args->user_ptr1, " \t"); - if ( sz == strlen(hh_get_name(&o.sig->hdr)) && - strncmp(args->user_ptr1, hh_get_name(&o.sig->hdr), sz) == 0 ) + if ( sz == strlen(hh_get_name(&o.sig->hdr)) && + strncmp(args->user_ptr1, hh_get_name(&o.sig->hdr), sz) == 0 ) { match_type = o.sig->type; match_writers = o.sig->writers; @@ -198,7 +198,7 @@ static void check_match_type_signal(const char *name) { zero_foreach_args(&cargs); cargs.type = HAL_SIGNAL; cargs.user_ptr1 = (char *) name; - + halg_yield(0, &cargs, yield_signalmatch); } @@ -218,7 +218,7 @@ size_t len = strlen(args->user_ptr1); static char *thread_generator(const char *text, int state) { - if (!state) + if (!state) { zero_foreach_args(&cargs); cargs.type = HAL_THREAD; @@ -234,8 +234,8 @@ static char *thread_generator(const char *text, int state) { static int yield_paramstrname(hal_object_ptr o, foreach_args_t *args) { size_t len = strlen(args->user_ptr1); - - if( (strncmp(args->user_ptr1, hh_get_name(&o.param->hdr), len) == 0 )) + + if( (strncmp(args->user_ptr1, hh_get_name(&o.param->hdr), len) == 0 )) { args->result = strdup(hh_get_name(&o.param->hdr)); return 1; @@ -245,11 +245,11 @@ size_t len = strlen(args->user_ptr1); } -static char *parameter_generator(const char *text, int state) -{ +static char *parameter_generator(const char *text, int state) +{ // we don't have aliases any more, so just read param names - if (!state) + if (!state) { zero_foreach_args(&cargs); cargs.type = HAL_PARAM; @@ -265,7 +265,7 @@ static char *parameter_generator(const char *text, int state) static int yield_functstrname(hal_object_ptr o, foreach_args_t *args) { size_t len = strlen(args->user_ptr1); - + if( (strncmp(args->user_ptr1, hh_get_name(&o.funct->hdr), len) == 0 ) && ( args->user_arg1 == o.funct->users) ) { @@ -276,9 +276,9 @@ size_t len = strlen(args->user_ptr1); return 0; } -static char *funct_generator_common(const char *text, int state, int inuse) -{ - if (!state) +static char *funct_generator_common(const char *text, int state, int inuse) +{ + if (!state) { zero_foreach_args(&cargs); cargs.type = HAL_FUNCT; @@ -406,7 +406,7 @@ static char *comp_generator(const char *text, int state) { #define T_RT 0 #define T_USER 1 #define T_INST 2 - + static int yield_typecompstrname(hal_object_ptr o, foreach_args_t *args) { size_t len; @@ -449,15 +449,15 @@ size_t len; default: // out of range error return -1; } - + return 0; -} - +} + static char *typecomp_generator(const char *text, int state, int type) { - - if (!state) + + if (!state) { zero_foreach_args(&cargs); cargs.type = HAL_COMPONENT; @@ -469,17 +469,17 @@ static char *typecomp_generator(const char *text, int state, int type) { } -static char *usrcomp_generator(const char *text, int state) +static char *usrcomp_generator(const char *text, int state) { return typecomp_generator(text, state, T_USER); } -static char *icomp_generator(const char *text, int state) +static char *icomp_generator(const char *text, int state) { return typecomp_generator(text, state, T_INST); } -static char *rtcomp_generator(const char *text, int state) +static char *rtcomp_generator(const char *text, int state) { return typecomp_generator(text, state, T_RT); } @@ -491,7 +491,7 @@ static int yield_pinstrname(hal_object_ptr o, foreach_args_t *args) return 0; if ( !direction_match( o.pin->dir, match_direction ) ) return 0; - if ( match_type != HAL_TYPE_UNSPECIFIED && match_type != o.pin->type ) + if ( match_type != HAL_TYPE_UNSPECIFIED && match_type != o.pin->type ) return 0; size_t len = strlen(args->user_ptr1); @@ -841,4 +841,3 @@ void halcmd_init_readline() rl_readline_name = "halcmd"; rl_attempted_completion_function = rlcompleter; } - diff --git a/src/executables/halcmd/src/halcmd_main.c b/src/executables/halcmd/src/halcmd_main.c index 32075bc575..a840bb3247 100644 --- a/src/executables/halcmd/src/halcmd_main.c +++ b/src/executables/halcmd/src/halcmd_main.c @@ -322,7 +322,7 @@ int main(int argc, char **argv) } /* remove comments, do var substitution, and tokenise */ retval = halcmd_preprocess_line(raw_buf, tokens); - if (echo_mode) { + if (echo_mode) { halcmd_echo("%s\n", raw_buf); } if (retval == 0) { diff --git a/src/executables/halrun/src/halrun.in b/src/executables/halrun/src/halrun.in index eaf856d08b..0f8f42c23c 100644 --- a/src/executables/halrun/src/halrun.in +++ b/src/executables/halrun/src/halrun.in @@ -1,4 +1,4 @@ -#!/bin/bash +@BASH_SHEBANG@ HALRUN_VERSION="@CMAKE_PROJECT_VERSION@" diff --git a/src/executables/inivar/src/inivar.cc b/src/executables/inivar/src/inivar.cc index 4f2e71cde1..8db0d93288 100644 --- a/src/executables/inivar/src/inivar.cc +++ b/src/executables/inivar/src/inivar.cc @@ -15,10 +15,10 @@ * Author: * License: GPL Version 2 * System: Linux -* +* * Copyright (c) 2004 All rights reserved. * -* Last change: +* Last change: ********************************************************************/ #include /* printf(), fprintf(), FILE, fopen(),*/ diff --git a/src/executables/instcomp/src/instcomp.g b/src/executables/instcomp/src/instcomp.g index 5e43d8b447..8a0adadb3a 100644 --- a/src/executables/instcomp/src/instcomp.g +++ b/src/executables/instcomp/src/instcomp.g @@ -1,4 +1,3 @@ -#!/usr/bin/env python3 # This is 'instcomp', a tool to write instantiated components for # Machinekit # @@ -1131,18 +1130,18 @@ def build_rt(tempdir, filename, mode, origfilename, installdir): _config = f"--config {_config}" # Generator should be taken from the CMAKE_GENERATOR evironment variable # by CMake automatically - + cmake_generate = f"cmake -S {tempdir} -B {cmake_builddir}" cmake_build = f"cmake --build {cmake_builddir} {_config}" cmake_install = f"cmake --install {cmake_builddir} {_config}" - + _generate = subprocess.run(cmake_generate, shell=True, check=True) _build = subprocess.run(cmake_build, shell=True, check=True) - + if mode == INSTALL: _install = subprocess.run(cmake_install, shell=True, check=True) - + if mode == COMPILE: # Copying out with the build RPATH # TODO: Does this really make sense? diff --git a/src/executables/instcomp/src/pyproject.toml.in b/src/executables/instcomp/src/pyproject.toml.in index 2f23fac0f9..02c41bd88a 100644 --- a/src/executables/instcomp/src/pyproject.toml.in +++ b/src/executables/instcomp/src/pyproject.toml.in @@ -55,4 +55,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/executables/mklauncher/src/mklauncher.py b/src/executables/mklauncher/src/mklauncher.py index d169f5aefd..4e615a0830 100644 --- a/src/executables/mklauncher/src/mklauncher.py +++ b/src/executables/mklauncher/src/mklauncher.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python3 -# coding=utf-8 - import os import sys import argparse diff --git a/src/executables/mklauncher/src/pyproject.toml.in b/src/executables/mklauncher/src/pyproject.toml.in index e0c115a99a..7373d51a67 100644 --- a/src/executables/mklauncher/src/pyproject.toml.in +++ b/src/executables/mklauncher/src/pyproject.toml.in @@ -55,4 +55,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/executables/mksocmemio/src/mksocmemio.c b/src/executables/mksocmemio/src/mksocmemio.c index 69587496e0..b94e23832e 100644 --- a/src/executables/mksocmemio/src/mksocmemio.c +++ b/src/executables/mksocmemio/src/mksocmemio.c @@ -34,7 +34,7 @@ int main ( int argc, char *argv[] ) int fd; u_int32_t index, inval; char *uio_dev; - + // Open /dev/uio0 char buf[MAXNAMELEN]; int uio_id; @@ -56,13 +56,13 @@ int main ( int argc, char *argv[] ) printf ( " ERROR: could not open %s ...\n", uio_dev); return ( 1 ); } - + // get virtual addr that maps to physical virtual_base = mmap( NULL, HW_REGS_SPAN, ( PROT_READ | PROT_WRITE ), MAP_SHARED, fd, 0); - + if ( virtual_base == MAP_FAILED ) { printf ( " ERROR: mmap() failed...\n" ); - + close ( fd ); return ( 1 ); } @@ -79,7 +79,7 @@ int main ( int argc, char *argv[] ) index = (u_int32_t) strtoul(argv[2], NULL, 10); } u_int32_t value = *((u_int32_t *)(h2p_lw_axi_mem_addr + index)); - + switch (argv[1][1]) { case 'r': printf("Read: "); @@ -96,7 +96,7 @@ int main ( int argc, char *argv[] ) inval = (u_int32_t) strtoul(argv[3], NULL, 10); } *((u_int32_t *)(h2p_lw_axi_mem_addr + index)) = inval; - printf("Wrote: 0x%08X\t %u\tto Address --> 0x%08X\t%u \n", inval, inval, index, index); + printf("Wrote: 0x%08X\t %u\tto Address --> 0x%08X\t%u \n", inval, inval, index, index); } else { printf("Value missing use: mksocmemio -h to show valid options and argunemts\n"); } diff --git a/src/executables/mkwrapper/src/mkwrapper.py b/src/executables/mkwrapper/src/mkwrapper.py index 8e2aeed9e9..b3d887e943 100644 --- a/src/executables/mkwrapper/src/mkwrapper.py +++ b/src/executables/mkwrapper/src/mkwrapper.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -* import os import zmq import threading diff --git a/src/executables/mkwrapper/src/pyproject.toml.in b/src/executables/mkwrapper/src/pyproject.toml.in index 94f509f919..20b14de199 100644 --- a/src/executables/mkwrapper/src/pyproject.toml.in +++ b/src/executables/mkwrapper/src/pyproject.toml.in @@ -55,4 +55,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/executables/msgd/rsyslogd-hal.conf b/src/executables/msgd/rsyslogd-hal.conf index 5905ed1034..96c816bf6f 100644 --- a/src/executables/msgd/rsyslogd-hal.conf +++ b/src/executables/msgd/rsyslogd-hal.conf @@ -13,7 +13,7 @@ # $ tail -f /var/log/hal.log -# RTAPI startup can create a large burst of log messages +# RTAPI startup can create a large burst of log messages # rsyslogd in default configuration has been observed to limit rates # this log entry is telltale: # diff --git a/src/executables/mutexwatch/src/mutexwatch.c b/src/executables/mutexwatch/src/mutexwatch.c index e6bc32a895..fdd9f00ae4 100644 --- a/src/executables/mutexwatch/src/mutexwatch.c +++ b/src/executables/mutexwatch/src/mutexwatch.c @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ********************************************************************/ -// helper to watch mutexes +// helper to watch mutexes #include #include @@ -67,7 +67,7 @@ int main(int argc, char **argv) halkey = OS_KEY(HAL_KEY, rtapi_instance); size = sizeof(global_data_t); - retval = shm_common_new(globalkey, &size, + retval = shm_common_new(globalkey, &size, rtapi_instance, (void **) &global_data, 0); if (retval < 0) fprintf(stderr, "cannot attach global segment key=0x%x %s\n", @@ -78,7 +78,7 @@ int main(int argc, char **argv) } size = sizeof(rtapi_data_t); - retval = shm_common_new(rtapikey, &size, + retval = shm_common_new(rtapikey, &size, rtapi_instance, (void **) &rtapi_data, 0); if (retval < 0) fprintf(stderr, "cannot attach rtapi segment key=0x%x %s\n", @@ -91,7 +91,7 @@ int main(int argc, char **argv) if (MMAP_OK(global_data)) { size = global_data->hal_size; // global_data is needed for actual size of the HAL data segment - retval = shm_common_new(halkey, &size, + retval = shm_common_new(halkey, &size, rtapi_instance, (void **) &hal_data, 0); if (retval < 0) fprintf(stderr, "cannot attach hal segment key=0x%x %s\n", diff --git a/src/executables/pci_read/src/pci_read.c b/src/executables/pci_read/src/pci_read.c index 7a5e9e157f..c5b77c5de1 100644 --- a/src/executables/pci_read/src/pci_read.c +++ b/src/executables/pci_read/src/pci_read.c @@ -10,7 +10,7 @@ /* * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as published + * it under the terms of the GNU General Public License version 2 as published * by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, diff --git a/src/executables/pci_write/src/pci_write.c b/src/executables/pci_write/src/pci_write.c index 04466cbeda..7e888f494f 100644 --- a/src/executables/pci_write/src/pci_write.c +++ b/src/executables/pci_write/src/pci_write.c @@ -10,7 +10,7 @@ /* * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as published + * it under the terms of the GNU General Public License version 2 as published * by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, diff --git a/src/executables/ppioctl/src/ppioctl.c b/src/executables/ppioctl/src/ppioctl.c index 51e618931d..926a2d6bc8 100644 --- a/src/executables/ppioctl/src/ppioctl.c +++ b/src/executables/ppioctl/src/ppioctl.c @@ -17,7 +17,7 @@ #include #include -#include +#include #include typedef unsigned long long u64; @@ -53,7 +53,7 @@ int get_ppdev_res(int dev, struct ppres *ppres) unsigned from, to; // parse this: - // $ cat /sys/class/ppdev/parport0/device/resources + // $ cat /sys/class/ppdev/parport0/device/resources // state = active // io 0x378-0x37f // irq 7 @@ -95,7 +95,7 @@ int get_ppdev_res(int dev, struct ppres *ppres) line); fclose(f); return -1; - + } else { ppres->reg_start = from; ppres->reg_end = to; @@ -106,7 +106,7 @@ int get_ppdev_res(int dev, struct ppres *ppres) return 0; } -float cpu_MHz(void) +float cpu_MHz(void) { char *path = "/proc/cpuinfo", *s, line[1024]; float freq; @@ -161,8 +161,8 @@ int main(int argc, char *argv[]) } sprintf(path, "/dev/parport%d", dev); - parportfd = open(path, O_RDWR); - if (parportfd > 0) + parportfd = open(path, O_RDWR); + if (parportfd > 0) result = ioctl(parportfd, PPCLAIM); else { perror(path); @@ -173,21 +173,21 @@ int main(int argc, char *argv[]) if (get_ppdev_res(dev, &ppres) < 0) { exit(1); - } else - printf("%s: io=0x%x-0x%x irq=%d state=%d\n", - path, ppres.reg_start, + } else + printf("%s: io=0x%x-0x%x irq=%d state=%d\n", + path, ppres.reg_start, ppres.reg_end, ppres.irq,ppres.state); ioctl( parportfd, PPRCONTROL, &ctrl ); ioctl( parportfd, PPRSTATUS , &data ); ioctl( parportfd, PPRDATA , &status ); - + printf("control=0x%x data=0x%x status=0x%x\n", ctrl, data, status); - - if (time_ioctl) { + + if (time_ioctl) { lap = 0; for (i = 0; i < N_ITER; i++) { - if (data == 0) + if (data == 0) data = 1; start = rdtsc(); ioctl(parportfd, PPWDATA, &data); @@ -205,10 +205,10 @@ int main(int argc, char *argv[]) } lap = 0; for (i = 0; i < N_ITER; i++) { - if (data == 0) + if (data == 0) data = 1; start = rdtsc(); - outb(data, ppres.reg_start); + outb(data, ppres.reg_start); lap += rdtsc() - start; data = data << 1; } @@ -217,7 +217,7 @@ int main(int argc, char *argv[]) printf("direct register write: time=%g uS/write()\n",time); if (ioperm(ppres.reg_start, 3, 0) < 0) { //Release the IO ports - perror("ioperm release"); + perror("ioperm release"); } } result = ioctl(parportfd,PPRELEASE); diff --git a/src/executables/pru_debug/src/pru_debug b/src/executables/pru_debug/src/pru_debug index c0b3e59475..c478c7b3be 100755 --- a/src/executables/pru_debug/src/pru_debug +++ b/src/executables/pru_debug/src/pru_debug @@ -17,8 +17,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ################################################# -usage () { -cat << _EOF_ +usage () { +cat << _EOF_ Usage: $0 [options] pru-binary-image -p PRU to target _EOF_ @@ -163,4 +163,3 @@ stop unloadrt all _EOF_ - diff --git a/src/executables/realtime/src/realtime.in b/src/executables/realtime/src/realtime.in index e4c0143a03..2f17b0df66 100644 --- a/src/executables/realtime/src/realtime.in +++ b/src/executables/realtime/src/realtime.in @@ -1,4 +1,4 @@ -#! /bin/bash +@BASH_SHEBANG@ # # @configure_input@ # on @DATE@ diff --git a/src/executables/test_rtapi_vsnprinf/src/test_rtapi_vsnprintf.c b/src/executables/test_rtapi_vsnprinf/src/test_rtapi_vsnprintf.c index 43870265ee..63a42cb7c6 100644 --- a/src/executables/test_rtapi_vsnprinf/src/test_rtapi_vsnprintf.c +++ b/src/executables/test_rtapi_vsnprinf/src/test_rtapi_vsnprintf.c @@ -34,7 +34,7 @@ double vectors[] = { 0.0, -0.0, 3.14, -3.14, 100, 1e6, 1e300, 1e-10, 1e-100, 1e-280, 1e-300, - -__builtin_inf(), __builtin_inf(), __builtin_nan(""), + -__builtin_inf(), __builtin_inf(), __builtin_nan(""), }; int nvectors = sizeof(vectors)/sizeof(vectors[0]); diff --git a/src/executables/test_rtapi_vsnprinf/src/vsnprintf.h b/src/executables/test_rtapi_vsnprinf/src/vsnprintf.h index 19f88d3e78..a3a43505b6 100644 --- a/src/executables/test_rtapi_vsnprinf/src/vsnprintf.h +++ b/src/executables/test_rtapi_vsnprinf/src/vsnprintf.h @@ -6,7 +6,7 @@ * * License: GPL Version 2 * System: Linux -* +* * Copyright (c) 2004 All rights reserved. * * Last change: @@ -25,7 +25,7 @@ values (or floating point). under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. This code is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -184,7 +184,7 @@ static char *fnumber(char *buf, char *end, double num) if(du.ieee.negative) buf = ch(buf, end, '-'); if(du.ieee.exponent == 0x7ff) { - // inf or nan + // inf or nan if(du.ieee.mantissa0 == 0 && du.ieee.mantissa1 == 0) { buf = st(buf, end, "Inf"); return buf; } else { diff --git a/src/executables/webtalk/src/webtalk_initproto.cc b/src/executables/webtalk/src/webtalk_initproto.cc index c891eb6982..9369633002 100644 --- a/src/executables/webtalk/src/webtalk_initproto.cc +++ b/src/executables/webtalk/src/webtalk_initproto.cc @@ -18,12 +18,12 @@ void init_protocols(void) { #ifdef LWS_NEW_API // size must be number of protos + 1 - libwebsockets requires a zero delimiter struct - struct lws_protocols *p = protocols = + struct lws_protocols *p = protocols = (struct lws_protocols *) calloc(NPROTOS, sizeof (struct lws_protocols)); #else // size must be number of protos + 1 - libwebsockets requires a zero delimiter struct - struct libwebsocket_protocols *p = protocols = + struct libwebsocket_protocols *p = protocols = (struct libwebsocket_protocols *) calloc(NPROTOS, sizeof (struct libwebsocket_protocols)); #endif diff --git a/src/executables/webtalk/tests/zws-proto-testclient.py b/src/executables/webtalk/tests/zws-proto-testclient.py old mode 100644 new mode 100755 diff --git a/src/executables/webtalk/wszmqproxy-test.py b/src/executables/webtalk/wszmqproxy-test.py old mode 100644 new mode 100755 diff --git a/src/libraries/ads7828/src/pyproject.toml.in b/src/libraries/ads7828/src/pyproject.toml.in index 02e70d7616..b38f7ebdc8 100644 --- a/src/libraries/ads7828/src/pyproject.toml.in +++ b/src/libraries/ads7828/src/pyproject.toml.in @@ -52,4 +52,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/libraries/config_service/halanduino/description.ini b/src/libraries/config_service/halanduino/description.ini old mode 100755 new mode 100644 diff --git a/src/libraries/config_service/ledctrl/description.ini b/src/libraries/config_service/ledctrl/description.ini old mode 100755 new mode 100644 diff --git a/src/libraries/config_service/src/configserver.py b/src/libraries/config_service/src/configserver.py index 46f70313a4..7fd0ceebdd 100755 --- a/src/libraries/config_service/src/configserver.py +++ b/src/libraries/config_service/src/configserver.py @@ -1,5 +1,4 @@ #!/usr/bin/env python3 -# coding=utf-8 import os import sys from stat import S_ISREG, S_ISDIR diff --git a/src/libraries/config_service/video/description.ini b/src/libraries/config_service/video/description.ini old mode 100755 new mode 100644 diff --git a/src/libraries/cycompat/src/pyproject.toml.in b/src/libraries/cycompat/src/pyproject.toml.in index 81bf05e2ff..db1ed379e8 100644 --- a/src/libraries/cycompat/src/pyproject.toml.in +++ b/src/libraries/cycompat/src/pyproject.toml.in @@ -54,4 +54,4 @@ build = "build.py" [build-system] requires = ["pdm-pep517", "setuptools", "cmake", "cmake_build_extension", "ninja"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/libraries/cyhal/README.asciidoc b/src/libraries/cyhal/README.asciidoc index 230f769371..1221e1487d 100644 --- a/src/libraries/cyhal/README.asciidoc +++ b/src/libraries/cyhal/README.asciidoc @@ -4,4 +4,3 @@ The record and multiframe ringbuffer code is by Pavel Shramov, 2014 License: MIT see http://psha.org.ru/cgit/psha/emc2.git/commit/?h=wip-cython&id=7137c5f8874948541de1aa796c9e8c1b2f8f7fb8 - diff --git a/src/libraries/cyhal/examples/component.py b/src/libraries/cyhal/examples/component.py old mode 100644 new mode 100755 diff --git a/src/libraries/cyhal/examples/heaptrace.py b/src/libraries/cyhal/examples/heaptrace.py old mode 100644 new mode 100755 diff --git a/src/libraries/cyhal/examples/internal.py b/src/libraries/cyhal/examples/internal.py old mode 100644 new mode 100755 diff --git a/src/libraries/cyhal/examples/test_instance.py b/src/libraries/cyhal/examples/test_instance.py old mode 100644 new mode 100755 diff --git a/src/libraries/cyhal/src/__init__.py b/src/libraries/cyhal/src/__init__.py index 115c1c3e45..05f04e2c58 100644 --- a/src/libraries/cyhal/src/__init__.py +++ b/src/libraries/cyhal/src/__init__.py @@ -1 +1 @@ -from .hal import * \ No newline at end of file +from .hal import * diff --git a/src/libraries/cyhal/src/hal_group.pyx b/src/libraries/cyhal/src/hal_group.pyx index 83d73b4edd..df6acf6d75 100644 --- a/src/libraries/cyhal/src/hal_group.pyx +++ b/src/libraries/cyhal/src/hal_group.pyx @@ -72,7 +72,7 @@ cdef class Group(HALObject): raise RuntimeError(f"hal_group_compile({self.name}) failed: {hal_lasterror()}") hal_unref_group(self.name.encode()) - def member_add(self, member, int arg1=0, int eps_index=0): + def member_add(self, member, int arg1=0, int eps_index=0): if isinstance(member, Signal): member = member.name rc = halg_member_new(1, self.name.encode(), member.encode(), arg1, eps_index) diff --git a/src/libraries/cyhal/src/hal_util.pxd b/src/libraries/cyhal/src/hal_util.pxd index 994c609451..bfb16ec430 100644 --- a/src/libraries/cyhal/src/hal_util.pxd +++ b/src/libraries/cyhal/src/hal_util.pxd @@ -65,4 +65,3 @@ cdef inline py2hal(int t, hal_data_u *dp, object v): raise RuntimeError("invalid HAL object type %d" % (t)) else: raise RuntimeError("py2hal: float value not valid for type: %d" % (t)) - diff --git a/src/libraries/cyhal/src/pyproject.toml.in b/src/libraries/cyhal/src/pyproject.toml.in index 5aef0ed591..360fd55a6f 100644 --- a/src/libraries/cyhal/src/pyproject.toml.in +++ b/src/libraries/cyhal/src/pyproject.toml.in @@ -54,4 +54,4 @@ build = "build.py" [build-system] requires = ["pdm-pep517", "setuptools", "cmake", "cmake_build_extension", "ninja"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/libraries/cyhal/test/test.py b/src/libraries/cyhal/test/test.py old mode 100644 new mode 100755 index 2bc9c03758..5b257f8c2f --- a/src/libraries/cyhal/test/test.py +++ b/src/libraries/cyhal/test/test.py @@ -23,4 +23,3 @@ time.sleep(100) # exiting here will remove the comp, and unlink the pins - diff --git a/src/libraries/cyruntime/src/__init__.py b/src/libraries/cyruntime/src/__init__.py index 2337eb85a1..a582460b94 100644 --- a/src/libraries/cyruntime/src/__init__.py +++ b/src/libraries/cyruntime/src/__init__.py @@ -1 +1 @@ -from .rtapi import * \ No newline at end of file +from .rtapi import * diff --git a/src/libraries/cyruntime/src/pyproject.toml.in b/src/libraries/cyruntime/src/pyproject.toml.in index ba298d434d..7b2fdf87c5 100644 --- a/src/libraries/cyruntime/src/pyproject.toml.in +++ b/src/libraries/cyruntime/src/pyproject.toml.in @@ -54,4 +54,4 @@ build = "build.py" [build-system] requires = ["pdm-pep517", "setuptools", "cmake", "cmake_build_extension", "ninja"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/libraries/cyshmcommon/src/pyproject.toml.in b/src/libraries/cyshmcommon/src/pyproject.toml.in index 6e273bc7eb..dbfb6b824b 100644 --- a/src/libraries/cyshmcommon/src/pyproject.toml.in +++ b/src/libraries/cyshmcommon/src/pyproject.toml.in @@ -54,4 +54,4 @@ build = "build.py" [build-system] requires = ["pdm-pep517", "setuptools", "cmake", "cmake_build_extension", "ninja"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/libraries/hal/README.asciidoc b/src/libraries/hal/README.asciidoc index 795a266df9..e5a9980eec 100644 --- a/src/libraries/hal/README.asciidoc +++ b/src/libraries/hal/README.asciidoc @@ -1,7 +1,7 @@ = HAL -:author: Jakub Fišer -:description: HAL sourcetree README -:sectanchors: +:author: Jakub Fišer +:description: HAL sourcetree README +:sectanchors: :url-repo: https://machinekit.io HAL represents the **H**ardware **A**bstraction **L**ayer functionality of Machinekit-HAL. It provides the __IPC__ mechanism for communication between modules. Should be generally loaded as second object after **Runtime**. @@ -30,4 +30,4 @@ Objects created in `CMAKE` Machinekit-HAL's namespace used for building. === hal (`libhal.so`) * Standard shared library used for compile time linking into binaries -* Transitively exports **PUBLIC** interface header files through transitive dependencies \ No newline at end of file +* Transitively exports **PUBLIC** interface header files through transitive dependencies diff --git a/src/libraries/hal/include/hal/halpb.hh b/src/libraries/hal/include/hal/halpb.hh index 2073ceec88..d20c980290 100644 --- a/src/libraries/hal/include/hal/halpb.hh +++ b/src/libraries/hal/include/hal/halpb.hh @@ -144,5 +144,3 @@ static inline int hal_pbsig2u(const machinetalk::Signal *s, hal_data_u *vp) } return 0; } - - diff --git a/src/libraries/hal/src/hal_iring.c b/src/libraries/hal/src/hal_iring.c index 608f9d287d..adbdfe562a 100644 --- a/src/libraries/hal/src/hal_iring.c +++ b/src/libraries/hal/src/hal_iring.c @@ -27,4 +27,3 @@ int hal_iring_free(iring_t **irp) (void *) irp); } } - diff --git a/src/libraries/hal/src/hal_signal.c b/src/libraries/hal/src/hal_signal.c index ad12720ad7..1816e5c551 100644 --- a/src/libraries/hal/src/hal_signal.c +++ b/src/libraries/hal/src/hal_signal.c @@ -286,7 +286,7 @@ int halg_link(const int use_hal_mutex, // assure proper typing on assignment, assigning a hal_data_u is // a surefire cause for memory corrupion as hal_data_u is larger - // than hal_bit_t, hal_s32_t, and hal_u32_t - this works only for + // than hal_bit_t, hal_s32_t, and hal_u32_t - this works only for // hal_float_t (!) // my old, buggy code: //*((hal_data_u *)data_addr) = pin->dummysig; diff --git a/src/libraries/hal/test/accessor/clearbarriers.hal b/src/libraries/hal/test/accessor/clearbarriers.hal index 959b31d955..ec3898f91a 100644 --- a/src/libraries/hal/test/accessor/clearbarriers.hal +++ b/src/libraries/hal/test/accessor/clearbarriers.hal @@ -11,4 +11,4 @@ setp v1stats.enable 0 setp v2stats.enable 0 sleep 1 setp v1stats.enable 1 -setp v2stats.enable 1 \ No newline at end of file +setp v2stats.enable 1 diff --git a/src/libraries/hal/test/accessor/runtimes.hal b/src/libraries/hal/test/accessor/runtimes.hal index 23256cfdc7..481ea6542e 100644 --- a/src/libraries/hal/test/accessor/runtimes.hal +++ b/src/libraries/hal/test/accessor/runtimes.hal @@ -69,5 +69,3 @@ addf xor2.funct t addf fs.funct t addf pat5.funct t start - - diff --git a/src/libraries/hal/test/accessor/setbarriers.hal b/src/libraries/hal/test/accessor/setbarriers.hal index 8965ab6196..2cf588962b 100644 --- a/src/libraries/hal/test/accessor/setbarriers.hal +++ b/src/libraries/hal/test/accessor/setbarriers.hal @@ -11,4 +11,4 @@ setp v1stats.enable 0 setp v2stats.enable 0 sleep 1 setp v1stats.enable 1 -setp v2stats.enable 1 \ No newline at end of file +setp v2stats.enable 1 diff --git a/src/libraries/hal_command/README.asciidoc b/src/libraries/hal_command/README.asciidoc index ab1804a080..188cbb4940 100644 --- a/src/libraries/hal_command/README.asciidoc +++ b/src/libraries/hal_command/README.asciidoc @@ -1,10 +1,10 @@ = HAL -:author: Jakub Fišer -:description: HAL_command sourcetree README -:sectanchors: +:author: Jakub Fišer +:description: HAL_command sourcetree README +:sectanchors: :url-repo: https://machinekit.io -HAL_command is shared library providing function set for manipulating the **H**ardware **A**bstraction **L**ayer functionality of Machinekit-HAL. +HAL_command is shared library providing function set for manipulating the **H**ardware **A**bstraction **L**ayer functionality of Machinekit-HAL. == Distribution @@ -17,4 +17,4 @@ Objects created in `CMAKE` Machinekit-HAL's namespace used for building. === hal_command (`libhal_command.so`) * Standard shared library used for compile time linking into binaries -* Transitively exports **PUBLIC** interface header files through transitive dependencies \ No newline at end of file +* Transitively exports **PUBLIC** interface header files through transitive dependencies diff --git a/src/libraries/hal_command/src/halcmd.c b/src/libraries/hal_command/src/halcmd.c index af42db86dc..237b57b147 100644 --- a/src/libraries/hal_command/src/halcmd.c +++ b/src/libraries/hal_command/src/halcmd.c @@ -356,12 +356,12 @@ int hal_systemv(char *const argv[]) { } if (WIFSIGNALED(status) && WTERMSIG(status)) { - halcmd_error("child %s caught signal %s\n", + halcmd_error("child %s caught signal %s\n", argv[0], strsignal(WTERMSIG(status))); } if (WIFSIGNALED(status) && WCOREDUMP(status)) { - halcmd_error("child %s created a core dump, signal %s\n", + halcmd_error("child %s created a core dump, signal %s\n", argv[0], strsignal(WTERMSIG(status))); return -1; } @@ -391,7 +391,7 @@ static void quit(int sig) halcmd_done = 1; } else { /* don't have to worry about the mutex, but if we just - return, we might return into the fgets() and wait + return, we might return into the fgets() and wait all day instead of exiting. So we exit from here. */ if ( comp_id > 0 ) { hal_exit(comp_id); @@ -590,17 +590,17 @@ static int tokenize(char *cmd_buf, char **tokens) cp1 = cmd_buf; state = BETWEEN_TOKENS; while ( m < MAX_TOK ) { - if(*cp1 == '\r') + if(*cp1 == '\r') { char nextc = *(cp1+1); - if(nextc == '\n' || nextc == '\0') + if(nextc == '\n' || nextc == '\0') { static int warned=0; - if(!warned) + if(!warned) halcmd_warning("File contains DOS-style line endings.\n"); warned = 1; } - else + else { halcmd_error("File contains embedded carriage returns.\n"); return -1; @@ -816,7 +816,7 @@ static int strlimcpy(char **dest, char *src, int srclen, int *destspace) { ini vars are in the following formats: [SECTION]VAR [SECTION](VAR) - + return values: 0 success -1 missing close parenthesis @@ -834,7 +834,7 @@ static int replace_vars(char *source_str, char *dest_str, int max_chars, char ** char *replacement, sec[128], var[128]; static char info[256]; char *sp=source_str, *dp=dest_str, *secP, *varP; - const char + const char * words = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_"; dest_str[max_chars-1] = '\0'; /* make sure there's a terminator */ @@ -864,7 +864,7 @@ static int replace_vars(char *source_str, char *dest_str, int max_chars, char ** strncpy(var, varP, next_delim); var[next_delim]='\0'; replacement = getenv(var); - if (replacement == NULL) + if (replacement == NULL) { snprintf(info, sizeof(info), "%s", var); *detail = info; diff --git a/src/libraries/hal_glib/src/hal_glib.py b/src/libraries/hal_glib/src/hal_glib.py index 1defcce388..6366ac3db0 100644 --- a/src/libraries/hal_glib/src/hal_glib.py +++ b/src/libraries/hal_glib/src/hal_glib.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python3 -# vim: sts=4 sw=4 et - import _hal, hal, gobject import linuxcnc import sys diff --git a/src/libraries/hal_glib/src/pyproject.toml.in b/src/libraries/hal_glib/src/pyproject.toml.in index 4ebfbd645a..6db6bd3eb7 100644 --- a/src/libraries/hal_glib/src/pyproject.toml.in +++ b/src/libraries/hal_glib/src/pyproject.toml.in @@ -52,4 +52,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/libraries/halfile/src/halfile.py b/src/libraries/halfile/src/halfile.py index abcbd1184c..1e9dcff38d 100644 --- a/src/libraries/halfile/src/halfile.py +++ b/src/libraries/halfile/src/halfile.py @@ -1,4 +1,3 @@ -# coding=utf-8 import os from six.moves import configparser from machinekit.hal import cyruntime, cyhal diff --git a/src/libraries/halfile/src/pyproject.toml.in b/src/libraries/halfile/src/pyproject.toml.in index f3d34f35e0..e08bc07657 100644 --- a/src/libraries/halfile/src/pyproject.toml.in +++ b/src/libraries/halfile/src/pyproject.toml.in @@ -52,4 +52,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/libraries/hostmot2_bitfile/include/hostmot2/bitfile.h b/src/libraries/hostmot2_bitfile/include/hostmot2/bitfile.h index 69d4e89c18..8ba474085f 100644 --- a/src/libraries/hostmot2_bitfile/include/hostmot2/bitfile.h +++ b/src/libraries/hostmot2_bitfile/include/hostmot2/bitfile.h @@ -53,4 +53,3 @@ u8 bitfile_reverse_bits(u8 data); #endif // __BITFILE_H - diff --git a/src/libraries/hostmot2_bitfile/src/bitfile.c b/src/libraries/hostmot2_bitfile/src/bitfile.c old mode 100755 new mode 100644 index df352e4d15..650bc95b25 --- a/src/libraries/hostmot2_bitfile/src/bitfile.c +++ b/src/libraries/hostmot2_bitfile/src/bitfile.c @@ -163,7 +163,7 @@ int bitfile_parse_and_verify(const struct firmware *fw, bitfile_t *bitfile) { bitfile->e.data = NULL; - // + // // verify the header // @@ -180,7 +180,7 @@ int bitfile_parse_and_verify(const struct firmware *fw, bitfile_t *bitfile) { } - // + // // parse and verify all the chunks // @@ -190,7 +190,7 @@ int bitfile_parse_and_verify(const struct firmware *fw, bitfile_t *bitfile) { } - // + // // make sure we got all the required chunks // @@ -239,4 +239,3 @@ u8 bitfile_reverse_bits(u8 data) { }; return swaptab[data]; } - diff --git a/src/libraries/launcher/src/__init__.py b/src/libraries/launcher/src/__init__.py index 8d1c8b69c3..e69de29bb2 100644 --- a/src/libraries/launcher/src/__init__.py +++ b/src/libraries/launcher/src/__init__.py @@ -1 +0,0 @@ - diff --git a/src/libraries/launcher/src/launcher.py b/src/libraries/launcher/src/launcher.py index 992c26e9ea..a025522ef2 100644 --- a/src/libraries/launcher/src/launcher.py +++ b/src/libraries/launcher/src/launcher.py @@ -1,4 +1,3 @@ -# coding=utf-8 import os import shlex import sys diff --git a/src/libraries/launcher/src/pyproject.toml.in b/src/libraries/launcher/src/pyproject.toml.in index c26a6cd750..24ca203b95 100644 --- a/src/libraries/launcher/src/pyproject.toml.in +++ b/src/libraries/launcher/src/pyproject.toml.in @@ -52,4 +52,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/libraries/linux_event/src/linux_event.py b/src/libraries/linux_event/src/linux_event.py index deaf7a8dfa..223e9633db 100644 --- a/src/libraries/linux_event/src/linux_event.py +++ b/src/libraries/linux_event/src/linux_event.py @@ -84,7 +84,7 @@ def __init__(self, *args): def __repr__(self): return "" % ( self.value, self.minimum, self.maximum, self.fuzz, self.flat) - + @classmethod def get(cls, fd, idx): idx = ABS.get(idx, idx) @@ -93,7 +93,7 @@ def get(cls, fd, idx): def set(self, fd, idx): idx = ABS.get(idx, idx) - buf = struct.pack(format, self.value, self.minimum, self.maximum, + buf = struct.pack(format, self.value, self.minimum, self.maximum, self.fuzz, self.flat) fcntl.ioctl(fd, EVIOCSABS + idx, buf) @@ -834,7 +834,7 @@ def find(pattern): system. Please read the section 'PERMISSIONS AND UDEV' in the hal_input manpage""") raise LookupError( - "No input device matching %r was found (%d devices checked)" + "No input device matching %r was found (%d devices checked)" % (pattern, successful_opens)) def decode(map, mapname, code): @@ -854,7 +854,7 @@ def __init__(self, pattern): if exclusive: fcntl.ioctl(self.f, EVIOCGRAB, 1) - + def fileno(self): return self.f def readable(self): r, w, x = select.select([self.f], [], [], 0) diff --git a/src/libraries/linux_event/src/pyproject.toml.in b/src/libraries/linux_event/src/pyproject.toml.in index ed3b4a662e..9840afb831 100644 --- a/src/libraries/linux_event/src/pyproject.toml.in +++ b/src/libraries/linux_event/src/pyproject.toml.in @@ -52,4 +52,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/libraries/machinetalk/src/mk_service.cc b/src/libraries/machinetalk/src/mk_service.cc index 919dc02ec9..48a05f980e 100644 --- a/src/libraries/machinetalk/src/mk_service.cc +++ b/src/libraries/machinetalk/src/mk_service.cc @@ -175,7 +175,7 @@ int mk_bindsocket(mk_netopts_t *n, mk_socket_t *s) // Copying a string PATH_MAX length plus 4 chars into a buffer of PATH_MAX // and restricting copy size to PATH_MAX, will always raise // a warning re possible truncation - char dsn[PATH_MAX]; + char dsn[PATH_MAX]; snprintf(dsn, sizeof(dsn), "dsn=%s", buf); s->announced_uri = strdup(dsn); } diff --git a/src/libraries/machinetalk/src/pbutil.cc b/src/libraries/machinetalk/src/pbutil.cc index 6b2d7d3401..88b2c0fe20 100644 --- a/src/libraries/machinetalk/src/pbutil.cc +++ b/src/libraries/machinetalk/src/pbutil.cc @@ -76,8 +76,8 @@ send_pbcontainer(zmsg_t *dest, machinetalk::Container &c, void *socket) } for (size_t i = 0; i < nsize; ++i){ - zframe_t *f = zmsg_pop (dest); - if(f == NULL){ + zframe_t *f = zmsg_pop (dest); + if(f == NULL){ syslog_async(LOG_ERR, "send_pbcontainer(): NULL zframe_t 'f' passed"); retval = -1; goto DONE; diff --git a/src/libraries/machinetalk/test/tutorial/htdocs/js/JSMQ.js b/src/libraries/machinetalk/test/tutorial/htdocs/js/JSMQ.js index 541c0891df..5ad0e0df50 100644 --- a/src/libraries/machinetalk/test/tutorial/htdocs/js/JSMQ.js +++ b/src/libraries/machinetalk/test/tutorial/htdocs/js/JSMQ.js @@ -317,4 +317,4 @@ function Subscriber() { } return that; -} \ No newline at end of file +} diff --git a/src/libraries/machinetalk/test/tutorial/htdocs/js/jquery.timer.js b/src/libraries/machinetalk/test/tutorial/htdocs/js/jquery.timer.js index 29c5c96e4e..9991bca931 100644 --- a/src/libraries/machinetalk/test/tutorial/htdocs/js/jquery.timer.js +++ b/src/libraries/machinetalk/test/tutorial/htdocs/js/jquery.timer.js @@ -108,4 +108,4 @@ return this; } }; -})(jQuery); \ No newline at end of file +})(jQuery); diff --git a/src/libraries/machinetalk/test/tutorial/json-ws/json-ws-micromot-client.py b/src/libraries/machinetalk/test/tutorial/json-ws/json-ws-micromot-client.py old mode 100644 new mode 100755 diff --git a/src/libraries/machinetalk/test/tutorial/json-ws/micromot-server.py b/src/libraries/machinetalk/test/tutorial/json-ws/micromot-server.py old mode 100644 new mode 100755 diff --git a/src/libraries/machinetalk/test/tutorial/motorctrl/motorctrl.py b/src/libraries/machinetalk/test/tutorial/motorctrl/motorctrl.py index 7866f46daf..c57e3209f3 100644 --- a/src/libraries/machinetalk/test/tutorial/motorctrl/motorctrl.py +++ b/src/libraries/machinetalk/test/tutorial/motorctrl/motorctrl.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python3 # vim: sts=4 sw=4 et # This is a component of LinuxCNC # classhandler.py Copyright 2010 Michael Haberler diff --git a/src/libraries/machinetalk/test/tutorial/ringbuffers/README b/src/libraries/machinetalk/test/tutorial/ringbuffers/README index a4f6ab440d..7440a7abf7 100644 --- a/src/libraries/machinetalk/test/tutorial/ringbuffers/README +++ b/src/libraries/machinetalk/test/tutorial/ringbuffers/README @@ -1 +1 @@ -for these scripts, realtime must be running. \ No newline at end of file +for these scripts, realtime must be running. diff --git a/src/libraries/machinetalk/test/tutorial/zeroconf/resolve.py b/src/libraries/machinetalk/test/tutorial/zeroconf/resolve.py old mode 100644 new mode 100755 diff --git a/src/libraries/mcp23017/src/pyproject.toml.in b/src/libraries/mcp23017/src/pyproject.toml.in index 984dc7b08c..14a25d83d3 100644 --- a/src/libraries/mcp23017/src/pyproject.toml.in +++ b/src/libraries/mcp23017/src/pyproject.toml.in @@ -52,4 +52,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/libraries/misc_gtk/README.asciidoc b/src/libraries/misc_gtk/README.asciidoc index 77bac5b17e..03a60f54fd 100644 --- a/src/libraries/misc_gtk/README.asciidoc +++ b/src/libraries/misc_gtk/README.asciidoc @@ -1,7 +1,7 @@ = HAL -:author: Jakub Fišer -:description: miscgtk sourcetree README -:sectanchors: +:author: Jakub Fišer +:description: miscgtk sourcetree README +:sectanchors: :url-repo: https://machinekit.io Misc_gtk is a library used in graphical parts of Machinekit-HAL like HALscope and HAL meter. Thus, should be a terporary as Machinekit-HAL is intended as mainly headless solution. @@ -17,4 +17,4 @@ Objects created in `CMAKE` Machinekit-HAL's namespace used for building. === misc_gtk (`libmisc_gtk.so`) * Standard shared library used for compile time linking into binaries -* Transitively exports **PUBLIC** interface header files through transitive dependencies \ No newline at end of file +* Transitively exports **PUBLIC** interface header files through transitive dependencies diff --git a/src/libraries/mkconfig/src/__init__.py b/src/libraries/mkconfig/src/__init__.py index 8b13789179..e69de29bb2 100644 --- a/src/libraries/mkconfig/src/__init__.py +++ b/src/libraries/mkconfig/src/__init__.py @@ -1 +0,0 @@ - diff --git a/src/libraries/mkconfig/src/pyproject.toml.in b/src/libraries/mkconfig/src/pyproject.toml.in index 696d051c0c..cfd2469d1c 100644 --- a/src/libraries/mkconfig/src/pyproject.toml.in +++ b/src/libraries/mkconfig/src/pyproject.toml.in @@ -52,4 +52,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/libraries/mkini/README.asciidoc b/src/libraries/mkini/README.asciidoc index 21cbd9a7ba..40a7c77d0e 100644 --- a/src/libraries/mkini/README.asciidoc +++ b/src/libraries/mkini/README.asciidoc @@ -1,7 +1,7 @@ = Runtime :author: Jakub Fišer -:description: Runtime sourcetree README -:sectanchors: +:description: Runtime sourcetree README +:sectanchors: :url-repo: https://machinekit.io Runtime export the basic API for Machinekit-HAL function. It provides the lowest lewel set of symbols and has to be loaded first. @@ -30,4 +30,4 @@ Objects created in `CMAKE` Machinekit-HAL's namespace used for building. === runtime (`libulapi.so`) * Standard shared library used for compile time linking into binaries -* Transitively exports **PUBLIC** interface header files through transitive dependencies \ No newline at end of file +* Transitively exports **PUBLIC** interface header files through transitive dependencies diff --git a/src/libraries/mkini/src/inifile.cc b/src/libraries/mkini/src/inifile.cc index af096270f7..4dd2f36cdb 100644 --- a/src/libraries/mkini/src/inifile.cc +++ b/src/libraries/mkini/src/inifile.cc @@ -7,10 +7,10 @@ * Author: * License: GPL Version 2 * System: Linux - * + * * Copyright (c) 2004 All rights reserved. * - * Last change: + * Last change: *****************************************************************************/ #include /* FILE *, fopen(), fclose(), NULL */ @@ -33,7 +33,7 @@ static bool check_line_endings(const char *s) { char c = s[1]; if(c == '\n' || c == '\0') { static bool warned = 0; - if(!warned) + if(!warned) fprintf(stderr, "inifile: warning: File contains DOS-style line endings.\n"); warned = true; continue; @@ -103,7 +103,7 @@ IniFile::Close() } -IniFile::ErrorCode +IniFile::ErrorCode IniFile::Find(int *result, int min, int max, const char *tag, const char *section, int num) { @@ -122,7 +122,7 @@ IniFile::Find(int *result, int min, int max, } -IniFile::ErrorCode +IniFile::ErrorCode IniFile::Find(int *result, const char *tag, const char *section, int num) { const char *pStr; @@ -145,7 +145,7 @@ IniFile::Find(int *result, const char *tag, const char *section, int num) } -IniFile::ErrorCode +IniFile::ErrorCode IniFile::Find(double *result, double min, double max, const char *tag, const char *section, int num) { @@ -164,7 +164,7 @@ IniFile::Find(double *result, double min, double max, } -IniFile::ErrorCode +IniFile::ErrorCode IniFile::Find(double *result, const char *tag, const char *section, int num, int *lineno) { @@ -485,7 +485,7 @@ IniFile::LockFile(void) /*! Expands the tilde to $(HOME) and concatenates file to it. If the first char - If file does not start with ~/, file will be copied into path as-is. + If file does not start with ~/, file will be copied into path as-is. @param the input filename @@ -586,7 +586,7 @@ IniFile::AfterEqual(const char *string) /*! Finds the first non-white character on a new line and returns a - pointer. Ignores any line that starts with a comment char i.e. a ';' or + pointer. Ignores any line that starts with a comment char i.e. a ';' or '#'. @return NULL if not found or a valid pointer. diff --git a/src/libraries/pb2json/src/pb2json.py b/src/libraries/pb2json/src/pb2json.py index 1038f7d29d..be9f111dbf 100644 --- a/src/libraries/pb2json/src/pb2json.py +++ b/src/libraries/pb2json/src/pb2json.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python3 # vim: sts=4 sw=4 et """ diff --git a/src/libraries/pb2json/src/pyproject.toml.in b/src/libraries/pb2json/src/pyproject.toml.in index 20d9752800..c897bdde18 100644 --- a/src/libraries/pb2json/src/pyproject.toml.in +++ b/src/libraries/pb2json/src/pyproject.toml.in @@ -52,4 +52,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/libraries/pca9685/src/pyproject.toml.in b/src/libraries/pca9685/src/pyproject.toml.in index 9d829f7338..bb6c2c8e15 100644 --- a/src/libraries/pca9685/src/pyproject.toml.in +++ b/src/libraries/pca9685/src/pyproject.toml.in @@ -52,4 +52,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/libraries/proto/LICENSE b/src/libraries/proto/LICENSE index e1254df963..b04d15eccd 100644 --- a/src/libraries/proto/LICENSE +++ b/src/libraries/proto/LICENSE @@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file +SOFTWARE. diff --git a/src/libraries/proto/README.md b/src/libraries/proto/README.md index 14f4ff5249..f4d59643b0 100644 --- a/src/libraries/proto/README.md +++ b/src/libraries/proto/README.md @@ -38,7 +38,7 @@ sudo python setup.py install ``` ### Usage -See [examples](python/examples). +See [examples](python/examples). ## JavaScript (NPM/NodeJS) diff --git a/src/libraries/proto/dist/machinetalk-protobuf.min.js b/src/libraries/proto/dist/machinetalk-protobuf.min.js index c37b8a70b9..0d6690a41a 100644 --- a/src/libraries/proto/dist/machinetalk-protobuf.min.js +++ b/src/libraries/proto/dist/machinetalk-protobuf.min.js @@ -61,4 +61,4 @@ if(a!==r)throw Error("Illegal group end indicator for "+this.toString(!0)+": "+a }); -//# sourceMappingURL=machinetalk-protobuf.min.map.json \ No newline at end of file +//# sourceMappingURL=machinetalk-protobuf.min.map.json diff --git a/src/libraries/proto/dist/machinetalk-protobuf.min.map.json b/src/libraries/proto/dist/machinetalk-protobuf.min.map.json index 65a7767489..d8e7170bd0 100644 --- a/src/libraries/proto/dist/machinetalk-protobuf.min.map.json +++ b/src/libraries/proto/dist/machinetalk-protobuf.min.map.json @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","build/js/machinetalk/protobuf/canon.js","build/js/machinetalk/protobuf/config.js","build/js/machinetalk/protobuf/emcclass.js","build/js/machinetalk/protobuf/firmware.js","build/js/machinetalk/protobuf/jplan.js","build/js/machinetalk/protobuf/log.js","build/js/machinetalk/protobuf/message.js","build/js/machinetalk/protobuf/motcmds.js","build/js/machinetalk/protobuf/nanopb.js","build/js/machinetalk/protobuf/object.js","build/js/machinetalk/protobuf/preview.js","build/js/machinetalk/protobuf/ros.js","build/js/machinetalk/protobuf/rtapi_message.js","build/js/machinetalk/protobuf/rtapicommand.js","build/js/machinetalk/protobuf/status.js","build/js/machinetalk/protobuf/task.js","build/js/machinetalk/protobuf/test.js","build/js/machinetalk/protobuf/types.js","build/js/machinetalk/protobuf/value.js","build/js/protoexport.js","node_modules/bytebuffer/dist/bytebuffer.js","node_modules/bytebuffer/node_modules/long/dist/long.js","node_modules/process/browser.js","node_modules/protobufjs/dist/protobuf.js"],"names":["module","exports","require","newBuilder","package","syntax","options","java_package","messages","name","fields","rule","type","id","default","(nanopb_msgopt).msgid","enums","values","isNamespace","build","(nanopb).max_size","(nanopb).max_count","(nanopb).type","pb","global","factory","define","Long","e","this","stringSource","s","i","length","charCodeAt","stringDestination","cs","ps","arguments","join","stringFromCharCode","apply","String","push","Array","prototype","ieee754_read","buffer","offset","isLE","mLen","nBytes","m","eLen","eMax","eBias","nBits","d","NaN","Infinity","Math","pow","ieee754_write","value","c","rt","abs","isNaN","floor","log","LN2","ByteBuffer","capacity","littleEndian","noAssert","DEFAULT_CAPACITY","DEFAULT_ENDIAN","DEFAULT_NOASSERT","RangeError","EMPTY_BUFFER","ArrayBuffer","view","Uint8Array","markedOffset","limit","VERSION","LITTLE_ENDIAN","BIG_ENDIAN","ByteBufferPrototype","__isByteBuffer__","Object","defineProperty","enumerable","configurable","fromCharCode","accessor","allocate","concat","buffers","encoding","undefined","k","isByteBuffer","wrap","bi","bb","set","subarray","fromBase64","fromHex","fromBinary","fromUTF8","fromDebug","Error","TypeError","clone","call","byteOffset","byteLength","toString","writeBitSet","relative","start","bits","bytes","bit","writeVarint32","writeByte","readBitSet","ret","readVarint32","readByte","readBytes","slice","writeBytes","append","writeInt8","capacity0","resize","readInt8","writeUint8","capacity1","writeUInt8","readUint8","readUInt8","writeInt16","capacity2","writeShort","readInt16","readShort","writeUint16","capacity3","writeUInt16","readUint16","readUInt16","writeInt32","capacity4","writeInt","readInt32","readInt","writeUint32","capacity5","writeUInt32","readUint32","readUInt32","writeInt64","fromNumber","fromString","capacity6","lo","low","hi","high","writeLong","readInt64","readLong","writeUint64","capacity7","writeUInt64","readUint64","readUInt64","writeFloat32","capacity8","writeFloat","readFloat32","readFloat","writeFloat64","capacity9","writeDouble","readFloat64","readDouble","MAX_VARINT32_BYTES","calculateVarint32","zigZagEncode32","n","zigZagDecode32","b","size","capacity10","writeVarint32ZigZag","err","readVarint32ZigZag","val","MAX_VARINT64_BYTES","calculateVarint64","part0","toInt","part1","shiftRightUnsigned","part2","zigZagEncode64","unsigned","toSigned","shiftLeft","xor","shiftRight","toUnsigned","zigZagDecode64","and","ONE","negate","writeVarint64","capacity11","writeVarint64ZigZag","readVarint64","fromBits","readVarint64ZigZag","writeCString","str","utfx","calculateUTF16asUTF8","capacity12","encodeUTF16toUTF8","bind","readCString","sd","decodeUTF8toUTF16","string","writeIString","capacity13","readIString","len","readUTF8String","METRICS_BYTES","METRICS_CHARS","writeUTF8String","capacity14","writeString","calculateUTF8Chars","calculateUTF8Bytes","calculateString","metrics","decodeUTF8","cp","UTF8toUTF16","readString","writeVString","l","capacity15","readVString","source","capacity16","appendTo","target","assert","clear","copy","compact","begin","end","copyTo","targetOffset","sourceOffset","sourceLimit","targetRelative","ensureCapacity","current","fill","flip","mark","order","LE","BE","bigEndian","prepend","diff","prependTo","printDebug","out","console","toDebug","remaining","reset","reverse","skip","toBuffer","forceCopy","toArrayBuffer","toUTF8","toBase64","toHex","toBinary","toColumns","lxiv","aout","ain","encode","src","dst","t","decode","fail","t1","t2","test","btoa","atob","b64","chars","parts","charCode","columns","hex","asc","toUpperCase","ch","j","rs","ho","hm","hl","charAt","parseInt","substring","isFinite","MAX_CODEPOINT","encodeUTF8","a","indexOf","UTF16toUTF8","c1","c2","calculateCodePoint","calculateUTF8","isLong","obj","fromInt","cachedObj","cache","UINT_CACHE","INT_CACHE","UZERO","ZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","MIN_VALUE","MAX_VALUE","neg","TWO_PWR_32_DBL","lowBits","highBits","radix","p","radixToPower","pow_dbl","result","min","power","mul","add","fromValue","__isLong__","TWO_PWR_16_DBL","TWO_PWR_24","UONE","NEG_ONE","LongPrototype","toNumber","isZero","isNegative","eq","radixLong","div","rem1","sub","rem","remDiv","intval","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","isPositive","isOdd","isEven","equals","other","notEquals","neq","lessThan","comp","lt","lessThanOrEqual","lte","greaterThan","gt","greaterThanOrEqual","gte","compare","thisNeg","otherNeg","not","addend","a48","a32","a16","a00","b48","b32","b16","b00","c48","c32","c16","c00","subtract","subtrahend","multiply","multiplier","divide","divisor","approx","res","shru","shr","shl","max","log2","ceil","delta","approxRes","approxRem","modulo","mod","or","numBits","toBytes","le","toBytesLE","toBytesBE","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","setTimeout","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","queue","queueIndex","drainQueue","timeout","run","Item","array","noop","process","nextTick","args","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","isCommonJS","ProtoBuf","WIRE_TYPES","VARINT","BITS64","LDELIM","STARTGROUP","ENDGROUP","BITS32","PACKABLE_WIRE_TYPES","TYPES","int32","wireType","defaultValue","uint32","sint32","int64","uint64","sint64","bool","double","fixed32","sfixed32","fixed64","sfixed64","float","enum","message","group","MAP_KEY_TYPES","ID_MIN","ID_MAX","convertFieldsToCamelCase","populateAccessors","populateDefaults","Util","IS_NODE","XHR","XMLHttpFactories","XMLHttpRequest","ActiveXObject","xhr","fetch","path","callback","fs","readFile","data","readFileSync","open","setRequestHeader","overrideMimeType","send","status","responseText","onreadystatechange","readyState","toCamelCase","replace","$0","$1","Lang","DELIM","RULE","TYPE","NAME","TYPEDEF","TYPEREF","FQTYPEREF","NUMBER","NUMBER_DEC","NUMBER_HEX","NUMBER_OCT","NUMBER_FLT","BOOL","ID","NEGID","WHITESPACE","STRING","STRING_DQ","STRING_SQ","DotProto","mkId","mayBeNegative","sign","mkNumber","parseFloat","setOption","isArray","Tokenizer","proto","index","line","stack","_stringOpen","TokenizerPrototype","_readString","re","lastIndex","match","exec","next","shift","repeat","prev","token","peek","expected","actual","omit","Parser","tn","proto3","ParserPrototype","parse","weak","topLevel","imports","services","head","_parseMessage","_parseEnum","_parseOption","_parseService","_parseExtend","delim","_readValue","mayBeTypeRef","toLowerCase","parent","isList","custom","_parseOptionValue","svc","rpc","_parseServiceRPC","method","request","response","request_stream","response_stream","fld","isGroup","msg","oneofs","_parseFieldOptions","_parseMessageField","_parseMessageOneOf","hasOwnProperty","_parseExtensionRanges","_parseIgnored","grp","first","enm","range","ranges","ext","ref","Reflect","mkDefault","mkLong","skipTillGroupEnd","expectedId","buf","tag","T","builder","className","TPrototype","fqn","ptr","includeClass","Namespace","children","NamespacePrototype","create","getChildren","addChild","child","getChild","Message","Field","originalName","nameOrId","key","resolve","qn","excludeNonNamespace","part","split","unshift","ns","buildOpt","opt","keys","getOption","Element","resolvedType","isMapKey","ElementPrototype","defaultFieldValue","verifyValue","self","Enum","Value","clazz","Builder","calculateLength","calculate","encodeValue","prevOffset","valueFromString","valueToString","extensions","_fields","_fieldsById","_fieldsByName","MessagePrototype","rebuild","cloneRaw","binaryAsBase64","longsAsStrings","getName","object","forEach","v","Map","it","entries","done","keyElem","valueElem","$type","field","OneOf","var_args","repeated","map","required","$set","$add","keyOrObj","ikey","_oneofsByName","oneof","currentField","get","$get","ExtensionField","Name","setter","getter","noVerify","isNew","encodeDelimited","enc","encodeAB","encodeNB","encode64","encodeHex","toRaw","encodeJSON","JSON","stringify","decodeDelimited","decode64","decodeHex","decodeJSON","Service","Extension","fieldMissing","expectedGroupEndId","keyval","keytype","keyType","element","keyElement","FieldPrototype","skipRepeated","hasWirePresence","varintLen","contents","ni","msgbuf","extension","root","rpcImpl","ServicePrototype","RPCMethod","req","resolvedRequestType","resolvedResponseType","notABuffer","Method","requestName","responseName","requestStream","responseStream","propagateSyntax","resolved","files","importRoot","BuilderPrototype","isMessage","def","isMessageField","isEnum","isService","isExtend","namespace","defs","pop","subObj","mtd","valid","json","filename","file","fname","resetRoot","importFilename","$2","base","resolveAll","packed","lookup","arrayIterator","arr","idx","MapPrototype","keyValue","hadKey","entry","strKeys","cb","thisArg","valValue","has","loadProto","loadJson","protoFromString","loadProtoFile","protoFromFile","loadJsonFile"],"mappings":"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","file":"bundle.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i\r\n\r\n Licensed under the Apache License, Version 2.0 (the \"License\");\r\n you may not use this file except in compliance with the License.\r\n You may obtain a copy of the License at\r\n\r\n http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n Unless required by applicable law or agreed to in writing, software\r\n distributed under the License is distributed on an \"AS IS\" BASIS,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n See the License for the specific language governing permissions and\r\n limitations under the License.\r\n */\r\n\r\n/**\r\n * @license bytebuffer.js (c) 2015 Daniel Wirtz \r\n * Backing buffer: ArrayBuffer, Accessor: Uint8Array\r\n * Released under the Apache License, Version 2.0\r\n * see: https://github.com/dcodeIO/bytebuffer.js for details\r\n */\r\n(function(global, factory) {\r\n\r\n /* AMD */ if (typeof define === 'function' && define[\"amd\"])\r\n define([\"long\"], factory);\r\n /* CommonJS */ else if (typeof require === 'function' && typeof module === \"object\" && module && module[\"exports\"])\r\n module['exports'] = (function() {\r\n var Long; try { Long = require(\"long\"); } catch (e) {}\r\n return factory(Long);\r\n })();\r\n /* Global */ else\r\n (global[\"dcodeIO\"] = global[\"dcodeIO\"] || {})[\"ByteBuffer\"] = factory(global[\"dcodeIO\"][\"Long\"]);\r\n\r\n})(this, function(Long) {\r\n \"use strict\";\r\n\r\n /**\r\n * Constructs a new ByteBuffer.\r\n * @class The swiss army knife for binary data in JavaScript.\r\n * @exports ByteBuffer\r\n * @constructor\r\n * @param {number=} capacity Initial capacity. Defaults to {@link ByteBuffer.DEFAULT_CAPACITY}.\r\n * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n * {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n * @param {boolean=} noAssert Whether to skip assertions of offsets and values. Defaults to\r\n * {@link ByteBuffer.DEFAULT_NOASSERT}.\r\n * @expose\r\n */\r\n var ByteBuffer = function(capacity, littleEndian, noAssert) {\r\n if (typeof capacity === 'undefined')\r\n capacity = ByteBuffer.DEFAULT_CAPACITY;\r\n if (typeof littleEndian === 'undefined')\r\n littleEndian = ByteBuffer.DEFAULT_ENDIAN;\r\n if (typeof noAssert === 'undefined')\r\n noAssert = ByteBuffer.DEFAULT_NOASSERT;\r\n if (!noAssert) {\r\n capacity = capacity | 0;\r\n if (capacity < 0)\r\n throw RangeError(\"Illegal capacity\");\r\n littleEndian = !!littleEndian;\r\n noAssert = !!noAssert;\r\n }\r\n\r\n /**\r\n * Backing ArrayBuffer.\r\n * @type {!ArrayBuffer}\r\n * @expose\r\n */\r\n this.buffer = capacity === 0 ? EMPTY_BUFFER : new ArrayBuffer(capacity);\r\n\r\n /**\r\n * Uint8Array utilized to manipulate the backing buffer. Becomes `null` if the backing buffer has a capacity of `0`.\r\n * @type {?Uint8Array}\r\n * @expose\r\n */\r\n this.view = capacity === 0 ? null : new Uint8Array(this.buffer);\r\n\r\n /**\r\n * Absolute read/write offset.\r\n * @type {number}\r\n * @expose\r\n * @see ByteBuffer#flip\r\n * @see ByteBuffer#clear\r\n */\r\n this.offset = 0;\r\n\r\n /**\r\n * Marked offset.\r\n * @type {number}\r\n * @expose\r\n * @see ByteBuffer#mark\r\n * @see ByteBuffer#reset\r\n */\r\n this.markedOffset = -1;\r\n\r\n /**\r\n * Absolute limit of the contained data. Set to the backing buffer's capacity upon allocation.\r\n * @type {number}\r\n * @expose\r\n * @see ByteBuffer#flip\r\n * @see ByteBuffer#clear\r\n */\r\n this.limit = capacity;\r\n\r\n /**\r\n * Whether to use little endian byte order, defaults to `false` for big endian.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n this.littleEndian = littleEndian;\r\n\r\n /**\r\n * Whether to skip assertions of offsets and values, defaults to `false`.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n this.noAssert = noAssert;\r\n };\r\n\r\n /**\r\n * ByteBuffer version.\r\n * @type {string}\r\n * @const\r\n * @expose\r\n */\r\n ByteBuffer.VERSION = \"5.0.1\";\r\n\r\n /**\r\n * Little endian constant that can be used instead of its boolean value. Evaluates to `true`.\r\n * @type {boolean}\r\n * @const\r\n * @expose\r\n */\r\n ByteBuffer.LITTLE_ENDIAN = true;\r\n\r\n /**\r\n * Big endian constant that can be used instead of its boolean value. Evaluates to `false`.\r\n * @type {boolean}\r\n * @const\r\n * @expose\r\n */\r\n ByteBuffer.BIG_ENDIAN = false;\r\n\r\n /**\r\n * Default initial capacity of `16`.\r\n * @type {number}\r\n * @expose\r\n */\r\n ByteBuffer.DEFAULT_CAPACITY = 16;\r\n\r\n /**\r\n * Default endianess of `false` for big endian.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n ByteBuffer.DEFAULT_ENDIAN = ByteBuffer.BIG_ENDIAN;\r\n\r\n /**\r\n * Default no assertions flag of `false`.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n ByteBuffer.DEFAULT_NOASSERT = false;\r\n\r\n /**\r\n * A `Long` class for representing a 64-bit two's-complement integer value. May be `null` if Long.js has not been loaded\r\n * and int64 support is not available.\r\n * @type {?Long}\r\n * @const\r\n * @see https://github.com/dcodeIO/long.js\r\n * @expose\r\n */\r\n ByteBuffer.Long = Long || null;\r\n\r\n /**\r\n * @alias ByteBuffer.prototype\r\n * @inner\r\n */\r\n var ByteBufferPrototype = ByteBuffer.prototype;\r\n\r\n /**\r\n * An indicator used to reliably determine if an object is a ByteBuffer or not.\r\n * @type {boolean}\r\n * @const\r\n * @expose\r\n * @private\r\n */\r\n ByteBufferPrototype.__isByteBuffer__;\r\n\r\n Object.defineProperty(ByteBufferPrototype, \"__isByteBuffer__\", {\r\n value: true,\r\n enumerable: false,\r\n configurable: false\r\n });\r\n\r\n // helpers\r\n\r\n /**\r\n * @type {!ArrayBuffer}\r\n * @inner\r\n */\r\n var EMPTY_BUFFER = new ArrayBuffer(0);\r\n\r\n /**\r\n * String.fromCharCode reference for compile-time renaming.\r\n * @type {function(...number):string}\r\n * @inner\r\n */\r\n var stringFromCharCode = String.fromCharCode;\r\n\r\n /**\r\n * Creates a source function for a string.\r\n * @param {string} s String to read from\r\n * @returns {function():number|null} Source function returning the next char code respectively `null` if there are\r\n * no more characters left.\r\n * @throws {TypeError} If the argument is invalid\r\n * @inner\r\n */\r\n function stringSource(s) {\r\n var i=0; return function() {\r\n return i < s.length ? s.charCodeAt(i++) : null;\r\n };\r\n }\r\n\r\n /**\r\n * Creates a destination function for a string.\r\n * @returns {function(number=):undefined|string} Destination function successively called with the next char code.\r\n * Returns the final string when called without arguments.\r\n * @inner\r\n */\r\n function stringDestination() {\r\n var cs = [], ps = []; return function() {\r\n if (arguments.length === 0)\r\n return ps.join('')+stringFromCharCode.apply(String, cs);\r\n if (cs.length + arguments.length > 1024)\r\n ps.push(stringFromCharCode.apply(String, cs)),\r\n cs.length = 0;\r\n Array.prototype.push.apply(cs, arguments);\r\n };\r\n }\r\n\r\n /**\r\n * Gets the accessor type.\r\n * @returns {Function} `Buffer` under node.js, `Uint8Array` respectively `DataView` in the browser (classes)\r\n * @expose\r\n */\r\n ByteBuffer.accessor = function() {\r\n return Uint8Array;\r\n };\r\n /**\r\n * Allocates a new ByteBuffer backed by a buffer of the specified capacity.\r\n * @param {number=} capacity Initial capacity. Defaults to {@link ByteBuffer.DEFAULT_CAPACITY}.\r\n * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n * {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n * @param {boolean=} noAssert Whether to skip assertions of offsets and values. Defaults to\r\n * {@link ByteBuffer.DEFAULT_NOASSERT}.\r\n * @returns {!ByteBuffer}\r\n * @expose\r\n */\r\n ByteBuffer.allocate = function(capacity, littleEndian, noAssert) {\r\n return new ByteBuffer(capacity, littleEndian, noAssert);\r\n };\r\n\r\n /**\r\n * Concatenates multiple ByteBuffers into one.\r\n * @param {!Array.} buffers Buffers to concatenate\r\n * @param {(string|boolean)=} encoding String encoding if `buffers` contains a string (\"base64\", \"hex\", \"binary\",\r\n * defaults to \"utf8\")\r\n * @param {boolean=} littleEndian Whether to use little or big endian byte order for the resulting ByteBuffer. Defaults\r\n * to {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n * @param {boolean=} noAssert Whether to skip assertions of offsets and values for the resulting ByteBuffer. Defaults to\r\n * {@link ByteBuffer.DEFAULT_NOASSERT}.\r\n * @returns {!ByteBuffer} Concatenated ByteBuffer\r\n * @expose\r\n */\r\n ByteBuffer.concat = function(buffers, encoding, littleEndian, noAssert) {\r\n if (typeof encoding === 'boolean' || typeof encoding !== 'string') {\r\n noAssert = littleEndian;\r\n littleEndian = encoding;\r\n encoding = undefined;\r\n }\r\n var capacity = 0;\r\n for (var i=0, k=buffers.length, length; i 0) capacity += length;\r\n }\r\n if (capacity === 0)\r\n return new ByteBuffer(0, littleEndian, noAssert);\r\n var bb = new ByteBuffer(capacity, littleEndian, noAssert),\r\n bi;\r\n i=0; while (i} buffer Anything that can be wrapped\r\n * @param {(string|boolean)=} encoding String encoding if `buffer` is a string (\"base64\", \"hex\", \"binary\", defaults to\r\n * \"utf8\")\r\n * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n * {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n * @param {boolean=} noAssert Whether to skip assertions of offsets and values. Defaults to\r\n * {@link ByteBuffer.DEFAULT_NOASSERT}.\r\n * @returns {!ByteBuffer} A ByteBuffer wrapping `buffer`\r\n * @expose\r\n */\r\n ByteBuffer.wrap = function(buffer, encoding, littleEndian, noAssert) {\r\n if (typeof encoding !== 'string') {\r\n noAssert = littleEndian;\r\n littleEndian = encoding;\r\n encoding = undefined;\r\n }\r\n if (typeof buffer === 'string') {\r\n if (typeof encoding === 'undefined')\r\n encoding = \"utf8\";\r\n switch (encoding) {\r\n case \"base64\":\r\n return ByteBuffer.fromBase64(buffer, littleEndian);\r\n case \"hex\":\r\n return ByteBuffer.fromHex(buffer, littleEndian);\r\n case \"binary\":\r\n return ByteBuffer.fromBinary(buffer, littleEndian);\r\n case \"utf8\":\r\n return ByteBuffer.fromUTF8(buffer, littleEndian);\r\n case \"debug\":\r\n return ByteBuffer.fromDebug(buffer, littleEndian);\r\n default:\r\n throw Error(\"Unsupported encoding: \"+encoding);\r\n }\r\n }\r\n if (buffer === null || typeof buffer !== 'object')\r\n throw TypeError(\"Illegal buffer\");\r\n var bb;\r\n if (ByteBuffer.isByteBuffer(buffer)) {\r\n bb = ByteBufferPrototype.clone.call(buffer);\r\n bb.markedOffset = -1;\r\n return bb;\r\n }\r\n if (buffer instanceof Uint8Array) { // Extract ArrayBuffer from Uint8Array\r\n bb = new ByteBuffer(0, littleEndian, noAssert);\r\n if (buffer.length > 0) { // Avoid references to more than one EMPTY_BUFFER\r\n bb.buffer = buffer.buffer;\r\n bb.offset = buffer.byteOffset;\r\n bb.limit = buffer.byteOffset + buffer.byteLength;\r\n bb.view = new Uint8Array(buffer.buffer);\r\n }\r\n } else if (buffer instanceof ArrayBuffer) { // Reuse ArrayBuffer\r\n bb = new ByteBuffer(0, littleEndian, noAssert);\r\n if (buffer.byteLength > 0) {\r\n bb.buffer = buffer;\r\n bb.offset = 0;\r\n bb.limit = buffer.byteLength;\r\n bb.view = buffer.byteLength > 0 ? new Uint8Array(buffer) : null;\r\n }\r\n } else if (Object.prototype.toString.call(buffer) === \"[object Array]\") { // Create from octets\r\n bb = new ByteBuffer(buffer.length, littleEndian, noAssert);\r\n bb.limit = buffer.length;\r\n for (var i=0; i} value Array of booleans to write\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `length` if omitted.\r\n * @returns {!ByteBuffer}\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeBitSet = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (!(value instanceof Array))\r\n throw TypeError(\"Illegal BitSet: Not an array\");\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n\r\n var start = offset,\r\n bits = value.length,\r\n bytes = (bits >> 3),\r\n bit = 0,\r\n k;\r\n\r\n offset += this.writeVarint32(bits,offset);\r\n\r\n while(bytes--) {\r\n k = (!!value[bit++] & 1) |\r\n ((!!value[bit++] & 1) << 1) |\r\n ((!!value[bit++] & 1) << 2) |\r\n ((!!value[bit++] & 1) << 3) |\r\n ((!!value[bit++] & 1) << 4) |\r\n ((!!value[bit++] & 1) << 5) |\r\n ((!!value[bit++] & 1) << 6) |\r\n ((!!value[bit++] & 1) << 7);\r\n this.writeByte(k,offset++);\r\n }\r\n\r\n if(bit < bits) {\r\n var m = 0; k = 0;\r\n while(bit < bits) k = k | ((!!value[bit++] & 1) << (m++));\r\n this.writeByte(k,offset++);\r\n }\r\n\r\n if (relative) {\r\n this.offset = offset;\r\n return this;\r\n }\r\n return offset - start;\r\n }\r\n\r\n /**\r\n * Reads a BitSet as an array of booleans.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `length` if omitted.\r\n * @returns {Array\r\n * @expose\r\n */\r\n ByteBufferPrototype.readBitSet = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n\r\n var ret = this.readVarint32(offset),\r\n bits = ret.value,\r\n bytes = (bits >> 3),\r\n bit = 0,\r\n value = [],\r\n k;\r\n\r\n offset += ret.length;\r\n\r\n while(bytes--) {\r\n k = this.readByte(offset++);\r\n value[bit++] = !!(k & 0x01);\r\n value[bit++] = !!(k & 0x02);\r\n value[bit++] = !!(k & 0x04);\r\n value[bit++] = !!(k & 0x08);\r\n value[bit++] = !!(k & 0x10);\r\n value[bit++] = !!(k & 0x20);\r\n value[bit++] = !!(k & 0x40);\r\n value[bit++] = !!(k & 0x80);\r\n }\r\n\r\n if(bit < bits) {\r\n var m = 0;\r\n k = this.readByte(offset++);\r\n while(bit < bits) value[bit++] = !!((k >> (m++)) & 1);\r\n }\r\n\r\n if (relative) {\r\n this.offset = offset;\r\n }\r\n return value;\r\n }\r\n /**\r\n * Reads the specified number of bytes.\r\n * @param {number} length Number of bytes to read\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `length` if omitted.\r\n * @returns {!ByteBuffer}\r\n * @expose\r\n */\r\n ByteBufferPrototype.readBytes = function(length, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + length > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+length+\") <= \"+this.buffer.byteLength);\n }\r\n var slice = this.slice(offset, offset + length);\r\n if (relative) this.offset += length;\n return slice;\r\n };\r\n\r\n /**\r\n * Writes a payload of bytes. This is an alias of {@link ByteBuffer#append}.\r\n * @function\r\n * @param {!ByteBuffer|!ArrayBuffer|!Uint8Array|string} source Data to write. If `source` is a ByteBuffer, its offsets\r\n * will be modified according to the performed read operation.\r\n * @param {(string|number)=} encoding Encoding if `data` is a string (\"base64\", \"hex\", \"binary\", defaults to \"utf8\")\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * written if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeBytes = ByteBufferPrototype.append;\r\n\r\n // types/ints/int8\r\n\r\n /**\r\n * Writes an 8bit signed integer.\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeInt8 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value !== 'number' || value % 1 !== 0)\n throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n value |= 0;\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n offset += 1;\n var capacity0 = this.buffer.byteLength;\n if (offset > capacity0)\n this.resize((capacity0 *= 2) > offset ? capacity0 : offset);\n offset -= 1;\n this.view[offset] = value;\r\n if (relative) this.offset += 1;\n return this;\r\n };\r\n\r\n /**\r\n * Writes an 8bit signed integer. This is an alias of {@link ByteBuffer#writeInt8}.\r\n * @function\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeByte = ByteBufferPrototype.writeInt8;\r\n\r\n /**\r\n * Reads an 8bit signed integer.\r\n * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n * @returns {number} Value read\r\n * @expose\r\n */\r\n ByteBufferPrototype.readInt8 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 1 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+1+\") <= \"+this.buffer.byteLength);\n }\r\n var value = this.view[offset];\r\n if ((value & 0x80) === 0x80) value = -(0xFF - value + 1); // Cast to signed\r\n if (relative) this.offset += 1;\n return value;\r\n };\r\n\r\n /**\r\n * Reads an 8bit signed integer. This is an alias of {@link ByteBuffer#readInt8}.\r\n * @function\r\n * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n * @returns {number} Value read\r\n * @expose\r\n */\r\n ByteBufferPrototype.readByte = ByteBufferPrototype.readInt8;\r\n\r\n /**\r\n * Writes an 8bit unsigned integer.\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeUint8 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value !== 'number' || value % 1 !== 0)\n throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n value >>>= 0;\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n offset += 1;\n var capacity1 = this.buffer.byteLength;\n if (offset > capacity1)\n this.resize((capacity1 *= 2) > offset ? capacity1 : offset);\n offset -= 1;\n this.view[offset] = value;\r\n if (relative) this.offset += 1;\n return this;\r\n };\r\n\r\n /**\r\n * Writes an 8bit unsigned integer. This is an alias of {@link ByteBuffer#writeUint8}.\r\n * @function\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeUInt8 = ByteBufferPrototype.writeUint8;\r\n\r\n /**\r\n * Reads an 8bit unsigned integer.\r\n * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n * @returns {number} Value read\r\n * @expose\r\n */\r\n ByteBufferPrototype.readUint8 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 1 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+1+\") <= \"+this.buffer.byteLength);\n }\r\n var value = this.view[offset];\r\n if (relative) this.offset += 1;\n return value;\r\n };\r\n\r\n /**\r\n * Reads an 8bit unsigned integer. This is an alias of {@link ByteBuffer#readUint8}.\r\n * @function\r\n * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n * @returns {number} Value read\r\n * @expose\r\n */\r\n ByteBufferPrototype.readUInt8 = ByteBufferPrototype.readUint8;\r\n\r\n // types/ints/int16\r\n\r\n /**\r\n * Writes a 16bit signed integer.\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n * @throws {TypeError} If `offset` or `value` is not a valid number\r\n * @throws {RangeError} If `offset` is out of bounds\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeInt16 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value !== 'number' || value % 1 !== 0)\n throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n value |= 0;\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n offset += 2;\n var capacity2 = this.buffer.byteLength;\n if (offset > capacity2)\n this.resize((capacity2 *= 2) > offset ? capacity2 : offset);\n offset -= 2;\n if (this.littleEndian) {\r\n this.view[offset+1] = (value & 0xFF00) >>> 8;\r\n this.view[offset ] = value & 0x00FF;\r\n } else {\r\n this.view[offset] = (value & 0xFF00) >>> 8;\r\n this.view[offset+1] = value & 0x00FF;\r\n }\r\n if (relative) this.offset += 2;\n return this;\r\n };\r\n\r\n /**\r\n * Writes a 16bit signed integer. This is an alias of {@link ByteBuffer#writeInt16}.\r\n * @function\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n * @throws {TypeError} If `offset` or `value` is not a valid number\r\n * @throws {RangeError} If `offset` is out of bounds\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeShort = ByteBufferPrototype.writeInt16;\r\n\r\n /**\r\n * Reads a 16bit signed integer.\r\n * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n * @returns {number} Value read\r\n * @throws {TypeError} If `offset` is not a valid number\r\n * @throws {RangeError} If `offset` is out of bounds\r\n * @expose\r\n */\r\n ByteBufferPrototype.readInt16 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 2 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+2+\") <= \"+this.buffer.byteLength);\n }\r\n var value = 0;\r\n if (this.littleEndian) {\r\n value = this.view[offset ];\r\n value |= this.view[offset+1] << 8;\r\n } else {\r\n value = this.view[offset ] << 8;\r\n value |= this.view[offset+1];\r\n }\r\n if ((value & 0x8000) === 0x8000) value = -(0xFFFF - value + 1); // Cast to signed\r\n if (relative) this.offset += 2;\n return value;\r\n };\r\n\r\n /**\r\n * Reads a 16bit signed integer. This is an alias of {@link ByteBuffer#readInt16}.\r\n * @function\r\n * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n * @returns {number} Value read\r\n * @throws {TypeError} If `offset` is not a valid number\r\n * @throws {RangeError} If `offset` is out of bounds\r\n * @expose\r\n */\r\n ByteBufferPrototype.readShort = ByteBufferPrototype.readInt16;\r\n\r\n /**\r\n * Writes a 16bit unsigned integer.\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n * @throws {TypeError} If `offset` or `value` is not a valid number\r\n * @throws {RangeError} If `offset` is out of bounds\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeUint16 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value !== 'number' || value % 1 !== 0)\n throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n value >>>= 0;\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n offset += 2;\n var capacity3 = this.buffer.byteLength;\n if (offset > capacity3)\n this.resize((capacity3 *= 2) > offset ? capacity3 : offset);\n offset -= 2;\n if (this.littleEndian) {\r\n this.view[offset+1] = (value & 0xFF00) >>> 8;\r\n this.view[offset ] = value & 0x00FF;\r\n } else {\r\n this.view[offset] = (value & 0xFF00) >>> 8;\r\n this.view[offset+1] = value & 0x00FF;\r\n }\r\n if (relative) this.offset += 2;\n return this;\r\n };\r\n\r\n /**\r\n * Writes a 16bit unsigned integer. This is an alias of {@link ByteBuffer#writeUint16}.\r\n * @function\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n * @throws {TypeError} If `offset` or `value` is not a valid number\r\n * @throws {RangeError} If `offset` is out of bounds\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeUInt16 = ByteBufferPrototype.writeUint16;\r\n\r\n /**\r\n * Reads a 16bit unsigned integer.\r\n * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n * @returns {number} Value read\r\n * @throws {TypeError} If `offset` is not a valid number\r\n * @throws {RangeError} If `offset` is out of bounds\r\n * @expose\r\n */\r\n ByteBufferPrototype.readUint16 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 2 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+2+\") <= \"+this.buffer.byteLength);\n }\r\n var value = 0;\r\n if (this.littleEndian) {\r\n value = this.view[offset ];\r\n value |= this.view[offset+1] << 8;\r\n } else {\r\n value = this.view[offset ] << 8;\r\n value |= this.view[offset+1];\r\n }\r\n if (relative) this.offset += 2;\n return value;\r\n };\r\n\r\n /**\r\n * Reads a 16bit unsigned integer. This is an alias of {@link ByteBuffer#readUint16}.\r\n * @function\r\n * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n * @returns {number} Value read\r\n * @throws {TypeError} If `offset` is not a valid number\r\n * @throws {RangeError} If `offset` is out of bounds\r\n * @expose\r\n */\r\n ByteBufferPrototype.readUInt16 = ByteBufferPrototype.readUint16;\r\n\r\n // types/ints/int32\r\n\r\n /**\r\n * Writes a 32bit signed integer.\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeInt32 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value !== 'number' || value % 1 !== 0)\n throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n value |= 0;\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n offset += 4;\n var capacity4 = this.buffer.byteLength;\n if (offset > capacity4)\n this.resize((capacity4 *= 2) > offset ? capacity4 : offset);\n offset -= 4;\n if (this.littleEndian) {\n this.view[offset+3] = (value >>> 24) & 0xFF;\n this.view[offset+2] = (value >>> 16) & 0xFF;\n this.view[offset+1] = (value >>> 8) & 0xFF;\n this.view[offset ] = value & 0xFF;\n } else {\n this.view[offset ] = (value >>> 24) & 0xFF;\n this.view[offset+1] = (value >>> 16) & 0xFF;\n this.view[offset+2] = (value >>> 8) & 0xFF;\n this.view[offset+3] = value & 0xFF;\n }\n if (relative) this.offset += 4;\n return this;\r\n };\r\n\r\n /**\r\n * Writes a 32bit signed integer. This is an alias of {@link ByteBuffer#writeInt32}.\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeInt = ByteBufferPrototype.writeInt32;\r\n\r\n /**\r\n * Reads a 32bit signed integer.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n * @returns {number} Value read\r\n * @expose\r\n */\r\n ByteBufferPrototype.readInt32 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 4 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+4+\") <= \"+this.buffer.byteLength);\n }\r\n var value = 0;\r\n if (this.littleEndian) {\n value = this.view[offset+2] << 16;\n value |= this.view[offset+1] << 8;\n value |= this.view[offset ];\n value += this.view[offset+3] << 24 >>> 0;\n } else {\n value = this.view[offset+1] << 16;\n value |= this.view[offset+2] << 8;\n value |= this.view[offset+3];\n value += this.view[offset ] << 24 >>> 0;\n }\n value |= 0; // Cast to signed\r\n if (relative) this.offset += 4;\n return value;\r\n };\r\n\r\n /**\r\n * Reads a 32bit signed integer. This is an alias of {@link ByteBuffer#readInt32}.\r\n * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `4` if omitted.\r\n * @returns {number} Value read\r\n * @expose\r\n */\r\n ByteBufferPrototype.readInt = ByteBufferPrototype.readInt32;\r\n\r\n /**\r\n * Writes a 32bit unsigned integer.\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeUint32 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value !== 'number' || value % 1 !== 0)\n throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n value >>>= 0;\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n offset += 4;\n var capacity5 = this.buffer.byteLength;\n if (offset > capacity5)\n this.resize((capacity5 *= 2) > offset ? capacity5 : offset);\n offset -= 4;\n if (this.littleEndian) {\n this.view[offset+3] = (value >>> 24) & 0xFF;\n this.view[offset+2] = (value >>> 16) & 0xFF;\n this.view[offset+1] = (value >>> 8) & 0xFF;\n this.view[offset ] = value & 0xFF;\n } else {\n this.view[offset ] = (value >>> 24) & 0xFF;\n this.view[offset+1] = (value >>> 16) & 0xFF;\n this.view[offset+2] = (value >>> 8) & 0xFF;\n this.view[offset+3] = value & 0xFF;\n }\n if (relative) this.offset += 4;\n return this;\r\n };\r\n\r\n /**\r\n * Writes a 32bit unsigned integer. This is an alias of {@link ByteBuffer#writeUint32}.\r\n * @function\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeUInt32 = ByteBufferPrototype.writeUint32;\r\n\r\n /**\r\n * Reads a 32bit unsigned integer.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n * @returns {number} Value read\r\n * @expose\r\n */\r\n ByteBufferPrototype.readUint32 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 4 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+4+\") <= \"+this.buffer.byteLength);\n }\r\n var value = 0;\r\n if (this.littleEndian) {\n value = this.view[offset+2] << 16;\n value |= this.view[offset+1] << 8;\n value |= this.view[offset ];\n value += this.view[offset+3] << 24 >>> 0;\n } else {\n value = this.view[offset+1] << 16;\n value |= this.view[offset+2] << 8;\n value |= this.view[offset+3];\n value += this.view[offset ] << 24 >>> 0;\n }\n if (relative) this.offset += 4;\n return value;\r\n };\r\n\r\n /**\r\n * Reads a 32bit unsigned integer. This is an alias of {@link ByteBuffer#readUint32}.\r\n * @function\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n * @returns {number} Value read\r\n * @expose\r\n */\r\n ByteBufferPrototype.readUInt32 = ByteBufferPrototype.readUint32;\r\n\r\n // types/ints/int64\r\n\r\n if (Long) {\r\n\r\n /**\r\n * Writes a 64bit signed integer.\r\n * @param {number|!Long} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeInt64 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value === 'number')\n value = Long.fromNumber(value);\n else if (typeof value === 'string')\n value = Long.fromString(value);\n else if (!(value && value instanceof Long))\n throw TypeError(\"Illegal value: \"+value+\" (not an integer or Long)\");\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n if (typeof value === 'number')\n value = Long.fromNumber(value);\n else if (typeof value === 'string')\n value = Long.fromString(value);\n offset += 8;\n var capacity6 = this.buffer.byteLength;\n if (offset > capacity6)\n this.resize((capacity6 *= 2) > offset ? capacity6 : offset);\n offset -= 8;\n var lo = value.low,\r\n hi = value.high;\r\n if (this.littleEndian) {\r\n this.view[offset+3] = (lo >>> 24) & 0xFF;\n this.view[offset+2] = (lo >>> 16) & 0xFF;\n this.view[offset+1] = (lo >>> 8) & 0xFF;\n this.view[offset ] = lo & 0xFF;\n offset += 4;\r\n this.view[offset+3] = (hi >>> 24) & 0xFF;\n this.view[offset+2] = (hi >>> 16) & 0xFF;\n this.view[offset+1] = (hi >>> 8) & 0xFF;\n this.view[offset ] = hi & 0xFF;\n } else {\r\n this.view[offset ] = (hi >>> 24) & 0xFF;\n this.view[offset+1] = (hi >>> 16) & 0xFF;\n this.view[offset+2] = (hi >>> 8) & 0xFF;\n this.view[offset+3] = hi & 0xFF;\n offset += 4;\r\n this.view[offset ] = (lo >>> 24) & 0xFF;\n this.view[offset+1] = (lo >>> 16) & 0xFF;\n this.view[offset+2] = (lo >>> 8) & 0xFF;\n this.view[offset+3] = lo & 0xFF;\n }\r\n if (relative) this.offset += 8;\n return this;\r\n };\r\n\r\n /**\r\n * Writes a 64bit signed integer. This is an alias of {@link ByteBuffer#writeInt64}.\r\n * @param {number|!Long} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeLong = ByteBufferPrototype.writeInt64;\r\n\r\n /**\r\n * Reads a 64bit signed integer.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {!Long}\r\n * @expose\r\n */\r\n ByteBufferPrototype.readInt64 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 8 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+8+\") <= \"+this.buffer.byteLength);\n }\r\n var lo = 0,\r\n hi = 0;\r\n if (this.littleEndian) {\r\n lo = this.view[offset+2] << 16;\n lo |= this.view[offset+1] << 8;\n lo |= this.view[offset ];\n lo += this.view[offset+3] << 24 >>> 0;\n offset += 4;\r\n hi = this.view[offset+2] << 16;\n hi |= this.view[offset+1] << 8;\n hi |= this.view[offset ];\n hi += this.view[offset+3] << 24 >>> 0;\n } else {\r\n hi = this.view[offset+1] << 16;\n hi |= this.view[offset+2] << 8;\n hi |= this.view[offset+3];\n hi += this.view[offset ] << 24 >>> 0;\n offset += 4;\r\n lo = this.view[offset+1] << 16;\n lo |= this.view[offset+2] << 8;\n lo |= this.view[offset+3];\n lo += this.view[offset ] << 24 >>> 0;\n }\r\n var value = new Long(lo, hi, false);\r\n if (relative) this.offset += 8;\n return value;\r\n };\r\n\r\n /**\r\n * Reads a 64bit signed integer. This is an alias of {@link ByteBuffer#readInt64}.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {!Long}\r\n * @expose\r\n */\r\n ByteBufferPrototype.readLong = ByteBufferPrototype.readInt64;\r\n\r\n /**\r\n * Writes a 64bit unsigned integer.\r\n * @param {number|!Long} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeUint64 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value === 'number')\n value = Long.fromNumber(value);\n else if (typeof value === 'string')\n value = Long.fromString(value);\n else if (!(value && value instanceof Long))\n throw TypeError(\"Illegal value: \"+value+\" (not an integer or Long)\");\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n if (typeof value === 'number')\n value = Long.fromNumber(value);\n else if (typeof value === 'string')\n value = Long.fromString(value);\n offset += 8;\n var capacity7 = this.buffer.byteLength;\n if (offset > capacity7)\n this.resize((capacity7 *= 2) > offset ? capacity7 : offset);\n offset -= 8;\n var lo = value.low,\r\n hi = value.high;\r\n if (this.littleEndian) {\r\n this.view[offset+3] = (lo >>> 24) & 0xFF;\n this.view[offset+2] = (lo >>> 16) & 0xFF;\n this.view[offset+1] = (lo >>> 8) & 0xFF;\n this.view[offset ] = lo & 0xFF;\n offset += 4;\r\n this.view[offset+3] = (hi >>> 24) & 0xFF;\n this.view[offset+2] = (hi >>> 16) & 0xFF;\n this.view[offset+1] = (hi >>> 8) & 0xFF;\n this.view[offset ] = hi & 0xFF;\n } else {\r\n this.view[offset ] = (hi >>> 24) & 0xFF;\n this.view[offset+1] = (hi >>> 16) & 0xFF;\n this.view[offset+2] = (hi >>> 8) & 0xFF;\n this.view[offset+3] = hi & 0xFF;\n offset += 4;\r\n this.view[offset ] = (lo >>> 24) & 0xFF;\n this.view[offset+1] = (lo >>> 16) & 0xFF;\n this.view[offset+2] = (lo >>> 8) & 0xFF;\n this.view[offset+3] = lo & 0xFF;\n }\r\n if (relative) this.offset += 8;\n return this;\r\n };\r\n\r\n /**\r\n * Writes a 64bit unsigned integer. This is an alias of {@link ByteBuffer#writeUint64}.\r\n * @function\r\n * @param {number|!Long} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeUInt64 = ByteBufferPrototype.writeUint64;\r\n\r\n /**\r\n * Reads a 64bit unsigned integer.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {!Long}\r\n * @expose\r\n */\r\n ByteBufferPrototype.readUint64 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 8 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+8+\") <= \"+this.buffer.byteLength);\n }\r\n var lo = 0,\r\n hi = 0;\r\n if (this.littleEndian) {\r\n lo = this.view[offset+2] << 16;\n lo |= this.view[offset+1] << 8;\n lo |= this.view[offset ];\n lo += this.view[offset+3] << 24 >>> 0;\n offset += 4;\r\n hi = this.view[offset+2] << 16;\n hi |= this.view[offset+1] << 8;\n hi |= this.view[offset ];\n hi += this.view[offset+3] << 24 >>> 0;\n } else {\r\n hi = this.view[offset+1] << 16;\n hi |= this.view[offset+2] << 8;\n hi |= this.view[offset+3];\n hi += this.view[offset ] << 24 >>> 0;\n offset += 4;\r\n lo = this.view[offset+1] << 16;\n lo |= this.view[offset+2] << 8;\n lo |= this.view[offset+3];\n lo += this.view[offset ] << 24 >>> 0;\n }\r\n var value = new Long(lo, hi, true);\r\n if (relative) this.offset += 8;\n return value;\r\n };\r\n\r\n /**\r\n * Reads a 64bit unsigned integer. This is an alias of {@link ByteBuffer#readUint64}.\r\n * @function\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {!Long}\r\n * @expose\r\n */\r\n ByteBufferPrototype.readUInt64 = ByteBufferPrototype.readUint64;\r\n\r\n } // Long\r\n\r\n\r\n // types/floats/float32\r\n\r\n /*\r\n ieee754 - https://github.com/feross/ieee754\r\n\r\n The MIT License (MIT)\r\n\r\n Copyright (c) Feross Aboukhadijeh\r\n\r\n Permission is hereby granted, free of charge, to any person obtaining a copy\r\n of this software and associated documentation files (the \"Software\"), to deal\r\n in the Software without restriction, including without limitation the rights\r\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n copies of the Software, and to permit persons to whom the Software is\r\n furnished to do so, subject to the following conditions:\r\n\r\n The above copyright notice and this permission notice shall be included in\r\n all copies or substantial portions of the Software.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n THE SOFTWARE.\r\n */\r\n\r\n /**\r\n * Reads an IEEE754 float from a byte array.\r\n * @param {!Array} buffer\r\n * @param {number} offset\r\n * @param {boolean} isLE\r\n * @param {number} mLen\r\n * @param {number} nBytes\r\n * @returns {number}\r\n * @inner\r\n */\r\n function ieee754_read(buffer, offset, isLE, mLen, nBytes) {\r\n var e, m,\r\n eLen = nBytes * 8 - mLen - 1,\r\n eMax = (1 << eLen) - 1,\r\n eBias = eMax >> 1,\r\n nBits = -7,\r\n i = isLE ? (nBytes - 1) : 0,\r\n d = isLE ? -1 : 1,\r\n s = buffer[offset + i];\r\n\r\n i += d;\r\n\r\n e = s & ((1 << (-nBits)) - 1);\r\n s >>= (-nBits);\r\n nBits += eLen;\r\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\r\n\r\n m = e & ((1 << (-nBits)) - 1);\r\n e >>= (-nBits);\r\n nBits += mLen;\r\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\r\n\r\n if (e === 0) {\r\n e = 1 - eBias;\r\n } else if (e === eMax) {\r\n return m ? NaN : ((s ? -1 : 1) * Infinity);\r\n } else {\r\n m = m + Math.pow(2, mLen);\r\n e = e - eBias;\r\n }\r\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen);\r\n }\r\n\r\n /**\r\n * Writes an IEEE754 float to a byte array.\r\n * @param {!Array} buffer\r\n * @param {number} value\r\n * @param {number} offset\r\n * @param {boolean} isLE\r\n * @param {number} mLen\r\n * @param {number} nBytes\r\n * @inner\r\n */\r\n function ieee754_write(buffer, value, offset, isLE, mLen, nBytes) {\r\n var e, m, c,\r\n eLen = nBytes * 8 - mLen - 1,\r\n eMax = (1 << eLen) - 1,\r\n eBias = eMax >> 1,\r\n rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0),\r\n i = isLE ? 0 : (nBytes - 1),\r\n d = isLE ? 1 : -1,\r\n s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;\r\n\r\n value = Math.abs(value);\r\n\r\n if (isNaN(value) || value === Infinity) {\r\n m = isNaN(value) ? 1 : 0;\r\n e = eMax;\r\n } else {\r\n e = Math.floor(Math.log(value) / Math.LN2);\r\n if (value * (c = Math.pow(2, -e)) < 1) {\r\n e--;\r\n c *= 2;\r\n }\r\n if (e + eBias >= 1) {\r\n value += rt / c;\r\n } else {\r\n value += rt * Math.pow(2, 1 - eBias);\r\n }\r\n if (value * c >= 2) {\r\n e++;\r\n c /= 2;\r\n }\r\n\r\n if (e + eBias >= eMax) {\r\n m = 0;\r\n e = eMax;\r\n } else if (e + eBias >= 1) {\r\n m = (value * c - 1) * Math.pow(2, mLen);\r\n e = e + eBias;\r\n } else {\r\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\r\n e = 0;\r\n }\r\n }\r\n\r\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\r\n\r\n e = (e << mLen) | m;\r\n eLen += mLen;\r\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\r\n\r\n buffer[offset + i - d] |= s * 128;\r\n }\r\n\r\n /**\r\n * Writes a 32bit float.\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeFloat32 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value !== 'number')\r\n throw TypeError(\"Illegal value: \"+value+\" (not a number)\");\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n offset += 4;\n var capacity8 = this.buffer.byteLength;\n if (offset > capacity8)\n this.resize((capacity8 *= 2) > offset ? capacity8 : offset);\n offset -= 4;\n ieee754_write(this.view, value, offset, this.littleEndian, 23, 4);\r\n if (relative) this.offset += 4;\n return this;\r\n };\r\n\r\n /**\r\n * Writes a 32bit float. This is an alias of {@link ByteBuffer#writeFloat32}.\r\n * @function\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeFloat = ByteBufferPrototype.writeFloat32;\r\n\r\n /**\r\n * Reads a 32bit float.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n * @returns {number}\r\n * @expose\r\n */\r\n ByteBufferPrototype.readFloat32 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 4 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+4+\") <= \"+this.buffer.byteLength);\n }\r\n var value = ieee754_read(this.view, offset, this.littleEndian, 23, 4);\r\n if (relative) this.offset += 4;\n return value;\r\n };\r\n\r\n /**\r\n * Reads a 32bit float. This is an alias of {@link ByteBuffer#readFloat32}.\r\n * @function\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n * @returns {number}\r\n * @expose\r\n */\r\n ByteBufferPrototype.readFloat = ByteBufferPrototype.readFloat32;\r\n\r\n // types/floats/float64\r\n\r\n /**\r\n * Writes a 64bit float.\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeFloat64 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value !== 'number')\r\n throw TypeError(\"Illegal value: \"+value+\" (not a number)\");\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n offset += 8;\n var capacity9 = this.buffer.byteLength;\n if (offset > capacity9)\n this.resize((capacity9 *= 2) > offset ? capacity9 : offset);\n offset -= 8;\n ieee754_write(this.view, value, offset, this.littleEndian, 52, 8);\r\n if (relative) this.offset += 8;\n return this;\r\n };\r\n\r\n /**\r\n * Writes a 64bit float. This is an alias of {@link ByteBuffer#writeFloat64}.\r\n * @function\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeDouble = ByteBufferPrototype.writeFloat64;\r\n\r\n /**\r\n * Reads a 64bit float.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {number}\r\n * @expose\r\n */\r\n ByteBufferPrototype.readFloat64 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 8 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+8+\") <= \"+this.buffer.byteLength);\n }\r\n var value = ieee754_read(this.view, offset, this.littleEndian, 52, 8);\r\n if (relative) this.offset += 8;\n return value;\r\n };\r\n\r\n /**\r\n * Reads a 64bit float. This is an alias of {@link ByteBuffer#readFloat64}.\r\n * @function\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {number}\r\n * @expose\r\n */\r\n ByteBufferPrototype.readDouble = ByteBufferPrototype.readFloat64;\r\n\r\n\r\n // types/varints/varint32\r\n\r\n /**\r\n * Maximum number of bytes required to store a 32bit base 128 variable-length integer.\r\n * @type {number}\r\n * @const\r\n * @expose\r\n */\r\n ByteBuffer.MAX_VARINT32_BYTES = 5;\r\n\r\n /**\r\n * Calculates the actual number of bytes required to store a 32bit base 128 variable-length integer.\r\n * @param {number} value Value to encode\r\n * @returns {number} Number of bytes required. Capped to {@link ByteBuffer.MAX_VARINT32_BYTES}\r\n * @expose\r\n */\r\n ByteBuffer.calculateVarint32 = function(value) {\r\n // ref: src/google/protobuf/io/coded_stream.cc\r\n value = value >>> 0;\r\n if (value < 1 << 7 ) return 1;\r\n else if (value < 1 << 14) return 2;\r\n else if (value < 1 << 21) return 3;\r\n else if (value < 1 << 28) return 4;\r\n else return 5;\r\n };\r\n\r\n /**\r\n * Zigzag encodes a signed 32bit integer so that it can be effectively used with varint encoding.\r\n * @param {number} n Signed 32bit integer\r\n * @returns {number} Unsigned zigzag encoded 32bit integer\r\n * @expose\r\n */\r\n ByteBuffer.zigZagEncode32 = function(n) {\r\n return (((n |= 0) << 1) ^ (n >> 31)) >>> 0; // ref: src/google/protobuf/wire_format_lite.h\r\n };\r\n\r\n /**\r\n * Decodes a zigzag encoded signed 32bit integer.\r\n * @param {number} n Unsigned zigzag encoded 32bit integer\r\n * @returns {number} Signed 32bit integer\r\n * @expose\r\n */\r\n ByteBuffer.zigZagDecode32 = function(n) {\r\n return ((n >>> 1) ^ -(n & 1)) | 0; // // ref: src/google/protobuf/wire_format_lite.h\r\n };\r\n\r\n /**\r\n * Writes a 32bit base 128 variable-length integer.\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * written if omitted.\r\n * @returns {!ByteBuffer|number} this if `offset` is omitted, else the actual number of bytes written\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeVarint32 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value !== 'number' || value % 1 !== 0)\n throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n value |= 0;\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n var size = ByteBuffer.calculateVarint32(value),\r\n b;\r\n offset += size;\n var capacity10 = this.buffer.byteLength;\n if (offset > capacity10)\n this.resize((capacity10 *= 2) > offset ? capacity10 : offset);\n offset -= size;\n value >>>= 0;\r\n while (value >= 0x80) {\r\n b = (value & 0x7f) | 0x80;\r\n this.view[offset++] = b;\r\n value >>>= 7;\r\n }\r\n this.view[offset++] = value;\r\n if (relative) {\r\n this.offset = offset;\r\n return this;\r\n }\r\n return size;\r\n };\r\n\r\n /**\r\n * Writes a zig-zag encoded (signed) 32bit base 128 variable-length integer.\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * written if omitted.\r\n * @returns {!ByteBuffer|number} this if `offset` is omitted, else the actual number of bytes written\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeVarint32ZigZag = function(value, offset) {\r\n return this.writeVarint32(ByteBuffer.zigZagEncode32(value), offset);\r\n };\r\n\r\n /**\r\n * Reads a 32bit base 128 variable-length integer.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * written if omitted.\r\n * @returns {number|!{value: number, length: number}} The value read if offset is omitted, else the value read\r\n * and the actual number of bytes read.\r\n * @throws {Error} If it's not a valid varint. Has a property `truncated = true` if there is not enough data available\r\n * to fully decode the varint.\r\n * @expose\r\n */\r\n ByteBufferPrototype.readVarint32 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 1 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+1+\") <= \"+this.buffer.byteLength);\n }\r\n var c = 0,\r\n value = 0 >>> 0,\r\n b;\r\n do {\r\n if (!this.noAssert && offset > this.limit) {\r\n var err = Error(\"Truncated\");\r\n err['truncated'] = true;\r\n throw err;\r\n }\r\n b = this.view[offset++];\r\n if (c < 5)\r\n value |= (b & 0x7f) << (7*c);\r\n ++c;\r\n } while ((b & 0x80) !== 0);\r\n value |= 0;\r\n if (relative) {\r\n this.offset = offset;\r\n return value;\r\n }\r\n return {\r\n \"value\": value,\r\n \"length\": c\r\n };\r\n };\r\n\r\n /**\r\n * Reads a zig-zag encoded (signed) 32bit base 128 variable-length integer.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * written if omitted.\r\n * @returns {number|!{value: number, length: number}} The value read if offset is omitted, else the value read\r\n * and the actual number of bytes read.\r\n * @throws {Error} If it's not a valid varint\r\n * @expose\r\n */\r\n ByteBufferPrototype.readVarint32ZigZag = function(offset) {\r\n var val = this.readVarint32(offset);\r\n if (typeof val === 'object')\r\n val[\"value\"] = ByteBuffer.zigZagDecode32(val[\"value\"]);\r\n else\r\n val = ByteBuffer.zigZagDecode32(val);\r\n return val;\r\n };\r\n\r\n // types/varints/varint64\r\n\r\n if (Long) {\r\n\r\n /**\r\n * Maximum number of bytes required to store a 64bit base 128 variable-length integer.\r\n * @type {number}\r\n * @const\r\n * @expose\r\n */\r\n ByteBuffer.MAX_VARINT64_BYTES = 10;\r\n\r\n /**\r\n * Calculates the actual number of bytes required to store a 64bit base 128 variable-length integer.\r\n * @param {number|!Long} value Value to encode\r\n * @returns {number} Number of bytes required. Capped to {@link ByteBuffer.MAX_VARINT64_BYTES}\r\n * @expose\r\n */\r\n ByteBuffer.calculateVarint64 = function(value) {\r\n if (typeof value === 'number')\n value = Long.fromNumber(value);\n else if (typeof value === 'string')\n value = Long.fromString(value);\n // ref: src/google/protobuf/io/coded_stream.cc\r\n var part0 = value.toInt() >>> 0,\r\n part1 = value.shiftRightUnsigned(28).toInt() >>> 0,\r\n part2 = value.shiftRightUnsigned(56).toInt() >>> 0;\r\n if (part2 == 0) {\r\n if (part1 == 0) {\r\n if (part0 < 1 << 14)\r\n return part0 < 1 << 7 ? 1 : 2;\r\n else\r\n return part0 < 1 << 21 ? 3 : 4;\r\n } else {\r\n if (part1 < 1 << 14)\r\n return part1 < 1 << 7 ? 5 : 6;\r\n else\r\n return part1 < 1 << 21 ? 7 : 8;\r\n }\r\n } else\r\n return part2 < 1 << 7 ? 9 : 10;\r\n };\r\n\r\n /**\r\n * Zigzag encodes a signed 64bit integer so that it can be effectively used with varint encoding.\r\n * @param {number|!Long} value Signed long\r\n * @returns {!Long} Unsigned zigzag encoded long\r\n * @expose\r\n */\r\n ByteBuffer.zigZagEncode64 = function(value) {\r\n if (typeof value === 'number')\n value = Long.fromNumber(value, false);\n else if (typeof value === 'string')\n value = Long.fromString(value, false);\n else if (value.unsigned !== false) value = value.toSigned();\n // ref: src/google/protobuf/wire_format_lite.h\r\n return value.shiftLeft(1).xor(value.shiftRight(63)).toUnsigned();\r\n };\r\n\r\n /**\r\n * Decodes a zigzag encoded signed 64bit integer.\r\n * @param {!Long|number} value Unsigned zigzag encoded long or JavaScript number\r\n * @returns {!Long} Signed long\r\n * @expose\r\n */\r\n ByteBuffer.zigZagDecode64 = function(value) {\r\n if (typeof value === 'number')\n value = Long.fromNumber(value, false);\n else if (typeof value === 'string')\n value = Long.fromString(value, false);\n else if (value.unsigned !== false) value = value.toSigned();\n // ref: src/google/protobuf/wire_format_lite.h\r\n return value.shiftRightUnsigned(1).xor(value.and(Long.ONE).toSigned().negate()).toSigned();\r\n };\r\n\r\n /**\r\n * Writes a 64bit base 128 variable-length integer.\r\n * @param {number|Long} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * written if omitted.\r\n * @returns {!ByteBuffer|number} `this` if offset is omitted, else the actual number of bytes written.\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeVarint64 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value === 'number')\n value = Long.fromNumber(value);\n else if (typeof value === 'string')\n value = Long.fromString(value);\n else if (!(value && value instanceof Long))\n throw TypeError(\"Illegal value: \"+value+\" (not an integer or Long)\");\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n if (typeof value === 'number')\n value = Long.fromNumber(value, false);\n else if (typeof value === 'string')\n value = Long.fromString(value, false);\n else if (value.unsigned !== false) value = value.toSigned();\n var size = ByteBuffer.calculateVarint64(value),\r\n part0 = value.toInt() >>> 0,\r\n part1 = value.shiftRightUnsigned(28).toInt() >>> 0,\r\n part2 = value.shiftRightUnsigned(56).toInt() >>> 0;\r\n offset += size;\n var capacity11 = this.buffer.byteLength;\n if (offset > capacity11)\n this.resize((capacity11 *= 2) > offset ? capacity11 : offset);\n offset -= size;\n switch (size) {\r\n case 10: this.view[offset+9] = (part2 >>> 7) & 0x01;\r\n case 9 : this.view[offset+8] = size !== 9 ? (part2 ) | 0x80 : (part2 ) & 0x7F;\r\n case 8 : this.view[offset+7] = size !== 8 ? (part1 >>> 21) | 0x80 : (part1 >>> 21) & 0x7F;\r\n case 7 : this.view[offset+6] = size !== 7 ? (part1 >>> 14) | 0x80 : (part1 >>> 14) & 0x7F;\r\n case 6 : this.view[offset+5] = size !== 6 ? (part1 >>> 7) | 0x80 : (part1 >>> 7) & 0x7F;\r\n case 5 : this.view[offset+4] = size !== 5 ? (part1 ) | 0x80 : (part1 ) & 0x7F;\r\n case 4 : this.view[offset+3] = size !== 4 ? (part0 >>> 21) | 0x80 : (part0 >>> 21) & 0x7F;\r\n case 3 : this.view[offset+2] = size !== 3 ? (part0 >>> 14) | 0x80 : (part0 >>> 14) & 0x7F;\r\n case 2 : this.view[offset+1] = size !== 2 ? (part0 >>> 7) | 0x80 : (part0 >>> 7) & 0x7F;\r\n case 1 : this.view[offset ] = size !== 1 ? (part0 ) | 0x80 : (part0 ) & 0x7F;\r\n }\r\n if (relative) {\r\n this.offset += size;\r\n return this;\r\n } else {\r\n return size;\r\n }\r\n };\r\n\r\n /**\r\n * Writes a zig-zag encoded 64bit base 128 variable-length integer.\r\n * @param {number|Long} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * written if omitted.\r\n * @returns {!ByteBuffer|number} `this` if offset is omitted, else the actual number of bytes written.\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeVarint64ZigZag = function(value, offset) {\r\n return this.writeVarint64(ByteBuffer.zigZagEncode64(value), offset);\r\n };\r\n\r\n /**\r\n * Reads a 64bit base 128 variable-length integer. Requires Long.js.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * read if omitted.\r\n * @returns {!Long|!{value: Long, length: number}} The value read if offset is omitted, else the value read and\r\n * the actual number of bytes read.\r\n * @throws {Error} If it's not a valid varint\r\n * @expose\r\n */\r\n ByteBufferPrototype.readVarint64 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 1 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+1+\") <= \"+this.buffer.byteLength);\n }\r\n // ref: src/google/protobuf/io/coded_stream.cc\r\n var start = offset,\r\n part0 = 0,\r\n part1 = 0,\r\n part2 = 0,\r\n b = 0;\r\n b = this.view[offset++]; part0 = (b & 0x7F) ; if ( b & 0x80 ) {\r\n b = this.view[offset++]; part0 |= (b & 0x7F) << 7; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n b = this.view[offset++]; part0 |= (b & 0x7F) << 14; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n b = this.view[offset++]; part0 |= (b & 0x7F) << 21; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n b = this.view[offset++]; part1 = (b & 0x7F) ; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n b = this.view[offset++]; part1 |= (b & 0x7F) << 7; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n b = this.view[offset++]; part1 |= (b & 0x7F) << 14; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n b = this.view[offset++]; part1 |= (b & 0x7F) << 21; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n b = this.view[offset++]; part2 = (b & 0x7F) ; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n b = this.view[offset++]; part2 |= (b & 0x7F) << 7; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n throw Error(\"Buffer overrun\"); }}}}}}}}}}\r\n var value = Long.fromBits(part0 | (part1 << 28), (part1 >>> 4) | (part2) << 24, false);\r\n if (relative) {\r\n this.offset = offset;\r\n return value;\r\n } else {\r\n return {\r\n 'value': value,\r\n 'length': offset-start\r\n };\r\n }\r\n };\r\n\r\n /**\r\n * Reads a zig-zag encoded 64bit base 128 variable-length integer. Requires Long.js.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * read if omitted.\r\n * @returns {!Long|!{value: Long, length: number}} The value read if offset is omitted, else the value read and\r\n * the actual number of bytes read.\r\n * @throws {Error} If it's not a valid varint\r\n * @expose\r\n */\r\n ByteBufferPrototype.readVarint64ZigZag = function(offset) {\r\n var val = this.readVarint64(offset);\r\n if (val && val['value'] instanceof Long)\r\n val[\"value\"] = ByteBuffer.zigZagDecode64(val[\"value\"]);\r\n else\r\n val = ByteBuffer.zigZagDecode64(val);\r\n return val;\r\n };\r\n\r\n } // Long\r\n\r\n\r\n // types/strings/cstring\r\n\r\n /**\r\n * Writes a NULL-terminated UTF8 encoded string. For this to work the specified string must not contain any NULL\r\n * characters itself.\r\n * @param {string} str String to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * contained in `str` + 1 if omitted.\r\n * @returns {!ByteBuffer|number} this if offset is omitted, else the actual number of bytes written\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeCString = function(str, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n var i,\r\n k = str.length;\r\n if (!this.noAssert) {\r\n if (typeof str !== 'string')\r\n throw TypeError(\"Illegal str: Not a string\");\r\n for (i=0; i>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n // UTF8 strings do not contain zero bytes in between except for the zero character, so:\r\n k = utfx.calculateUTF16asUTF8(stringSource(str))[1];\r\n offset += k+1;\n var capacity12 = this.buffer.byteLength;\n if (offset > capacity12)\n this.resize((capacity12 *= 2) > offset ? capacity12 : offset);\n offset -= k+1;\n utfx.encodeUTF16toUTF8(stringSource(str), function(b) {\r\n this.view[offset++] = b;\r\n }.bind(this));\r\n this.view[offset++] = 0;\r\n if (relative) {\r\n this.offset = offset;\r\n return this;\r\n }\r\n return k;\r\n };\r\n\r\n /**\r\n * Reads a NULL-terminated UTF8 encoded string. For this to work the string read must not contain any NULL characters\r\n * itself.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * read if omitted.\r\n * @returns {string|!{string: string, length: number}} The string read if offset is omitted, else the string\r\n * read and the actual number of bytes read.\r\n * @expose\r\n */\r\n ByteBufferPrototype.readCString = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 1 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+1+\") <= \"+this.buffer.byteLength);\n }\r\n var start = offset,\r\n temp;\r\n // UTF8 strings do not contain zero bytes in between except for the zero character itself, so:\r\n var sd, b = -1;\r\n utfx.decodeUTF8toUTF16(function() {\r\n if (b === 0) return null;\r\n if (offset >= this.limit)\r\n throw RangeError(\"Illegal range: Truncated data, \"+offset+\" < \"+this.limit);\r\n b = this.view[offset++];\r\n return b === 0 ? null : b;\r\n }.bind(this), sd = stringDestination(), true);\r\n if (relative) {\r\n this.offset = offset;\r\n return sd();\r\n } else {\r\n return {\r\n \"string\": sd(),\r\n \"length\": offset - start\r\n };\r\n }\r\n };\r\n\r\n // types/strings/istring\r\n\r\n /**\r\n * Writes a length as uint32 prefixed UTF8 encoded string.\r\n * @param {string} str String to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * written if omitted.\r\n * @returns {!ByteBuffer|number} `this` if `offset` is omitted, else the actual number of bytes written\r\n * @expose\r\n * @see ByteBuffer#writeVarint32\r\n */\r\n ByteBufferPrototype.writeIString = function(str, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof str !== 'string')\r\n throw TypeError(\"Illegal str: Not a string\");\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n var start = offset,\r\n k;\r\n k = utfx.calculateUTF16asUTF8(stringSource(str), this.noAssert)[1];\r\n offset += 4+k;\n var capacity13 = this.buffer.byteLength;\n if (offset > capacity13)\n this.resize((capacity13 *= 2) > offset ? capacity13 : offset);\n offset -= 4+k;\n if (this.littleEndian) {\n this.view[offset+3] = (k >>> 24) & 0xFF;\n this.view[offset+2] = (k >>> 16) & 0xFF;\n this.view[offset+1] = (k >>> 8) & 0xFF;\n this.view[offset ] = k & 0xFF;\n } else {\n this.view[offset ] = (k >>> 24) & 0xFF;\n this.view[offset+1] = (k >>> 16) & 0xFF;\n this.view[offset+2] = (k >>> 8) & 0xFF;\n this.view[offset+3] = k & 0xFF;\n }\n offset += 4;\r\n utfx.encodeUTF16toUTF8(stringSource(str), function(b) {\r\n this.view[offset++] = b;\r\n }.bind(this));\r\n if (offset !== start + 4 + k)\r\n throw RangeError(\"Illegal range: Truncated data, \"+offset+\" == \"+(offset+4+k));\r\n if (relative) {\r\n this.offset = offset;\r\n return this;\r\n }\r\n return offset - start;\r\n };\r\n\r\n /**\r\n * Reads a length as uint32 prefixed UTF8 encoded string.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * read if omitted.\r\n * @returns {string|!{string: string, length: number}} The string read if offset is omitted, else the string\r\n * read and the actual number of bytes read.\r\n * @expose\r\n * @see ByteBuffer#readVarint32\r\n */\r\n ByteBufferPrototype.readIString = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 4 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+4+\") <= \"+this.buffer.byteLength);\n }\r\n var start = offset;\r\n var len = this.readUint32(offset);\r\n var str = this.readUTF8String(len, ByteBuffer.METRICS_BYTES, offset += 4);\r\n offset += str['length'];\r\n if (relative) {\r\n this.offset = offset;\r\n return str['string'];\r\n } else {\r\n return {\r\n 'string': str['string'],\r\n 'length': offset - start\r\n };\r\n }\r\n };\r\n\r\n // types/strings/utf8string\r\n\r\n /**\r\n * Metrics representing number of UTF8 characters. Evaluates to `c`.\r\n * @type {string}\r\n * @const\r\n * @expose\r\n */\r\n ByteBuffer.METRICS_CHARS = 'c';\r\n\r\n /**\r\n * Metrics representing number of bytes. Evaluates to `b`.\r\n * @type {string}\r\n * @const\r\n * @expose\r\n */\r\n ByteBuffer.METRICS_BYTES = 'b';\r\n\r\n /**\r\n * Writes an UTF8 encoded string.\r\n * @param {string} str String to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} if omitted.\r\n * @returns {!ByteBuffer|number} this if offset is omitted, else the actual number of bytes written.\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeUTF8String = function(str, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n var k;\r\n var start = offset;\r\n k = utfx.calculateUTF16asUTF8(stringSource(str))[1];\r\n offset += k;\n var capacity14 = this.buffer.byteLength;\n if (offset > capacity14)\n this.resize((capacity14 *= 2) > offset ? capacity14 : offset);\n offset -= k;\n utfx.encodeUTF16toUTF8(stringSource(str), function(b) {\r\n this.view[offset++] = b;\r\n }.bind(this));\r\n if (relative) {\r\n this.offset = offset;\r\n return this;\r\n }\r\n return offset - start;\r\n };\r\n\r\n /**\r\n * Writes an UTF8 encoded string. This is an alias of {@link ByteBuffer#writeUTF8String}.\r\n * @function\r\n * @param {string} str String to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} if omitted.\r\n * @returns {!ByteBuffer|number} this if offset is omitted, else the actual number of bytes written.\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeString = ByteBufferPrototype.writeUTF8String;\r\n\r\n /**\r\n * Calculates the number of UTF8 characters of a string. JavaScript itself uses UTF-16, so that a string's\r\n * `length` property does not reflect its actual UTF8 size if it contains code points larger than 0xFFFF.\r\n * @param {string} str String to calculate\r\n * @returns {number} Number of UTF8 characters\r\n * @expose\r\n */\r\n ByteBuffer.calculateUTF8Chars = function(str) {\r\n return utfx.calculateUTF16asUTF8(stringSource(str))[0];\r\n };\r\n\r\n /**\r\n * Calculates the number of UTF8 bytes of a string.\r\n * @param {string} str String to calculate\r\n * @returns {number} Number of UTF8 bytes\r\n * @expose\r\n */\r\n ByteBuffer.calculateUTF8Bytes = function(str) {\r\n return utfx.calculateUTF16asUTF8(stringSource(str))[1];\r\n };\r\n\r\n /**\r\n * Calculates the number of UTF8 bytes of a string. This is an alias of {@link ByteBuffer.calculateUTF8Bytes}.\r\n * @function\r\n * @param {string} str String to calculate\r\n * @returns {number} Number of UTF8 bytes\r\n * @expose\r\n */\r\n ByteBuffer.calculateString = ByteBuffer.calculateUTF8Bytes;\r\n\r\n /**\r\n * Reads an UTF8 encoded string.\r\n * @param {number} length Number of characters or bytes to read.\r\n * @param {string=} metrics Metrics specifying what `length` is meant to count. Defaults to\r\n * {@link ByteBuffer.METRICS_CHARS}.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * read if omitted.\r\n * @returns {string|!{string: string, length: number}} The string read if offset is omitted, else the string\r\n * read and the actual number of bytes read.\r\n * @expose\r\n */\r\n ByteBufferPrototype.readUTF8String = function(length, metrics, offset) {\r\n if (typeof metrics === 'number') {\r\n offset = metrics;\r\n metrics = undefined;\r\n }\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (typeof metrics === 'undefined') metrics = ByteBuffer.METRICS_CHARS;\r\n if (!this.noAssert) {\r\n if (typeof length !== 'number' || length % 1 !== 0)\n throw TypeError(\"Illegal length: \"+length+\" (not an integer)\");\n length |= 0;\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n var i = 0,\r\n start = offset,\r\n sd;\r\n if (metrics === ByteBuffer.METRICS_CHARS) { // The same for node and the browser\r\n sd = stringDestination();\r\n utfx.decodeUTF8(function() {\r\n return i < length && offset < this.limit ? this.view[offset++] : null;\r\n }.bind(this), function(cp) {\r\n ++i; utfx.UTF8toUTF16(cp, sd);\r\n });\r\n if (i !== length)\r\n throw RangeError(\"Illegal range: Truncated data, \"+i+\" == \"+length);\r\n if (relative) {\r\n this.offset = offset;\r\n return sd();\r\n } else {\r\n return {\r\n \"string\": sd(),\r\n \"length\": offset - start\r\n };\r\n }\r\n } else if (metrics === ByteBuffer.METRICS_BYTES) {\r\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + length > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+length+\") <= \"+this.buffer.byteLength);\n }\r\n var k = offset + length;\r\n utfx.decodeUTF8toUTF16(function() {\r\n return offset < k ? this.view[offset++] : null;\r\n }.bind(this), sd = stringDestination(), this.noAssert);\r\n if (offset !== k)\r\n throw RangeError(\"Illegal range: Truncated data, \"+offset+\" == \"+k);\r\n if (relative) {\r\n this.offset = offset;\r\n return sd();\r\n } else {\r\n return {\r\n 'string': sd(),\r\n 'length': offset - start\r\n };\r\n }\r\n } else\r\n throw TypeError(\"Unsupported metrics: \"+metrics);\r\n };\r\n\r\n /**\r\n * Reads an UTF8 encoded string. This is an alias of {@link ByteBuffer#readUTF8String}.\r\n * @function\r\n * @param {number} length Number of characters or bytes to read\r\n * @param {number=} metrics Metrics specifying what `n` is meant to count. Defaults to\r\n * {@link ByteBuffer.METRICS_CHARS}.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * read if omitted.\r\n * @returns {string|!{string: string, length: number}} The string read if offset is omitted, else the string\r\n * read and the actual number of bytes read.\r\n * @expose\r\n */\r\n ByteBufferPrototype.readString = ByteBufferPrototype.readUTF8String;\r\n\r\n // types/strings/vstring\r\n\r\n /**\r\n * Writes a length as varint32 prefixed UTF8 encoded string.\r\n * @param {string} str String to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * written if omitted.\r\n * @returns {!ByteBuffer|number} `this` if `offset` is omitted, else the actual number of bytes written\r\n * @expose\r\n * @see ByteBuffer#writeVarint32\r\n */\r\n ByteBufferPrototype.writeVString = function(str, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof str !== 'string')\r\n throw TypeError(\"Illegal str: Not a string\");\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n var start = offset,\r\n k, l;\r\n k = utfx.calculateUTF16asUTF8(stringSource(str), this.noAssert)[1];\r\n l = ByteBuffer.calculateVarint32(k);\r\n offset += l+k;\n var capacity15 = this.buffer.byteLength;\n if (offset > capacity15)\n this.resize((capacity15 *= 2) > offset ? capacity15 : offset);\n offset -= l+k;\n offset += this.writeVarint32(k, offset);\r\n utfx.encodeUTF16toUTF8(stringSource(str), function(b) {\r\n this.view[offset++] = b;\r\n }.bind(this));\r\n if (offset !== start+k+l)\r\n throw RangeError(\"Illegal range: Truncated data, \"+offset+\" == \"+(offset+k+l));\r\n if (relative) {\r\n this.offset = offset;\r\n return this;\r\n }\r\n return offset - start;\r\n };\r\n\r\n /**\r\n * Reads a length as varint32 prefixed UTF8 encoded string.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * read if omitted.\r\n * @returns {string|!{string: string, length: number}} The string read if offset is omitted, else the string\r\n * read and the actual number of bytes read.\r\n * @expose\r\n * @see ByteBuffer#readVarint32\r\n */\r\n ByteBufferPrototype.readVString = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 1 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+1+\") <= \"+this.buffer.byteLength);\n }\r\n var start = offset;\r\n var len = this.readVarint32(offset);\r\n var str = this.readUTF8String(len['value'], ByteBuffer.METRICS_BYTES, offset += len['length']);\r\n offset += str['length'];\r\n if (relative) {\r\n this.offset = offset;\r\n return str['string'];\r\n } else {\r\n return {\r\n 'string': str['string'],\r\n 'length': offset - start\r\n };\r\n }\r\n };\r\n\r\n\r\n /**\r\n * Appends some data to this ByteBuffer. This will overwrite any contents behind the specified offset up to the appended\r\n * data's length.\r\n * @param {!ByteBuffer|!ArrayBuffer|!Uint8Array|string} source Data to append. If `source` is a ByteBuffer, its offsets\r\n * will be modified according to the performed read operation.\r\n * @param {(string|number)=} encoding Encoding if `data` is a string (\"base64\", \"hex\", \"binary\", defaults to \"utf8\")\r\n * @param {number=} offset Offset to append at. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * written if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n * @example A relative `<01 02>03.append(<04 05>)` will result in `<01 02 04 05>, 04 05|`\r\n * @example An absolute `<01 02>03.append(04 05>, 1)` will result in `<01 04>05, 04 05|`\r\n */\r\n ByteBufferPrototype.append = function(source, encoding, offset) {\r\n if (typeof encoding === 'number' || typeof encoding !== 'string') {\r\n offset = encoding;\r\n encoding = undefined;\r\n }\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n if (!(source instanceof ByteBuffer))\r\n source = ByteBuffer.wrap(source, encoding);\r\n var length = source.limit - source.offset;\r\n if (length <= 0) return this; // Nothing to append\r\n offset += length;\n var capacity16 = this.buffer.byteLength;\n if (offset > capacity16)\n this.resize((capacity16 *= 2) > offset ? capacity16 : offset);\n offset -= length;\n this.view.set(source.view.subarray(source.offset, source.limit), offset);\r\n source.offset += length;\r\n if (relative) this.offset += length;\n return this;\r\n };\r\n\r\n /**\r\n * Appends this ByteBuffer's contents to another ByteBuffer. This will overwrite any contents at and after the\r\n specified offset up to the length of this ByteBuffer's data.\r\n * @param {!ByteBuffer} target Target ByteBuffer\r\n * @param {number=} offset Offset to append to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * read if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n * @see ByteBuffer#append\r\n */\r\n ByteBufferPrototype.appendTo = function(target, offset) {\r\n target.append(this, offset);\r\n return this;\r\n };\r\n\r\n /**\r\n * Enables or disables assertions of argument types and offsets. Assertions are enabled by default but you can opt to\r\n * disable them if your code already makes sure that everything is valid.\r\n * @param {boolean} assert `true` to enable assertions, otherwise `false`\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.assert = function(assert) {\r\n this.noAssert = !assert;\r\n return this;\r\n };\r\n\r\n /**\r\n * Gets the capacity of this ByteBuffer's backing buffer.\r\n * @returns {number} Capacity of the backing buffer\r\n * @expose\r\n */\r\n ByteBufferPrototype.capacity = function() {\r\n return this.buffer.byteLength;\r\n };\r\n /**\r\n * Clears this ByteBuffer's offsets by setting {@link ByteBuffer#offset} to `0` and {@link ByteBuffer#limit} to the\r\n * backing buffer's capacity. Discards {@link ByteBuffer#markedOffset}.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.clear = function() {\r\n this.offset = 0;\r\n this.limit = this.buffer.byteLength;\r\n this.markedOffset = -1;\r\n return this;\r\n };\r\n\r\n /**\r\n * Creates a cloned instance of this ByteBuffer, preset with this ByteBuffer's values for {@link ByteBuffer#offset},\r\n * {@link ByteBuffer#markedOffset} and {@link ByteBuffer#limit}.\r\n * @param {boolean=} copy Whether to copy the backing buffer or to return another view on the same, defaults to `false`\r\n * @returns {!ByteBuffer} Cloned instance\r\n * @expose\r\n */\r\n ByteBufferPrototype.clone = function(copy) {\r\n var bb = new ByteBuffer(0, this.littleEndian, this.noAssert);\r\n if (copy) {\r\n bb.buffer = new ArrayBuffer(this.buffer.byteLength);\r\n bb.view = new Uint8Array(bb.buffer);\r\n } else {\r\n bb.buffer = this.buffer;\r\n bb.view = this.view;\r\n }\r\n bb.offset = this.offset;\r\n bb.markedOffset = this.markedOffset;\r\n bb.limit = this.limit;\r\n return bb;\r\n };\r\n\r\n /**\r\n * Compacts this ByteBuffer to be backed by a {@link ByteBuffer#buffer} of its contents' length. Contents are the bytes\r\n * between {@link ByteBuffer#offset} and {@link ByteBuffer#limit}. Will set `offset = 0` and `limit = capacity` and\r\n * adapt {@link ByteBuffer#markedOffset} to the same relative position if set.\r\n * @param {number=} begin Offset to start at, defaults to {@link ByteBuffer#offset}\r\n * @param {number=} end Offset to end at, defaults to {@link ByteBuffer#limit}\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.compact = function(begin, end) {\r\n if (typeof begin === 'undefined') begin = this.offset;\r\n if (typeof end === 'undefined') end = this.limit;\r\n if (!this.noAssert) {\r\n if (typeof begin !== 'number' || begin % 1 !== 0)\n throw TypeError(\"Illegal begin: Not an integer\");\n begin >>>= 0;\n if (typeof end !== 'number' || end % 1 !== 0)\n throw TypeError(\"Illegal end: Not an integer\");\n end >>>= 0;\n if (begin < 0 || begin > end || end > this.buffer.byteLength)\n throw RangeError(\"Illegal range: 0 <= \"+begin+\" <= \"+end+\" <= \"+this.buffer.byteLength);\n }\r\n if (begin === 0 && end === this.buffer.byteLength)\r\n return this; // Already compacted\r\n var len = end - begin;\r\n if (len === 0) {\r\n this.buffer = EMPTY_BUFFER;\r\n this.view = null;\r\n if (this.markedOffset >= 0) this.markedOffset -= begin;\r\n this.offset = 0;\r\n this.limit = 0;\r\n return this;\r\n }\r\n var buffer = new ArrayBuffer(len);\r\n var view = new Uint8Array(buffer);\r\n view.set(this.view.subarray(begin, end));\r\n this.buffer = buffer;\r\n this.view = view;\r\n if (this.markedOffset >= 0) this.markedOffset -= begin;\r\n this.offset = 0;\r\n this.limit = len;\r\n return this;\r\n };\r\n\r\n /**\r\n * Creates a copy of this ByteBuffer's contents. Contents are the bytes between {@link ByteBuffer#offset} and\r\n * {@link ByteBuffer#limit}.\r\n * @param {number=} begin Begin offset, defaults to {@link ByteBuffer#offset}.\r\n * @param {number=} end End offset, defaults to {@link ByteBuffer#limit}.\r\n * @returns {!ByteBuffer} Copy\r\n * @expose\r\n */\r\n ByteBufferPrototype.copy = function(begin, end) {\r\n if (typeof begin === 'undefined') begin = this.offset;\r\n if (typeof end === 'undefined') end = this.limit;\r\n if (!this.noAssert) {\r\n if (typeof begin !== 'number' || begin % 1 !== 0)\n throw TypeError(\"Illegal begin: Not an integer\");\n begin >>>= 0;\n if (typeof end !== 'number' || end % 1 !== 0)\n throw TypeError(\"Illegal end: Not an integer\");\n end >>>= 0;\n if (begin < 0 || begin > end || end > this.buffer.byteLength)\n throw RangeError(\"Illegal range: 0 <= \"+begin+\" <= \"+end+\" <= \"+this.buffer.byteLength);\n }\r\n if (begin === end)\r\n return new ByteBuffer(0, this.littleEndian, this.noAssert);\r\n var capacity = end - begin,\r\n bb = new ByteBuffer(capacity, this.littleEndian, this.noAssert);\r\n bb.offset = 0;\r\n bb.limit = capacity;\r\n if (bb.markedOffset >= 0) bb.markedOffset -= begin;\r\n this.copyTo(bb, 0, begin, end);\r\n return bb;\r\n };\r\n\r\n /**\r\n * Copies this ByteBuffer's contents to another ByteBuffer. Contents are the bytes between {@link ByteBuffer#offset} and\r\n * {@link ByteBuffer#limit}.\r\n * @param {!ByteBuffer} target Target ByteBuffer\r\n * @param {number=} targetOffset Offset to copy to. Will use and increase the target's {@link ByteBuffer#offset}\r\n * by the number of bytes copied if omitted.\r\n * @param {number=} sourceOffset Offset to start copying from. Will use and increase {@link ByteBuffer#offset} by the\r\n * number of bytes copied if omitted.\r\n * @param {number=} sourceLimit Offset to end copying from, defaults to {@link ByteBuffer#limit}\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.copyTo = function(target, targetOffset, sourceOffset, sourceLimit) {\r\n var relative,\r\n targetRelative;\r\n if (!this.noAssert) {\r\n if (!ByteBuffer.isByteBuffer(target))\r\n throw TypeError(\"Illegal target: Not a ByteBuffer\");\r\n }\r\n targetOffset = (targetRelative = typeof targetOffset === 'undefined') ? target.offset : targetOffset | 0;\r\n sourceOffset = (relative = typeof sourceOffset === 'undefined') ? this.offset : sourceOffset | 0;\r\n sourceLimit = typeof sourceLimit === 'undefined' ? this.limit : sourceLimit | 0;\r\n\r\n if (targetOffset < 0 || targetOffset > target.buffer.byteLength)\r\n throw RangeError(\"Illegal target range: 0 <= \"+targetOffset+\" <= \"+target.buffer.byteLength);\r\n if (sourceOffset < 0 || sourceLimit > this.buffer.byteLength)\r\n throw RangeError(\"Illegal source range: 0 <= \"+sourceOffset+\" <= \"+this.buffer.byteLength);\r\n\r\n var len = sourceLimit - sourceOffset;\r\n if (len === 0)\r\n return target; // Nothing to copy\r\n\r\n target.ensureCapacity(targetOffset + len);\r\n\r\n target.view.set(this.view.subarray(sourceOffset, sourceLimit), targetOffset);\r\n\r\n if (relative) this.offset += len;\r\n if (targetRelative) target.offset += len;\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Makes sure that this ByteBuffer is backed by a {@link ByteBuffer#buffer} of at least the specified capacity. If the\r\n * current capacity is exceeded, it will be doubled. If double the current capacity is less than the required capacity,\r\n * the required capacity will be used instead.\r\n * @param {number} capacity Required capacity\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.ensureCapacity = function(capacity) {\r\n var current = this.buffer.byteLength;\r\n if (current < capacity)\r\n return this.resize((current *= 2) > capacity ? current : capacity);\r\n return this;\r\n };\r\n\r\n /**\r\n * Overwrites this ByteBuffer's contents with the specified value. Contents are the bytes between\r\n * {@link ByteBuffer#offset} and {@link ByteBuffer#limit}.\r\n * @param {number|string} value Byte value to fill with. If given as a string, the first character is used.\r\n * @param {number=} begin Begin offset. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * written if omitted. defaults to {@link ByteBuffer#offset}.\r\n * @param {number=} end End offset, defaults to {@link ByteBuffer#limit}.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n * @example `someByteBuffer.clear().fill(0)` fills the entire backing buffer with zeroes\r\n */\r\n ByteBufferPrototype.fill = function(value, begin, end) {\r\n var relative = typeof begin === 'undefined';\n if (relative) begin = this.offset;\n if (typeof value === 'string' && value.length > 0)\r\n value = value.charCodeAt(0);\r\n if (typeof begin === 'undefined') begin = this.offset;\r\n if (typeof end === 'undefined') end = this.limit;\r\n if (!this.noAssert) {\r\n if (typeof value !== 'number' || value % 1 !== 0)\n throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n value |= 0;\n if (typeof begin !== 'number' || begin % 1 !== 0)\n throw TypeError(\"Illegal begin: Not an integer\");\n begin >>>= 0;\n if (typeof end !== 'number' || end % 1 !== 0)\n throw TypeError(\"Illegal end: Not an integer\");\n end >>>= 0;\n if (begin < 0 || begin > end || end > this.buffer.byteLength)\n throw RangeError(\"Illegal range: 0 <= \"+begin+\" <= \"+end+\" <= \"+this.buffer.byteLength);\n }\r\n if (begin >= end)\r\n return this; // Nothing to fill\r\n while (begin < end) this.view[begin++] = value;\r\n if (relative) this.offset = begin;\r\n return this;\r\n };\r\n\r\n /**\r\n * Makes this ByteBuffer ready for a new sequence of write or relative read operations. Sets `limit = offset` and\r\n * `offset = 0`. Make sure always to flip a ByteBuffer when all relative read or write operations are complete.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.flip = function() {\r\n this.limit = this.offset;\r\n this.offset = 0;\r\n return this;\r\n };\r\n /**\r\n * Marks an offset on this ByteBuffer to be used later.\r\n * @param {number=} offset Offset to mark. Defaults to {@link ByteBuffer#offset}.\r\n * @returns {!ByteBuffer} this\r\n * @throws {TypeError} If `offset` is not a valid number\r\n * @throws {RangeError} If `offset` is out of bounds\r\n * @see ByteBuffer#reset\r\n * @expose\r\n */\r\n ByteBufferPrototype.mark = function(offset) {\r\n offset = typeof offset === 'undefined' ? this.offset : offset;\r\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n this.markedOffset = offset;\r\n return this;\r\n };\r\n /**\r\n * Sets the byte order.\r\n * @param {boolean} littleEndian `true` for little endian byte order, `false` for big endian\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.order = function(littleEndian) {\r\n if (!this.noAssert) {\r\n if (typeof littleEndian !== 'boolean')\r\n throw TypeError(\"Illegal littleEndian: Not a boolean\");\r\n }\r\n this.littleEndian = !!littleEndian;\r\n return this;\r\n };\r\n\r\n /**\r\n * Switches (to) little endian byte order.\r\n * @param {boolean=} littleEndian Defaults to `true`, otherwise uses big endian\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.LE = function(littleEndian) {\r\n this.littleEndian = typeof littleEndian !== 'undefined' ? !!littleEndian : true;\r\n return this;\r\n };\r\n\r\n /**\r\n * Switches (to) big endian byte order.\r\n * @param {boolean=} bigEndian Defaults to `true`, otherwise uses little endian\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.BE = function(bigEndian) {\r\n this.littleEndian = typeof bigEndian !== 'undefined' ? !bigEndian : false;\r\n return this;\r\n };\r\n /**\r\n * Prepends some data to this ByteBuffer. This will overwrite any contents before the specified offset up to the\r\n * prepended data's length. If there is not enough space available before the specified `offset`, the backing buffer\r\n * will be resized and its contents moved accordingly.\r\n * @param {!ByteBuffer|string|!ArrayBuffer} source Data to prepend. If `source` is a ByteBuffer, its offset will be\r\n * modified according to the performed read operation.\r\n * @param {(string|number)=} encoding Encoding if `data` is a string (\"base64\", \"hex\", \"binary\", defaults to \"utf8\")\r\n * @param {number=} offset Offset to prepend at. Will use and decrease {@link ByteBuffer#offset} by the number of bytes\r\n * prepended if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n * @example A relative `00<01 02 03>.prepend(<04 05>)` results in `<04 05 01 02 03>, 04 05|`\r\n * @example An absolute `00<01 02 03>.prepend(<04 05>, 2)` results in `04<05 02 03>, 04 05|`\r\n */\r\n ByteBufferPrototype.prepend = function(source, encoding, offset) {\r\n if (typeof encoding === 'number' || typeof encoding !== 'string') {\r\n offset = encoding;\r\n encoding = undefined;\r\n }\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n if (!(source instanceof ByteBuffer))\r\n source = ByteBuffer.wrap(source, encoding);\r\n var len = source.limit - source.offset;\r\n if (len <= 0) return this; // Nothing to prepend\r\n var diff = len - offset;\r\n if (diff > 0) { // Not enough space before offset, so resize + move\r\n var buffer = new ArrayBuffer(this.buffer.byteLength + diff);\r\n var view = new Uint8Array(buffer);\r\n view.set(this.view.subarray(offset, this.buffer.byteLength), len);\r\n this.buffer = buffer;\r\n this.view = view;\r\n this.offset += diff;\r\n if (this.markedOffset >= 0) this.markedOffset += diff;\r\n this.limit += diff;\r\n offset += diff;\r\n } else {\r\n var arrayView = new Uint8Array(this.buffer);\r\n }\r\n this.view.set(source.view.subarray(source.offset, source.limit), offset - len);\r\n\r\n source.offset = source.limit;\r\n if (relative)\r\n this.offset -= len;\r\n return this;\r\n };\r\n\r\n /**\r\n * Prepends this ByteBuffer to another ByteBuffer. This will overwrite any contents before the specified offset up to the\r\n * prepended data's length. If there is not enough space available before the specified `offset`, the backing buffer\r\n * will be resized and its contents moved accordingly.\r\n * @param {!ByteBuffer} target Target ByteBuffer\r\n * @param {number=} offset Offset to prepend at. Will use and decrease {@link ByteBuffer#offset} by the number of bytes\r\n * prepended if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n * @see ByteBuffer#prepend\r\n */\r\n ByteBufferPrototype.prependTo = function(target, offset) {\r\n target.prepend(this, offset);\r\n return this;\r\n };\r\n /**\r\n * Prints debug information about this ByteBuffer's contents.\r\n * @param {function(string)=} out Output function to call, defaults to console.log\r\n * @expose\r\n */\r\n ByteBufferPrototype.printDebug = function(out) {\r\n if (typeof out !== 'function') out = console.log.bind(console);\r\n out(\r\n this.toString()+\"\\n\"+\r\n \"-------------------------------------------------------------------\\n\"+\r\n this.toDebug(/* columns */ true)\r\n );\r\n };\r\n\r\n /**\r\n * Gets the number of remaining readable bytes. Contents are the bytes between {@link ByteBuffer#offset} and\r\n * {@link ByteBuffer#limit}, so this returns `limit - offset`.\r\n * @returns {number} Remaining readable bytes. May be negative if `offset > limit`.\r\n * @expose\r\n */\r\n ByteBufferPrototype.remaining = function() {\r\n return this.limit - this.offset;\r\n };\r\n /**\r\n * Resets this ByteBuffer's {@link ByteBuffer#offset}. If an offset has been marked through {@link ByteBuffer#mark}\r\n * before, `offset` will be set to {@link ByteBuffer#markedOffset}, which will then be discarded. If no offset has been\r\n * marked, sets `offset = 0`.\r\n * @returns {!ByteBuffer} this\r\n * @see ByteBuffer#mark\r\n * @expose\r\n */\r\n ByteBufferPrototype.reset = function() {\r\n if (this.markedOffset >= 0) {\r\n this.offset = this.markedOffset;\r\n this.markedOffset = -1;\r\n } else {\r\n this.offset = 0;\r\n }\r\n return this;\r\n };\r\n /**\r\n * Resizes this ByteBuffer to be backed by a buffer of at least the given capacity. Will do nothing if already that\r\n * large or larger.\r\n * @param {number} capacity Capacity required\r\n * @returns {!ByteBuffer} this\r\n * @throws {TypeError} If `capacity` is not a number\r\n * @throws {RangeError} If `capacity < 0`\r\n * @expose\r\n */\r\n ByteBufferPrototype.resize = function(capacity) {\r\n if (!this.noAssert) {\r\n if (typeof capacity !== 'number' || capacity % 1 !== 0)\n throw TypeError(\"Illegal capacity: \"+capacity+\" (not an integer)\");\n capacity |= 0;\n if (capacity < 0)\r\n throw RangeError(\"Illegal capacity: 0 <= \"+capacity);\r\n }\r\n if (this.buffer.byteLength < capacity) {\r\n var buffer = new ArrayBuffer(capacity);\r\n var view = new Uint8Array(buffer);\r\n view.set(this.view);\r\n this.buffer = buffer;\r\n this.view = view;\r\n }\r\n return this;\r\n };\r\n /**\r\n * Reverses this ByteBuffer's contents.\r\n * @param {number=} begin Offset to start at, defaults to {@link ByteBuffer#offset}\r\n * @param {number=} end Offset to end at, defaults to {@link ByteBuffer#limit}\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.reverse = function(begin, end) {\r\n if (typeof begin === 'undefined') begin = this.offset;\r\n if (typeof end === 'undefined') end = this.limit;\r\n if (!this.noAssert) {\r\n if (typeof begin !== 'number' || begin % 1 !== 0)\n throw TypeError(\"Illegal begin: Not an integer\");\n begin >>>= 0;\n if (typeof end !== 'number' || end % 1 !== 0)\n throw TypeError(\"Illegal end: Not an integer\");\n end >>>= 0;\n if (begin < 0 || begin > end || end > this.buffer.byteLength)\n throw RangeError(\"Illegal range: 0 <= \"+begin+\" <= \"+end+\" <= \"+this.buffer.byteLength);\n }\r\n if (begin === end)\r\n return this; // Nothing to reverse\r\n Array.prototype.reverse.call(this.view.subarray(begin, end));\r\n return this;\r\n };\r\n /**\r\n * Skips the next `length` bytes. This will just advance\r\n * @param {number} length Number of bytes to skip. May also be negative to move the offset back.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.skip = function(length) {\r\n if (!this.noAssert) {\r\n if (typeof length !== 'number' || length % 1 !== 0)\n throw TypeError(\"Illegal length: \"+length+\" (not an integer)\");\n length |= 0;\n }\r\n var offset = this.offset + length;\r\n if (!this.noAssert) {\r\n if (offset < 0 || offset > this.buffer.byteLength)\r\n throw RangeError(\"Illegal length: 0 <= \"+this.offset+\" + \"+length+\" <= \"+this.buffer.byteLength);\r\n }\r\n this.offset = offset;\r\n return this;\r\n };\r\n\r\n /**\r\n * Slices this ByteBuffer by creating a cloned instance with `offset = begin` and `limit = end`.\r\n * @param {number=} begin Begin offset, defaults to {@link ByteBuffer#offset}.\r\n * @param {number=} end End offset, defaults to {@link ByteBuffer#limit}.\r\n * @returns {!ByteBuffer} Clone of this ByteBuffer with slicing applied, backed by the same {@link ByteBuffer#buffer}\r\n * @expose\r\n */\r\n ByteBufferPrototype.slice = function(begin, end) {\r\n if (typeof begin === 'undefined') begin = this.offset;\r\n if (typeof end === 'undefined') end = this.limit;\r\n if (!this.noAssert) {\r\n if (typeof begin !== 'number' || begin % 1 !== 0)\n throw TypeError(\"Illegal begin: Not an integer\");\n begin >>>= 0;\n if (typeof end !== 'number' || end % 1 !== 0)\n throw TypeError(\"Illegal end: Not an integer\");\n end >>>= 0;\n if (begin < 0 || begin > end || end > this.buffer.byteLength)\n throw RangeError(\"Illegal range: 0 <= \"+begin+\" <= \"+end+\" <= \"+this.buffer.byteLength);\n }\r\n var bb = this.clone();\r\n bb.offset = begin;\r\n bb.limit = end;\r\n return bb;\r\n };\r\n /**\r\n * Returns a copy of the backing buffer that contains this ByteBuffer's contents. Contents are the bytes between\r\n * {@link ByteBuffer#offset} and {@link ByteBuffer#limit}.\r\n * @param {boolean=} forceCopy If `true` returns a copy, otherwise returns a view referencing the same memory if\r\n * possible. Defaults to `false`\r\n * @returns {!ArrayBuffer} Contents as an ArrayBuffer\r\n * @expose\r\n */\r\n ByteBufferPrototype.toBuffer = function(forceCopy) {\r\n var offset = this.offset,\r\n limit = this.limit;\r\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: Not an integer\");\n offset >>>= 0;\n if (typeof limit !== 'number' || limit % 1 !== 0)\n throw TypeError(\"Illegal limit: Not an integer\");\n limit >>>= 0;\n if (offset < 0 || offset > limit || limit > this.buffer.byteLength)\n throw RangeError(\"Illegal range: 0 <= \"+offset+\" <= \"+limit+\" <= \"+this.buffer.byteLength);\n }\r\n // NOTE: It's not possible to have another ArrayBuffer reference the same memory as the backing buffer. This is\r\n // possible with Uint8Array#subarray only, but we have to return an ArrayBuffer by contract. So:\r\n if (!forceCopy && offset === 0 && limit === this.buffer.byteLength)\r\n return this.buffer;\r\n if (offset === limit)\r\n return EMPTY_BUFFER;\r\n var buffer = new ArrayBuffer(limit - offset);\r\n new Uint8Array(buffer).set(new Uint8Array(this.buffer).subarray(offset, limit), 0);\r\n return buffer;\r\n };\r\n\r\n /**\r\n * Returns a raw buffer compacted to contain this ByteBuffer's contents. Contents are the bytes between\r\n * {@link ByteBuffer#offset} and {@link ByteBuffer#limit}. This is an alias of {@link ByteBuffer#toBuffer}.\r\n * @function\r\n * @param {boolean=} forceCopy If `true` returns a copy, otherwise returns a view referencing the same memory.\r\n * Defaults to `false`\r\n * @returns {!ArrayBuffer} Contents as an ArrayBuffer\r\n * @expose\r\n */\r\n ByteBufferPrototype.toArrayBuffer = ByteBufferPrototype.toBuffer;\r\n\r\n /**\r\n * Converts the ByteBuffer's contents to a string.\r\n * @param {string=} encoding Output encoding. Returns an informative string representation if omitted but also allows\r\n * direct conversion to \"utf8\", \"hex\", \"base64\" and \"binary\" encoding. \"debug\" returns a hex representation with\r\n * highlighted offsets.\r\n * @param {number=} begin Offset to begin at, defaults to {@link ByteBuffer#offset}\r\n * @param {number=} end Offset to end at, defaults to {@link ByteBuffer#limit}\r\n * @returns {string} String representation\r\n * @throws {Error} If `encoding` is invalid\r\n * @expose\r\n */\r\n ByteBufferPrototype.toString = function(encoding, begin, end) {\r\n if (typeof encoding === 'undefined')\r\n return \"ByteBufferAB(offset=\"+this.offset+\",markedOffset=\"+this.markedOffset+\",limit=\"+this.limit+\",capacity=\"+this.capacity()+\")\";\r\n if (typeof encoding === 'number')\r\n encoding = \"utf8\",\r\n begin = encoding,\r\n end = begin;\r\n switch (encoding) {\r\n case \"utf8\":\r\n return this.toUTF8(begin, end);\r\n case \"base64\":\r\n return this.toBase64(begin, end);\r\n case \"hex\":\r\n return this.toHex(begin, end);\r\n case \"binary\":\r\n return this.toBinary(begin, end);\r\n case \"debug\":\r\n return this.toDebug();\r\n case \"columns\":\r\n return this.toColumns();\r\n default:\r\n throw Error(\"Unsupported encoding: \"+encoding);\r\n }\r\n };\r\n\r\n // lxiv-embeddable\r\n\r\n /**\r\n * lxiv-embeddable (c) 2014 Daniel Wirtz \r\n * Released under the Apache License, Version 2.0\r\n * see: https://github.com/dcodeIO/lxiv for details\r\n */\r\n var lxiv = function() {\r\n \"use strict\";\r\n\r\n /**\r\n * lxiv namespace.\r\n * @type {!Object.}\r\n * @exports lxiv\r\n */\r\n var lxiv = {};\r\n\r\n /**\r\n * Character codes for output.\r\n * @type {!Array.}\r\n * @inner\r\n */\r\n var aout = [\r\n 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,\r\n 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102,\r\n 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,\r\n 119, 120, 121, 122, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 43, 47\r\n ];\r\n\r\n /**\r\n * Character codes for input.\r\n * @type {!Array.}\r\n * @inner\r\n */\r\n var ain = [];\r\n for (var i=0, k=aout.length; i>2)&0x3f]);\r\n t = (b&0x3)<<4;\r\n if ((b = src()) !== null) {\r\n t |= (b>>4)&0xf;\r\n dst(aout[(t|((b>>4)&0xf))&0x3f]);\r\n t = (b&0xf)<<2;\r\n if ((b = src()) !== null)\r\n dst(aout[(t|((b>>6)&0x3))&0x3f]),\r\n dst(aout[b&0x3f]);\r\n else\r\n dst(aout[t&0x3f]),\r\n dst(61);\r\n } else\r\n dst(aout[t&0x3f]),\r\n dst(61),\r\n dst(61);\r\n }\r\n };\r\n\r\n /**\r\n * Decodes base64 char codes to bytes.\r\n * @param {!function():number|null} src Characters source as a function returning the next char code respectively\r\n * `null` if there are no more characters left.\r\n * @param {!function(number)} dst Bytes destination as a function successively called with the next byte.\r\n * @throws {Error} If a character code is invalid\r\n */\r\n lxiv.decode = function(src, dst) {\r\n var c, t1, t2;\r\n function fail(c) {\r\n throw Error(\"Illegal character code: \"+c);\r\n }\r\n while ((c = src()) !== null) {\r\n t1 = ain[c];\r\n if (typeof t1 === 'undefined') fail(c);\r\n if ((c = src()) !== null) {\r\n t2 = ain[c];\r\n if (typeof t2 === 'undefined') fail(c);\r\n dst((t1<<2)>>>0|(t2&0x30)>>4);\r\n if ((c = src()) !== null) {\r\n t1 = ain[c];\r\n if (typeof t1 === 'undefined')\r\n if (c === 61) break; else fail(c);\r\n dst(((t2&0xf)<<4)>>>0|(t1&0x3c)>>2);\r\n if ((c = src()) !== null) {\r\n t2 = ain[c];\r\n if (typeof t2 === 'undefined')\r\n if (c === 61) break; else fail(c);\r\n dst(((t1&0x3)<<6)>>>0|t2);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Tests if a string is valid base64.\r\n * @param {string} str String to test\r\n * @returns {boolean} `true` if valid, otherwise `false`\r\n */\r\n lxiv.test = function(str) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(str);\r\n };\r\n\r\n return lxiv;\r\n }();\r\n\r\n // encodings/base64\r\n\r\n /**\r\n * Encodes this ByteBuffer's contents to a base64 encoded string.\r\n * @param {number=} begin Offset to begin at, defaults to {@link ByteBuffer#offset}.\r\n * @param {number=} end Offset to end at, defaults to {@link ByteBuffer#limit}.\r\n * @returns {string} Base64 encoded string\r\n * @throws {RangeError} If `begin` or `end` is out of bounds\r\n * @expose\r\n */\r\n ByteBufferPrototype.toBase64 = function(begin, end) {\r\n if (typeof begin === 'undefined')\r\n begin = this.offset;\r\n if (typeof end === 'undefined')\r\n end = this.limit;\r\n begin = begin | 0; end = end | 0;\r\n if (begin < 0 || end > this.capacity || begin > end)\r\n throw RangeError(\"begin, end\");\r\n var sd; lxiv.encode(function() {\r\n return begin < end ? this.view[begin++] : null;\r\n }.bind(this), sd = stringDestination());\r\n return sd();\r\n };\r\n\r\n /**\r\n * Decodes a base64 encoded string to a ByteBuffer.\r\n * @param {string} str String to decode\r\n * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n * {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n * @returns {!ByteBuffer} ByteBuffer\r\n * @expose\r\n */\r\n ByteBuffer.fromBase64 = function(str, littleEndian) {\r\n if (typeof str !== 'string')\r\n throw TypeError(\"str\");\r\n var bb = new ByteBuffer(str.length/4*3, littleEndian),\r\n i = 0;\r\n lxiv.decode(stringSource(str), function(b) {\r\n bb.view[i++] = b;\r\n });\r\n bb.limit = i;\r\n return bb;\r\n };\r\n\r\n /**\r\n * Encodes a binary string to base64 like `window.btoa` does.\r\n * @param {string} str Binary string\r\n * @returns {string} Base64 encoded string\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window.btoa\r\n * @expose\r\n */\r\n ByteBuffer.btoa = function(str) {\r\n return ByteBuffer.fromBinary(str).toBase64();\r\n };\r\n\r\n /**\r\n * Decodes a base64 encoded string to binary like `window.atob` does.\r\n * @param {string} b64 Base64 encoded string\r\n * @returns {string} Binary string\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window.atob\r\n * @expose\r\n */\r\n ByteBuffer.atob = function(b64) {\r\n return ByteBuffer.fromBase64(b64).toBinary();\r\n };\r\n\r\n // encodings/binary\r\n\r\n /**\r\n * Encodes this ByteBuffer to a binary encoded string, that is using only characters 0x00-0xFF as bytes.\r\n * @param {number=} begin Offset to begin at. Defaults to {@link ByteBuffer#offset}.\r\n * @param {number=} end Offset to end at. Defaults to {@link ByteBuffer#limit}.\r\n * @returns {string} Binary encoded string\r\n * @throws {RangeError} If `offset > limit`\r\n * @expose\r\n */\r\n ByteBufferPrototype.toBinary = function(begin, end) {\r\n if (typeof begin === 'undefined')\r\n begin = this.offset;\r\n if (typeof end === 'undefined')\r\n end = this.limit;\r\n begin |= 0; end |= 0;\r\n if (begin < 0 || end > this.capacity() || begin > end)\r\n throw RangeError(\"begin, end\");\r\n if (begin === end)\r\n return \"\";\r\n var chars = [],\r\n parts = [];\r\n while (begin < end) {\r\n chars.push(this.view[begin++]);\r\n if (chars.length >= 1024)\r\n parts.push(String.fromCharCode.apply(String, chars)),\r\n chars = [];\r\n }\r\n return parts.join('') + String.fromCharCode.apply(String, chars);\r\n };\r\n\r\n /**\r\n * Decodes a binary encoded string, that is using only characters 0x00-0xFF as bytes, to a ByteBuffer.\r\n * @param {string} str String to decode\r\n * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n * {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n * @returns {!ByteBuffer} ByteBuffer\r\n * @expose\r\n */\r\n ByteBuffer.fromBinary = function(str, littleEndian) {\r\n if (typeof str !== 'string')\r\n throw TypeError(\"str\");\r\n var i = 0,\r\n k = str.length,\r\n charCode,\r\n bb = new ByteBuffer(k, littleEndian);\r\n while (i 0xff)\r\n throw RangeError(\"illegal char code: \"+charCode);\r\n bb.view[i++] = charCode;\r\n }\r\n bb.limit = k;\r\n return bb;\r\n };\r\n\r\n // encodings/debug\r\n\r\n /**\r\n * Encodes this ByteBuffer to a hex encoded string with marked offsets. Offset symbols are:\r\n * * `<` : offset,\r\n * * `'` : markedOffset,\r\n * * `>` : limit,\r\n * * `|` : offset and limit,\r\n * * `[` : offset and markedOffset,\r\n * * `]` : markedOffset and limit,\r\n * * `!` : offset, markedOffset and limit\r\n * @param {boolean=} columns If `true` returns two columns hex + ascii, defaults to `false`\r\n * @returns {string|!Array.} Debug string or array of lines if `asArray = true`\r\n * @expose\r\n * @example `>00'01 02<03` contains four bytes with `limit=0, markedOffset=1, offset=3`\r\n * @example `00[01 02 03>` contains four bytes with `offset=markedOffset=1, limit=4`\r\n * @example `00|01 02 03` contains four bytes with `offset=limit=1, markedOffset=-1`\r\n * @example `|` contains zero bytes with `offset=limit=0, markedOffset=-1`\r\n */\r\n ByteBufferPrototype.toDebug = function(columns) {\r\n var i = -1,\r\n k = this.buffer.byteLength,\r\n b,\r\n hex = \"\",\r\n asc = \"\",\r\n out = \"\";\r\n while (i 32 && b < 127 ? String.fromCharCode(b) : '.';\r\n }\r\n ++i;\r\n if (columns) {\r\n if (i > 0 && i % 16 === 0 && i !== k) {\r\n while (hex.length < 3*16+3) hex += \" \";\r\n out += hex+asc+\"\\n\";\r\n hex = asc = \"\";\r\n }\r\n }\r\n if (i === this.offset && i === this.limit)\r\n hex += i === this.markedOffset ? \"!\" : \"|\";\r\n else if (i === this.offset)\r\n hex += i === this.markedOffset ? \"[\" : \"<\";\r\n else if (i === this.limit)\r\n hex += i === this.markedOffset ? \"]\" : \">\";\r\n else\r\n hex += i === this.markedOffset ? \"'\" : (columns || (i !== 0 && i !== k) ? \" \" : \"\");\r\n }\r\n if (columns && hex !== \" \") {\r\n while (hex.length < 3*16+3)\r\n hex += \" \";\r\n out += hex + asc + \"\\n\";\r\n }\r\n return columns ? out : hex;\r\n };\r\n\r\n /**\r\n * Decodes a hex encoded string with marked offsets to a ByteBuffer.\r\n * @param {string} str Debug string to decode (not be generated with `columns = true`)\r\n * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n * {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n * @param {boolean=} noAssert Whether to skip assertions of offsets and values. Defaults to\r\n * {@link ByteBuffer.DEFAULT_NOASSERT}.\r\n * @returns {!ByteBuffer} ByteBuffer\r\n * @expose\r\n * @see ByteBuffer#toDebug\r\n */\r\n ByteBuffer.fromDebug = function(str, littleEndian, noAssert) {\r\n var k = str.length,\r\n bb = new ByteBuffer(((k+1)/3)|0, littleEndian, noAssert);\r\n var i = 0, j = 0, ch, b,\r\n rs = false, // Require symbol next\r\n ho = false, hm = false, hl = false, // Already has offset (ho), markedOffset (hm), limit (hl)?\r\n fail = false;\r\n while (i':\r\n if (!noAssert) {\r\n if (hl) {\r\n fail = true;\r\n break;\r\n }\r\n hl = true;\r\n }\r\n bb.limit = j;\r\n rs = false;\r\n break;\r\n case \"'\":\r\n if (!noAssert) {\r\n if (hm) {\r\n fail = true;\r\n break;\r\n }\r\n hm = true;\r\n }\r\n bb.markedOffset = j;\r\n rs = false;\r\n break;\r\n case ' ':\r\n rs = false;\r\n break;\r\n default:\r\n if (!noAssert) {\r\n if (rs) {\r\n fail = true;\r\n break;\r\n }\r\n }\r\n b = parseInt(ch+str.charAt(i++), 16);\r\n if (!noAssert) {\r\n if (isNaN(b) || b < 0 || b > 255)\r\n throw TypeError(\"Illegal str: Not a debug encoded string\");\r\n }\r\n bb.view[j++] = b;\r\n rs = true;\r\n }\r\n if (fail)\r\n throw TypeError(\"Illegal str: Invalid symbol at \"+i);\r\n }\r\n if (!noAssert) {\r\n if (!ho || !hl)\r\n throw TypeError(\"Illegal str: Missing offset or limit\");\r\n if (j>>= 0;\n if (typeof end !== 'number' || end % 1 !== 0)\n throw TypeError(\"Illegal end: Not an integer\");\n end >>>= 0;\n if (begin < 0 || begin > end || end > this.buffer.byteLength)\n throw RangeError(\"Illegal range: 0 <= \"+begin+\" <= \"+end+\" <= \"+this.buffer.byteLength);\n }\r\n var out = new Array(end - begin),\r\n b;\r\n while (begin < end) {\r\n b = this.view[begin++];\r\n if (b < 0x10)\r\n out.push(\"0\", b.toString(16));\r\n else out.push(b.toString(16));\r\n }\r\n return out.join('');\r\n };\r\n\r\n /**\r\n * Decodes a hex encoded string to a ByteBuffer.\r\n * @param {string} str String to decode\r\n * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n * {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n * @param {boolean=} noAssert Whether to skip assertions of offsets and values. Defaults to\r\n * {@link ByteBuffer.DEFAULT_NOASSERT}.\r\n * @returns {!ByteBuffer} ByteBuffer\r\n * @expose\r\n */\r\n ByteBuffer.fromHex = function(str, littleEndian, noAssert) {\r\n if (!noAssert) {\r\n if (typeof str !== 'string')\r\n throw TypeError(\"Illegal str: Not a string\");\r\n if (str.length % 2 !== 0)\r\n throw TypeError(\"Illegal str: Length not a multiple of 2\");\r\n }\r\n var k = str.length,\r\n bb = new ByteBuffer((k / 2) | 0, littleEndian),\r\n b;\r\n for (var i=0, j=0; i 255)\r\n throw TypeError(\"Illegal str: Contains non-hex characters\");\r\n bb.view[j++] = b;\r\n }\r\n bb.limit = j;\r\n return bb;\r\n };\r\n\r\n // utfx-embeddable\r\n\r\n /**\r\n * utfx-embeddable (c) 2014 Daniel Wirtz \r\n * Released under the Apache License, Version 2.0\r\n * see: https://github.com/dcodeIO/utfx for details\r\n */\r\n var utfx = function() {\r\n \"use strict\";\r\n\r\n /**\r\n * utfx namespace.\r\n * @inner\r\n * @type {!Object.}\r\n */\r\n var utfx = {};\r\n\r\n /**\r\n * Maximum valid code point.\r\n * @type {number}\r\n * @const\r\n */\r\n utfx.MAX_CODEPOINT = 0x10FFFF;\r\n\r\n /**\r\n * Encodes UTF8 code points to UTF8 bytes.\r\n * @param {(!function():number|null) | number} src Code points source, either as a function returning the next code point\r\n * respectively `null` if there are no more code points left or a single numeric code point.\r\n * @param {!function(number)} dst Bytes destination as a function successively called with the next byte\r\n */\r\n utfx.encodeUTF8 = function(src, dst) {\r\n var cp = null;\r\n if (typeof src === 'number')\r\n cp = src,\r\n src = function() { return null; };\r\n while (cp !== null || (cp = src()) !== null) {\r\n if (cp < 0x80)\r\n dst(cp&0x7F);\r\n else if (cp < 0x800)\r\n dst(((cp>>6)&0x1F)|0xC0),\r\n dst((cp&0x3F)|0x80);\r\n else if (cp < 0x10000)\r\n dst(((cp>>12)&0x0F)|0xE0),\r\n dst(((cp>>6)&0x3F)|0x80),\r\n dst((cp&0x3F)|0x80);\r\n else\r\n dst(((cp>>18)&0x07)|0xF0),\r\n dst(((cp>>12)&0x3F)|0x80),\r\n dst(((cp>>6)&0x3F)|0x80),\r\n dst((cp&0x3F)|0x80);\r\n cp = null;\r\n }\r\n };\r\n\r\n /**\r\n * Decodes UTF8 bytes to UTF8 code points.\r\n * @param {!function():number|null} src Bytes source as a function returning the next byte respectively `null` if there\r\n * are no more bytes left.\r\n * @param {!function(number)} dst Code points destination as a function successively called with each decoded code point.\r\n * @throws {RangeError} If a starting byte is invalid in UTF8\r\n * @throws {Error} If the last sequence is truncated. Has an array property `bytes` holding the\r\n * remaining bytes.\r\n */\r\n utfx.decodeUTF8 = function(src, dst) {\r\n var a, b, c, d, fail = function(b) {\r\n b = b.slice(0, b.indexOf(null));\r\n var err = Error(b.toString());\r\n err.name = \"TruncatedError\";\r\n err['bytes'] = b;\r\n throw err;\r\n };\r\n while ((a = src()) !== null) {\r\n if ((a&0x80) === 0)\r\n dst(a);\r\n else if ((a&0xE0) === 0xC0)\r\n ((b = src()) === null) && fail([a, b]),\r\n dst(((a&0x1F)<<6) | (b&0x3F));\r\n else if ((a&0xF0) === 0xE0)\r\n ((b=src()) === null || (c=src()) === null) && fail([a, b, c]),\r\n dst(((a&0x0F)<<12) | ((b&0x3F)<<6) | (c&0x3F));\r\n else if ((a&0xF8) === 0xF0)\r\n ((b=src()) === null || (c=src()) === null || (d=src()) === null) && fail([a, b, c ,d]),\r\n dst(((a&0x07)<<18) | ((b&0x3F)<<12) | ((c&0x3F)<<6) | (d&0x3F));\r\n else throw RangeError(\"Illegal starting byte: \"+a);\r\n }\r\n };\r\n\r\n /**\r\n * Converts UTF16 characters to UTF8 code points.\r\n * @param {!function():number|null} src Characters source as a function returning the next char code respectively\r\n * `null` if there are no more characters left.\r\n * @param {!function(number)} dst Code points destination as a function successively called with each converted code\r\n * point.\r\n */\r\n utfx.UTF16toUTF8 = function(src, dst) {\r\n var c1, c2 = null;\r\n while (true) {\r\n if ((c1 = c2 !== null ? c2 : src()) === null)\r\n break;\r\n if (c1 >= 0xD800 && c1 <= 0xDFFF) {\r\n if ((c2 = src()) !== null) {\r\n if (c2 >= 0xDC00 && c2 <= 0xDFFF) {\r\n dst((c1-0xD800)*0x400+c2-0xDC00+0x10000);\r\n c2 = null; continue;\r\n }\r\n }\r\n }\r\n dst(c1);\r\n }\r\n if (c2 !== null) dst(c2);\r\n };\r\n\r\n /**\r\n * Converts UTF8 code points to UTF16 characters.\r\n * @param {(!function():number|null) | number} src Code points source, either as a function returning the next code point\r\n * respectively `null` if there are no more code points left or a single numeric code point.\r\n * @param {!function(number)} dst Characters destination as a function successively called with each converted char code.\r\n * @throws {RangeError} If a code point is out of range\r\n */\r\n utfx.UTF8toUTF16 = function(src, dst) {\r\n var cp = null;\r\n if (typeof src === 'number')\r\n cp = src, src = function() { return null; };\r\n while (cp !== null || (cp = src()) !== null) {\r\n if (cp <= 0xFFFF)\r\n dst(cp);\r\n else\r\n cp -= 0x10000,\r\n dst((cp>>10)+0xD800),\r\n dst((cp%0x400)+0xDC00);\r\n cp = null;\r\n }\r\n };\r\n\r\n /**\r\n * Converts and encodes UTF16 characters to UTF8 bytes.\r\n * @param {!function():number|null} src Characters source as a function returning the next char code respectively `null`\r\n * if there are no more characters left.\r\n * @param {!function(number)} dst Bytes destination as a function successively called with the next byte.\r\n */\r\n utfx.encodeUTF16toUTF8 = function(src, dst) {\r\n utfx.UTF16toUTF8(src, function(cp) {\r\n utfx.encodeUTF8(cp, dst);\r\n });\r\n };\r\n\r\n /**\r\n * Decodes and converts UTF8 bytes to UTF16 characters.\r\n * @param {!function():number|null} src Bytes source as a function returning the next byte respectively `null` if there\r\n * are no more bytes left.\r\n * @param {!function(number)} dst Characters destination as a function successively called with each converted char code.\r\n * @throws {RangeError} If a starting byte is invalid in UTF8\r\n * @throws {Error} If the last sequence is truncated. Has an array property `bytes` holding the remaining bytes.\r\n */\r\n utfx.decodeUTF8toUTF16 = function(src, dst) {\r\n utfx.decodeUTF8(src, function(cp) {\r\n utfx.UTF8toUTF16(cp, dst);\r\n });\r\n };\r\n\r\n /**\r\n * Calculates the byte length of an UTF8 code point.\r\n * @param {number} cp UTF8 code point\r\n * @returns {number} Byte length\r\n */\r\n utfx.calculateCodePoint = function(cp) {\r\n return (cp < 0x80) ? 1 : (cp < 0x800) ? 2 : (cp < 0x10000) ? 3 : 4;\r\n };\r\n\r\n /**\r\n * Calculates the number of UTF8 bytes required to store UTF8 code points.\r\n * @param {(!function():number|null)} src Code points source as a function returning the next code point respectively\r\n * `null` if there are no more code points left.\r\n * @returns {number} The number of UTF8 bytes required\r\n */\r\n utfx.calculateUTF8 = function(src) {\r\n var cp, l=0;\r\n while ((cp = src()) !== null)\r\n l += (cp < 0x80) ? 1 : (cp < 0x800) ? 2 : (cp < 0x10000) ? 3 : 4;\r\n return l;\r\n };\r\n\r\n /**\r\n * Calculates the number of UTF8 code points respectively UTF8 bytes required to store UTF16 char codes.\r\n * @param {(!function():number|null)} src Characters source as a function returning the next char code respectively\r\n * `null` if there are no more characters left.\r\n * @returns {!Array.} The number of UTF8 code points at index 0 and the number of UTF8 bytes required at index 1.\r\n */\r\n utfx.calculateUTF16asUTF8 = function(src) {\r\n var n=0, l=0;\r\n utfx.UTF16toUTF8(src, function(cp) {\r\n ++n; l += (cp < 0x80) ? 1 : (cp < 0x800) ? 2 : (cp < 0x10000) ? 3 : 4;\r\n });\r\n return [n,l];\r\n };\r\n\r\n return utfx;\r\n }();\r\n\r\n // encodings/utf8\r\n\r\n /**\r\n * Encodes this ByteBuffer's contents between {@link ByteBuffer#offset} and {@link ByteBuffer#limit} to an UTF8 encoded\r\n * string.\r\n * @returns {string} Hex encoded string\r\n * @throws {RangeError} If `offset > limit`\r\n * @expose\r\n */\r\n ByteBufferPrototype.toUTF8 = function(begin, end) {\r\n if (typeof begin === 'undefined') begin = this.offset;\r\n if (typeof end === 'undefined') end = this.limit;\r\n if (!this.noAssert) {\r\n if (typeof begin !== 'number' || begin % 1 !== 0)\n throw TypeError(\"Illegal begin: Not an integer\");\n begin >>>= 0;\n if (typeof end !== 'number' || end % 1 !== 0)\n throw TypeError(\"Illegal end: Not an integer\");\n end >>>= 0;\n if (begin < 0 || begin > end || end > this.buffer.byteLength)\n throw RangeError(\"Illegal range: 0 <= \"+begin+\" <= \"+end+\" <= \"+this.buffer.byteLength);\n }\r\n var sd; try {\r\n utfx.decodeUTF8toUTF16(function() {\r\n return begin < end ? this.view[begin++] : null;\r\n }.bind(this), sd = stringDestination());\r\n } catch (e) {\r\n if (begin !== end)\r\n throw RangeError(\"Illegal range: Truncated data, \"+begin+\" != \"+end);\r\n }\r\n return sd();\r\n };\r\n\r\n /**\r\n * Decodes an UTF8 encoded string to a ByteBuffer.\r\n * @param {string} str String to decode\r\n * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n * {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n * @param {boolean=} noAssert Whether to skip assertions of offsets and values. Defaults to\r\n * {@link ByteBuffer.DEFAULT_NOASSERT}.\r\n * @returns {!ByteBuffer} ByteBuffer\r\n * @expose\r\n */\r\n ByteBuffer.fromUTF8 = function(str, littleEndian, noAssert) {\r\n if (!noAssert)\r\n if (typeof str !== 'string')\r\n throw TypeError(\"Illegal str: Not a string\");\r\n var bb = new ByteBuffer(utfx.calculateUTF16asUTF8(stringSource(str), true)[1], littleEndian, noAssert),\r\n i = 0;\r\n utfx.encodeUTF16toUTF8(stringSource(str), function(b) {\r\n bb.view[i++] = b;\r\n });\r\n bb.limit = i;\r\n return bb;\r\n };\r\n\r\n return ByteBuffer;\r\n});\r\n","/*\r\n Copyright 2013 Daniel Wirtz \r\n Copyright 2009 The Closure Library Authors. All Rights Reserved.\r\n\r\n Licensed under the Apache License, Version 2.0 (the \"License\");\r\n you may not use this file except in compliance with the License.\r\n You may obtain a copy of the License at\r\n\r\n http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n Unless required by applicable law or agreed to in writing, software\r\n distributed under the License is distributed on an \"AS-IS\" BASIS,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n See the License for the specific language governing permissions and\r\n limitations under the License.\r\n */\r\n\r\n/**\r\n * @license long.js (c) 2013 Daniel Wirtz \r\n * Released under the Apache License, Version 2.0\r\n * see: https://github.com/dcodeIO/long.js for details\r\n */\r\n(function(global, factory) {\r\n\r\n /* AMD */ if (typeof define === 'function' && define[\"amd\"])\r\n define([], factory);\r\n /* CommonJS */ else if (typeof require === 'function' && typeof module === \"object\" && module && module[\"exports\"])\r\n module[\"exports\"] = factory();\r\n /* Global */ else\r\n (global[\"dcodeIO\"] = global[\"dcodeIO\"] || {})[\"Long\"] = factory();\r\n\r\n})(this, function() {\r\n \"use strict\";\r\n\r\n /**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n * See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed\r\n * @constructor\r\n */\r\n function Long(low, high, unsigned) {\r\n\r\n /**\r\n * The low 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.low = low | 0;\r\n\r\n /**\r\n * The high 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.high = high | 0;\r\n\r\n /**\r\n * Whether unsigned or not.\r\n * @type {boolean}\r\n */\r\n this.unsigned = !!unsigned;\r\n }\r\n\r\n // The internal representation of a long is the two given signed, 32-bit values.\r\n // We use 32-bit pieces because these are the size of integers on which\r\n // Javascript performs bit-operations. For operations like addition and\r\n // multiplication, we split each number into 16 bit pieces, which can easily be\r\n // multiplied within Javascript's floating-point representation without overflow\r\n // or change in sign.\r\n //\r\n // In the algorithms below, we frequently reduce the negative case to the\r\n // positive case by negating the input(s) and then post-processing the result.\r\n // Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n // (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n // a positive number, it overflows back into a negative). Not handling this\r\n // case would often result in infinite recursion.\r\n //\r\n // Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n // methods on which they depend.\r\n\r\n /**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\n Long.prototype.__isLong__;\r\n\r\n Object.defineProperty(Long.prototype, \"__isLong__\", {\r\n value: true,\r\n enumerable: false,\r\n configurable: false\r\n });\r\n\r\n /**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\n function isLong(obj) {\r\n return (obj && obj[\"__isLong__\"]) === true;\r\n }\r\n\r\n /**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\n Long.isLong = isLong;\r\n\r\n /**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\n var INT_CACHE = {};\r\n\r\n /**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\n var UINT_CACHE = {};\r\n\r\n /**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\n function fromInt(value, unsigned) {\r\n var obj, cachedObj, cache;\r\n if (unsigned) {\r\n value >>>= 0;\r\n if (cache = (0 <= value && value < 256)) {\r\n cachedObj = UINT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n if (cache)\r\n UINT_CACHE[value] = obj;\r\n return obj;\r\n } else {\r\n value |= 0;\r\n if (cache = (-128 <= value && value < 128)) {\r\n cachedObj = INT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n if (cache)\r\n INT_CACHE[value] = obj;\r\n return obj;\r\n }\r\n }\r\n\r\n /**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\n Long.fromInt = fromInt;\r\n\r\n /**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\n function fromNumber(value, unsigned) {\r\n if (isNaN(value) || !isFinite(value))\r\n return unsigned ? UZERO : ZERO;\r\n if (unsigned) {\r\n if (value < 0)\r\n return UZERO;\r\n if (value >= TWO_PWR_64_DBL)\r\n return MAX_UNSIGNED_VALUE;\r\n } else {\r\n if (value <= -TWO_PWR_63_DBL)\r\n return MIN_VALUE;\r\n if (value + 1 >= TWO_PWR_63_DBL)\r\n return MAX_VALUE;\r\n }\r\n if (value < 0)\r\n return fromNumber(-value, unsigned).neg();\r\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n }\r\n\r\n /**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\n Long.fromNumber = fromNumber;\r\n\r\n /**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\n function fromBits(lowBits, highBits, unsigned) {\r\n return new Long(lowBits, highBits, unsigned);\r\n }\r\n\r\n /**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n * assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\n Long.fromBits = fromBits;\r\n\r\n /**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\n var pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n /**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\n function fromString(str, unsigned, radix) {\r\n if (str.length === 0)\r\n throw Error('empty string');\r\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n return ZERO;\r\n if (typeof unsigned === 'number') {\r\n // For goog.math.long compatibility\r\n radix = unsigned,\r\n unsigned = false;\r\n } else {\r\n unsigned = !! unsigned;\r\n }\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n\r\n var p;\r\n if ((p = str.indexOf('-')) > 0)\r\n throw Error('interior hyphen');\r\n else if (p === 0) {\r\n return fromString(str.substring(1), unsigned, radix).neg();\r\n }\r\n\r\n // Do several (8) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n var result = ZERO;\r\n for (var i = 0; i < str.length; i += 8) {\r\n var size = Math.min(8, str.length - i),\r\n value = parseInt(str.substring(i, i + size), radix);\r\n if (size < 8) {\r\n var power = fromNumber(pow_dbl(radix, size));\r\n result = result.mul(power).add(fromNumber(value));\r\n } else {\r\n result = result.mul(radixToPower);\r\n result = result.add(fromNumber(value));\r\n }\r\n }\r\n result.unsigned = unsigned;\r\n return result;\r\n }\r\n\r\n /**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to `false` for signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\n Long.fromString = fromString;\r\n\r\n /**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @returns {!Long}\r\n * @inner\r\n */\r\n function fromValue(val) {\r\n if (val /* is compatible */ instanceof Long)\r\n return val;\r\n if (typeof val === 'number')\r\n return fromNumber(val);\r\n if (typeof val === 'string')\r\n return fromString(val);\r\n // Throws for non-objects, converts non-instanceof Long:\r\n return fromBits(val.low, val.high, val.unsigned);\r\n }\r\n\r\n /**\r\n * Converts the specified value to a Long.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @returns {!Long}\r\n */\r\n Long.fromValue = fromValue;\r\n\r\n // NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n // no runtime penalty for these.\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var TWO_PWR_16_DBL = 1 << 16;\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var TWO_PWR_24_DBL = 1 << 24;\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n /**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\n var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var ZERO = fromInt(0);\r\n\r\n /**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\n Long.ZERO = ZERO;\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var UZERO = fromInt(0, true);\r\n\r\n /**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\n Long.UZERO = UZERO;\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var ONE = fromInt(1);\r\n\r\n /**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\n Long.ONE = ONE;\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var UONE = fromInt(1, true);\r\n\r\n /**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\n Long.UONE = UONE;\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var NEG_ONE = fromInt(-1);\r\n\r\n /**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\n Long.NEG_ONE = NEG_ONE;\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n /**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\n Long.MAX_VALUE = MAX_VALUE;\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n /**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\n Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n /**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\n Long.MIN_VALUE = MIN_VALUE;\r\n\r\n /**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\n var LongPrototype = Long.prototype;\r\n\r\n /**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\n LongPrototype.toInt = function toInt() {\r\n return this.unsigned ? this.low >>> 0 : this.low;\r\n };\r\n\r\n /**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\n LongPrototype.toNumber = function toNumber() {\r\n if (this.unsigned)\r\n return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n };\r\n\r\n /**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\n LongPrototype.toString = function toString(radix) {\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n if (this.isZero())\r\n return '0';\r\n if (this.isNegative()) { // Unsigned Longs are never negative\r\n if (this.eq(MIN_VALUE)) {\r\n // We need to change the Long value before it can be negated, so we remove\r\n // the bottom-most digit in this base and then recurse to do the rest.\r\n var radixLong = fromNumber(radix),\r\n div = this.div(radixLong),\r\n rem1 = div.mul(radixLong).sub(this);\r\n return div.toString(radix) + rem1.toInt().toString(radix);\r\n } else\r\n return '-' + this.neg().toString(radix);\r\n }\r\n\r\n // Do several (6) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n rem = this;\r\n var result = '';\r\n while (true) {\r\n var remDiv = rem.div(radixToPower),\r\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n digits = intval.toString(radix);\r\n rem = remDiv;\r\n if (rem.isZero())\r\n return digits + result;\r\n else {\r\n while (digits.length < 6)\r\n digits = '0' + digits;\r\n result = '' + digits + result;\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\n LongPrototype.getHighBits = function getHighBits() {\r\n return this.high;\r\n };\r\n\r\n /**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\n LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n return this.high >>> 0;\r\n };\r\n\r\n /**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\n LongPrototype.getLowBits = function getLowBits() {\r\n return this.low;\r\n };\r\n\r\n /**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\n LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n return this.low >>> 0;\r\n };\r\n\r\n /**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\n LongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n if (this.isNegative()) // Unsigned Longs are never negative\r\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n var val = this.high != 0 ? this.high : this.low;\r\n for (var bit = 31; bit > 0; bit--)\r\n if ((val & (1 << bit)) != 0)\r\n break;\r\n return this.high != 0 ? bit + 33 : bit + 1;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\n LongPrototype.isZero = function isZero() {\r\n return this.high === 0 && this.low === 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\n LongPrototype.isNegative = function isNegative() {\r\n return !this.unsigned && this.high < 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\n LongPrototype.isPositive = function isPositive() {\r\n return this.unsigned || this.high >= 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\n LongPrototype.isOdd = function isOdd() {\r\n return (this.low & 1) === 1;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\n LongPrototype.isEven = function isEven() {\r\n return (this.low & 1) === 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.equals = function equals(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n return false;\r\n return this.high === other.high && this.low === other.low;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.eq = LongPrototype.equals;\r\n\r\n /**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.notEquals = function notEquals(other) {\r\n return !this.eq(/* validates */ other);\r\n };\r\n\r\n /**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.neq = LongPrototype.notEquals;\r\n\r\n /**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.lessThan = function lessThan(other) {\r\n return this.comp(/* validates */ other) < 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.lt = LongPrototype.lessThan;\r\n\r\n /**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n return this.comp(/* validates */ other) <= 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n /**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.greaterThan = function greaterThan(other) {\r\n return this.comp(/* validates */ other) > 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n /**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n return this.comp(/* validates */ other) >= 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n /**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\n LongPrototype.compare = function compare(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.eq(other))\r\n return 0;\r\n var thisNeg = this.isNegative(),\r\n otherNeg = other.isNegative();\r\n if (thisNeg && !otherNeg)\r\n return -1;\r\n if (!thisNeg && otherNeg)\r\n return 1;\r\n // At this point the sign bits are the same\r\n if (!this.unsigned)\r\n return this.sub(other).isNegative() ? -1 : 1;\r\n // Both are positive if at least one is unsigned\r\n return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n };\r\n\r\n /**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\n LongPrototype.comp = LongPrototype.compare;\r\n\r\n /**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\n LongPrototype.negate = function negate() {\r\n if (!this.unsigned && this.eq(MIN_VALUE))\r\n return MIN_VALUE;\r\n return this.not().add(ONE);\r\n };\r\n\r\n /**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\n LongPrototype.neg = LongPrototype.negate;\r\n\r\n /**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\n LongPrototype.add = function add(addend) {\r\n if (!isLong(addend))\r\n addend = fromValue(addend);\r\n\r\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = addend.high >>> 16;\r\n var b32 = addend.high & 0xFFFF;\r\n var b16 = addend.low >>> 16;\r\n var b00 = addend.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 + b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 + b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 + b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 + b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\n LongPrototype.subtract = function subtract(subtrahend) {\r\n if (!isLong(subtrahend))\r\n subtrahend = fromValue(subtrahend);\r\n return this.add(subtrahend.neg());\r\n };\r\n\r\n /**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\n LongPrototype.sub = LongPrototype.subtract;\r\n\r\n /**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\n LongPrototype.multiply = function multiply(multiplier) {\r\n if (this.isZero())\r\n return ZERO;\r\n if (!isLong(multiplier))\r\n multiplier = fromValue(multiplier);\r\n if (multiplier.isZero())\r\n return ZERO;\r\n if (this.eq(MIN_VALUE))\r\n return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n if (multiplier.eq(MIN_VALUE))\r\n return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n if (this.isNegative()) {\r\n if (multiplier.isNegative())\r\n return this.neg().mul(multiplier.neg());\r\n else\r\n return this.neg().mul(multiplier).neg();\r\n } else if (multiplier.isNegative())\r\n return this.mul(multiplier.neg()).neg();\r\n\r\n // If both longs are small, use float multiplication\r\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n // We can skip products that would overflow.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = multiplier.high >>> 16;\r\n var b32 = multiplier.high & 0xFFFF;\r\n var b16 = multiplier.low >>> 16;\r\n var b00 = multiplier.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 * b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 * b00;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c16 += a00 * b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 * b00;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a16 * b16;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a00 * b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\n LongPrototype.mul = LongPrototype.multiply;\r\n\r\n /**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n * unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\n LongPrototype.divide = function divide(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n if (divisor.isZero())\r\n throw Error('division by zero');\r\n if (this.isZero())\r\n return this.unsigned ? UZERO : ZERO;\r\n var approx, rem, res;\r\n if (!this.unsigned) {\r\n // This section is only relevant for signed longs and is derived from the\r\n // closure library as a whole.\r\n if (this.eq(MIN_VALUE)) {\r\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\r\n else if (divisor.eq(MIN_VALUE))\r\n return ONE;\r\n else {\r\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n var halfThis = this.shr(1);\r\n approx = halfThis.div(divisor).shl(1);\r\n if (approx.eq(ZERO)) {\r\n return divisor.isNegative() ? ONE : NEG_ONE;\r\n } else {\r\n rem = this.sub(divisor.mul(approx));\r\n res = approx.add(rem.div(divisor));\r\n return res;\r\n }\r\n }\r\n } else if (divisor.eq(MIN_VALUE))\r\n return this.unsigned ? UZERO : ZERO;\r\n if (this.isNegative()) {\r\n if (divisor.isNegative())\r\n return this.neg().div(divisor.neg());\r\n return this.neg().div(divisor).neg();\r\n } else if (divisor.isNegative())\r\n return this.div(divisor.neg()).neg();\r\n res = ZERO;\r\n } else {\r\n // The algorithm below has not been made for unsigned longs. It's therefore\r\n // required to take special care of the MSB prior to running it.\r\n if (!divisor.unsigned)\r\n divisor = divisor.toUnsigned();\r\n if (divisor.gt(this))\r\n return UZERO;\r\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n return UONE;\r\n res = UZERO;\r\n }\r\n\r\n // Repeat the following until the remainder is less than other: find a\r\n // floating-point that approximates remainder / other *from below*, add this\r\n // into the result, and subtract it from the remainder. It is critical that\r\n // the approximate value is less than or equal to the real value so that the\r\n // remainder never becomes negative.\r\n rem = this;\r\n while (rem.gte(divisor)) {\r\n // Approximate the result of division. This may be a little greater or\r\n // smaller than the actual value.\r\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n // We will tweak the approximate result by changing it in the 48-th digit or\r\n // the smallest non-fractional digit, whichever is larger.\r\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n // Decrease the approximation until it is smaller than the remainder. Note\r\n // that if it is too large, the product overflows and is negative.\r\n approxRes = fromNumber(approx),\r\n approxRem = approxRes.mul(divisor);\r\n while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n approx -= delta;\r\n approxRes = fromNumber(approx, this.unsigned);\r\n approxRem = approxRes.mul(divisor);\r\n }\r\n\r\n // We know the answer can't be zero... and actually, zero would cause\r\n // infinite recursion since we would make no progress.\r\n if (approxRes.isZero())\r\n approxRes = ONE;\r\n\r\n res = res.add(approxRes);\r\n rem = rem.sub(approxRem);\r\n }\r\n return res;\r\n };\r\n\r\n /**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\n LongPrototype.div = LongPrototype.divide;\r\n\r\n /**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\n LongPrototype.modulo = function modulo(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n return this.sub(this.div(divisor).mul(divisor));\r\n };\r\n\r\n /**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\n LongPrototype.mod = LongPrototype.modulo;\r\n\r\n /**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\n LongPrototype.not = function not() {\r\n return fromBits(~this.low, ~this.high, this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\n LongPrototype.and = function and(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\n LongPrototype.or = function or(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\n LongPrototype.xor = function xor(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\n LongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n else\r\n return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\n LongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n /**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\n LongPrototype.shiftRight = function shiftRight(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n else\r\n return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\n LongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n /**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\n LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n numBits &= 63;\r\n if (numBits === 0)\r\n return this;\r\n else {\r\n var high = this.high;\r\n if (numBits < 32) {\r\n var low = this.low;\r\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n } else if (numBits === 32)\r\n return fromBits(high, 0, this.unsigned);\r\n else\r\n return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n }\r\n };\r\n\r\n /**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\n LongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n /**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\n LongPrototype.toSigned = function toSigned() {\r\n if (!this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, false);\r\n };\r\n\r\n /**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\n LongPrototype.toUnsigned = function toUnsigned() {\r\n if (this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, true);\r\n };\r\n\r\n /**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.} Byte representation\r\n */\r\n LongPrototype.toBytes = function(le) {\r\n return le ? this.toBytesLE() : this.toBytesBE();\r\n }\r\n\r\n /**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.} Little endian byte representation\r\n */\r\n LongPrototype.toBytesLE = function() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n lo & 0xff,\r\n (lo >>> 8) & 0xff,\r\n (lo >>> 16) & 0xff,\r\n (lo >>> 24) & 0xff,\r\n hi & 0xff,\r\n (hi >>> 8) & 0xff,\r\n (hi >>> 16) & 0xff,\r\n (hi >>> 24) & 0xff\r\n ];\r\n }\r\n\r\n /**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.} Big endian byte representation\r\n */\r\n LongPrototype.toBytesBE = function() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n (hi >>> 24) & 0xff,\r\n (hi >>> 16) & 0xff,\r\n (hi >>> 8) & 0xff,\r\n hi & 0xff,\r\n (lo >>> 24) & 0xff,\r\n (lo >>> 16) & 0xff,\r\n (lo >>> 8) & 0xff,\r\n lo & 0xff\r\n ];\r\n }\r\n\r\n return Long;\r\n});\r\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*\r\n Copyright 2013 Daniel Wirtz \r\n\r\n Licensed under the Apache License, Version 2.0 (the \"License\");\r\n you may not use this file except in compliance with the License.\r\n You may obtain a copy of the License at\r\n\r\n http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n Unless required by applicable law or agreed to in writing, software\r\n distributed under the License is distributed on an \"AS IS\" BASIS,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n See the License for the specific language governing permissions and\r\n limitations under the License.\r\n */\r\n\r\n/**\r\n * @license protobuf.js (c) 2013 Daniel Wirtz \r\n * Released under the Apache License, Version 2.0\r\n * see: https://github.com/dcodeIO/protobuf.js for details\r\n */\r\n(function(global, factory) {\r\n\r\n /* AMD */ if (typeof define === 'function' && define[\"amd\"])\r\n define([\"bytebuffer\"], factory);\r\n /* CommonJS */ else if (typeof require === \"function\" && typeof module === \"object\" && module && module[\"exports\"])\r\n module[\"exports\"] = factory(require(\"bytebuffer\"), true);\r\n /* Global */ else\r\n (global[\"dcodeIO\"] = global[\"dcodeIO\"] || {})[\"ProtoBuf\"] = factory(global[\"dcodeIO\"][\"ByteBuffer\"]);\r\n\r\n})(this, function(ByteBuffer, isCommonJS) {\r\n \"use strict\";\r\n\r\n /**\r\n * The ProtoBuf namespace.\r\n * @exports ProtoBuf\r\n * @namespace\r\n * @expose\r\n */\r\n var ProtoBuf = {};\r\n\r\n /**\r\n * @type {!function(new: ByteBuffer, ...[*])}\r\n * @expose\r\n */\r\n ProtoBuf.ByteBuffer = ByteBuffer;\r\n\r\n /**\r\n * @type {?function(new: Long, ...[*])}\r\n * @expose\r\n */\r\n ProtoBuf.Long = ByteBuffer.Long || null;\r\n\r\n /**\r\n * ProtoBuf.js version.\r\n * @type {string}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.VERSION = \"5.0.3\";\r\n\r\n /**\r\n * Wire types.\r\n * @type {Object.}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.WIRE_TYPES = {};\r\n\r\n /**\r\n * Varint wire type.\r\n * @type {number}\r\n * @expose\r\n */\r\n ProtoBuf.WIRE_TYPES.VARINT = 0;\r\n\r\n /**\r\n * Fixed 64 bits wire type.\r\n * @type {number}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.WIRE_TYPES.BITS64 = 1;\r\n\r\n /**\r\n * Length delimited wire type.\r\n * @type {number}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.WIRE_TYPES.LDELIM = 2;\r\n\r\n /**\r\n * Start group wire type.\r\n * @type {number}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.WIRE_TYPES.STARTGROUP = 3;\r\n\r\n /**\r\n * End group wire type.\r\n * @type {number}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.WIRE_TYPES.ENDGROUP = 4;\r\n\r\n /**\r\n * Fixed 32 bits wire type.\r\n * @type {number}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.WIRE_TYPES.BITS32 = 5;\r\n\r\n /**\r\n * Packable wire types.\r\n * @type {!Array.}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.PACKABLE_WIRE_TYPES = [\r\n ProtoBuf.WIRE_TYPES.VARINT,\r\n ProtoBuf.WIRE_TYPES.BITS64,\r\n ProtoBuf.WIRE_TYPES.BITS32\r\n ];\r\n\r\n /**\r\n * Types.\r\n * @dict\r\n * @type {!Object.}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.TYPES = {\r\n // According to the protobuf spec.\r\n \"int32\": {\r\n name: \"int32\",\r\n wireType: ProtoBuf.WIRE_TYPES.VARINT,\r\n defaultValue: 0\r\n },\r\n \"uint32\": {\r\n name: \"uint32\",\r\n wireType: ProtoBuf.WIRE_TYPES.VARINT,\r\n defaultValue: 0\r\n },\r\n \"sint32\": {\r\n name: \"sint32\",\r\n wireType: ProtoBuf.WIRE_TYPES.VARINT,\r\n defaultValue: 0\r\n },\r\n \"int64\": {\r\n name: \"int64\",\r\n wireType: ProtoBuf.WIRE_TYPES.VARINT,\r\n defaultValue: ProtoBuf.Long ? ProtoBuf.Long.ZERO : undefined\r\n },\r\n \"uint64\": {\r\n name: \"uint64\",\r\n wireType: ProtoBuf.WIRE_TYPES.VARINT,\r\n defaultValue: ProtoBuf.Long ? ProtoBuf.Long.UZERO : undefined\r\n },\r\n \"sint64\": {\r\n name: \"sint64\",\r\n wireType: ProtoBuf.WIRE_TYPES.VARINT,\r\n defaultValue: ProtoBuf.Long ? ProtoBuf.Long.ZERO : undefined\r\n },\r\n \"bool\": {\r\n name: \"bool\",\r\n wireType: ProtoBuf.WIRE_TYPES.VARINT,\r\n defaultValue: false\r\n },\r\n \"double\": {\r\n name: \"double\",\r\n wireType: ProtoBuf.WIRE_TYPES.BITS64,\r\n defaultValue: 0\r\n },\r\n \"string\": {\r\n name: \"string\",\r\n wireType: ProtoBuf.WIRE_TYPES.LDELIM,\r\n defaultValue: \"\"\r\n },\r\n \"bytes\": {\r\n name: \"bytes\",\r\n wireType: ProtoBuf.WIRE_TYPES.LDELIM,\r\n defaultValue: null // overridden in the code, must be a unique instance\r\n },\r\n \"fixed32\": {\r\n name: \"fixed32\",\r\n wireType: ProtoBuf.WIRE_TYPES.BITS32,\r\n defaultValue: 0\r\n },\r\n \"sfixed32\": {\r\n name: \"sfixed32\",\r\n wireType: ProtoBuf.WIRE_TYPES.BITS32,\r\n defaultValue: 0\r\n },\r\n \"fixed64\": {\r\n name: \"fixed64\",\r\n wireType: ProtoBuf.WIRE_TYPES.BITS64,\r\n defaultValue: ProtoBuf.Long ? ProtoBuf.Long.UZERO : undefined\r\n },\r\n \"sfixed64\": {\r\n name: \"sfixed64\",\r\n wireType: ProtoBuf.WIRE_TYPES.BITS64,\r\n defaultValue: ProtoBuf.Long ? ProtoBuf.Long.ZERO : undefined\r\n },\r\n \"float\": {\r\n name: \"float\",\r\n wireType: ProtoBuf.WIRE_TYPES.BITS32,\r\n defaultValue: 0\r\n },\r\n \"enum\": {\r\n name: \"enum\",\r\n wireType: ProtoBuf.WIRE_TYPES.VARINT,\r\n defaultValue: 0\r\n },\r\n \"message\": {\r\n name: \"message\",\r\n wireType: ProtoBuf.WIRE_TYPES.LDELIM,\r\n defaultValue: null\r\n },\r\n \"group\": {\r\n name: \"group\",\r\n wireType: ProtoBuf.WIRE_TYPES.STARTGROUP,\r\n defaultValue: null\r\n }\r\n };\r\n\r\n /**\r\n * Valid map key types.\r\n * @type {!Array.>}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.MAP_KEY_TYPES = [\r\n ProtoBuf.TYPES[\"int32\"],\r\n ProtoBuf.TYPES[\"sint32\"],\r\n ProtoBuf.TYPES[\"sfixed32\"],\r\n ProtoBuf.TYPES[\"uint32\"],\r\n ProtoBuf.TYPES[\"fixed32\"],\r\n ProtoBuf.TYPES[\"int64\"],\r\n ProtoBuf.TYPES[\"sint64\"],\r\n ProtoBuf.TYPES[\"sfixed64\"],\r\n ProtoBuf.TYPES[\"uint64\"],\r\n ProtoBuf.TYPES[\"fixed64\"],\r\n ProtoBuf.TYPES[\"bool\"],\r\n ProtoBuf.TYPES[\"string\"],\r\n ProtoBuf.TYPES[\"bytes\"]\r\n ];\r\n\r\n /**\r\n * Minimum field id.\r\n * @type {number}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.ID_MIN = 1;\r\n\r\n /**\r\n * Maximum field id.\r\n * @type {number}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.ID_MAX = 0x1FFFFFFF;\r\n\r\n /**\r\n * If set to `true`, field names will be converted from underscore notation to camel case. Defaults to `false`.\r\n * Must be set prior to parsing.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n ProtoBuf.convertFieldsToCamelCase = false;\r\n\r\n /**\r\n * By default, messages are populated with (setX, set_x) accessors for each field. This can be disabled by\r\n * setting this to `false` prior to building messages.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n ProtoBuf.populateAccessors = true;\r\n\r\n /**\r\n * By default, messages are populated with default values if a field is not present on the wire. To disable\r\n * this behavior, set this setting to `false`.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n ProtoBuf.populateDefaults = true;\r\n\r\n /**\r\n * @alias ProtoBuf.Util\r\n * @expose\r\n */\r\n ProtoBuf.Util = (function() {\r\n \"use strict\";\r\n\r\n /**\r\n * ProtoBuf utilities.\r\n * @exports ProtoBuf.Util\r\n * @namespace\r\n */\r\n var Util = {};\r\n\r\n /**\r\n * Flag if running in node or not.\r\n * @type {boolean}\r\n * @const\r\n * @expose\r\n */\r\n Util.IS_NODE = !!(\r\n typeof process === 'object' && process+'' === '[object process]' && !process['browser']\r\n );\r\n\r\n /**\r\n * Constructs a XMLHttpRequest object.\r\n * @return {XMLHttpRequest}\r\n * @throws {Error} If XMLHttpRequest is not supported\r\n * @expose\r\n */\r\n Util.XHR = function() {\r\n // No dependencies please, ref: http://www.quirksmode.org/js/xmlhttp.html\r\n var XMLHttpFactories = [\r\n function () {return new XMLHttpRequest()},\r\n function () {return new ActiveXObject(\"Msxml2.XMLHTTP\")},\r\n function () {return new ActiveXObject(\"Msxml3.XMLHTTP\")},\r\n function () {return new ActiveXObject(\"Microsoft.XMLHTTP\")}\r\n ];\r\n /** @type {?XMLHttpRequest} */\r\n var xhr = null;\r\n for (var i=0;i}\r\n * @expose\r\n */\r\n ProtoBuf.Lang = {\r\n\r\n // Characters always ending a statement\r\n DELIM: /[\\s\\{\\}=;:\\[\\],'\"\\(\\)<>]/g,\r\n\r\n // Field rules\r\n RULE: /^(?:required|optional|repeated|map)$/,\r\n\r\n // Field types\r\n TYPE: /^(?:double|float|int32|uint32|sint32|int64|uint64|sint64|fixed32|sfixed32|fixed64|sfixed64|bool|string|bytes)$/,\r\n\r\n // Names\r\n NAME: /^[a-zA-Z_][a-zA-Z_0-9]*$/,\r\n\r\n // Type definitions\r\n TYPEDEF: /^[a-zA-Z][a-zA-Z_0-9]*$/,\r\n\r\n // Type references\r\n TYPEREF: /^(?:\\.?[a-zA-Z_][a-zA-Z_0-9]*)(?:\\.[a-zA-Z_][a-zA-Z_0-9]*)*$/,\r\n\r\n // Fully qualified type references\r\n FQTYPEREF: /^(?:\\.[a-zA-Z_][a-zA-Z_0-9]*)+$/,\r\n\r\n // All numbers\r\n NUMBER: /^-?(?:[1-9][0-9]*|0|0[xX][0-9a-fA-F]+|0[0-7]+|([0-9]*(\\.[0-9]*)?([Ee][+-]?[0-9]+)?)|inf|nan)$/,\r\n\r\n // Decimal numbers\r\n NUMBER_DEC: /^(?:[1-9][0-9]*|0)$/,\r\n\r\n // Hexadecimal numbers\r\n NUMBER_HEX: /^0[xX][0-9a-fA-F]+$/,\r\n\r\n // Octal numbers\r\n NUMBER_OCT: /^0[0-7]+$/,\r\n\r\n // Floating point numbers\r\n NUMBER_FLT: /^([0-9]*(\\.[0-9]*)?([Ee][+-]?[0-9]+)?|inf|nan)$/,\r\n\r\n // Booleans\r\n BOOL: /^(?:true|false)$/i,\r\n\r\n // Id numbers\r\n ID: /^(?:[1-9][0-9]*|0|0[xX][0-9a-fA-F]+|0[0-7]+)$/,\r\n\r\n // Negative id numbers (enum values)\r\n NEGID: /^\\-?(?:[1-9][0-9]*|0|0[xX][0-9a-fA-F]+|0[0-7]+)$/,\r\n\r\n // Whitespaces\r\n WHITESPACE: /\\s/,\r\n\r\n // All strings\r\n STRING: /(?:\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\")|(?:'([^'\\\\]*(?:\\\\.[^'\\\\]*)*)')/g,\r\n\r\n // Double quoted strings\r\n STRING_DQ: /(?:\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\")/g,\r\n\r\n // Single quoted strings\r\n STRING_SQ: /(?:'([^'\\\\]*(?:\\\\.[^'\\\\]*)*)')/g\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.DotProto\r\n * @expose\r\n */\r\n ProtoBuf.DotProto = (function(ProtoBuf, Lang) {\r\n \"use strict\";\r\n\r\n /**\r\n * Utilities to parse .proto files.\r\n * @exports ProtoBuf.DotProto\r\n * @namespace\r\n */\r\n var DotProto = {};\r\n\r\n /**\r\n * Constructs a new Tokenizer.\r\n * @exports ProtoBuf.DotProto.Tokenizer\r\n * @class prototype tokenizer\r\n * @param {string} proto Proto to tokenize\r\n * @constructor\r\n */\r\n var Tokenizer = function(proto) {\r\n\r\n /**\r\n * Source to parse.\r\n * @type {string}\r\n * @expose\r\n */\r\n this.source = proto+\"\";\r\n\r\n /**\r\n * Current index.\r\n * @type {number}\r\n * @expose\r\n */\r\n this.index = 0;\r\n\r\n /**\r\n * Current line.\r\n * @type {number}\r\n * @expose\r\n */\r\n this.line = 1;\r\n\r\n /**\r\n * Token stack.\r\n * @type {!Array.}\r\n * @expose\r\n */\r\n this.stack = [];\r\n\r\n /**\r\n * Opening character of the current string read, if any.\r\n * @type {?string}\r\n * @private\r\n */\r\n this._stringOpen = null;\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.DotProto.Tokenizer.prototype\r\n * @inner\r\n */\r\n var TokenizerPrototype = Tokenizer.prototype;\r\n\r\n /**\r\n * Reads a string beginning at the current index.\r\n * @return {string}\r\n * @private\r\n */\r\n TokenizerPrototype._readString = function() {\r\n var re = this._stringOpen === '\"'\r\n ? Lang.STRING_DQ\r\n : Lang.STRING_SQ;\r\n re.lastIndex = this.index - 1; // Include the open quote\r\n var match = re.exec(this.source);\r\n if (!match)\r\n throw Error(\"unterminated string\");\r\n this.index = re.lastIndex;\r\n this.stack.push(this._stringOpen);\r\n this._stringOpen = null;\r\n return match[1];\r\n };\r\n\r\n /**\r\n * Gets the next token and advances by one.\r\n * @return {?string} Token or `null` on EOF\r\n * @expose\r\n */\r\n TokenizerPrototype.next = function() {\r\n if (this.stack.length > 0)\r\n return this.stack.shift();\r\n if (this.index >= this.source.length)\r\n return null;\r\n if (this._stringOpen !== null)\r\n return this._readString();\r\n\r\n var repeat,\r\n prev,\r\n next;\r\n do {\r\n repeat = false;\r\n\r\n // Strip white spaces\r\n while (Lang.WHITESPACE.test(next = this.source.charAt(this.index))) {\r\n if (next === '\\n')\r\n ++this.line;\r\n if (++this.index === this.source.length)\r\n return null;\r\n }\r\n\r\n // Strip comments\r\n if (this.source.charAt(this.index) === '/') {\r\n ++this.index;\r\n if (this.source.charAt(this.index) === '/') { // Line\r\n while (this.source.charAt(++this.index) !== '\\n')\r\n if (this.index == this.source.length)\r\n return null;\r\n ++this.index;\r\n ++this.line;\r\n repeat = true;\r\n } else if ((next = this.source.charAt(this.index)) === '*') { /* Block */\r\n do {\r\n if (next === '\\n')\r\n ++this.line;\r\n if (++this.index === this.source.length)\r\n return null;\r\n prev = next;\r\n next = this.source.charAt(this.index);\r\n } while (prev !== '*' || next !== '/');\r\n ++this.index;\r\n repeat = true;\r\n } else\r\n return '/';\r\n }\r\n } while (repeat);\r\n\r\n if (this.index === this.source.length)\r\n return null;\r\n\r\n // Read the next token\r\n var end = this.index;\r\n Lang.DELIM.lastIndex = 0;\r\n var delim = Lang.DELIM.test(this.source.charAt(end++));\r\n if (!delim)\r\n while(end < this.source.length && !Lang.DELIM.test(this.source.charAt(end)))\r\n ++end;\r\n var token = this.source.substring(this.index, this.index = end);\r\n if (token === '\"' || token === \"'\")\r\n this._stringOpen = token;\r\n return token;\r\n };\r\n\r\n /**\r\n * Peeks for the next token.\r\n * @return {?string} Token or `null` on EOF\r\n * @expose\r\n */\r\n TokenizerPrototype.peek = function() {\r\n if (this.stack.length === 0) {\r\n var token = this.next();\r\n if (token === null)\r\n return null;\r\n this.stack.push(token);\r\n }\r\n return this.stack[0];\r\n };\r\n\r\n /**\r\n * Skips a specific token and throws if it differs.\r\n * @param {string} expected Expected token\r\n * @throws {Error} If the actual token differs\r\n */\r\n TokenizerPrototype.skip = function(expected) {\r\n var actual = this.next();\r\n if (actual !== expected)\r\n throw Error(\"illegal '\"+actual+\"', '\"+expected+\"' expected\");\r\n };\r\n\r\n /**\r\n * Omits an optional token.\r\n * @param {string} expected Expected optional token\r\n * @returns {boolean} `true` if the token exists\r\n */\r\n TokenizerPrototype.omit = function(expected) {\r\n if (this.peek() === expected) {\r\n this.next();\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n /**\r\n * Returns a string representation of this object.\r\n * @return {string} String representation as of \"Tokenizer(index/length)\"\r\n * @expose\r\n */\r\n TokenizerPrototype.toString = function() {\r\n return \"Tokenizer (\"+this.index+\"/\"+this.source.length+\" at line \"+this.line+\")\";\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.DotProto.Tokenizer\r\n * @expose\r\n */\r\n DotProto.Tokenizer = Tokenizer;\r\n\r\n /**\r\n * Constructs a new Parser.\r\n * @exports ProtoBuf.DotProto.Parser\r\n * @class prototype parser\r\n * @param {string} source Source\r\n * @constructor\r\n */\r\n var Parser = function(source) {\r\n\r\n /**\r\n * Tokenizer.\r\n * @type {!ProtoBuf.DotProto.Tokenizer}\r\n * @expose\r\n */\r\n this.tn = new Tokenizer(source);\r\n\r\n /**\r\n * Whether parsing proto3 or not.\r\n * @type {boolean}\r\n */\r\n this.proto3 = false;\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.DotProto.Parser.prototype\r\n * @inner\r\n */\r\n var ParserPrototype = Parser.prototype;\r\n\r\n /**\r\n * Parses the source.\r\n * @returns {!Object}\r\n * @throws {Error} If the source cannot be parsed\r\n * @expose\r\n */\r\n ParserPrototype.parse = function() {\r\n var topLevel = {\r\n \"name\": \"[ROOT]\", // temporary\r\n \"package\": null,\r\n \"messages\": [],\r\n \"enums\": [],\r\n \"imports\": [],\r\n \"options\": {},\r\n \"services\": []\r\n // \"syntax\": undefined\r\n };\r\n var token,\r\n head = true,\r\n weak;\r\n try {\r\n while (token = this.tn.next()) {\r\n switch (token) {\r\n case 'package':\r\n if (!head || topLevel[\"package\"] !== null)\r\n throw Error(\"unexpected 'package'\");\r\n token = this.tn.next();\r\n if (!Lang.TYPEREF.test(token))\r\n throw Error(\"illegal package name: \" + token);\r\n this.tn.skip(\";\");\r\n topLevel[\"package\"] = token;\r\n break;\r\n case 'import':\r\n if (!head)\r\n throw Error(\"unexpected 'import'\");\r\n token = this.tn.peek();\r\n if (token === \"public\" || (weak = token === \"weak\")) // token ignored\r\n this.tn.next();\r\n token = this._readString();\r\n this.tn.skip(\";\");\r\n if (!weak) // import ignored\r\n topLevel[\"imports\"].push(token);\r\n break;\r\n case 'syntax':\r\n if (!head)\r\n throw Error(\"unexpected 'syntax'\");\r\n this.tn.skip(\"=\");\r\n if ((topLevel[\"syntax\"] = this._readString()) === \"proto3\")\r\n this.proto3 = true;\r\n this.tn.skip(\";\");\r\n break;\r\n case 'message':\r\n this._parseMessage(topLevel, null);\r\n head = false;\r\n break;\r\n case 'enum':\r\n this._parseEnum(topLevel);\r\n head = false;\r\n break;\r\n case 'option':\r\n this._parseOption(topLevel);\r\n break;\r\n case 'service':\r\n this._parseService(topLevel);\r\n break;\r\n case 'extend':\r\n this._parseExtend(topLevel);\r\n break;\r\n default:\r\n throw Error(\"unexpected '\" + token + \"'\");\r\n }\r\n }\r\n } catch (e) {\r\n e.message = \"Parse error at line \"+this.tn.line+\": \" + e.message;\r\n throw e;\r\n }\r\n delete topLevel[\"name\"];\r\n return topLevel;\r\n };\r\n\r\n /**\r\n * Parses the specified source.\r\n * @returns {!Object}\r\n * @throws {Error} If the source cannot be parsed\r\n * @expose\r\n */\r\n Parser.parse = function(source) {\r\n return new Parser(source).parse();\r\n };\r\n\r\n // ----- Conversion ------\r\n\r\n /**\r\n * Converts a numerical string to an id.\r\n * @param {string} value\r\n * @param {boolean=} mayBeNegative\r\n * @returns {number}\r\n * @inner\r\n */\r\n function mkId(value, mayBeNegative) {\r\n var id = -1,\r\n sign = 1;\r\n if (value.charAt(0) == '-') {\r\n sign = -1;\r\n value = value.substring(1);\r\n }\r\n if (Lang.NUMBER_DEC.test(value))\r\n id = parseInt(value);\r\n else if (Lang.NUMBER_HEX.test(value))\r\n id = parseInt(value.substring(2), 16);\r\n else if (Lang.NUMBER_OCT.test(value))\r\n id = parseInt(value.substring(1), 8);\r\n else\r\n throw Error(\"illegal id value: \" + (sign < 0 ? '-' : '') + value);\r\n id = (sign*id)|0; // Force to 32bit\r\n if (!mayBeNegative && id < 0)\r\n throw Error(\"illegal id value: \" + (sign < 0 ? '-' : '') + value);\r\n return id;\r\n }\r\n\r\n /**\r\n * Converts a numerical string to a number.\r\n * @param {string} val\r\n * @returns {number}\r\n * @inner\r\n */\r\n function mkNumber(val) {\r\n var sign = 1;\r\n if (val.charAt(0) == '-') {\r\n sign = -1;\r\n val = val.substring(1);\r\n }\r\n if (Lang.NUMBER_DEC.test(val))\r\n return sign * parseInt(val, 10);\r\n else if (Lang.NUMBER_HEX.test(val))\r\n return sign * parseInt(val.substring(2), 16);\r\n else if (Lang.NUMBER_OCT.test(val))\r\n return sign * parseInt(val.substring(1), 8);\r\n else if (val === 'inf')\r\n return sign * Infinity;\r\n else if (val === 'nan')\r\n return NaN;\r\n else if (Lang.NUMBER_FLT.test(val))\r\n return sign * parseFloat(val);\r\n throw Error(\"illegal number value: \" + (sign < 0 ? '-' : '') + val);\r\n }\r\n\r\n // ----- Reading ------\r\n\r\n /**\r\n * Reads a string.\r\n * @returns {string}\r\n * @private\r\n */\r\n ParserPrototype._readString = function() {\r\n var value = \"\",\r\n token,\r\n delim;\r\n do {\r\n delim = this.tn.next();\r\n if (delim !== \"'\" && delim !== '\"')\r\n throw Error(\"illegal string delimiter: \"+delim);\r\n value += this.tn.next();\r\n this.tn.skip(delim);\r\n token = this.tn.peek();\r\n } while (token === '\"' || token === '\"'); // multi line?\r\n return value;\r\n };\r\n\r\n /**\r\n * Reads a value.\r\n * @param {boolean=} mayBeTypeRef\r\n * @returns {number|boolean|string}\r\n * @private\r\n */\r\n ParserPrototype._readValue = function(mayBeTypeRef) {\r\n var token = this.tn.peek(),\r\n value;\r\n if (token === '\"' || token === \"'\")\r\n return this._readString();\r\n this.tn.next();\r\n if (Lang.NUMBER.test(token))\r\n return mkNumber(token);\r\n if (Lang.BOOL.test(token))\r\n return (token.toLowerCase() === 'true');\r\n if (mayBeTypeRef && Lang.TYPEREF.test(token))\r\n return token;\r\n throw Error(\"illegal value: \"+token);\r\n\r\n };\r\n\r\n // ----- Parsing constructs -----\r\n\r\n /**\r\n * Parses a namespace option.\r\n * @param {!Object} parent Parent definition\r\n * @param {boolean=} isList\r\n * @private\r\n */\r\n ParserPrototype._parseOption = function(parent, isList) {\r\n var token = this.tn.next(),\r\n custom = false;\r\n if (token === '(') {\r\n custom = true;\r\n token = this.tn.next();\r\n }\r\n if (!Lang.TYPEREF.test(token))\r\n // we can allow options of the form google.protobuf.* since they will just get ignored anyways\r\n // if (!/google\\.protobuf\\./.test(token)) // FIXME: Why should that not be a valid typeref?\r\n throw Error(\"illegal option name: \"+token);\r\n var name = token;\r\n if (custom) { // (my_method_option).foo, (my_method_option), some_method_option, (foo.my_option).bar\r\n this.tn.skip(')');\r\n name = '('+name+')';\r\n token = this.tn.peek();\r\n if (Lang.FQTYPEREF.test(token)) {\r\n name += token;\r\n this.tn.next();\r\n }\r\n }\r\n this.tn.skip('=');\r\n this._parseOptionValue(parent, name);\r\n if (!isList)\r\n this.tn.skip(\";\");\r\n };\r\n\r\n /**\r\n * Sets an option on the specified options object.\r\n * @param {!Object.} options\r\n * @param {string} name\r\n * @param {string|number|boolean} value\r\n * @inner\r\n */\r\n function setOption(options, name, value) {\r\n if (typeof options[name] === 'undefined')\r\n options[name] = value;\r\n else {\r\n if (!Array.isArray(options[name]))\r\n options[name] = [ options[name] ];\r\n options[name].push(value);\r\n }\r\n }\r\n\r\n /**\r\n * Parses an option value.\r\n * @param {!Object} parent\r\n * @param {string} name\r\n * @private\r\n */\r\n ParserPrototype._parseOptionValue = function(parent, name) {\r\n var token = this.tn.peek();\r\n if (token !== '{') { // Plain value\r\n setOption(parent[\"options\"], name, this._readValue(true));\r\n } else { // Aggregate options\r\n this.tn.skip(\"{\");\r\n while ((token = this.tn.next()) !== '}') {\r\n if (!Lang.NAME.test(token))\r\n throw Error(\"illegal option name: \" + name + \".\" + token);\r\n if (this.tn.omit(\":\"))\r\n setOption(parent[\"options\"], name + \".\" + token, this._readValue(true));\r\n else\r\n this._parseOptionValue(parent, name + \".\" + token);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Parses a service definition.\r\n * @param {!Object} parent Parent definition\r\n * @private\r\n */\r\n ParserPrototype._parseService = function(parent) {\r\n var token = this.tn.next();\r\n if (!Lang.NAME.test(token))\r\n throw Error(\"illegal service name at line \"+this.tn.line+\": \"+token);\r\n var name = token;\r\n var svc = {\r\n \"name\": name,\r\n \"rpc\": {},\r\n \"options\": {}\r\n };\r\n this.tn.skip(\"{\");\r\n while ((token = this.tn.next()) !== '}') {\r\n if (token === \"option\")\r\n this._parseOption(svc);\r\n else if (token === 'rpc')\r\n this._parseServiceRPC(svc);\r\n else\r\n throw Error(\"illegal service token: \"+token);\r\n }\r\n this.tn.omit(\";\");\r\n parent[\"services\"].push(svc);\r\n };\r\n\r\n /**\r\n * Parses a RPC service definition of the form ['rpc', name, (request), 'returns', (response)].\r\n * @param {!Object} svc Service definition\r\n * @private\r\n */\r\n ParserPrototype._parseServiceRPC = function(svc) {\r\n var type = \"rpc\",\r\n token = this.tn.next();\r\n if (!Lang.NAME.test(token))\r\n throw Error(\"illegal rpc service method name: \"+token);\r\n var name = token;\r\n var method = {\r\n \"request\": null,\r\n \"response\": null,\r\n \"request_stream\": false,\r\n \"response_stream\": false,\r\n \"options\": {}\r\n };\r\n this.tn.skip(\"(\");\r\n token = this.tn.next();\r\n if (token.toLowerCase() === \"stream\") {\r\n method[\"request_stream\"] = true;\r\n token = this.tn.next();\r\n }\r\n if (!Lang.TYPEREF.test(token))\r\n throw Error(\"illegal rpc service request type: \"+token);\r\n method[\"request\"] = token;\r\n this.tn.skip(\")\");\r\n token = this.tn.next();\r\n if (token.toLowerCase() !== \"returns\")\r\n throw Error(\"illegal rpc service request type delimiter: \"+token);\r\n this.tn.skip(\"(\");\r\n token = this.tn.next();\r\n if (token.toLowerCase() === \"stream\") {\r\n method[\"response_stream\"] = true;\r\n token = this.tn.next();\r\n }\r\n method[\"response\"] = token;\r\n this.tn.skip(\")\");\r\n token = this.tn.peek();\r\n if (token === '{') {\r\n this.tn.next();\r\n while ((token = this.tn.next()) !== '}') {\r\n if (token === 'option')\r\n this._parseOption(method);\r\n else\r\n throw Error(\"illegal rpc service token: \" + token);\r\n }\r\n this.tn.omit(\";\");\r\n } else\r\n this.tn.skip(\";\");\r\n if (typeof svc[type] === 'undefined')\r\n svc[type] = {};\r\n svc[type][name] = method;\r\n };\r\n\r\n /**\r\n * Parses a message definition.\r\n * @param {!Object} parent Parent definition\r\n * @param {!Object=} fld Field definition if this is a group\r\n * @returns {!Object}\r\n * @private\r\n */\r\n ParserPrototype._parseMessage = function(parent, fld) {\r\n var isGroup = !!fld,\r\n token = this.tn.next();\r\n var msg = {\r\n \"name\": \"\",\r\n \"fields\": [],\r\n \"enums\": [],\r\n \"messages\": [],\r\n \"options\": {},\r\n \"services\": [],\r\n \"oneofs\": {}\r\n // \"extensions\": undefined\r\n };\r\n if (!Lang.NAME.test(token))\r\n throw Error(\"illegal \"+(isGroup ? \"group\" : \"message\")+\" name: \"+token);\r\n msg[\"name\"] = token;\r\n if (isGroup) {\r\n this.tn.skip(\"=\");\r\n fld[\"id\"] = mkId(this.tn.next());\r\n msg[\"isGroup\"] = true;\r\n }\r\n token = this.tn.peek();\r\n if (token === '[' && fld)\r\n this._parseFieldOptions(fld);\r\n this.tn.skip(\"{\");\r\n while ((token = this.tn.next()) !== '}') {\r\n if (Lang.RULE.test(token))\r\n this._parseMessageField(msg, token);\r\n else if (token === \"oneof\")\r\n this._parseMessageOneOf(msg);\r\n else if (token === \"enum\")\r\n this._parseEnum(msg);\r\n else if (token === \"message\")\r\n this._parseMessage(msg);\r\n else if (token === \"option\")\r\n this._parseOption(msg);\r\n else if (token === \"service\")\r\n this._parseService(msg);\r\n else if (token === \"extensions\")\r\n if (msg.hasOwnProperty(\"extensions\")) {\r\n msg[\"extensions\"] = msg[\"extensions\"].concat(this._parseExtensionRanges())\r\n } else {\r\n msg[\"extensions\"] = this._parseExtensionRanges();\r\n }\r\n else if (token === \"reserved\")\r\n this._parseIgnored(); // TODO\r\n else if (token === \"extend\")\r\n this._parseExtend(msg);\r\n else if (Lang.TYPEREF.test(token)) {\r\n if (!this.proto3)\r\n throw Error(\"illegal field rule: \"+token);\r\n this._parseMessageField(msg, \"optional\", token);\r\n } else\r\n throw Error(\"illegal message token: \"+token);\r\n }\r\n this.tn.omit(\";\");\r\n parent[\"messages\"].push(msg);\r\n return msg;\r\n };\r\n\r\n /**\r\n * Parses an ignored statement.\r\n * @private\r\n */\r\n ParserPrototype._parseIgnored = function() {\r\n while (this.tn.peek() !== ';')\r\n this.tn.next();\r\n this.tn.skip(\";\");\r\n };\r\n\r\n /**\r\n * Parses a message field.\r\n * @param {!Object} msg Message definition\r\n * @param {string} rule Field rule\r\n * @param {string=} type Field type if already known (never known for maps)\r\n * @returns {!Object} Field descriptor\r\n * @private\r\n */\r\n ParserPrototype._parseMessageField = function(msg, rule, type) {\r\n if (!Lang.RULE.test(rule))\r\n throw Error(\"illegal message field rule: \"+rule);\r\n var fld = {\r\n \"rule\": rule,\r\n \"type\": \"\",\r\n \"name\": \"\",\r\n \"options\": {},\r\n \"id\": 0\r\n };\r\n var token;\r\n if (rule === \"map\") {\r\n\r\n if (type)\r\n throw Error(\"illegal type: \" + type);\r\n this.tn.skip('<');\r\n token = this.tn.next();\r\n if (!Lang.TYPE.test(token) && !Lang.TYPEREF.test(token))\r\n throw Error(\"illegal message field type: \" + token);\r\n fld[\"keytype\"] = token;\r\n this.tn.skip(',');\r\n token = this.tn.next();\r\n if (!Lang.TYPE.test(token) && !Lang.TYPEREF.test(token))\r\n throw Error(\"illegal message field: \" + token);\r\n fld[\"type\"] = token;\r\n this.tn.skip('>');\r\n token = this.tn.next();\r\n if (!Lang.NAME.test(token))\r\n throw Error(\"illegal message field name: \" + token);\r\n fld[\"name\"] = token;\r\n this.tn.skip(\"=\");\r\n fld[\"id\"] = mkId(this.tn.next());\r\n token = this.tn.peek();\r\n if (token === '[')\r\n this._parseFieldOptions(fld);\r\n this.tn.skip(\";\");\r\n\r\n } else {\r\n\r\n type = typeof type !== 'undefined' ? type : this.tn.next();\r\n\r\n if (type === \"group\") {\r\n\r\n // \"A [legacy] group simply combines a nested message type and a field into a single declaration. In your\r\n // code, you can treat this message just as if it had a Result type field called result (the latter name is\r\n // converted to lower-case so that it does not conflict with the former).\"\r\n var grp = this._parseMessage(msg, fld);\r\n if (!/^[A-Z]/.test(grp[\"name\"]))\r\n throw Error('illegal group name: '+grp[\"name\"]);\r\n fld[\"type\"] = grp[\"name\"];\r\n fld[\"name\"] = grp[\"name\"].toLowerCase();\r\n this.tn.omit(\";\");\r\n\r\n } else {\r\n\r\n if (!Lang.TYPE.test(type) && !Lang.TYPEREF.test(type))\r\n throw Error(\"illegal message field type: \" + type);\r\n fld[\"type\"] = type;\r\n token = this.tn.next();\r\n if (!Lang.NAME.test(token))\r\n throw Error(\"illegal message field name: \" + token);\r\n fld[\"name\"] = token;\r\n this.tn.skip(\"=\");\r\n fld[\"id\"] = mkId(this.tn.next());\r\n token = this.tn.peek();\r\n if (token === \"[\")\r\n this._parseFieldOptions(fld);\r\n this.tn.skip(\";\");\r\n\r\n }\r\n }\r\n msg[\"fields\"].push(fld);\r\n return fld;\r\n };\r\n\r\n /**\r\n * Parses a message oneof.\r\n * @param {!Object} msg Message definition\r\n * @private\r\n */\r\n ParserPrototype._parseMessageOneOf = function(msg) {\r\n var token = this.tn.next();\r\n if (!Lang.NAME.test(token))\r\n throw Error(\"illegal oneof name: \"+token);\r\n var name = token,\r\n fld;\r\n var fields = [];\r\n this.tn.skip(\"{\");\r\n while ((token = this.tn.next()) !== \"}\") {\r\n fld = this._parseMessageField(msg, \"optional\", token);\r\n fld[\"oneof\"] = name;\r\n fields.push(fld[\"id\"]);\r\n }\r\n this.tn.omit(\";\");\r\n msg[\"oneofs\"][name] = fields;\r\n };\r\n\r\n /**\r\n * Parses a set of field option definitions.\r\n * @param {!Object} fld Field definition\r\n * @private\r\n */\r\n ParserPrototype._parseFieldOptions = function(fld) {\r\n this.tn.skip(\"[\");\r\n var token,\r\n first = true;\r\n while ((token = this.tn.peek()) !== ']') {\r\n if (!first)\r\n this.tn.skip(\",\");\r\n this._parseOption(fld, true);\r\n first = false;\r\n }\r\n this.tn.next();\r\n };\r\n\r\n /**\r\n * Parses an enum.\r\n * @param {!Object} msg Message definition\r\n * @private\r\n */\r\n ParserPrototype._parseEnum = function(msg) {\r\n var enm = {\r\n \"name\": \"\",\r\n \"values\": [],\r\n \"options\": {}\r\n };\r\n var token = this.tn.next();\r\n if (!Lang.NAME.test(token))\r\n throw Error(\"illegal name: \"+token);\r\n enm[\"name\"] = token;\r\n this.tn.skip(\"{\");\r\n while ((token = this.tn.next()) !== '}') {\r\n if (token === \"option\")\r\n this._parseOption(enm);\r\n else {\r\n if (!Lang.NAME.test(token))\r\n throw Error(\"illegal name: \"+token);\r\n this.tn.skip(\"=\");\r\n var val = {\r\n \"name\": token,\r\n \"id\": mkId(this.tn.next(), true)\r\n };\r\n token = this.tn.peek();\r\n if (token === \"[\")\r\n this._parseFieldOptions({ \"options\": {} });\r\n this.tn.skip(\";\");\r\n enm[\"values\"].push(val);\r\n }\r\n }\r\n this.tn.omit(\";\");\r\n msg[\"enums\"].push(enm);\r\n };\r\n\r\n /**\r\n * Parses extension / reserved ranges.\r\n * @returns {!Array.>}\r\n * @private\r\n */\r\n ParserPrototype._parseExtensionRanges = function() {\r\n var ranges = [];\r\n var token,\r\n range,\r\n value;\r\n do {\r\n range = [];\r\n while (true) {\r\n token = this.tn.next();\r\n switch (token) {\r\n case \"min\":\r\n value = ProtoBuf.ID_MIN;\r\n break;\r\n case \"max\":\r\n value = ProtoBuf.ID_MAX;\r\n break;\r\n default:\r\n value = mkNumber(token);\r\n break;\r\n }\r\n range.push(value);\r\n if (range.length === 2)\r\n break;\r\n if (this.tn.peek() !== \"to\") {\r\n range.push(value);\r\n break;\r\n }\r\n this.tn.next();\r\n }\r\n ranges.push(range);\r\n } while (this.tn.omit(\",\"));\r\n this.tn.skip(\";\");\r\n return ranges;\r\n };\r\n\r\n /**\r\n * Parses an extend block.\r\n * @param {!Object} parent Parent object\r\n * @private\r\n */\r\n ParserPrototype._parseExtend = function(parent) {\r\n var token = this.tn.next();\r\n if (!Lang.TYPEREF.test(token))\r\n throw Error(\"illegal extend reference: \"+token);\r\n var ext = {\r\n \"ref\": token,\r\n \"fields\": []\r\n };\r\n this.tn.skip(\"{\");\r\n while ((token = this.tn.next()) !== '}') {\r\n if (Lang.RULE.test(token))\r\n this._parseMessageField(ext, token);\r\n else if (Lang.TYPEREF.test(token)) {\r\n if (!this.proto3)\r\n throw Error(\"illegal field rule: \"+token);\r\n this._parseMessageField(ext, \"optional\", token);\r\n } else\r\n throw Error(\"illegal extend token: \"+token);\r\n }\r\n this.tn.omit(\";\");\r\n parent[\"messages\"].push(ext);\r\n return ext;\r\n };\r\n\r\n // ----- General -----\r\n\r\n /**\r\n * Returns a string representation of this parser.\r\n * @returns {string}\r\n */\r\n ParserPrototype.toString = function() {\r\n return \"Parser at line \"+this.tn.line;\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.DotProto.Parser\r\n * @expose\r\n */\r\n DotProto.Parser = Parser;\r\n\r\n return DotProto;\r\n\r\n })(ProtoBuf, ProtoBuf.Lang);\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect\r\n * @expose\r\n */\r\n ProtoBuf.Reflect = (function(ProtoBuf) {\r\n \"use strict\";\r\n\r\n /**\r\n * Reflection types.\r\n * @exports ProtoBuf.Reflect\r\n * @namespace\r\n */\r\n var Reflect = {};\r\n\r\n /**\r\n * Constructs a Reflect base class.\r\n * @exports ProtoBuf.Reflect.T\r\n * @constructor\r\n * @abstract\r\n * @param {!ProtoBuf.Builder} builder Builder reference\r\n * @param {?ProtoBuf.Reflect.T} parent Parent object\r\n * @param {string} name Object name\r\n */\r\n var T = function(builder, parent, name) {\r\n\r\n /**\r\n * Builder reference.\r\n * @type {!ProtoBuf.Builder}\r\n * @expose\r\n */\r\n this.builder = builder;\r\n\r\n /**\r\n * Parent object.\r\n * @type {?ProtoBuf.Reflect.T}\r\n * @expose\r\n */\r\n this.parent = parent;\r\n\r\n /**\r\n * Object name in namespace.\r\n * @type {string}\r\n * @expose\r\n */\r\n this.name = name;\r\n\r\n /**\r\n * Fully qualified class name\r\n * @type {string}\r\n * @expose\r\n */\r\n this.className;\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.T.prototype\r\n * @inner\r\n */\r\n var TPrototype = T.prototype;\r\n\r\n /**\r\n * Returns the fully qualified name of this object.\r\n * @returns {string} Fully qualified name as of \".PATH.TO.THIS\"\r\n * @expose\r\n */\r\n TPrototype.fqn = function() {\r\n var name = this.name,\r\n ptr = this;\r\n do {\r\n ptr = ptr.parent;\r\n if (ptr == null)\r\n break;\r\n name = ptr.name+\".\"+name;\r\n } while (true);\r\n return name;\r\n };\r\n\r\n /**\r\n * Returns a string representation of this Reflect object (its fully qualified name).\r\n * @param {boolean=} includeClass Set to true to include the class name. Defaults to false.\r\n * @return String representation\r\n * @expose\r\n */\r\n TPrototype.toString = function(includeClass) {\r\n return (includeClass ? this.className + \" \" : \"\") + this.fqn();\r\n };\r\n\r\n /**\r\n * Builds this type.\r\n * @throws {Error} If this type cannot be built directly\r\n * @expose\r\n */\r\n TPrototype.build = function() {\r\n throw Error(this.toString(true)+\" cannot be built directly\");\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.T\r\n * @expose\r\n */\r\n Reflect.T = T;\r\n\r\n /**\r\n * Constructs a new Namespace.\r\n * @exports ProtoBuf.Reflect.Namespace\r\n * @param {!ProtoBuf.Builder} builder Builder reference\r\n * @param {?ProtoBuf.Reflect.Namespace} parent Namespace parent\r\n * @param {string} name Namespace name\r\n * @param {Object.=} options Namespace options\r\n * @param {string?} syntax The syntax level of this definition (e.g., proto3)\r\n * @constructor\r\n * @extends ProtoBuf.Reflect.T\r\n */\r\n var Namespace = function(builder, parent, name, options, syntax) {\r\n T.call(this, builder, parent, name);\r\n\r\n /**\r\n * @override\r\n */\r\n this.className = \"Namespace\";\r\n\r\n /**\r\n * Children inside the namespace.\r\n * @type {!Array.}\r\n */\r\n this.children = [];\r\n\r\n /**\r\n * Options.\r\n * @type {!Object.}\r\n */\r\n this.options = options || {};\r\n\r\n /**\r\n * Syntax level (e.g., proto2 or proto3).\r\n * @type {!string}\r\n */\r\n this.syntax = syntax || \"proto2\";\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Namespace.prototype\r\n * @inner\r\n */\r\n var NamespacePrototype = Namespace.prototype = Object.create(T.prototype);\r\n\r\n /**\r\n * Returns an array of the namespace's children.\r\n * @param {ProtoBuf.Reflect.T=} type Filter type (returns instances of this type only). Defaults to null (all children).\r\n * @return {Array.}\r\n * @expose\r\n */\r\n NamespacePrototype.getChildren = function(type) {\r\n type = type || null;\r\n if (type == null)\r\n return this.children.slice();\r\n var children = [];\r\n for (var i=0, k=this.children.length; i} qn Qualified name to resolve\r\n * @param {boolean=} excludeNonNamespace Excludes non-namespace types, defaults to `false`\r\n * @return {?ProtoBuf.Reflect.Namespace} The resolved type or null if not found\r\n * @expose\r\n */\r\n NamespacePrototype.resolve = function(qn, excludeNonNamespace) {\r\n var part = typeof qn === 'string' ? qn.split(\".\") : qn,\r\n ptr = this,\r\n i = 0;\r\n if (part[i] === \"\") { // Fully qualified name, e.g. \".My.Message'\r\n while (ptr.parent !== null)\r\n ptr = ptr.parent;\r\n i++;\r\n }\r\n var child;\r\n do {\r\n do {\r\n if (!(ptr instanceof Reflect.Namespace)) {\r\n ptr = null;\r\n break;\r\n }\r\n child = ptr.getChild(part[i]);\r\n if (!child || !(child instanceof Reflect.T) || (excludeNonNamespace && !(child instanceof Reflect.Namespace))) {\r\n ptr = null;\r\n break;\r\n }\r\n ptr = child; i++;\r\n } while (i < part.length);\r\n if (ptr != null)\r\n break; // Found\r\n // Else search the parent\r\n if (this.parent !== null)\r\n return this.parent.resolve(qn, excludeNonNamespace);\r\n } while (ptr != null);\r\n return ptr;\r\n };\r\n\r\n /**\r\n * Determines the shortest qualified name of the specified type, if any, relative to this namespace.\r\n * @param {!ProtoBuf.Reflect.T} t Reflection type\r\n * @returns {string} The shortest qualified name or, if there is none, the fqn\r\n * @expose\r\n */\r\n NamespacePrototype.qn = function(t) {\r\n var part = [], ptr = t;\r\n do {\r\n part.unshift(ptr.name);\r\n ptr = ptr.parent;\r\n } while (ptr !== null);\r\n for (var len=1; len <= part.length; len++) {\r\n var qn = part.slice(part.length-len);\r\n if (t === this.resolve(qn, t instanceof Reflect.Namespace))\r\n return qn.join(\".\");\r\n }\r\n return t.fqn();\r\n };\r\n\r\n /**\r\n * Builds the namespace and returns the runtime counterpart.\r\n * @return {Object.} Runtime namespace\r\n * @expose\r\n */\r\n NamespacePrototype.build = function() {\r\n /** @dict */\r\n var ns = {};\r\n var children = this.children;\r\n for (var i=0, k=children.length, child; i}\r\n */\r\n NamespacePrototype.buildOpt = function() {\r\n var opt = {},\r\n keys = Object.keys(this.options);\r\n for (var i=0, k=keys.length; i}null} Option value or NULL if there is no such option\r\n */\r\n NamespacePrototype.getOption = function(name) {\r\n if (typeof name === 'undefined')\r\n return this.options;\r\n return typeof this.options[name] !== 'undefined' ? this.options[name] : null;\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Namespace\r\n * @expose\r\n */\r\n Reflect.Namespace = Namespace;\r\n\r\n /**\r\n * Constructs a new Element implementation that checks and converts values for a\r\n * particular field type, as appropriate.\r\n *\r\n * An Element represents a single value: either the value of a singular field,\r\n * or a value contained in one entry of a repeated field or map field. This\r\n * class does not implement these higher-level concepts; it only encapsulates\r\n * the low-level typechecking and conversion.\r\n *\r\n * @exports ProtoBuf.Reflect.Element\r\n * @param {{name: string, wireType: number}} type Resolved data type\r\n * @param {ProtoBuf.Reflect.T|null} resolvedType Resolved type, if relevant\r\n * (e.g. submessage field).\r\n * @param {boolean} isMapKey Is this element a Map key? The value will be\r\n * converted to string form if so.\r\n * @param {string} syntax Syntax level of defining message type, e.g.,\r\n * proto2 or proto3.\r\n * @param {string} name Name of the field containing this element (for error\r\n * messages)\r\n * @constructor\r\n */\r\n var Element = function(type, resolvedType, isMapKey, syntax, name) {\r\n\r\n /**\r\n * Element type, as a string (e.g., int32).\r\n * @type {{name: string, wireType: number}}\r\n */\r\n this.type = type;\r\n\r\n /**\r\n * Element type reference to submessage or enum definition, if needed.\r\n * @type {ProtoBuf.Reflect.T|null}\r\n */\r\n this.resolvedType = resolvedType;\r\n\r\n /**\r\n * Element is a map key.\r\n * @type {boolean}\r\n */\r\n this.isMapKey = isMapKey;\r\n\r\n /**\r\n * Syntax level of defining message type, e.g., proto2 or proto3.\r\n * @type {string}\r\n */\r\n this.syntax = syntax;\r\n\r\n /**\r\n * Name of the field containing this element (for error messages)\r\n * @type {string}\r\n */\r\n this.name = name;\r\n\r\n if (isMapKey && ProtoBuf.MAP_KEY_TYPES.indexOf(type) < 0)\r\n throw Error(\"Invalid map key type: \" + type.name);\r\n };\r\n\r\n var ElementPrototype = Element.prototype;\r\n\r\n /**\r\n * Obtains a (new) default value for the specified type.\r\n * @param type {string|{name: string, wireType: number}} Field type\r\n * @returns {*} Default value\r\n * @inner\r\n */\r\n function mkDefault(type) {\r\n if (typeof type === 'string')\r\n type = ProtoBuf.TYPES[type];\r\n if (typeof type.defaultValue === 'undefined')\r\n throw Error(\"default value for type \"+type.name+\" is not supported\");\r\n if (type == ProtoBuf.TYPES[\"bytes\"])\r\n return new ByteBuffer(0);\r\n return type.defaultValue;\r\n }\r\n\r\n /**\r\n * Returns the default value for this field in proto3.\r\n * @function\r\n * @param type {string|{name: string, wireType: number}} the field type\r\n * @returns {*} Default value\r\n */\r\n Element.defaultFieldValue = mkDefault;\r\n\r\n /**\r\n * Makes a Long from a value.\r\n * @param {{low: number, high: number, unsigned: boolean}|string|number} value Value\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to reuse it from Long-like objects or to signed for\r\n * strings and numbers\r\n * @returns {!Long}\r\n * @throws {Error} If the value cannot be converted to a Long\r\n * @inner\r\n */\r\n function mkLong(value, unsigned) {\r\n if (value && typeof value.low === 'number' && typeof value.high === 'number' && typeof value.unsigned === 'boolean'\r\n && value.low === value.low && value.high === value.high)\r\n return new ProtoBuf.Long(value.low, value.high, typeof unsigned === 'undefined' ? value.unsigned : unsigned);\r\n if (typeof value === 'string')\r\n return ProtoBuf.Long.fromString(value, unsigned || false, 10);\r\n if (typeof value === 'number')\r\n return ProtoBuf.Long.fromNumber(value, unsigned || false);\r\n throw Error(\"not convertible to Long\");\r\n }\r\n\r\n ElementPrototype.toString = function() {\r\n return (this.name || '') + (this.isMapKey ? 'map' : 'value') + ' element';\r\n }\r\n\r\n /**\r\n * Checks if the given value can be set for an element of this type (singular\r\n * field or one element of a repeated field or map).\r\n * @param {*} value Value to check\r\n * @return {*} Verified, maybe adjusted, value\r\n * @throws {Error} If the value cannot be verified for this element slot\r\n * @expose\r\n */\r\n ElementPrototype.verifyValue = function(value) {\r\n var self = this;\r\n function fail(val, msg) {\r\n throw Error(\"Illegal value for \"+self.toString(true)+\" of type \"+self.type.name+\": \"+val+\" (\"+msg+\")\");\r\n }\r\n switch (this.type) {\r\n // Signed 32bit\r\n case ProtoBuf.TYPES[\"int32\"]:\r\n case ProtoBuf.TYPES[\"sint32\"]:\r\n case ProtoBuf.TYPES[\"sfixed32\"]:\r\n // Account for !NaN: value === value\r\n if (typeof value !== 'number' || (value === value && value % 1 !== 0))\r\n fail(typeof value, \"not an integer\");\r\n return value > 4294967295 ? value | 0 : value;\r\n\r\n // Unsigned 32bit\r\n case ProtoBuf.TYPES[\"uint32\"]:\r\n case ProtoBuf.TYPES[\"fixed32\"]:\r\n if (typeof value !== 'number' || (value === value && value % 1 !== 0))\r\n fail(typeof value, \"not an integer\");\r\n return value < 0 ? value >>> 0 : value;\r\n\r\n // Signed 64bit\r\n case ProtoBuf.TYPES[\"int64\"]:\r\n case ProtoBuf.TYPES[\"sint64\"]:\r\n case ProtoBuf.TYPES[\"sfixed64\"]: {\r\n if (ProtoBuf.Long)\r\n try {\r\n return mkLong(value, false);\r\n } catch (e) {\r\n fail(typeof value, e.message);\r\n }\r\n else\r\n fail(typeof value, \"requires Long.js\");\r\n }\r\n\r\n // Unsigned 64bit\r\n case ProtoBuf.TYPES[\"uint64\"]:\r\n case ProtoBuf.TYPES[\"fixed64\"]: {\r\n if (ProtoBuf.Long)\r\n try {\r\n return mkLong(value, true);\r\n } catch (e) {\r\n fail(typeof value, e.message);\r\n }\r\n else\r\n fail(typeof value, \"requires Long.js\");\r\n }\r\n\r\n // Bool\r\n case ProtoBuf.TYPES[\"bool\"]:\r\n if (typeof value !== 'boolean')\r\n fail(typeof value, \"not a boolean\");\r\n return value;\r\n\r\n // Float\r\n case ProtoBuf.TYPES[\"float\"]:\r\n case ProtoBuf.TYPES[\"double\"]:\r\n if (typeof value !== 'number')\r\n fail(typeof value, \"not a number\");\r\n return value;\r\n\r\n // Length-delimited string\r\n case ProtoBuf.TYPES[\"string\"]:\r\n if (typeof value !== 'string' && !(value && value instanceof String))\r\n fail(typeof value, \"not a string\");\r\n return \"\"+value; // Convert String object to string\r\n\r\n // Length-delimited bytes\r\n case ProtoBuf.TYPES[\"bytes\"]:\r\n if (ByteBuffer.isByteBuffer(value))\r\n return value;\r\n return ByteBuffer.wrap(value, \"base64\");\r\n\r\n // Constant enum value\r\n case ProtoBuf.TYPES[\"enum\"]: {\r\n var values = this.resolvedType.getChildren(ProtoBuf.Reflect.Enum.Value);\r\n for (i=0; i 4294967295 || value < 0)\r\n fail(typeof value, \"not in range for uint32\")\r\n return value;\r\n } else {\r\n // proto2 requires enum values to be valid.\r\n fail(value, \"not a valid enum value\");\r\n }\r\n }\r\n // Embedded message\r\n case ProtoBuf.TYPES[\"group\"]:\r\n case ProtoBuf.TYPES[\"message\"]: {\r\n if (!value || typeof value !== 'object')\r\n fail(typeof value, \"object expected\");\r\n if (value instanceof this.resolvedType.clazz)\r\n return value;\r\n if (value instanceof ProtoBuf.Builder.Message) {\r\n // Mismatched type: Convert to object (see: https://github.com/dcodeIO/ProtoBuf.js/issues/180)\r\n var obj = {};\r\n for (var i in value)\r\n if (value.hasOwnProperty(i))\r\n obj[i] = value[i];\r\n value = obj;\r\n }\r\n // Else let's try to construct one from a key-value object\r\n return new (this.resolvedType.clazz)(value); // May throw for a hundred of reasons\r\n }\r\n }\r\n\r\n // We should never end here\r\n throw Error(\"[INTERNAL] Illegal value for \"+this.toString(true)+\": \"+value+\" (undefined type \"+this.type+\")\");\r\n };\r\n\r\n /**\r\n * Calculates the byte length of an element on the wire.\r\n * @param {number} id Field number\r\n * @param {*} value Field value\r\n * @returns {number} Byte length\r\n * @throws {Error} If the value cannot be calculated\r\n * @expose\r\n */\r\n ElementPrototype.calculateLength = function(id, value) {\r\n if (value === null) return 0; // Nothing to encode\r\n // Tag has already been written\r\n var n;\r\n switch (this.type) {\r\n case ProtoBuf.TYPES[\"int32\"]:\r\n return value < 0 ? ByteBuffer.calculateVarint64(value) : ByteBuffer.calculateVarint32(value);\r\n case ProtoBuf.TYPES[\"uint32\"]:\r\n return ByteBuffer.calculateVarint32(value);\r\n case ProtoBuf.TYPES[\"sint32\"]:\r\n return ByteBuffer.calculateVarint32(ByteBuffer.zigZagEncode32(value));\r\n case ProtoBuf.TYPES[\"fixed32\"]:\r\n case ProtoBuf.TYPES[\"sfixed32\"]:\r\n case ProtoBuf.TYPES[\"float\"]:\r\n return 4;\r\n case ProtoBuf.TYPES[\"int64\"]:\r\n case ProtoBuf.TYPES[\"uint64\"]:\r\n return ByteBuffer.calculateVarint64(value);\r\n case ProtoBuf.TYPES[\"sint64\"]:\r\n return ByteBuffer.calculateVarint64(ByteBuffer.zigZagEncode64(value));\r\n case ProtoBuf.TYPES[\"fixed64\"]:\r\n case ProtoBuf.TYPES[\"sfixed64\"]:\r\n return 8;\r\n case ProtoBuf.TYPES[\"bool\"]:\r\n return 1;\r\n case ProtoBuf.TYPES[\"enum\"]:\r\n return ByteBuffer.calculateVarint32(value);\r\n case ProtoBuf.TYPES[\"double\"]:\r\n return 8;\r\n case ProtoBuf.TYPES[\"string\"]:\r\n n = ByteBuffer.calculateUTF8Bytes(value);\r\n return ByteBuffer.calculateVarint32(n) + n;\r\n case ProtoBuf.TYPES[\"bytes\"]:\r\n if (value.remaining() < 0)\r\n throw Error(\"Illegal value for \"+this.toString(true)+\": \"+value.remaining()+\" bytes remaining\");\r\n return ByteBuffer.calculateVarint32(value.remaining()) + value.remaining();\r\n case ProtoBuf.TYPES[\"message\"]:\r\n n = this.resolvedType.calculate(value);\r\n return ByteBuffer.calculateVarint32(n) + n;\r\n case ProtoBuf.TYPES[\"group\"]:\r\n n = this.resolvedType.calculate(value);\r\n return n + ByteBuffer.calculateVarint32((id << 3) | ProtoBuf.WIRE_TYPES.ENDGROUP);\r\n }\r\n // We should never end here\r\n throw Error(\"[INTERNAL] Illegal value to encode in \"+this.toString(true)+\": \"+value+\" (unknown type)\");\r\n };\r\n\r\n /**\r\n * Encodes a value to the specified buffer. Does not encode the key.\r\n * @param {number} id Field number\r\n * @param {*} value Field value\r\n * @param {ByteBuffer} buffer ByteBuffer to encode to\r\n * @return {ByteBuffer} The ByteBuffer for chaining\r\n * @throws {Error} If the value cannot be encoded\r\n * @expose\r\n */\r\n ElementPrototype.encodeValue = function(id, value, buffer) {\r\n if (value === null) return buffer; // Nothing to encode\r\n // Tag has already been written\r\n\r\n switch (this.type) {\r\n // 32bit signed varint\r\n case ProtoBuf.TYPES[\"int32\"]:\r\n // \"If you use int32 or int64 as the type for a negative number, the resulting varint is always ten bytes\r\n // long – it is, effectively, treated like a very large unsigned integer.\" (see #122)\r\n if (value < 0)\r\n buffer.writeVarint64(value);\r\n else\r\n buffer.writeVarint32(value);\r\n break;\r\n\r\n // 32bit unsigned varint\r\n case ProtoBuf.TYPES[\"uint32\"]:\r\n buffer.writeVarint32(value);\r\n break;\r\n\r\n // 32bit varint zig-zag\r\n case ProtoBuf.TYPES[\"sint32\"]:\r\n buffer.writeVarint32ZigZag(value);\r\n break;\r\n\r\n // Fixed unsigned 32bit\r\n case ProtoBuf.TYPES[\"fixed32\"]:\r\n buffer.writeUint32(value);\r\n break;\r\n\r\n // Fixed signed 32bit\r\n case ProtoBuf.TYPES[\"sfixed32\"]:\r\n buffer.writeInt32(value);\r\n break;\r\n\r\n // 64bit varint as-is\r\n case ProtoBuf.TYPES[\"int64\"]:\r\n case ProtoBuf.TYPES[\"uint64\"]:\r\n buffer.writeVarint64(value); // throws\r\n break;\r\n\r\n // 64bit varint zig-zag\r\n case ProtoBuf.TYPES[\"sint64\"]:\r\n buffer.writeVarint64ZigZag(value); // throws\r\n break;\r\n\r\n // Fixed unsigned 64bit\r\n case ProtoBuf.TYPES[\"fixed64\"]:\r\n buffer.writeUint64(value); // throws\r\n break;\r\n\r\n // Fixed signed 64bit\r\n case ProtoBuf.TYPES[\"sfixed64\"]:\r\n buffer.writeInt64(value); // throws\r\n break;\r\n\r\n // Bool\r\n case ProtoBuf.TYPES[\"bool\"]:\r\n if (typeof value === 'string')\r\n buffer.writeVarint32(value.toLowerCase() === 'false' ? 0 : !!value);\r\n else\r\n buffer.writeVarint32(value ? 1 : 0);\r\n break;\r\n\r\n // Constant enum value\r\n case ProtoBuf.TYPES[\"enum\"]:\r\n buffer.writeVarint32(value);\r\n break;\r\n\r\n // 32bit float\r\n case ProtoBuf.TYPES[\"float\"]:\r\n buffer.writeFloat32(value);\r\n break;\r\n\r\n // 64bit float\r\n case ProtoBuf.TYPES[\"double\"]:\r\n buffer.writeFloat64(value);\r\n break;\r\n\r\n // Length-delimited string\r\n case ProtoBuf.TYPES[\"string\"]:\r\n buffer.writeVString(value);\r\n break;\r\n\r\n // Length-delimited bytes\r\n case ProtoBuf.TYPES[\"bytes\"]:\r\n if (value.remaining() < 0)\r\n throw Error(\"Illegal value for \"+this.toString(true)+\": \"+value.remaining()+\" bytes remaining\");\r\n var prevOffset = value.offset;\r\n buffer.writeVarint32(value.remaining());\r\n buffer.append(value);\r\n value.offset = prevOffset;\r\n break;\r\n\r\n // Embedded message\r\n case ProtoBuf.TYPES[\"message\"]:\r\n var bb = new ByteBuffer().LE();\r\n this.resolvedType.encode(value, bb);\r\n buffer.writeVarint32(bb.offset);\r\n buffer.append(bb.flip());\r\n break;\r\n\r\n // Legacy group\r\n case ProtoBuf.TYPES[\"group\"]:\r\n this.resolvedType.encode(value, buffer);\r\n buffer.writeVarint32((id << 3) | ProtoBuf.WIRE_TYPES.ENDGROUP);\r\n break;\r\n\r\n default:\r\n // We should never end here\r\n throw Error(\"[INTERNAL] Illegal value to encode in \"+this.toString(true)+\": \"+value+\" (unknown type)\");\r\n }\r\n return buffer;\r\n };\r\n\r\n /**\r\n * Decode one element value from the specified buffer.\r\n * @param {ByteBuffer} buffer ByteBuffer to decode from\r\n * @param {number} wireType The field wire type\r\n * @param {number} id The field number\r\n * @return {*} Decoded value\r\n * @throws {Error} If the field cannot be decoded\r\n * @expose\r\n */\r\n ElementPrototype.decode = function(buffer, wireType, id) {\r\n if (wireType != this.type.wireType)\r\n throw Error(\"Unexpected wire type for element\");\r\n\r\n var value, nBytes;\r\n switch (this.type) {\r\n // 32bit signed varint\r\n case ProtoBuf.TYPES[\"int32\"]:\r\n return buffer.readVarint32() | 0;\r\n\r\n // 32bit unsigned varint\r\n case ProtoBuf.TYPES[\"uint32\"]:\r\n return buffer.readVarint32() >>> 0;\r\n\r\n // 32bit signed varint zig-zag\r\n case ProtoBuf.TYPES[\"sint32\"]:\r\n return buffer.readVarint32ZigZag() | 0;\r\n\r\n // Fixed 32bit unsigned\r\n case ProtoBuf.TYPES[\"fixed32\"]:\r\n return buffer.readUint32() >>> 0;\r\n\r\n case ProtoBuf.TYPES[\"sfixed32\"]:\r\n return buffer.readInt32() | 0;\r\n\r\n // 64bit signed varint\r\n case ProtoBuf.TYPES[\"int64\"]:\r\n return buffer.readVarint64();\r\n\r\n // 64bit unsigned varint\r\n case ProtoBuf.TYPES[\"uint64\"]:\r\n return buffer.readVarint64().toUnsigned();\r\n\r\n // 64bit signed varint zig-zag\r\n case ProtoBuf.TYPES[\"sint64\"]:\r\n return buffer.readVarint64ZigZag();\r\n\r\n // Fixed 64bit unsigned\r\n case ProtoBuf.TYPES[\"fixed64\"]:\r\n return buffer.readUint64();\r\n\r\n // Fixed 64bit signed\r\n case ProtoBuf.TYPES[\"sfixed64\"]:\r\n return buffer.readInt64();\r\n\r\n // Bool varint\r\n case ProtoBuf.TYPES[\"bool\"]:\r\n return !!buffer.readVarint32();\r\n\r\n // Constant enum value (varint)\r\n case ProtoBuf.TYPES[\"enum\"]:\r\n // The following Builder.Message#set will already throw\r\n return buffer.readVarint32();\r\n\r\n // 32bit float\r\n case ProtoBuf.TYPES[\"float\"]:\r\n return buffer.readFloat();\r\n\r\n // 64bit float\r\n case ProtoBuf.TYPES[\"double\"]:\r\n return buffer.readDouble();\r\n\r\n // Length-delimited string\r\n case ProtoBuf.TYPES[\"string\"]:\r\n return buffer.readVString();\r\n\r\n // Length-delimited bytes\r\n case ProtoBuf.TYPES[\"bytes\"]: {\r\n nBytes = buffer.readVarint32();\r\n if (buffer.remaining() < nBytes)\r\n throw Error(\"Illegal number of bytes for \"+this.toString(true)+\": \"+nBytes+\" required but got only \"+buffer.remaining());\r\n value = buffer.clone(); // Offset already set\r\n value.limit = value.offset+nBytes;\r\n buffer.offset += nBytes;\r\n return value;\r\n }\r\n\r\n // Length-delimited embedded message\r\n case ProtoBuf.TYPES[\"message\"]: {\r\n nBytes = buffer.readVarint32();\r\n return this.resolvedType.decode(buffer, nBytes);\r\n }\r\n\r\n // Legacy group\r\n case ProtoBuf.TYPES[\"group\"]:\r\n return this.resolvedType.decode(buffer, -1, id);\r\n }\r\n\r\n // We should never end here\r\n throw Error(\"[INTERNAL] Illegal decode type\");\r\n };\r\n\r\n /**\r\n * Converts a value from a string to the canonical element type.\r\n *\r\n * Legal only when isMapKey is true.\r\n *\r\n * @param {string} str The string value\r\n * @returns {*} The value\r\n */\r\n ElementPrototype.valueFromString = function(str) {\r\n if (!this.isMapKey) {\r\n throw Error(\"valueFromString() called on non-map-key element\");\r\n }\r\n\r\n switch (this.type) {\r\n case ProtoBuf.TYPES[\"int32\"]:\r\n case ProtoBuf.TYPES[\"sint32\"]:\r\n case ProtoBuf.TYPES[\"sfixed32\"]:\r\n case ProtoBuf.TYPES[\"uint32\"]:\r\n case ProtoBuf.TYPES[\"fixed32\"]:\r\n return this.verifyValue(parseInt(str));\r\n\r\n case ProtoBuf.TYPES[\"int64\"]:\r\n case ProtoBuf.TYPES[\"sint64\"]:\r\n case ProtoBuf.TYPES[\"sfixed64\"]:\r\n case ProtoBuf.TYPES[\"uint64\"]:\r\n case ProtoBuf.TYPES[\"fixed64\"]:\r\n // Long-based fields support conversions from string already.\r\n return this.verifyValue(str);\r\n\r\n case ProtoBuf.TYPES[\"bool\"]:\r\n return str === \"true\";\r\n\r\n case ProtoBuf.TYPES[\"string\"]:\r\n return this.verifyValue(str);\r\n\r\n case ProtoBuf.TYPES[\"bytes\"]:\r\n return ByteBuffer.fromBinary(str);\r\n }\r\n };\r\n\r\n /**\r\n * Converts a value from the canonical element type to a string.\r\n *\r\n * It should be the case that `valueFromString(valueToString(val))` returns\r\n * a value equivalent to `verifyValue(val)` for every legal value of `val`\r\n * according to this element type.\r\n *\r\n * This may be used when the element must be stored or used as a string,\r\n * e.g., as a map key on an Object.\r\n *\r\n * Legal only when isMapKey is true.\r\n *\r\n * @param {*} val The value\r\n * @returns {string} The string form of the value.\r\n */\r\n ElementPrototype.valueToString = function(value) {\r\n if (!this.isMapKey) {\r\n throw Error(\"valueToString() called on non-map-key element\");\r\n }\r\n\r\n if (this.type === ProtoBuf.TYPES[\"bytes\"]) {\r\n return value.toString(\"binary\");\r\n } else {\r\n return value.toString();\r\n }\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Element\r\n * @expose\r\n */\r\n Reflect.Element = Element;\r\n\r\n /**\r\n * Constructs a new Message.\r\n * @exports ProtoBuf.Reflect.Message\r\n * @param {!ProtoBuf.Builder} builder Builder reference\r\n * @param {!ProtoBuf.Reflect.Namespace} parent Parent message or namespace\r\n * @param {string} name Message name\r\n * @param {Object.=} options Message options\r\n * @param {boolean=} isGroup `true` if this is a legacy group\r\n * @param {string?} syntax The syntax level of this definition (e.g., proto3)\r\n * @constructor\r\n * @extends ProtoBuf.Reflect.Namespace\r\n */\r\n var Message = function(builder, parent, name, options, isGroup, syntax) {\r\n Namespace.call(this, builder, parent, name, options, syntax);\r\n\r\n /**\r\n * @override\r\n */\r\n this.className = \"Message\";\r\n\r\n /**\r\n * Extensions range.\r\n * @type {!Array.|undefined}\r\n * @expose\r\n */\r\n this.extensions = undefined;\r\n\r\n /**\r\n * Runtime message class.\r\n * @type {?function(new:ProtoBuf.Builder.Message)}\r\n * @expose\r\n */\r\n this.clazz = null;\r\n\r\n /**\r\n * Whether this is a legacy group or not.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n this.isGroup = !!isGroup;\r\n\r\n // The following cached collections are used to efficiently iterate over or look up fields when decoding.\r\n\r\n /**\r\n * Cached fields.\r\n * @type {?Array.}\r\n * @private\r\n */\r\n this._fields = null;\r\n\r\n /**\r\n * Cached fields by id.\r\n * @type {?Object.}\r\n * @private\r\n */\r\n this._fieldsById = null;\r\n\r\n /**\r\n * Cached fields by name.\r\n * @type {?Object.}\r\n * @private\r\n */\r\n this._fieldsByName = null;\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Message.prototype\r\n * @inner\r\n */\r\n var MessagePrototype = Message.prototype = Object.create(Namespace.prototype);\r\n\r\n /**\r\n * Builds the message and returns the runtime counterpart, which is a fully functional class.\r\n * @see ProtoBuf.Builder.Message\r\n * @param {boolean=} rebuild Whether to rebuild or not, defaults to false\r\n * @return {ProtoBuf.Reflect.Message} Message class\r\n * @throws {Error} If the message cannot be built\r\n * @expose\r\n */\r\n MessagePrototype.build = function(rebuild) {\r\n if (this.clazz && !rebuild)\r\n return this.clazz;\r\n\r\n // Create the runtime Message class in its own scope\r\n var clazz = (function(ProtoBuf, T) {\r\n\r\n var fields = T.getChildren(ProtoBuf.Reflect.Message.Field),\r\n oneofs = T.getChildren(ProtoBuf.Reflect.Message.OneOf);\r\n\r\n /**\r\n * Constructs a new runtime Message.\r\n * @name ProtoBuf.Builder.Message\r\n * @class Barebone of all runtime messages.\r\n * @param {!Object.|string} values Preset values\r\n * @param {...string} var_args\r\n * @constructor\r\n * @throws {Error} If the message cannot be created\r\n */\r\n var Message = function(values, var_args) {\r\n ProtoBuf.Builder.Message.call(this);\r\n\r\n // Create virtual oneof properties\r\n for (var i=0, k=oneofs.length; i 0) {\r\n var value;\r\n // Set field values from a values object\r\n if (arguments.length === 1 && values !== null && typeof values === 'object' &&\r\n /* not _another_ Message */ (typeof values.encode !== 'function' || values instanceof Message) &&\r\n /* not a repeated field */ !Array.isArray(values) &&\r\n /* not a Map */ !(values instanceof ProtoBuf.Map) &&\r\n /* not a ByteBuffer */ !ByteBuffer.isByteBuffer(values) &&\r\n /* not an ArrayBuffer */ !(values instanceof ArrayBuffer) &&\r\n /* not a Long */ !(ProtoBuf.Long && values instanceof ProtoBuf.Long)) {\r\n this.$set(values);\r\n } else // Set field values from arguments, in declaration order\r\n for (i=0, k=arguments.length; i} keyOrObj String key or plain object holding multiple values\r\n * @param {(*|boolean)=} value Value to set if key is a string, otherwise omitted\r\n * @param {boolean=} noAssert Whether to not assert for an actual field / proper value type, defaults to `false`\r\n * @returns {!ProtoBuf.Builder.Message} this\r\n * @throws {Error} If the value cannot be set\r\n * @expose\r\n */\r\n MessagePrototype.set = function(keyOrObj, value, noAssert) {\r\n if (keyOrObj && typeof keyOrObj === 'object') {\r\n noAssert = value;\r\n for (var ikey in keyOrObj) {\r\n // Check if virtual oneof field - don't set these\r\n if (keyOrObj.hasOwnProperty(ikey) && typeof (value = keyOrObj[ikey]) !== 'undefined' && T._oneofsByName[ikey] === undefined)\r\n this.$set(ikey, value, noAssert);\r\n }\r\n return this;\r\n }\r\n var field = T._fieldsByName[keyOrObj];\r\n if (!noAssert) {\r\n if (!field)\r\n throw Error(this+\"#\"+keyOrObj+\" is not a field: undefined\");\r\n if (!(field instanceof ProtoBuf.Reflect.Message.Field))\r\n throw Error(this+\"#\"+keyOrObj+\" is not a field: \"+field.toString(true));\r\n this[field.name] = (value = field.verifyValue(value)); // May throw\r\n } else\r\n this[keyOrObj] = value;\r\n if (field && field.oneof) { // Field is part of an OneOf (not a virtual OneOf field)\r\n var currentField = this[field.oneof.name]; // Virtual field references currently set field\r\n if (value !== null) {\r\n if (currentField !== null && currentField !== field.name)\r\n this[currentField] = null; // Clear currently set field\r\n this[field.oneof.name] = field.name; // Point virtual field at this field\r\n } else if (/* value === null && */currentField === keyOrObj)\r\n this[field.oneof.name] = null; // Clear virtual field (current field explicitly cleared)\r\n }\r\n return this;\r\n };\r\n\r\n /**\r\n * Sets a field's value. This is an alias for [@link ProtoBuf.Builder.Message#set}.\r\n * @name ProtoBuf.Builder.Message#$set\r\n * @function\r\n * @param {string|!Object.} keyOrObj String key or plain object holding multiple values\r\n * @param {(*|boolean)=} value Value to set if key is a string, otherwise omitted\r\n * @param {boolean=} noAssert Whether to not assert the value, defaults to `false`\r\n * @throws {Error} If the value cannot be set\r\n * @expose\r\n */\r\n MessagePrototype.$set = MessagePrototype.set;\r\n\r\n /**\r\n * Gets a field's value.\r\n * @name ProtoBuf.Builder.Message#get\r\n * @function\r\n * @param {string} key Key\r\n * @param {boolean=} noAssert Whether to not assert for an actual field, defaults to `false`\r\n * @return {*} Value\r\n * @throws {Error} If there is no such field\r\n * @expose\r\n */\r\n MessagePrototype.get = function(key, noAssert) {\r\n if (noAssert)\r\n return this[key];\r\n var field = T._fieldsByName[key];\r\n if (!field || !(field instanceof ProtoBuf.Reflect.Message.Field))\r\n throw Error(this+\"#\"+key+\" is not a field: undefined\");\r\n if (!(field instanceof ProtoBuf.Reflect.Message.Field))\r\n throw Error(this+\"#\"+key+\" is not a field: \"+field.toString(true));\r\n return this[field.name];\r\n };\r\n\r\n /**\r\n * Gets a field's value. This is an alias for {@link ProtoBuf.Builder.Message#$get}.\r\n * @name ProtoBuf.Builder.Message#$get\r\n * @function\r\n * @param {string} key Key\r\n * @return {*} Value\r\n * @throws {Error} If there is no such field\r\n * @expose\r\n */\r\n MessagePrototype.$get = MessagePrototype.get;\r\n\r\n // Getters and setters\r\n\r\n for (var i=0; i} data Data payload\r\n * @param {(!ByteBuffer|boolean)=} buffer ByteBuffer to encode to. Will create a new one and flip it if omitted.\r\n * @param {boolean=} noVerify Whether to not verify field values, defaults to `false`\r\n * @return {!ByteBuffer} Encoded message as a ByteBuffer\r\n * @expose\r\n */\r\n Message.encode = function(data, buffer, noVerify) {\r\n return new Message(data).encode(buffer, noVerify);\r\n };\r\n\r\n /**\r\n * Calculates the byte length of the message.\r\n * @name ProtoBuf.Builder.Message#calculate\r\n * @function\r\n * @returns {number} Byte length\r\n * @throws {Error} If the message cannot be calculated or if required fields are missing.\r\n * @expose\r\n */\r\n MessagePrototype.calculate = function() {\r\n return T.calculate(this);\r\n };\r\n\r\n /**\r\n * Encodes the varint32 length-delimited message.\r\n * @name ProtoBuf.Builder.Message#encodeDelimited\r\n * @function\r\n * @param {(!ByteBuffer|boolean)=} buffer ByteBuffer to encode to. Will create a new one and flip it if omitted.\r\n * @param {boolean=} noVerify Whether to not verify field values, defaults to `false`\r\n * @return {!ByteBuffer} Encoded message as a ByteBuffer\r\n * @throws {Error} If the message cannot be encoded or if required fields are missing. The later still\r\n * returns the encoded ByteBuffer in the `encoded` property on the error.\r\n * @expose\r\n */\r\n MessagePrototype.encodeDelimited = function(buffer, noVerify) {\r\n var isNew = false;\r\n if (!buffer)\r\n buffer = new ByteBuffer(),\r\n isNew = true;\r\n var enc = new ByteBuffer().LE();\r\n T.encode(this, enc, noVerify).flip();\r\n buffer.writeVarint32(enc.remaining());\r\n buffer.append(enc);\r\n return isNew ? buffer.flip() : buffer;\r\n };\r\n\r\n /**\r\n * Directly encodes the message to an ArrayBuffer.\r\n * @name ProtoBuf.Builder.Message#encodeAB\r\n * @function\r\n * @return {ArrayBuffer} Encoded message as ArrayBuffer\r\n * @throws {Error} If the message cannot be encoded or if required fields are missing. The later still\r\n * returns the encoded ArrayBuffer in the `encoded` property on the error.\r\n * @expose\r\n */\r\n MessagePrototype.encodeAB = function() {\r\n try {\r\n return this.encode().toArrayBuffer();\r\n } catch (e) {\r\n if (e[\"encoded\"]) e[\"encoded\"] = e[\"encoded\"].toArrayBuffer();\r\n throw(e);\r\n }\r\n };\r\n\r\n /**\r\n * Returns the message as an ArrayBuffer. This is an alias for {@link ProtoBuf.Builder.Message#encodeAB}.\r\n * @name ProtoBuf.Builder.Message#toArrayBuffer\r\n * @function\r\n * @return {ArrayBuffer} Encoded message as ArrayBuffer\r\n * @throws {Error} If the message cannot be encoded or if required fields are missing. The later still\r\n * returns the encoded ArrayBuffer in the `encoded` property on the error.\r\n * @expose\r\n */\r\n MessagePrototype.toArrayBuffer = MessagePrototype.encodeAB;\r\n\r\n /**\r\n * Directly encodes the message to a node Buffer.\r\n * @name ProtoBuf.Builder.Message#encodeNB\r\n * @function\r\n * @return {!Buffer}\r\n * @throws {Error} If the message cannot be encoded, not running under node.js or if required fields are\r\n * missing. The later still returns the encoded node Buffer in the `encoded` property on the error.\r\n * @expose\r\n */\r\n MessagePrototype.encodeNB = function() {\r\n try {\r\n return this.encode().toBuffer();\r\n } catch (e) {\r\n if (e[\"encoded\"]) e[\"encoded\"] = e[\"encoded\"].toBuffer();\r\n throw(e);\r\n }\r\n };\r\n\r\n /**\r\n * Returns the message as a node Buffer. This is an alias for {@link ProtoBuf.Builder.Message#encodeNB}.\r\n * @name ProtoBuf.Builder.Message#toBuffer\r\n * @function\r\n * @return {!Buffer}\r\n * @throws {Error} If the message cannot be encoded or if required fields are missing. The later still\r\n * returns the encoded node Buffer in the `encoded` property on the error.\r\n * @expose\r\n */\r\n MessagePrototype.toBuffer = MessagePrototype.encodeNB;\r\n\r\n /**\r\n * Directly encodes the message to a base64 encoded string.\r\n * @name ProtoBuf.Builder.Message#encode64\r\n * @function\r\n * @return {string} Base64 encoded string\r\n * @throws {Error} If the underlying buffer cannot be encoded or if required fields are missing. The later\r\n * still returns the encoded base64 string in the `encoded` property on the error.\r\n * @expose\r\n */\r\n MessagePrototype.encode64 = function() {\r\n try {\r\n return this.encode().toBase64();\r\n } catch (e) {\r\n if (e[\"encoded\"]) e[\"encoded\"] = e[\"encoded\"].toBase64();\r\n throw(e);\r\n }\r\n };\r\n\r\n /**\r\n * Returns the message as a base64 encoded string. This is an alias for {@link ProtoBuf.Builder.Message#encode64}.\r\n * @name ProtoBuf.Builder.Message#toBase64\r\n * @function\r\n * @return {string} Base64 encoded string\r\n * @throws {Error} If the message cannot be encoded or if required fields are missing. The later still\r\n * returns the encoded base64 string in the `encoded` property on the error.\r\n * @expose\r\n */\r\n MessagePrototype.toBase64 = MessagePrototype.encode64;\r\n\r\n /**\r\n * Directly encodes the message to a hex encoded string.\r\n * @name ProtoBuf.Builder.Message#encodeHex\r\n * @function\r\n * @return {string} Hex encoded string\r\n * @throws {Error} If the underlying buffer cannot be encoded or if required fields are missing. The later\r\n * still returns the encoded hex string in the `encoded` property on the error.\r\n * @expose\r\n */\r\n MessagePrototype.encodeHex = function() {\r\n try {\r\n return this.encode().toHex();\r\n } catch (e) {\r\n if (e[\"encoded\"]) e[\"encoded\"] = e[\"encoded\"].toHex();\r\n throw(e);\r\n }\r\n };\r\n\r\n /**\r\n * Returns the message as a hex encoded string. This is an alias for {@link ProtoBuf.Builder.Message#encodeHex}.\r\n * @name ProtoBuf.Builder.Message#toHex\r\n * @function\r\n * @return {string} Hex encoded string\r\n * @throws {Error} If the message cannot be encoded or if required fields are missing. The later still\r\n * returns the encoded hex string in the `encoded` property on the error.\r\n * @expose\r\n */\r\n MessagePrototype.toHex = MessagePrototype.encodeHex;\r\n\r\n /**\r\n * Clones a message object or field value to a raw object.\r\n * @param {*} obj Object to clone\r\n * @param {boolean} binaryAsBase64 Whether to include binary data as base64 strings or as a buffer otherwise\r\n * @param {boolean} longsAsStrings Whether to encode longs as strings\r\n * @param {!ProtoBuf.Reflect.T=} resolvedType The resolved field type if a field\r\n * @returns {*} Cloned object\r\n * @inner\r\n */\r\n function cloneRaw(obj, binaryAsBase64, longsAsStrings, resolvedType) {\r\n if (obj === null || typeof obj !== 'object') {\r\n // Convert enum values to their respective names\r\n if (resolvedType && resolvedType instanceof ProtoBuf.Reflect.Enum) {\r\n var name = ProtoBuf.Reflect.Enum.getName(resolvedType.object, obj);\r\n if (name !== null)\r\n return name;\r\n }\r\n // Pass-through string, number, boolean, null...\r\n return obj;\r\n }\r\n // Convert ByteBuffers to raw buffer or strings\r\n if (ByteBuffer.isByteBuffer(obj))\r\n return binaryAsBase64 ? obj.toBase64() : obj.toBuffer();\r\n // Convert Longs to proper objects or strings\r\n if (ProtoBuf.Long.isLong(obj))\r\n return longsAsStrings ? obj.toString() : ProtoBuf.Long.fromValue(obj);\r\n var clone;\r\n // Clone arrays\r\n if (Array.isArray(obj)) {\r\n clone = [];\r\n obj.forEach(function(v, k) {\r\n clone[k] = cloneRaw(v, binaryAsBase64, longsAsStrings, resolvedType);\r\n });\r\n return clone;\r\n }\r\n clone = {};\r\n // Convert maps to objects\r\n if (obj instanceof ProtoBuf.Map) {\r\n var it = obj.entries();\r\n for (var e = it.next(); !e.done; e = it.next())\r\n clone[obj.keyElem.valueToString(e.value[0])] = cloneRaw(e.value[1], binaryAsBase64, longsAsStrings, obj.valueElem.resolvedType);\r\n return clone;\r\n }\r\n // Everything else is a non-null object\r\n var type = obj.$type,\r\n field = undefined;\r\n for (var i in obj)\r\n if (obj.hasOwnProperty(i)) {\r\n if (type && (field = type.getChild(i)))\r\n clone[i] = cloneRaw(obj[i], binaryAsBase64, longsAsStrings, field.resolvedType);\r\n else\r\n clone[i] = cloneRaw(obj[i], binaryAsBase64, longsAsStrings);\r\n }\r\n return clone;\r\n }\r\n\r\n /**\r\n * Returns the message's raw payload.\r\n * @param {boolean=} binaryAsBase64 Whether to include binary data as base64 strings instead of Buffers, defaults to `false`\r\n * @param {boolean} longsAsStrings Whether to encode longs as strings\r\n * @returns {Object.} Raw payload\r\n * @expose\r\n */\r\n MessagePrototype.toRaw = function(binaryAsBase64, longsAsStrings) {\r\n return cloneRaw(this, !!binaryAsBase64, !!longsAsStrings, this.$type);\r\n };\r\n\r\n /**\r\n * Encodes a message to JSON.\r\n * @returns {string} JSON string\r\n * @expose\r\n */\r\n MessagePrototype.encodeJSON = function() {\r\n return JSON.stringify(\r\n cloneRaw(this,\r\n /* binary-as-base64 */ true,\r\n /* longs-as-strings */ true,\r\n this.$type\r\n )\r\n );\r\n };\r\n\r\n /**\r\n * Decodes a message from the specified buffer or string.\r\n * @name ProtoBuf.Builder.Message.decode\r\n * @function\r\n * @param {!ByteBuffer|!ArrayBuffer|!Buffer|string} buffer Buffer to decode from\r\n * @param {(number|string)=} length Message length. Defaults to decode all the remainig data.\r\n * @param {string=} enc Encoding if buffer is a string: hex, utf8 (not recommended), defaults to base64\r\n * @return {!ProtoBuf.Builder.Message} Decoded message\r\n * @throws {Error} If the message cannot be decoded or if required fields are missing. The later still\r\n * returns the decoded message with missing fields in the `decoded` property on the error.\r\n * @expose\r\n * @see ProtoBuf.Builder.Message.decode64\r\n * @see ProtoBuf.Builder.Message.decodeHex\r\n */\r\n Message.decode = function(buffer, length, enc) {\r\n if (typeof length === 'string')\r\n enc = length,\r\n length = -1;\r\n if (typeof buffer === 'string')\r\n buffer = ByteBuffer.wrap(buffer, enc ? enc : \"base64\");\r\n else if (!ByteBuffer.isByteBuffer(buffer))\r\n buffer = ByteBuffer.wrap(buffer); // May throw\r\n var le = buffer.littleEndian;\r\n try {\r\n var msg = T.decode(buffer.LE(), length);\r\n buffer.LE(le);\r\n return msg;\r\n } catch (e) {\r\n buffer.LE(le);\r\n throw(e);\r\n }\r\n };\r\n\r\n /**\r\n * Decodes a varint32 length-delimited message from the specified buffer or string.\r\n * @name ProtoBuf.Builder.Message.decodeDelimited\r\n * @function\r\n * @param {!ByteBuffer|!ArrayBuffer|!Buffer|string} buffer Buffer to decode from\r\n * @param {string=} enc Encoding if buffer is a string: hex, utf8 (not recommended), defaults to base64\r\n * @return {ProtoBuf.Builder.Message} Decoded message or `null` if not enough bytes are available yet\r\n * @throws {Error} If the message cannot be decoded or if required fields are missing. The later still\r\n * returns the decoded message with missing fields in the `decoded` property on the error.\r\n * @expose\r\n */\r\n Message.decodeDelimited = function(buffer, enc) {\r\n if (typeof buffer === 'string')\r\n buffer = ByteBuffer.wrap(buffer, enc ? enc : \"base64\");\r\n else if (!ByteBuffer.isByteBuffer(buffer))\r\n buffer = ByteBuffer.wrap(buffer); // May throw\r\n if (buffer.remaining() < 1)\r\n return null;\r\n var off = buffer.offset,\r\n len = buffer.readVarint32();\r\n if (buffer.remaining() < len) {\r\n buffer.offset = off;\r\n return null;\r\n }\r\n try {\r\n var msg = T.decode(buffer.slice(buffer.offset, buffer.offset + len).LE());\r\n buffer.offset += len;\r\n return msg;\r\n } catch (err) {\r\n buffer.offset += len;\r\n throw err;\r\n }\r\n };\r\n\r\n /**\r\n * Decodes the message from the specified base64 encoded string.\r\n * @name ProtoBuf.Builder.Message.decode64\r\n * @function\r\n * @param {string} str String to decode from\r\n * @return {!ProtoBuf.Builder.Message} Decoded message\r\n * @throws {Error} If the message cannot be decoded or if required fields are missing. The later still\r\n * returns the decoded message with missing fields in the `decoded` property on the error.\r\n * @expose\r\n */\r\n Message.decode64 = function(str) {\r\n return Message.decode(str, \"base64\");\r\n };\r\n\r\n /**\r\n * Decodes the message from the specified hex encoded string.\r\n * @name ProtoBuf.Builder.Message.decodeHex\r\n * @function\r\n * @param {string} str String to decode from\r\n * @return {!ProtoBuf.Builder.Message} Decoded message\r\n * @throws {Error} If the message cannot be decoded or if required fields are missing. The later still\r\n * returns the decoded message with missing fields in the `decoded` property on the error.\r\n * @expose\r\n */\r\n Message.decodeHex = function(str) {\r\n return Message.decode(str, \"hex\");\r\n };\r\n\r\n /**\r\n * Decodes the message from a JSON string.\r\n * @name ProtoBuf.Builder.Message.decodeJSON\r\n * @function\r\n * @param {string} str String to decode from\r\n * @return {!ProtoBuf.Builder.Message} Decoded message\r\n * @throws {Error} If the message cannot be decoded or if required fields are\r\n * missing.\r\n * @expose\r\n */\r\n Message.decodeJSON = function(str) {\r\n return new Message(JSON.parse(str));\r\n };\r\n\r\n // Utility\r\n\r\n /**\r\n * Returns a string representation of this Message.\r\n * @name ProtoBuf.Builder.Message#toString\r\n * @function\r\n * @return {string} String representation as of \".Fully.Qualified.MessageName\"\r\n * @expose\r\n */\r\n MessagePrototype.toString = function() {\r\n return T.toString();\r\n };\r\n\r\n // Properties\r\n\r\n /**\r\n * Message options.\r\n * @name ProtoBuf.Builder.Message.$options\r\n * @type {Object.}\r\n * @expose\r\n */\r\n var $optionsS; // cc needs this\r\n\r\n /**\r\n * Message options.\r\n * @name ProtoBuf.Builder.Message#$options\r\n * @type {Object.}\r\n * @expose\r\n */\r\n var $options;\r\n\r\n /**\r\n * Reflection type.\r\n * @name ProtoBuf.Builder.Message.$type\r\n * @type {!ProtoBuf.Reflect.Message}\r\n * @expose\r\n */\r\n var $typeS;\r\n\r\n /**\r\n * Reflection type.\r\n * @name ProtoBuf.Builder.Message#$type\r\n * @type {!ProtoBuf.Reflect.Message}\r\n * @expose\r\n */\r\n var $type;\r\n\r\n if (Object.defineProperty)\r\n Object.defineProperty(Message, '$options', { \"value\": T.buildOpt() }),\r\n Object.defineProperty(MessagePrototype, \"$options\", { \"value\": Message[\"$options\"] }),\r\n Object.defineProperty(Message, \"$type\", { \"value\": T }),\r\n Object.defineProperty(MessagePrototype, \"$type\", { \"value\": T });\r\n\r\n return Message;\r\n\r\n })(ProtoBuf, this);\r\n\r\n // Static enums and prototyped sub-messages / cached collections\r\n this._fields = [];\r\n this._fieldsById = {};\r\n this._fieldsByName = {};\r\n this._oneofsByName = {};\r\n for (var i=0, k=this.children.length, child; i>> 3;\r\n switch (wireType) {\r\n case ProtoBuf.WIRE_TYPES.VARINT:\r\n do tag = buf.readUint8();\r\n while ((tag & 0x80) === 0x80);\r\n break;\r\n case ProtoBuf.WIRE_TYPES.BITS64:\r\n buf.offset += 8;\r\n break;\r\n case ProtoBuf.WIRE_TYPES.LDELIM:\r\n tag = buf.readVarint32(); // reads the varint\r\n buf.offset += tag; // skips n bytes\r\n break;\r\n case ProtoBuf.WIRE_TYPES.STARTGROUP:\r\n skipTillGroupEnd(id, buf);\r\n break;\r\n case ProtoBuf.WIRE_TYPES.ENDGROUP:\r\n if (id === expectedId)\r\n return false;\r\n else\r\n throw Error(\"Illegal GROUPEND after unknown group: \"+id+\" (\"+expectedId+\" expected)\");\r\n case ProtoBuf.WIRE_TYPES.BITS32:\r\n buf.offset += 4;\r\n break;\r\n default:\r\n throw Error(\"Illegal wire type in unknown group \"+expectedId+\": \"+wireType);\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Decodes an encoded message and returns the decoded message.\r\n * @param {ByteBuffer} buffer ByteBuffer to decode from\r\n * @param {number=} length Message length. Defaults to decode all remaining data.\r\n * @param {number=} expectedGroupEndId Expected GROUPEND id if this is a legacy group\r\n * @return {ProtoBuf.Builder.Message} Decoded message\r\n * @throws {Error} If the message cannot be decoded\r\n * @expose\r\n */\r\n MessagePrototype.decode = function(buffer, length, expectedGroupEndId) {\r\n if (typeof length !== 'number')\r\n length = -1;\r\n var start = buffer.offset,\r\n msg = new (this.clazz)(),\r\n tag, wireType, id, field;\r\n while (buffer.offset < start+length || (length === -1 && buffer.remaining() > 0)) {\r\n tag = buffer.readVarint32();\r\n wireType = tag & 0x07;\r\n id = tag >>> 3;\r\n if (wireType === ProtoBuf.WIRE_TYPES.ENDGROUP) {\r\n if (id !== expectedGroupEndId)\r\n throw Error(\"Illegal group end indicator for \"+this.toString(true)+\": \"+id+\" (\"+(expectedGroupEndId ? expectedGroupEndId+\" expected\" : \"not a group\")+\")\");\r\n break;\r\n }\r\n if (!(field = this._fieldsById[id])) {\r\n // \"messages created by your new code can be parsed by your old code: old binaries simply ignore the new field when parsing.\"\r\n switch (wireType) {\r\n case ProtoBuf.WIRE_TYPES.VARINT:\r\n buffer.readVarint32();\r\n break;\r\n case ProtoBuf.WIRE_TYPES.BITS32:\r\n buffer.offset += 4;\r\n break;\r\n case ProtoBuf.WIRE_TYPES.BITS64:\r\n buffer.offset += 8;\r\n break;\r\n case ProtoBuf.WIRE_TYPES.LDELIM:\r\n var len = buffer.readVarint32();\r\n buffer.offset += len;\r\n break;\r\n case ProtoBuf.WIRE_TYPES.STARTGROUP:\r\n while (skipTillGroupEnd(id, buffer)) {}\r\n break;\r\n default:\r\n throw Error(\"Illegal wire type for unknown field \"+id+\" in \"+this.toString(true)+\"#decode: \"+wireType);\r\n }\r\n continue;\r\n }\r\n if (field.repeated && !field.options[\"packed\"]) {\r\n msg[field.name].push(field.decode(wireType, buffer));\r\n } else if (field.map) {\r\n var keyval = field.decode(wireType, buffer);\r\n msg[field.name].set(keyval[0], keyval[1]);\r\n } else {\r\n msg[field.name] = field.decode(wireType, buffer);\r\n if (field.oneof) { // Field is part of an OneOf (not a virtual OneOf field)\r\n var currentField = msg[field.oneof.name]; // Virtual field references currently set field\r\n if (currentField !== null && currentField !== field.name)\r\n msg[currentField] = null; // Clear currently set field\r\n msg[field.oneof.name] = field.name; // Point virtual field at this field\r\n }\r\n }\r\n }\r\n\r\n // Check if all required fields are present and set default values for optional fields that are not\r\n for (var i=0, k=this._fields.length; i=} options Options\r\n * @param {!ProtoBuf.Reflect.Message.OneOf=} oneof Enclosing OneOf\r\n * @param {string?} syntax The syntax level of this definition (e.g., proto3)\r\n * @constructor\r\n * @extends ProtoBuf.Reflect.T\r\n */\r\n var Field = function(builder, message, rule, keytype, type, name, id, options, oneof, syntax) {\r\n T.call(this, builder, message, name);\r\n\r\n /**\r\n * @override\r\n */\r\n this.className = \"Message.Field\";\r\n\r\n /**\r\n * Message field required flag.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n this.required = rule === \"required\";\r\n\r\n /**\r\n * Message field repeated flag.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n this.repeated = rule === \"repeated\";\r\n\r\n /**\r\n * Message field map flag.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n this.map = rule === \"map\";\r\n\r\n /**\r\n * Message field key type. Type reference string if unresolved, protobuf\r\n * type if resolved. Valid only if this.map === true, null otherwise.\r\n * @type {string|{name: string, wireType: number}|null}\r\n * @expose\r\n */\r\n this.keyType = keytype || null;\r\n\r\n /**\r\n * Message field type. Type reference string if unresolved, protobuf type if\r\n * resolved. In a map field, this is the value type.\r\n * @type {string|{name: string, wireType: number}}\r\n * @expose\r\n */\r\n this.type = type;\r\n\r\n /**\r\n * Resolved type reference inside the global namespace.\r\n * @type {ProtoBuf.Reflect.T|null}\r\n * @expose\r\n */\r\n this.resolvedType = null;\r\n\r\n /**\r\n * Unique message field id.\r\n * @type {number}\r\n * @expose\r\n */\r\n this.id = id;\r\n\r\n /**\r\n * Message field options.\r\n * @type {!Object.}\r\n * @dict\r\n * @expose\r\n */\r\n this.options = options || {};\r\n\r\n /**\r\n * Default value.\r\n * @type {*}\r\n * @expose\r\n */\r\n this.defaultValue = null;\r\n\r\n /**\r\n * Enclosing OneOf.\r\n * @type {?ProtoBuf.Reflect.Message.OneOf}\r\n * @expose\r\n */\r\n this.oneof = oneof || null;\r\n\r\n /**\r\n * Syntax level of this definition (e.g., proto3).\r\n * @type {string}\r\n * @expose\r\n */\r\n this.syntax = syntax || 'proto2';\r\n\r\n /**\r\n * Original field name.\r\n * @type {string}\r\n * @expose\r\n */\r\n this.originalName = this.name; // Used to revert camelcase transformation on naming collisions\r\n\r\n /**\r\n * Element implementation. Created in build() after types are resolved.\r\n * @type {ProtoBuf.Element}\r\n * @expose\r\n */\r\n this.element = null;\r\n\r\n /**\r\n * Key element implementation, for map fields. Created in build() after\r\n * types are resolved.\r\n * @type {ProtoBuf.Element}\r\n * @expose\r\n */\r\n this.keyElement = null;\r\n\r\n // Convert field names to camel case notation if the override is set\r\n if (this.builder.options['convertFieldsToCamelCase'] && !(this instanceof Message.ExtensionField))\r\n this.name = ProtoBuf.Util.toCamelCase(this.name);\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Message.Field.prototype\r\n * @inner\r\n */\r\n var FieldPrototype = Field.prototype = Object.create(T.prototype);\r\n\r\n /**\r\n * Builds the field.\r\n * @override\r\n * @expose\r\n */\r\n FieldPrototype.build = function() {\r\n this.element = new Element(this.type, this.resolvedType, false, this.syntax, this.name);\r\n if (this.map)\r\n this.keyElement = new Element(this.keyType, undefined, true, this.syntax, this.name);\r\n\r\n // In proto3, fields do not have field presence, and every field is set to\r\n // its type's default value (\"\", 0, 0.0, or false).\r\n if (this.syntax === 'proto3' && !this.repeated && !this.map)\r\n this.defaultValue = Element.defaultFieldValue(this.type);\r\n\r\n // Otherwise, default values are present when explicitly specified\r\n else if (typeof this.options['default'] !== 'undefined')\r\n this.defaultValue = this.verifyValue(this.options['default']);\r\n };\r\n\r\n /**\r\n * Checks if the given value can be set for this field.\r\n * @param {*} value Value to check\r\n * @param {boolean=} skipRepeated Whether to skip the repeated value check or not. Defaults to false.\r\n * @return {*} Verified, maybe adjusted, value\r\n * @throws {Error} If the value cannot be set for this field\r\n * @expose\r\n */\r\n FieldPrototype.verifyValue = function(value, skipRepeated) {\r\n skipRepeated = skipRepeated || false;\r\n var self = this;\r\n function fail(val, msg) {\r\n throw Error(\"Illegal value for \"+self.toString(true)+\" of type \"+self.type.name+\": \"+val+\" (\"+msg+\")\");\r\n }\r\n if (value === null) { // NULL values for optional fields\r\n if (this.required)\r\n fail(typeof value, \"required\");\r\n if (this.syntax === 'proto3' && this.type !== ProtoBuf.TYPES[\"message\"])\r\n fail(typeof value, \"proto3 field without field presence cannot be null\");\r\n return null;\r\n }\r\n var i;\r\n if (this.repeated && !skipRepeated) { // Repeated values as arrays\r\n if (!Array.isArray(value))\r\n value = [value];\r\n var res = [];\r\n for (i=0; i 0;\r\n\r\n case ProtoBuf.TYPES[\"bytes\"]:\r\n return value.remaining() > 0;\r\n\r\n case ProtoBuf.TYPES[\"enum\"]:\r\n return value !== 0;\r\n\r\n case ProtoBuf.TYPES[\"message\"]:\r\n return value !== null;\r\n default:\r\n return true;\r\n }\r\n };\r\n\r\n /**\r\n * Encodes the specified field value to the specified buffer.\r\n * @param {*} value Verified field value\r\n * @param {ByteBuffer} buffer ByteBuffer to encode to\r\n * @param {!ProtoBuf.Builder.Message} message Runtime message\r\n * @return {ByteBuffer} The ByteBuffer for chaining\r\n * @throws {Error} If the field cannot be encoded\r\n * @expose\r\n */\r\n FieldPrototype.encode = function(value, buffer, message) {\r\n if (this.type === null || typeof this.type !== 'object')\r\n throw Error(\"[INTERNAL] Unresolved type in \"+this.toString(true)+\": \"+this.type);\r\n if (value === null || (this.repeated && value.length == 0))\r\n return buffer; // Optional omitted\r\n try {\r\n if (this.repeated) {\r\n var i;\r\n // \"Only repeated fields of primitive numeric types (types which use the varint, 32-bit, or 64-bit wire\r\n // types) can be declared 'packed'.\"\r\n if (this.options[\"packed\"] && ProtoBuf.PACKABLE_WIRE_TYPES.indexOf(this.type.wireType) >= 0) {\r\n // \"All of the elements of the field are packed into a single key-value pair with wire type 2\r\n // (length-delimited). Each element is encoded the same way it would be normally, except without a\r\n // tag preceding it.\"\r\n buffer.writeVarint32((this.id << 3) | ProtoBuf.WIRE_TYPES.LDELIM);\r\n buffer.ensureCapacity(buffer.offset += 1); // We do not know the length yet, so let's assume a varint of length 1\r\n var start = buffer.offset; // Remember where the contents begin\r\n for (i=0; i 1) { // We need to move the contents\r\n var contents = buffer.slice(start, buffer.offset);\r\n start += varintLen-1;\r\n buffer.offset = start;\r\n buffer.append(contents);\r\n }\r\n buffer.writeVarint32(len, start-varintLen);\r\n } else {\r\n // \"If your message definition has repeated elements (without the [packed=true] option), the encoded\r\n // message has zero or more key-value pairs with the same tag number\"\r\n for (i=0; i= 0) {\r\n n += ByteBuffer.calculateVarint32((this.id << 3) | ProtoBuf.WIRE_TYPES.LDELIM);\r\n ni = 0;\r\n for (i=0; i= 0) {\r\n if (!skipRepeated) {\r\n nBytes = buffer.readVarint32();\r\n nBytes = buffer.offset + nBytes; // Limit\r\n var values = [];\r\n while (buffer.offset < nBytes)\r\n values.push(this.decode(this.type.wireType, buffer, true));\r\n return values;\r\n }\r\n // Read the next value otherwise...\r\n }\r\n\r\n // Handle maps.\r\n if (this.map) {\r\n // Read one (key, value) submessage, and return [key, value]\r\n var key = Element.defaultFieldValue(this.keyType);\r\n value = Element.defaultFieldValue(this.type);\r\n\r\n // Read the length\r\n nBytes = buffer.readVarint32();\r\n if (buffer.remaining() < nBytes)\r\n throw Error(\"Illegal number of bytes for \"+this.toString(true)+\": \"+nBytes+\" required but got only \"+buffer.remaining());\r\n\r\n // Get a sub-buffer of this key/value submessage\r\n var msgbuf = buffer.clone();\r\n msgbuf.limit = msgbuf.offset + nBytes;\r\n buffer.offset += nBytes;\r\n\r\n while (msgbuf.remaining() > 0) {\r\n var tag = msgbuf.readVarint32();\r\n wireType = tag & 0x07;\r\n var id = tag >>> 3;\r\n if (id === 1) {\r\n key = this.keyElement.decode(msgbuf, wireType, id);\r\n } else if (id === 2) {\r\n value = this.element.decode(msgbuf, wireType, id);\r\n } else {\r\n throw Error(\"Unexpected tag in map field key/value submessage\");\r\n }\r\n }\r\n\r\n return [key, value];\r\n }\r\n\r\n // Handle singular and non-packed repeated field values.\r\n return this.element.decode(buffer, wireType, this.id);\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Message.Field\r\n * @expose\r\n */\r\n Reflect.Message.Field = Field;\r\n\r\n /**\r\n * Constructs a new Message ExtensionField.\r\n * @exports ProtoBuf.Reflect.Message.ExtensionField\r\n * @param {!ProtoBuf.Builder} builder Builder reference\r\n * @param {!ProtoBuf.Reflect.Message} message Message reference\r\n * @param {string} rule Rule, one of requried, optional, repeated\r\n * @param {string} type Data type, e.g. int32\r\n * @param {string} name Field name\r\n * @param {number} id Unique field id\r\n * @param {!Object.=} options Options\r\n * @constructor\r\n * @extends ProtoBuf.Reflect.Message.Field\r\n */\r\n var ExtensionField = function(builder, message, rule, type, name, id, options) {\r\n Field.call(this, builder, message, rule, /* keytype = */ null, type, name, id, options);\r\n\r\n /**\r\n * Extension reference.\r\n * @type {!ProtoBuf.Reflect.Extension}\r\n * @expose\r\n */\r\n this.extension;\r\n };\r\n\r\n // Extends Field\r\n ExtensionField.prototype = Object.create(Field.prototype);\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Message.ExtensionField\r\n * @expose\r\n */\r\n Reflect.Message.ExtensionField = ExtensionField;\r\n\r\n /**\r\n * Constructs a new Message OneOf.\r\n * @exports ProtoBuf.Reflect.Message.OneOf\r\n * @param {!ProtoBuf.Builder} builder Builder reference\r\n * @param {!ProtoBuf.Reflect.Message} message Message reference\r\n * @param {string} name OneOf name\r\n * @constructor\r\n * @extends ProtoBuf.Reflect.T\r\n */\r\n var OneOf = function(builder, message, name) {\r\n T.call(this, builder, message, name);\r\n\r\n /**\r\n * Enclosed fields.\r\n * @type {!Array.}\r\n * @expose\r\n */\r\n this.fields = [];\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Message.OneOf\r\n * @expose\r\n */\r\n Reflect.Message.OneOf = OneOf;\r\n\r\n /**\r\n * Constructs a new Enum.\r\n * @exports ProtoBuf.Reflect.Enum\r\n * @param {!ProtoBuf.Builder} builder Builder reference\r\n * @param {!ProtoBuf.Reflect.T} parent Parent Reflect object\r\n * @param {string} name Enum name\r\n * @param {Object.=} options Enum options\r\n * @param {string?} syntax The syntax level (e.g., proto3)\r\n * @constructor\r\n * @extends ProtoBuf.Reflect.Namespace\r\n */\r\n var Enum = function(builder, parent, name, options, syntax) {\r\n Namespace.call(this, builder, parent, name, options, syntax);\r\n\r\n /**\r\n * @override\r\n */\r\n this.className = \"Enum\";\r\n\r\n /**\r\n * Runtime enum object.\r\n * @type {Object.|null}\r\n * @expose\r\n */\r\n this.object = null;\r\n };\r\n\r\n /**\r\n * Gets the string name of an enum value.\r\n * @param {!ProtoBuf.Builder.Enum} enm Runtime enum\r\n * @param {number} value Enum value\r\n * @returns {?string} Name or `null` if not present\r\n * @expose\r\n */\r\n Enum.getName = function(enm, value) {\r\n var keys = Object.keys(enm);\r\n for (var i=0, key; i}\r\n * @expose\r\n */\r\n EnumPrototype.build = function(rebuild) {\r\n if (this.object && !rebuild)\r\n return this.object;\r\n var enm = new ProtoBuf.Builder.Enum(),\r\n values = this.getChildren(Enum.Value);\r\n for (var i=0, k=values.length; i=} options Options\r\n * @constructor\r\n * @extends ProtoBuf.Reflect.Namespace\r\n */\r\n var Service = function(builder, root, name, options) {\r\n Namespace.call(this, builder, root, name, options);\r\n\r\n /**\r\n * @override\r\n */\r\n this.className = \"Service\";\r\n\r\n /**\r\n * Built runtime service class.\r\n * @type {?function(new:ProtoBuf.Builder.Service)}\r\n */\r\n this.clazz = null;\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Service.prototype\r\n * @inner\r\n */\r\n var ServicePrototype = Service.prototype = Object.create(Namespace.prototype);\r\n\r\n /**\r\n * Builds the service and returns the runtime counterpart, which is a fully functional class.\r\n * @see ProtoBuf.Builder.Service\r\n * @param {boolean=} rebuild Whether to rebuild or not\r\n * @return {Function} Service class\r\n * @throws {Error} If the message cannot be built\r\n * @expose\r\n */\r\n ServicePrototype.build = function(rebuild) {\r\n if (this.clazz && !rebuild)\r\n return this.clazz;\r\n\r\n // Create the runtime Service class in its own scope\r\n return this.clazz = (function(ProtoBuf, T) {\r\n\r\n /**\r\n * Constructs a new runtime Service.\r\n * @name ProtoBuf.Builder.Service\r\n * @param {function(string, ProtoBuf.Builder.Message, function(Error, ProtoBuf.Builder.Message=))=} rpcImpl RPC implementation receiving the method name and the message\r\n * @class Barebone of all runtime services.\r\n * @constructor\r\n * @throws {Error} If the service cannot be created\r\n */\r\n var Service = function(rpcImpl) {\r\n ProtoBuf.Builder.Service.call(this);\r\n\r\n /**\r\n * Service implementation.\r\n * @name ProtoBuf.Builder.Service#rpcImpl\r\n * @type {!function(string, ProtoBuf.Builder.Message, function(Error, ProtoBuf.Builder.Message=))}\r\n * @expose\r\n */\r\n this.rpcImpl = rpcImpl || function(name, msg, callback) {\r\n // This is what a user has to implement: A function receiving the method name, the actual message to\r\n // send (type checked) and the callback that's either provided with the error as its first\r\n // argument or null and the actual response message.\r\n setTimeout(callback.bind(this, Error(\"Not implemented, see: https://github.com/dcodeIO/ProtoBuf.js/wiki/Services\")), 0); // Must be async!\r\n };\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Builder.Service.prototype\r\n * @inner\r\n */\r\n var ServicePrototype = Service.prototype = Object.create(ProtoBuf.Builder.Service.prototype);\r\n\r\n /**\r\n * Asynchronously performs an RPC call using the given RPC implementation.\r\n * @name ProtoBuf.Builder.Service.[Method]\r\n * @function\r\n * @param {!function(string, ProtoBuf.Builder.Message, function(Error, ProtoBuf.Builder.Message=))} rpcImpl RPC implementation\r\n * @param {ProtoBuf.Builder.Message} req Request\r\n * @param {function(Error, (ProtoBuf.Builder.Message|ByteBuffer|Buffer|string)=)} callback Callback receiving\r\n * the error if any and the response either as a pre-parsed message or as its raw bytes\r\n * @abstract\r\n */\r\n\r\n /**\r\n * Asynchronously performs an RPC call using the instance's RPC implementation.\r\n * @name ProtoBuf.Builder.Service#[Method]\r\n * @function\r\n * @param {ProtoBuf.Builder.Message} req Request\r\n * @param {function(Error, (ProtoBuf.Builder.Message|ByteBuffer|Buffer|string)=)} callback Callback receiving\r\n * the error if any and the response either as a pre-parsed message or as its raw bytes\r\n * @abstract\r\n */\r\n\r\n var rpc = T.getChildren(ProtoBuf.Reflect.Service.RPCMethod);\r\n for (var i=0; i}\r\n * @expose\r\n */\r\n var $optionsS; // cc needs this\r\n\r\n /**\r\n * Service options.\r\n * @name ProtoBuf.Builder.Service#$options\r\n * @type {Object.}\r\n * @expose\r\n */\r\n var $options;\r\n\r\n /**\r\n * Reflection type.\r\n * @name ProtoBuf.Builder.Service.$type\r\n * @type {!ProtoBuf.Reflect.Service}\r\n * @expose\r\n */\r\n var $typeS;\r\n\r\n /**\r\n * Reflection type.\r\n * @name ProtoBuf.Builder.Service#$type\r\n * @type {!ProtoBuf.Reflect.Service}\r\n * @expose\r\n */\r\n var $type;\r\n\r\n if (Object.defineProperty)\r\n Object.defineProperty(Service, \"$options\", { \"value\": T.buildOpt() }),\r\n Object.defineProperty(ServicePrototype, \"$options\", { \"value\": Service[\"$options\"] }),\r\n Object.defineProperty(Service, \"$type\", { \"value\": T }),\r\n Object.defineProperty(ServicePrototype, \"$type\", { \"value\": T });\r\n\r\n return Service;\r\n\r\n })(ProtoBuf, this);\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Service\r\n * @expose\r\n */\r\n Reflect.Service = Service;\r\n\r\n /**\r\n * Abstract service method.\r\n * @exports ProtoBuf.Reflect.Service.Method\r\n * @param {!ProtoBuf.Builder} builder Builder reference\r\n * @param {!ProtoBuf.Reflect.Service} svc Service\r\n * @param {string} name Method name\r\n * @param {Object.=} options Options\r\n * @constructor\r\n * @extends ProtoBuf.Reflect.T\r\n */\r\n var Method = function(builder, svc, name, options) {\r\n T.call(this, builder, svc, name);\r\n\r\n /**\r\n * @override\r\n */\r\n this.className = \"Service.Method\";\r\n\r\n /**\r\n * Options.\r\n * @type {Object.}\r\n * @expose\r\n */\r\n this.options = options || {};\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Service.Method.prototype\r\n * @inner\r\n */\r\n var MethodPrototype = Method.prototype = Object.create(T.prototype);\r\n\r\n /**\r\n * Builds the method's '$options' property.\r\n * @name ProtoBuf.Reflect.Service.Method#buildOpt\r\n * @function\r\n * @return {Object.}\r\n */\r\n MethodPrototype.buildOpt = NamespacePrototype.buildOpt;\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Service.Method\r\n * @expose\r\n */\r\n Reflect.Service.Method = Method;\r\n\r\n /**\r\n * RPC service method.\r\n * @exports ProtoBuf.Reflect.Service.RPCMethod\r\n * @param {!ProtoBuf.Builder} builder Builder reference\r\n * @param {!ProtoBuf.Reflect.Service} svc Service\r\n * @param {string} name Method name\r\n * @param {string} request Request message name\r\n * @param {string} response Response message name\r\n * @param {boolean} request_stream Whether requests are streamed\r\n * @param {boolean} response_stream Whether responses are streamed\r\n * @param {Object.=} options Options\r\n * @constructor\r\n * @extends ProtoBuf.Reflect.Service.Method\r\n */\r\n var RPCMethod = function(builder, svc, name, request, response, request_stream, response_stream, options) {\r\n Method.call(this, builder, svc, name, options);\r\n\r\n /**\r\n * @override\r\n */\r\n this.className = \"Service.RPCMethod\";\r\n\r\n /**\r\n * Request message name.\r\n * @type {string}\r\n * @expose\r\n */\r\n this.requestName = request;\r\n\r\n /**\r\n * Response message name.\r\n * @type {string}\r\n * @expose\r\n */\r\n this.responseName = response;\r\n\r\n /**\r\n * Whether requests are streamed\r\n * @type {bool}\r\n * @expose\r\n */\r\n this.requestStream = request_stream;\r\n\r\n /**\r\n * Whether responses are streamed\r\n * @type {bool}\r\n * @expose\r\n */\r\n this.responseStream = response_stream;\r\n\r\n /**\r\n * Resolved request message type.\r\n * @type {ProtoBuf.Reflect.Message}\r\n * @expose\r\n */\r\n this.resolvedRequestType = null;\r\n\r\n /**\r\n * Resolved response message type.\r\n * @type {ProtoBuf.Reflect.Message}\r\n * @expose\r\n */\r\n this.resolvedResponseType = null;\r\n };\r\n\r\n // Extends Method\r\n RPCMethod.prototype = Object.create(Method.prototype);\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Service.RPCMethod\r\n * @expose\r\n */\r\n Reflect.Service.RPCMethod = RPCMethod;\r\n\r\n return Reflect;\r\n\r\n })(ProtoBuf);\r\n\r\n /**\r\n * @alias ProtoBuf.Builder\r\n * @expose\r\n */\r\n ProtoBuf.Builder = (function(ProtoBuf, Lang, Reflect) {\r\n \"use strict\";\r\n\r\n /**\r\n * Constructs a new Builder.\r\n * @exports ProtoBuf.Builder\r\n * @class Provides the functionality to build protocol messages.\r\n * @param {Object.=} options Options\r\n * @constructor\r\n */\r\n var Builder = function(options) {\r\n\r\n /**\r\n * Namespace.\r\n * @type {ProtoBuf.Reflect.Namespace}\r\n * @expose\r\n */\r\n this.ns = new Reflect.Namespace(this, null, \"\"); // Global namespace\r\n\r\n /**\r\n * Namespace pointer.\r\n * @type {ProtoBuf.Reflect.T}\r\n * @expose\r\n */\r\n this.ptr = this.ns;\r\n\r\n /**\r\n * Resolved flag.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n this.resolved = false;\r\n\r\n /**\r\n * The current building result.\r\n * @type {Object.|null}\r\n * @expose\r\n */\r\n this.result = null;\r\n\r\n /**\r\n * Imported files.\r\n * @type {Array.}\r\n * @expose\r\n */\r\n this.files = {};\r\n\r\n /**\r\n * Import root override.\r\n * @type {?string}\r\n * @expose\r\n */\r\n this.importRoot = null;\r\n\r\n /**\r\n * Options.\r\n * @type {!Object.}\r\n * @expose\r\n */\r\n this.options = options || {};\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Builder.prototype\r\n * @inner\r\n */\r\n var BuilderPrototype = Builder.prototype;\r\n\r\n // ----- Definition tests -----\r\n\r\n /**\r\n * Tests if a definition most likely describes a message.\r\n * @param {!Object} def\r\n * @returns {boolean}\r\n * @expose\r\n */\r\n Builder.isMessage = function(def) {\r\n // Messages require a string name\r\n if (typeof def[\"name\"] !== 'string')\r\n return false;\r\n // Messages do not contain values (enum) or rpc methods (service)\r\n if (typeof def[\"values\"] !== 'undefined' || typeof def[\"rpc\"] !== 'undefined')\r\n return false;\r\n return true;\r\n };\r\n\r\n /**\r\n * Tests if a definition most likely describes a message field.\r\n * @param {!Object} def\r\n * @returns {boolean}\r\n * @expose\r\n */\r\n Builder.isMessageField = function(def) {\r\n // Message fields require a string rule, name and type and an id\r\n if (typeof def[\"rule\"] !== 'string' || typeof def[\"name\"] !== 'string' || typeof def[\"type\"] !== 'string' || typeof def[\"id\"] === 'undefined')\r\n return false;\r\n return true;\r\n };\r\n\r\n /**\r\n * Tests if a definition most likely describes an enum.\r\n * @param {!Object} def\r\n * @returns {boolean}\r\n * @expose\r\n */\r\n Builder.isEnum = function(def) {\r\n // Enums require a string name\r\n if (typeof def[\"name\"] !== 'string')\r\n return false;\r\n // Enums require at least one value\r\n if (typeof def[\"values\"] === 'undefined' || !Array.isArray(def[\"values\"]) || def[\"values\"].length === 0)\r\n return false;\r\n return true;\r\n };\r\n\r\n /**\r\n * Tests if a definition most likely describes a service.\r\n * @param {!Object} def\r\n * @returns {boolean}\r\n * @expose\r\n */\r\n Builder.isService = function(def) {\r\n // Services require a string name and an rpc object\r\n if (typeof def[\"name\"] !== 'string' || typeof def[\"rpc\"] !== 'object' || !def[\"rpc\"])\r\n return false;\r\n return true;\r\n };\r\n\r\n /**\r\n * Tests if a definition most likely describes an extended message\r\n * @param {!Object} def\r\n * @returns {boolean}\r\n * @expose\r\n */\r\n Builder.isExtend = function(def) {\r\n // Extends rquire a string ref\r\n if (typeof def[\"ref\"] !== 'string')\r\n return false;\r\n return true;\r\n };\r\n\r\n // ----- Building -----\r\n\r\n /**\r\n * Resets the pointer to the root namespace.\r\n * @returns {!ProtoBuf.Builder} this\r\n * @expose\r\n */\r\n BuilderPrototype.reset = function() {\r\n this.ptr = this.ns;\r\n return this;\r\n };\r\n\r\n /**\r\n * Defines a namespace on top of the current pointer position and places the pointer on it.\r\n * @param {string} namespace\r\n * @return {!ProtoBuf.Builder} this\r\n * @expose\r\n */\r\n BuilderPrototype.define = function(namespace) {\r\n if (typeof namespace !== 'string' || !Lang.TYPEREF.test(namespace))\r\n throw Error(\"illegal namespace: \"+namespace);\r\n namespace.split(\".\").forEach(function(part) {\r\n var ns = this.ptr.getChild(part);\r\n if (ns === null) // Keep existing\r\n this.ptr.addChild(ns = new Reflect.Namespace(this, this.ptr, part));\r\n this.ptr = ns;\r\n }, this);\r\n return this;\r\n };\r\n\r\n /**\r\n * Creates the specified definitions at the current pointer position.\r\n * @param {!Array.} defs Messages, enums or services to create\r\n * @returns {!ProtoBuf.Builder} this\r\n * @throws {Error} If a message definition is invalid\r\n * @expose\r\n */\r\n BuilderPrototype.create = function(defs) {\r\n if (!defs)\r\n return this; // Nothing to create\r\n if (!Array.isArray(defs))\r\n defs = [defs];\r\n else {\r\n if (defs.length === 0)\r\n return this;\r\n defs = defs.slice();\r\n }\r\n\r\n // It's quite hard to keep track of scopes and memory here, so let's do this iteratively.\r\n var stack = [defs];\r\n while (stack.length > 0) {\r\n defs = stack.pop();\r\n\r\n if (!Array.isArray(defs)) // Stack always contains entire namespaces\r\n throw Error(\"not a valid namespace: \"+JSON.stringify(defs));\r\n\r\n while (defs.length > 0) {\r\n var def = defs.shift(); // Namespaces always contain an array of messages, enums and services\r\n\r\n if (Builder.isMessage(def)) {\r\n var obj = new Reflect.Message(this, this.ptr, def[\"name\"], def[\"options\"], def[\"isGroup\"], def[\"syntax\"]);\r\n\r\n // Create OneOfs\r\n var oneofs = {};\r\n if (def[\"oneofs\"])\r\n Object.keys(def[\"oneofs\"]).forEach(function(name) {\r\n obj.addChild(oneofs[name] = new Reflect.Message.OneOf(this, obj, name));\r\n }, this);\r\n\r\n // Create fields\r\n if (def[\"fields\"])\r\n def[\"fields\"].forEach(function(fld) {\r\n if (obj.getChild(fld[\"id\"]|0) !== null)\r\n throw Error(\"duplicate or invalid field id in \"+obj.name+\": \"+fld['id']);\r\n if (fld[\"options\"] && typeof fld[\"options\"] !== 'object')\r\n throw Error(\"illegal field options in \"+obj.name+\"#\"+fld[\"name\"]);\r\n var oneof = null;\r\n if (typeof fld[\"oneof\"] === 'string' && !(oneof = oneofs[fld[\"oneof\"]]))\r\n throw Error(\"illegal oneof in \"+obj.name+\"#\"+fld[\"name\"]+\": \"+fld[\"oneof\"]);\r\n fld = new Reflect.Message.Field(this, obj, fld[\"rule\"], fld[\"keytype\"], fld[\"type\"], fld[\"name\"], fld[\"id\"], fld[\"options\"], oneof, def[\"syntax\"]);\r\n if (oneof)\r\n oneof.fields.push(fld);\r\n obj.addChild(fld);\r\n }, this);\r\n\r\n // Push children to stack\r\n var subObj = [];\r\n if (def[\"enums\"])\r\n def[\"enums\"].forEach(function(enm) {\r\n subObj.push(enm);\r\n });\r\n if (def[\"messages\"])\r\n def[\"messages\"].forEach(function(msg) {\r\n subObj.push(msg);\r\n });\r\n if (def[\"services\"])\r\n def[\"services\"].forEach(function(svc) {\r\n subObj.push(svc);\r\n });\r\n\r\n // Set extension ranges\r\n if (def[\"extensions\"]) {\r\n if (typeof def[\"extensions\"][0] === 'number') // pre 5.0.1\r\n obj.extensions = [ def[\"extensions\"] ];\r\n else\r\n obj.extensions = def[\"extensions\"];\r\n }\r\n\r\n // Create on top of current namespace\r\n this.ptr.addChild(obj);\r\n if (subObj.length > 0) {\r\n stack.push(defs); // Push the current level back\r\n defs = subObj; // Continue processing sub level\r\n subObj = null;\r\n this.ptr = obj; // And move the pointer to this namespace\r\n obj = null;\r\n continue;\r\n }\r\n subObj = null;\r\n\r\n } else if (Builder.isEnum(def)) {\r\n\r\n obj = new Reflect.Enum(this, this.ptr, def[\"name\"], def[\"options\"], def[\"syntax\"]);\r\n def[\"values\"].forEach(function(val) {\r\n obj.addChild(new Reflect.Enum.Value(this, obj, val[\"name\"], val[\"id\"]));\r\n }, this);\r\n this.ptr.addChild(obj);\r\n\r\n } else if (Builder.isService(def)) {\r\n\r\n obj = new Reflect.Service(this, this.ptr, def[\"name\"], def[\"options\"]);\r\n Object.keys(def[\"rpc\"]).forEach(function(name) {\r\n var mtd = def[\"rpc\"][name];\r\n obj.addChild(new Reflect.Service.RPCMethod(this, obj, name, mtd[\"request\"], mtd[\"response\"], !!mtd[\"request_stream\"], !!mtd[\"response_stream\"], mtd[\"options\"]));\r\n }, this);\r\n this.ptr.addChild(obj);\r\n\r\n } else if (Builder.isExtend(def)) {\r\n\r\n obj = this.ptr.resolve(def[\"ref\"], true);\r\n if (obj) {\r\n def[\"fields\"].forEach(function(fld) {\r\n if (obj.getChild(fld['id']|0) !== null)\r\n throw Error(\"duplicate extended field id in \"+obj.name+\": \"+fld['id']);\r\n // Check if field id is allowed to be extended\r\n if (obj.extensions) {\r\n var valid = false;\r\n obj.extensions.forEach(function(range) {\r\n if (fld[\"id\"] >= range[0] && fld[\"id\"] <= range[1])\r\n valid = true;\r\n });\r\n if (!valid)\r\n throw Error(\"illegal extended field id in \"+obj.name+\": \"+fld['id']+\" (not within valid ranges)\");\r\n }\r\n // Convert extension field names to camel case notation if the override is set\r\n var name = fld[\"name\"];\r\n if (this.options['convertFieldsToCamelCase'])\r\n name = ProtoBuf.Util.toCamelCase(name);\r\n // see #161: Extensions use their fully qualified name as their runtime key and...\r\n var field = new Reflect.Message.ExtensionField(this, obj, fld[\"rule\"], fld[\"type\"], this.ptr.fqn()+'.'+name, fld[\"id\"], fld[\"options\"]);\r\n // ...are added on top of the current namespace as an extension which is used for\r\n // resolving their type later on (the extension always keeps the original name to\r\n // prevent naming collisions)\r\n var ext = new Reflect.Extension(this, this.ptr, fld[\"name\"], field);\r\n field.extension = ext;\r\n this.ptr.addChild(ext);\r\n obj.addChild(field);\r\n }, this);\r\n\r\n } else if (!/\\.?google\\.protobuf\\./.test(def[\"ref\"])) // Silently skip internal extensions\r\n throw Error(\"extended message \"+def[\"ref\"]+\" is not defined\");\r\n\r\n } else\r\n throw Error(\"not a valid definition: \"+JSON.stringify(def));\r\n\r\n def = null;\r\n obj = null;\r\n }\r\n // Break goes here\r\n defs = null;\r\n this.ptr = this.ptr.parent; // Namespace done, continue at parent\r\n }\r\n this.resolved = false; // Require re-resolve\r\n this.result = null; // Require re-build\r\n return this;\r\n };\r\n\r\n /**\r\n * Propagates syntax to all children.\r\n * @param {!Object} parent\r\n * @inner\r\n */\r\n function propagateSyntax(parent) {\r\n if (parent['messages']) {\r\n parent['messages'].forEach(function(child) {\r\n child[\"syntax\"] = parent[\"syntax\"];\r\n propagateSyntax(child);\r\n });\r\n }\r\n if (parent['enums']) {\r\n parent['enums'].forEach(function(child) {\r\n child[\"syntax\"] = parent[\"syntax\"];\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Imports another definition into this builder.\r\n * @param {Object.} json Parsed import\r\n * @param {(string|{root: string, file: string})=} filename Imported file name\r\n * @returns {!ProtoBuf.Builder} this\r\n * @throws {Error} If the definition or file cannot be imported\r\n * @expose\r\n */\r\n BuilderPrototype[\"import\"] = function(json, filename) {\r\n var delim = '/';\r\n\r\n // Make sure to skip duplicate imports\r\n\r\n if (typeof filename === 'string') {\r\n\r\n if (ProtoBuf.Util.IS_NODE)\r\n filename = require(\"path\")['resolve'](filename);\r\n if (this.files[filename] === true)\r\n return this.reset();\r\n this.files[filename] = true;\r\n\r\n } else if (typeof filename === 'object') { // Object with root, file.\r\n\r\n var root = filename.root;\r\n if (ProtoBuf.Util.IS_NODE)\r\n root = require(\"path\")['resolve'](root);\r\n if (root.indexOf(\"\\\\\") >= 0 || filename.file.indexOf(\"\\\\\") >= 0)\r\n delim = '\\\\';\r\n var fname;\r\n if (ProtoBuf.Util.IS_NODE)\r\n fname = require(\"path\")['join'](root, filename.file);\r\n else\r\n fname = root + delim + filename.file;\r\n if (this.files[fname] === true)\r\n return this.reset();\r\n this.files[fname] = true;\r\n }\r\n\r\n // Import imports\r\n\r\n if (json['imports'] && json['imports'].length > 0) {\r\n var importRoot,\r\n resetRoot = false;\r\n\r\n if (typeof filename === 'object') { // If an import root is specified, override\r\n\r\n this.importRoot = filename[\"root\"]; resetRoot = true; // ... and reset afterwards\r\n importRoot = this.importRoot;\r\n filename = filename[\"file\"];\r\n if (importRoot.indexOf(\"\\\\\") >= 0 || filename.indexOf(\"\\\\\") >= 0)\r\n delim = '\\\\';\r\n\r\n } else if (typeof filename === 'string') {\r\n\r\n if (this.importRoot) // If import root is overridden, use it\r\n importRoot = this.importRoot;\r\n else { // Otherwise compute from filename\r\n if (filename.indexOf(\"/\") >= 0) { // Unix\r\n importRoot = filename.replace(/\\/[^\\/]*$/, \"\");\r\n if (/* /file.proto */ importRoot === \"\")\r\n importRoot = \"/\";\r\n } else if (filename.indexOf(\"\\\\\") >= 0) { // Windows\r\n importRoot = filename.replace(/\\\\[^\\\\]*$/, \"\");\r\n delim = '\\\\';\r\n } else\r\n importRoot = \".\";\r\n }\r\n\r\n } else\r\n importRoot = null;\r\n\r\n for (var i=0; i)=} path Specifies what to return. If omitted, the entire namespace will be returned.\r\n * @returns {!ProtoBuf.Builder.Message|!Object.}\r\n * @throws {Error} If a type could not be resolved\r\n * @expose\r\n */\r\n BuilderPrototype.build = function(path) {\r\n this.reset();\r\n if (!this.resolved)\r\n this.resolveAll(),\r\n this.resolved = true,\r\n this.result = null; // Require re-build\r\n if (this.result === null) // (Re-)Build\r\n this.result = this.ns.build();\r\n if (!path)\r\n return this.result;\r\n var part = typeof path === 'string' ? path.split(\".\") : path,\r\n ptr = this.result; // Build namespace pointer (no hasChild etc.)\r\n for (var i=0; i=} contents Initial contents\r\n * @constructor\r\n */\r\n var Map = function(field, contents) {\r\n if (!field.map)\r\n throw Error(\"field is not a map\");\r\n\r\n /**\r\n * The field corresponding to this map.\r\n * @type {!ProtoBuf.Reflect.Field}\r\n */\r\n this.field = field;\r\n\r\n /**\r\n * Element instance corresponding to key type.\r\n * @type {!ProtoBuf.Reflect.Element}\r\n */\r\n this.keyElem = new Reflect.Element(field.keyType, null, true, field.syntax);\r\n\r\n /**\r\n * Element instance corresponding to value type.\r\n * @type {!ProtoBuf.Reflect.Element}\r\n */\r\n this.valueElem = new Reflect.Element(field.type, field.resolvedType, false, field.syntax);\r\n\r\n /**\r\n * Internal map: stores mapping of (string form of key) -> (key, value)\r\n * pair.\r\n *\r\n * We provide map semantics for arbitrary key types, but we build on top\r\n * of an Object, which has only string keys. In order to avoid the need\r\n * to convert a string key back to its native type in many situations,\r\n * we store the native key value alongside the value. Thus, we only need\r\n * a one-way mapping from a key type to its string form that guarantees\r\n * uniqueness and equality (i.e., str(K1) === str(K2) if and only if K1\r\n * === K2).\r\n *\r\n * @type {!Object}\r\n */\r\n this.map = {};\r\n\r\n /**\r\n * Returns the number of elements in the map.\r\n */\r\n Object.defineProperty(this, \"size\", {\r\n get: function() { return Object.keys(this.map).length; }\r\n });\r\n\r\n // Fill initial contents from a raw object.\r\n if (contents) {\r\n var keys = Object.keys(contents);\r\n for (var i = 0; i < keys.length; i++) {\r\n var key = this.keyElem.valueFromString(keys[i]);\r\n var val = this.valueElem.verifyValue(contents[keys[i]]);\r\n this.map[this.keyElem.valueToString(key)] =\r\n { key: key, value: val };\r\n }\r\n }\r\n };\r\n\r\n var MapPrototype = Map.prototype;\r\n\r\n /**\r\n * Helper: return an iterator over an array.\r\n * @param {!Array<*>} arr the array\r\n * @returns {!Object} an iterator\r\n * @inner\r\n */\r\n function arrayIterator(arr) {\r\n var idx = 0;\r\n return {\r\n next: function() {\r\n if (idx < arr.length)\r\n return { done: false, value: arr[idx++] };\r\n return { done: true };\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clears the map.\r\n */\r\n MapPrototype.clear = function() {\r\n this.map = {};\r\n };\r\n\r\n /**\r\n * Deletes a particular key from the map.\r\n * @returns {boolean} Whether any entry with this key was deleted.\r\n */\r\n MapPrototype[\"delete\"] = function(key) {\r\n var keyValue = this.keyElem.valueToString(this.keyElem.verifyValue(key));\r\n var hadKey = keyValue in this.map;\r\n delete this.map[keyValue];\r\n return hadKey;\r\n };\r\n\r\n /**\r\n * Returns an iterator over [key, value] pairs in the map.\r\n * @returns {Object} The iterator\r\n */\r\n MapPrototype.entries = function() {\r\n var entries = [];\r\n var strKeys = Object.keys(this.map);\r\n for (var i = 0, entry; i < strKeys.length; i++)\r\n entries.push([(entry=this.map[strKeys[i]]).key, entry.value]);\r\n return arrayIterator(entries);\r\n };\r\n\r\n /**\r\n * Returns an iterator over keys in the map.\r\n * @returns {Object} The iterator\r\n */\r\n MapPrototype.keys = function() {\r\n var keys = [];\r\n var strKeys = Object.keys(this.map);\r\n for (var i = 0; i < strKeys.length; i++)\r\n keys.push(this.map[strKeys[i]].key);\r\n return arrayIterator(keys);\r\n };\r\n\r\n /**\r\n * Returns an iterator over values in the map.\r\n * @returns {!Object} The iterator\r\n */\r\n MapPrototype.values = function() {\r\n var values = [];\r\n var strKeys = Object.keys(this.map);\r\n for (var i = 0; i < strKeys.length; i++)\r\n values.push(this.map[strKeys[i]].value);\r\n return arrayIterator(values);\r\n };\r\n\r\n /**\r\n * Iterates over entries in the map, calling a function on each.\r\n * @param {function(this:*, *, *, *)} cb The callback to invoke with value, key, and map arguments.\r\n * @param {Object=} thisArg The `this` value for the callback\r\n */\r\n MapPrototype.forEach = function(cb, thisArg) {\r\n var strKeys = Object.keys(this.map);\r\n for (var i = 0, entry; i < strKeys.length; i++)\r\n cb.call(thisArg, (entry=this.map[strKeys[i]]).value, entry.key, this);\r\n };\r\n\r\n /**\r\n * Sets a key in the map to the given value.\r\n * @param {*} key The key\r\n * @param {*} value The value\r\n * @returns {!ProtoBuf.Map} The map instance\r\n */\r\n MapPrototype.set = function(key, value) {\r\n var keyValue = this.keyElem.verifyValue(key);\r\n var valValue = this.valueElem.verifyValue(value);\r\n this.map[this.keyElem.valueToString(keyValue)] =\r\n { key: keyValue, value: valValue };\r\n return this;\r\n };\r\n\r\n /**\r\n * Gets the value corresponding to a key in the map.\r\n * @param {*} key The key\r\n * @returns {*|undefined} The value, or `undefined` if key not present\r\n */\r\n MapPrototype.get = function(key) {\r\n var keyValue = this.keyElem.valueToString(this.keyElem.verifyValue(key));\r\n if (!(keyValue in this.map))\r\n return undefined;\r\n return this.map[keyValue].value;\r\n };\r\n\r\n /**\r\n * Determines whether the given key is present in the map.\r\n * @param {*} key The key\r\n * @returns {boolean} `true` if the key is present\r\n */\r\n MapPrototype.has = function(key) {\r\n var keyValue = this.keyElem.valueToString(this.keyElem.verifyValue(key));\r\n return (keyValue in this.map);\r\n };\r\n\r\n return Map;\r\n })(ProtoBuf, ProtoBuf.Reflect);\r\n\r\n\r\n /**\r\n * Loads a .proto string and returns the Builder.\r\n * @param {string} proto .proto file contents\r\n * @param {(ProtoBuf.Builder|string|{root: string, file: string})=} builder Builder to append to. Will create a new one if omitted.\r\n * @param {(string|{root: string, file: string})=} filename The corresponding file name if known. Must be specified for imports.\r\n * @return {ProtoBuf.Builder} Builder to create new messages\r\n * @throws {Error} If the definition cannot be parsed or built\r\n * @expose\r\n */\r\n ProtoBuf.loadProto = function(proto, builder, filename) {\r\n if (typeof builder === 'string' || (builder && typeof builder[\"file\"] === 'string' && typeof builder[\"root\"] === 'string'))\r\n filename = builder,\r\n builder = undefined;\r\n return ProtoBuf.loadJson(ProtoBuf.DotProto.Parser.parse(proto), builder, filename);\r\n };\r\n\r\n /**\r\n * Loads a .proto string and returns the Builder. This is an alias of {@link ProtoBuf.loadProto}.\r\n * @function\r\n * @param {string} proto .proto file contents\r\n * @param {(ProtoBuf.Builder|string)=} builder Builder to append to. Will create a new one if omitted.\r\n * @param {(string|{root: string, file: string})=} filename The corresponding file name if known. Must be specified for imports.\r\n * @return {ProtoBuf.Builder} Builder to create new messages\r\n * @throws {Error} If the definition cannot be parsed or built\r\n * @expose\r\n */\r\n ProtoBuf.protoFromString = ProtoBuf.loadProto; // Legacy\r\n\r\n /**\r\n * Loads a .proto file and returns the Builder.\r\n * @param {string|{root: string, file: string}} filename Path to proto file or an object specifying 'file' with\r\n * an overridden 'root' path for all imported files.\r\n * @param {function(?Error, !ProtoBuf.Builder=)=} callback Callback that will receive `null` as the first and\r\n * the Builder as its second argument on success, otherwise the error as its first argument. If omitted, the\r\n * file will be read synchronously and this function will return the Builder.\r\n * @param {ProtoBuf.Builder=} builder Builder to append to. Will create a new one if omitted.\r\n * @return {?ProtoBuf.Builder|undefined} The Builder if synchronous (no callback specified, will be NULL if the\r\n * request has failed), else undefined\r\n * @expose\r\n */\r\n ProtoBuf.loadProtoFile = function(filename, callback, builder) {\r\n if (callback && typeof callback === 'object')\r\n builder = callback,\r\n callback = null;\r\n else if (!callback || typeof callback !== 'function')\r\n callback = null;\r\n if (callback)\r\n return ProtoBuf.Util.fetch(typeof filename === 'string' ? filename : filename[\"root\"]+\"/\"+filename[\"file\"], function(contents) {\r\n if (contents === null) {\r\n callback(Error(\"Failed to fetch file\"));\r\n return;\r\n }\r\n try {\r\n callback(null, ProtoBuf.loadProto(contents, builder, filename));\r\n } catch (e) {\r\n callback(e);\r\n }\r\n });\r\n var contents = ProtoBuf.Util.fetch(typeof filename === 'object' ? filename[\"root\"]+\"/\"+filename[\"file\"] : filename);\r\n return contents === null ? null : ProtoBuf.loadProto(contents, builder, filename);\r\n };\r\n\r\n /**\r\n * Loads a .proto file and returns the Builder. This is an alias of {@link ProtoBuf.loadProtoFile}.\r\n * @function\r\n * @param {string|{root: string, file: string}} filename Path to proto file or an object specifying 'file' with\r\n * an overridden 'root' path for all imported files.\r\n * @param {function(?Error, !ProtoBuf.Builder=)=} callback Callback that will receive `null` as the first and\r\n * the Builder as its second argument on success, otherwise the error as its first argument. If omitted, the\r\n * file will be read synchronously and this function will return the Builder.\r\n * @param {ProtoBuf.Builder=} builder Builder to append to. Will create a new one if omitted.\r\n * @return {!ProtoBuf.Builder|undefined} The Builder if synchronous (no callback specified, will be NULL if the\r\n * request has failed), else undefined\r\n * @expose\r\n */\r\n ProtoBuf.protoFromFile = ProtoBuf.loadProtoFile; // Legacy\r\n\r\n\r\n /**\r\n * Constructs a new empty Builder.\r\n * @param {Object.=} options Builder options, defaults to global options set on ProtoBuf\r\n * @return {!ProtoBuf.Builder} Builder\r\n * @expose\r\n */\r\n ProtoBuf.newBuilder = function(options) {\r\n options = options || {};\r\n if (typeof options['convertFieldsToCamelCase'] === 'undefined')\r\n options['convertFieldsToCamelCase'] = ProtoBuf.convertFieldsToCamelCase;\r\n if (typeof options['populateAccessors'] === 'undefined')\r\n options['populateAccessors'] = ProtoBuf.populateAccessors;\r\n return new ProtoBuf.Builder(options);\r\n };\r\n\r\n /**\r\n * Loads a .json definition and returns the Builder.\r\n * @param {!*|string} json JSON definition\r\n * @param {(ProtoBuf.Builder|string|{root: string, file: string})=} builder Builder to append to. Will create a new one if omitted.\r\n * @param {(string|{root: string, file: string})=} filename The corresponding file name if known. Must be specified for imports.\r\n * @return {ProtoBuf.Builder} Builder to create new messages\r\n * @throws {Error} If the definition cannot be parsed or built\r\n * @expose\r\n */\r\n ProtoBuf.loadJson = function(json, builder, filename) {\r\n if (typeof builder === 'string' || (builder && typeof builder[\"file\"] === 'string' && typeof builder[\"root\"] === 'string'))\r\n filename = builder,\r\n builder = null;\r\n if (!builder || typeof builder !== 'object')\r\n builder = ProtoBuf.newBuilder();\r\n if (typeof json === 'string')\r\n json = JSON.parse(json);\r\n builder[\"import\"](json, filename);\r\n builder.resolveAll();\r\n return builder;\r\n };\r\n\r\n /**\r\n * Loads a .json file and returns the Builder.\r\n * @param {string|!{root: string, file: string}} filename Path to json file or an object specifying 'file' with\r\n * an overridden 'root' path for all imported files.\r\n * @param {function(?Error, !ProtoBuf.Builder=)=} callback Callback that will receive `null` as the first and\r\n * the Builder as its second argument on success, otherwise the error as its first argument. If omitted, the\r\n * file will be read synchronously and this function will return the Builder.\r\n * @param {ProtoBuf.Builder=} builder Builder to append to. Will create a new one if omitted.\r\n * @return {?ProtoBuf.Builder|undefined} The Builder if synchronous (no callback specified, will be NULL if the\r\n * request has failed), else undefined\r\n * @expose\r\n */\r\n ProtoBuf.loadJsonFile = function(filename, callback, builder) {\r\n if (callback && typeof callback === 'object')\r\n builder = callback,\r\n callback = null;\r\n else if (!callback || typeof callback !== 'function')\r\n callback = null;\r\n if (callback)\r\n return ProtoBuf.Util.fetch(typeof filename === 'string' ? filename : filename[\"root\"]+\"/\"+filename[\"file\"], function(contents) {\r\n if (contents === null) {\r\n callback(Error(\"Failed to fetch file\"));\r\n return;\r\n }\r\n try {\r\n callback(null, ProtoBuf.loadJson(JSON.parse(contents), builder, filename));\r\n } catch (e) {\r\n callback(e);\r\n }\r\n });\r\n var contents = ProtoBuf.Util.fetch(typeof filename === 'object' ? filename[\"root\"]+\"/\"+filename[\"file\"] : filename);\r\n return contents === null ? null : ProtoBuf.loadJson(JSON.parse(contents), builder, filename);\r\n };\r\n\r\n return ProtoBuf;\r\n});\r\n"]} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","build/js/machinetalk/protobuf/canon.js","build/js/machinetalk/protobuf/config.js","build/js/machinetalk/protobuf/emcclass.js","build/js/machinetalk/protobuf/firmware.js","build/js/machinetalk/protobuf/jplan.js","build/js/machinetalk/protobuf/log.js","build/js/machinetalk/protobuf/message.js","build/js/machinetalk/protobuf/motcmds.js","build/js/machinetalk/protobuf/nanopb.js","build/js/machinetalk/protobuf/object.js","build/js/machinetalk/protobuf/preview.js","build/js/machinetalk/protobuf/ros.js","build/js/machinetalk/protobuf/rtapi_message.js","build/js/machinetalk/protobuf/rtapicommand.js","build/js/machinetalk/protobuf/status.js","build/js/machinetalk/protobuf/task.js","build/js/machinetalk/protobuf/test.js","build/js/machinetalk/protobuf/types.js","build/js/machinetalk/protobuf/value.js","build/js/protoexport.js","node_modules/bytebuffer/dist/bytebuffer.js","node_modules/bytebuffer/node_modules/long/dist/long.js","node_modules/process/browser.js","node_modules/protobufjs/dist/protobuf.js"],"names":["module","exports","require","newBuilder","package","syntax","options","java_package","messages","name","fields","rule","type","id","default","(nanopb_msgopt).msgid","enums","values","isNamespace","build","(nanopb).max_size","(nanopb).max_count","(nanopb).type","pb","global","factory","define","Long","e","this","stringSource","s","i","length","charCodeAt","stringDestination","cs","ps","arguments","join","stringFromCharCode","apply","String","push","Array","prototype","ieee754_read","buffer","offset","isLE","mLen","nBytes","m","eLen","eMax","eBias","nBits","d","NaN","Infinity","Math","pow","ieee754_write","value","c","rt","abs","isNaN","floor","log","LN2","ByteBuffer","capacity","littleEndian","noAssert","DEFAULT_CAPACITY","DEFAULT_ENDIAN","DEFAULT_NOASSERT","RangeError","EMPTY_BUFFER","ArrayBuffer","view","Uint8Array","markedOffset","limit","VERSION","LITTLE_ENDIAN","BIG_ENDIAN","ByteBufferPrototype","__isByteBuffer__","Object","defineProperty","enumerable","configurable","fromCharCode","accessor","allocate","concat","buffers","encoding","undefined","k","isByteBuffer","wrap","bi","bb","set","subarray","fromBase64","fromHex","fromBinary","fromUTF8","fromDebug","Error","TypeError","clone","call","byteOffset","byteLength","toString","writeBitSet","relative","start","bits","bytes","bit","writeVarint32","writeByte","readBitSet","ret","readVarint32","readByte","readBytes","slice","writeBytes","append","writeInt8","capacity0","resize","readInt8","writeUint8","capacity1","writeUInt8","readUint8","readUInt8","writeInt16","capacity2","writeShort","readInt16","readShort","writeUint16","capacity3","writeUInt16","readUint16","readUInt16","writeInt32","capacity4","writeInt","readInt32","readInt","writeUint32","capacity5","writeUInt32","readUint32","readUInt32","writeInt64","fromNumber","fromString","capacity6","lo","low","hi","high","writeLong","readInt64","readLong","writeUint64","capacity7","writeUInt64","readUint64","readUInt64","writeFloat32","capacity8","writeFloat","readFloat32","readFloat","writeFloat64","capacity9","writeDouble","readFloat64","readDouble","MAX_VARINT32_BYTES","calculateVarint32","zigZagEncode32","n","zigZagDecode32","b","size","capacity10","writeVarint32ZigZag","err","readVarint32ZigZag","val","MAX_VARINT64_BYTES","calculateVarint64","part0","toInt","part1","shiftRightUnsigned","part2","zigZagEncode64","unsigned","toSigned","shiftLeft","xor","shiftRight","toUnsigned","zigZagDecode64","and","ONE","negate","writeVarint64","capacity11","writeVarint64ZigZag","readVarint64","fromBits","readVarint64ZigZag","writeCString","str","utfx","calculateUTF16asUTF8","capacity12","encodeUTF16toUTF8","bind","readCString","sd","decodeUTF8toUTF16","string","writeIString","capacity13","readIString","len","readUTF8String","METRICS_BYTES","METRICS_CHARS","writeUTF8String","capacity14","writeString","calculateUTF8Chars","calculateUTF8Bytes","calculateString","metrics","decodeUTF8","cp","UTF8toUTF16","readString","writeVString","l","capacity15","readVString","source","capacity16","appendTo","target","assert","clear","copy","compact","begin","end","copyTo","targetOffset","sourceOffset","sourceLimit","targetRelative","ensureCapacity","current","fill","flip","mark","order","LE","BE","bigEndian","prepend","diff","prependTo","printDebug","out","console","toDebug","remaining","reset","reverse","skip","toBuffer","forceCopy","toArrayBuffer","toUTF8","toBase64","toHex","toBinary","toColumns","lxiv","aout","ain","encode","src","dst","t","decode","fail","t1","t2","test","btoa","atob","b64","chars","parts","charCode","columns","hex","asc","toUpperCase","ch","j","rs","ho","hm","hl","charAt","parseInt","substring","isFinite","MAX_CODEPOINT","encodeUTF8","a","indexOf","UTF16toUTF8","c1","c2","calculateCodePoint","calculateUTF8","isLong","obj","fromInt","cachedObj","cache","UINT_CACHE","INT_CACHE","UZERO","ZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","MIN_VALUE","MAX_VALUE","neg","TWO_PWR_32_DBL","lowBits","highBits","radix","p","radixToPower","pow_dbl","result","min","power","mul","add","fromValue","__isLong__","TWO_PWR_16_DBL","TWO_PWR_24","UONE","NEG_ONE","LongPrototype","toNumber","isZero","isNegative","eq","radixLong","div","rem1","sub","rem","remDiv","intval","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","isPositive","isOdd","isEven","equals","other","notEquals","neq","lessThan","comp","lt","lessThanOrEqual","lte","greaterThan","gt","greaterThanOrEqual","gte","compare","thisNeg","otherNeg","not","addend","a48","a32","a16","a00","b48","b32","b16","b00","c48","c32","c16","c00","subtract","subtrahend","multiply","multiplier","divide","divisor","approx","res","shru","shr","shl","max","log2","ceil","delta","approxRes","approxRem","modulo","mod","or","numBits","toBytes","le","toBytesLE","toBytesBE","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","setTimeout","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","queue","queueIndex","drainQueue","timeout","run","Item","array","noop","process","nextTick","args","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","isCommonJS","ProtoBuf","WIRE_TYPES","VARINT","BITS64","LDELIM","STARTGROUP","ENDGROUP","BITS32","PACKABLE_WIRE_TYPES","TYPES","int32","wireType","defaultValue","uint32","sint32","int64","uint64","sint64","bool","double","fixed32","sfixed32","fixed64","sfixed64","float","enum","message","group","MAP_KEY_TYPES","ID_MIN","ID_MAX","convertFieldsToCamelCase","populateAccessors","populateDefaults","Util","IS_NODE","XHR","XMLHttpFactories","XMLHttpRequest","ActiveXObject","xhr","fetch","path","callback","fs","readFile","data","readFileSync","open","setRequestHeader","overrideMimeType","send","status","responseText","onreadystatechange","readyState","toCamelCase","replace","$0","$1","Lang","DELIM","RULE","TYPE","NAME","TYPEDEF","TYPEREF","FQTYPEREF","NUMBER","NUMBER_DEC","NUMBER_HEX","NUMBER_OCT","NUMBER_FLT","BOOL","ID","NEGID","WHITESPACE","STRING","STRING_DQ","STRING_SQ","DotProto","mkId","mayBeNegative","sign","mkNumber","parseFloat","setOption","isArray","Tokenizer","proto","index","line","stack","_stringOpen","TokenizerPrototype","_readString","re","lastIndex","match","exec","next","shift","repeat","prev","token","peek","expected","actual","omit","Parser","tn","proto3","ParserPrototype","parse","weak","topLevel","imports","services","head","_parseMessage","_parseEnum","_parseOption","_parseService","_parseExtend","delim","_readValue","mayBeTypeRef","toLowerCase","parent","isList","custom","_parseOptionValue","svc","rpc","_parseServiceRPC","method","request","response","request_stream","response_stream","fld","isGroup","msg","oneofs","_parseFieldOptions","_parseMessageField","_parseMessageOneOf","hasOwnProperty","_parseExtensionRanges","_parseIgnored","grp","first","enm","range","ranges","ext","ref","Reflect","mkDefault","mkLong","skipTillGroupEnd","expectedId","buf","tag","T","builder","className","TPrototype","fqn","ptr","includeClass","Namespace","children","NamespacePrototype","create","getChildren","addChild","child","getChild","Message","Field","originalName","nameOrId","key","resolve","qn","excludeNonNamespace","part","split","unshift","ns","buildOpt","opt","keys","getOption","Element","resolvedType","isMapKey","ElementPrototype","defaultFieldValue","verifyValue","self","Enum","Value","clazz","Builder","calculateLength","calculate","encodeValue","prevOffset","valueFromString","valueToString","extensions","_fields","_fieldsById","_fieldsByName","MessagePrototype","rebuild","cloneRaw","binaryAsBase64","longsAsStrings","getName","object","forEach","v","Map","it","entries","done","keyElem","valueElem","$type","field","OneOf","var_args","repeated","map","required","$set","$add","keyOrObj","ikey","_oneofsByName","oneof","currentField","get","$get","ExtensionField","Name","setter","getter","noVerify","isNew","encodeDelimited","enc","encodeAB","encodeNB","encode64","encodeHex","toRaw","encodeJSON","JSON","stringify","decodeDelimited","decode64","decodeHex","decodeJSON","Service","Extension","fieldMissing","expectedGroupEndId","keyval","keytype","keyType","element","keyElement","FieldPrototype","skipRepeated","hasWirePresence","varintLen","contents","ni","msgbuf","extension","root","rpcImpl","ServicePrototype","RPCMethod","req","resolvedRequestType","resolvedResponseType","notABuffer","Method","requestName","responseName","requestStream","responseStream","propagateSyntax","resolved","files","importRoot","BuilderPrototype","isMessage","def","isMessageField","isEnum","isService","isExtend","namespace","defs","pop","subObj","mtd","valid","json","filename","file","fname","resetRoot","importFilename","$2","base","resolveAll","packed","lookup","arrayIterator","arr","idx","MapPrototype","keyValue","hadKey","entry","strKeys","cb","thisArg","valValue","has","loadProto","loadJson","protoFromString","loadProtoFile","protoFromFile","loadJsonFile"],"mappings":"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","file":"bundle.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i\r\n\r\n Licensed under the Apache License, Version 2.0 (the \"License\");\r\n you may not use this file except in compliance with the License.\r\n You may obtain a copy of the License at\r\n\r\n http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n Unless required by applicable law or agreed to in writing, software\r\n distributed under the License is distributed on an \"AS IS\" BASIS,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n See the License for the specific language governing permissions and\r\n limitations under the License.\r\n */\r\n\r\n/**\r\n * @license bytebuffer.js (c) 2015 Daniel Wirtz \r\n * Backing buffer: ArrayBuffer, Accessor: Uint8Array\r\n * Released under the Apache License, Version 2.0\r\n * see: https://github.com/dcodeIO/bytebuffer.js for details\r\n */\r\n(function(global, factory) {\r\n\r\n /* AMD */ if (typeof define === 'function' && define[\"amd\"])\r\n define([\"long\"], factory);\r\n /* CommonJS */ else if (typeof require === 'function' && typeof module === \"object\" && module && module[\"exports\"])\r\n module['exports'] = (function() {\r\n var Long; try { Long = require(\"long\"); } catch (e) {}\r\n return factory(Long);\r\n })();\r\n /* Global */ else\r\n (global[\"dcodeIO\"] = global[\"dcodeIO\"] || {})[\"ByteBuffer\"] = factory(global[\"dcodeIO\"][\"Long\"]);\r\n\r\n})(this, function(Long) {\r\n \"use strict\";\r\n\r\n /**\r\n * Constructs a new ByteBuffer.\r\n * @class The swiss army knife for binary data in JavaScript.\r\n * @exports ByteBuffer\r\n * @constructor\r\n * @param {number=} capacity Initial capacity. Defaults to {@link ByteBuffer.DEFAULT_CAPACITY}.\r\n * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n * {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n * @param {boolean=} noAssert Whether to skip assertions of offsets and values. Defaults to\r\n * {@link ByteBuffer.DEFAULT_NOASSERT}.\r\n * @expose\r\n */\r\n var ByteBuffer = function(capacity, littleEndian, noAssert) {\r\n if (typeof capacity === 'undefined')\r\n capacity = ByteBuffer.DEFAULT_CAPACITY;\r\n if (typeof littleEndian === 'undefined')\r\n littleEndian = ByteBuffer.DEFAULT_ENDIAN;\r\n if (typeof noAssert === 'undefined')\r\n noAssert = ByteBuffer.DEFAULT_NOASSERT;\r\n if (!noAssert) {\r\n capacity = capacity | 0;\r\n if (capacity < 0)\r\n throw RangeError(\"Illegal capacity\");\r\n littleEndian = !!littleEndian;\r\n noAssert = !!noAssert;\r\n }\r\n\r\n /**\r\n * Backing ArrayBuffer.\r\n * @type {!ArrayBuffer}\r\n * @expose\r\n */\r\n this.buffer = capacity === 0 ? EMPTY_BUFFER : new ArrayBuffer(capacity);\r\n\r\n /**\r\n * Uint8Array utilized to manipulate the backing buffer. Becomes `null` if the backing buffer has a capacity of `0`.\r\n * @type {?Uint8Array}\r\n * @expose\r\n */\r\n this.view = capacity === 0 ? null : new Uint8Array(this.buffer);\r\n\r\n /**\r\n * Absolute read/write offset.\r\n * @type {number}\r\n * @expose\r\n * @see ByteBuffer#flip\r\n * @see ByteBuffer#clear\r\n */\r\n this.offset = 0;\r\n\r\n /**\r\n * Marked offset.\r\n * @type {number}\r\n * @expose\r\n * @see ByteBuffer#mark\r\n * @see ByteBuffer#reset\r\n */\r\n this.markedOffset = -1;\r\n\r\n /**\r\n * Absolute limit of the contained data. Set to the backing buffer's capacity upon allocation.\r\n * @type {number}\r\n * @expose\r\n * @see ByteBuffer#flip\r\n * @see ByteBuffer#clear\r\n */\r\n this.limit = capacity;\r\n\r\n /**\r\n * Whether to use little endian byte order, defaults to `false` for big endian.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n this.littleEndian = littleEndian;\r\n\r\n /**\r\n * Whether to skip assertions of offsets and values, defaults to `false`.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n this.noAssert = noAssert;\r\n };\r\n\r\n /**\r\n * ByteBuffer version.\r\n * @type {string}\r\n * @const\r\n * @expose\r\n */\r\n ByteBuffer.VERSION = \"5.0.1\";\r\n\r\n /**\r\n * Little endian constant that can be used instead of its boolean value. Evaluates to `true`.\r\n * @type {boolean}\r\n * @const\r\n * @expose\r\n */\r\n ByteBuffer.LITTLE_ENDIAN = true;\r\n\r\n /**\r\n * Big endian constant that can be used instead of its boolean value. Evaluates to `false`.\r\n * @type {boolean}\r\n * @const\r\n * @expose\r\n */\r\n ByteBuffer.BIG_ENDIAN = false;\r\n\r\n /**\r\n * Default initial capacity of `16`.\r\n * @type {number}\r\n * @expose\r\n */\r\n ByteBuffer.DEFAULT_CAPACITY = 16;\r\n\r\n /**\r\n * Default endianess of `false` for big endian.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n ByteBuffer.DEFAULT_ENDIAN = ByteBuffer.BIG_ENDIAN;\r\n\r\n /**\r\n * Default no assertions flag of `false`.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n ByteBuffer.DEFAULT_NOASSERT = false;\r\n\r\n /**\r\n * A `Long` class for representing a 64-bit two's-complement integer value. May be `null` if Long.js has not been loaded\r\n * and int64 support is not available.\r\n * @type {?Long}\r\n * @const\r\n * @see https://github.com/dcodeIO/long.js\r\n * @expose\r\n */\r\n ByteBuffer.Long = Long || null;\r\n\r\n /**\r\n * @alias ByteBuffer.prototype\r\n * @inner\r\n */\r\n var ByteBufferPrototype = ByteBuffer.prototype;\r\n\r\n /**\r\n * An indicator used to reliably determine if an object is a ByteBuffer or not.\r\n * @type {boolean}\r\n * @const\r\n * @expose\r\n * @private\r\n */\r\n ByteBufferPrototype.__isByteBuffer__;\r\n\r\n Object.defineProperty(ByteBufferPrototype, \"__isByteBuffer__\", {\r\n value: true,\r\n enumerable: false,\r\n configurable: false\r\n });\r\n\r\n // helpers\r\n\r\n /**\r\n * @type {!ArrayBuffer}\r\n * @inner\r\n */\r\n var EMPTY_BUFFER = new ArrayBuffer(0);\r\n\r\n /**\r\n * String.fromCharCode reference for compile-time renaming.\r\n * @type {function(...number):string}\r\n * @inner\r\n */\r\n var stringFromCharCode = String.fromCharCode;\r\n\r\n /**\r\n * Creates a source function for a string.\r\n * @param {string} s String to read from\r\n * @returns {function():number|null} Source function returning the next char code respectively `null` if there are\r\n * no more characters left.\r\n * @throws {TypeError} If the argument is invalid\r\n * @inner\r\n */\r\n function stringSource(s) {\r\n var i=0; return function() {\r\n return i < s.length ? s.charCodeAt(i++) : null;\r\n };\r\n }\r\n\r\n /**\r\n * Creates a destination function for a string.\r\n * @returns {function(number=):undefined|string} Destination function successively called with the next char code.\r\n * Returns the final string when called without arguments.\r\n * @inner\r\n */\r\n function stringDestination() {\r\n var cs = [], ps = []; return function() {\r\n if (arguments.length === 0)\r\n return ps.join('')+stringFromCharCode.apply(String, cs);\r\n if (cs.length + arguments.length > 1024)\r\n ps.push(stringFromCharCode.apply(String, cs)),\r\n cs.length = 0;\r\n Array.prototype.push.apply(cs, arguments);\r\n };\r\n }\r\n\r\n /**\r\n * Gets the accessor type.\r\n * @returns {Function} `Buffer` under node.js, `Uint8Array` respectively `DataView` in the browser (classes)\r\n * @expose\r\n */\r\n ByteBuffer.accessor = function() {\r\n return Uint8Array;\r\n };\r\n /**\r\n * Allocates a new ByteBuffer backed by a buffer of the specified capacity.\r\n * @param {number=} capacity Initial capacity. Defaults to {@link ByteBuffer.DEFAULT_CAPACITY}.\r\n * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n * {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n * @param {boolean=} noAssert Whether to skip assertions of offsets and values. Defaults to\r\n * {@link ByteBuffer.DEFAULT_NOASSERT}.\r\n * @returns {!ByteBuffer}\r\n * @expose\r\n */\r\n ByteBuffer.allocate = function(capacity, littleEndian, noAssert) {\r\n return new ByteBuffer(capacity, littleEndian, noAssert);\r\n };\r\n\r\n /**\r\n * Concatenates multiple ByteBuffers into one.\r\n * @param {!Array.} buffers Buffers to concatenate\r\n * @param {(string|boolean)=} encoding String encoding if `buffers` contains a string (\"base64\", \"hex\", \"binary\",\r\n * defaults to \"utf8\")\r\n * @param {boolean=} littleEndian Whether to use little or big endian byte order for the resulting ByteBuffer. Defaults\r\n * to {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n * @param {boolean=} noAssert Whether to skip assertions of offsets and values for the resulting ByteBuffer. Defaults to\r\n * {@link ByteBuffer.DEFAULT_NOASSERT}.\r\n * @returns {!ByteBuffer} Concatenated ByteBuffer\r\n * @expose\r\n */\r\n ByteBuffer.concat = function(buffers, encoding, littleEndian, noAssert) {\r\n if (typeof encoding === 'boolean' || typeof encoding !== 'string') {\r\n noAssert = littleEndian;\r\n littleEndian = encoding;\r\n encoding = undefined;\r\n }\r\n var capacity = 0;\r\n for (var i=0, k=buffers.length, length; i 0) capacity += length;\r\n }\r\n if (capacity === 0)\r\n return new ByteBuffer(0, littleEndian, noAssert);\r\n var bb = new ByteBuffer(capacity, littleEndian, noAssert),\r\n bi;\r\n i=0; while (i} buffer Anything that can be wrapped\r\n * @param {(string|boolean)=} encoding String encoding if `buffer` is a string (\"base64\", \"hex\", \"binary\", defaults to\r\n * \"utf8\")\r\n * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n * {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n * @param {boolean=} noAssert Whether to skip assertions of offsets and values. Defaults to\r\n * {@link ByteBuffer.DEFAULT_NOASSERT}.\r\n * @returns {!ByteBuffer} A ByteBuffer wrapping `buffer`\r\n * @expose\r\n */\r\n ByteBuffer.wrap = function(buffer, encoding, littleEndian, noAssert) {\r\n if (typeof encoding !== 'string') {\r\n noAssert = littleEndian;\r\n littleEndian = encoding;\r\n encoding = undefined;\r\n }\r\n if (typeof buffer === 'string') {\r\n if (typeof encoding === 'undefined')\r\n encoding = \"utf8\";\r\n switch (encoding) {\r\n case \"base64\":\r\n return ByteBuffer.fromBase64(buffer, littleEndian);\r\n case \"hex\":\r\n return ByteBuffer.fromHex(buffer, littleEndian);\r\n case \"binary\":\r\n return ByteBuffer.fromBinary(buffer, littleEndian);\r\n case \"utf8\":\r\n return ByteBuffer.fromUTF8(buffer, littleEndian);\r\n case \"debug\":\r\n return ByteBuffer.fromDebug(buffer, littleEndian);\r\n default:\r\n throw Error(\"Unsupported encoding: \"+encoding);\r\n }\r\n }\r\n if (buffer === null || typeof buffer !== 'object')\r\n throw TypeError(\"Illegal buffer\");\r\n var bb;\r\n if (ByteBuffer.isByteBuffer(buffer)) {\r\n bb = ByteBufferPrototype.clone.call(buffer);\r\n bb.markedOffset = -1;\r\n return bb;\r\n }\r\n if (buffer instanceof Uint8Array) { // Extract ArrayBuffer from Uint8Array\r\n bb = new ByteBuffer(0, littleEndian, noAssert);\r\n if (buffer.length > 0) { // Avoid references to more than one EMPTY_BUFFER\r\n bb.buffer = buffer.buffer;\r\n bb.offset = buffer.byteOffset;\r\n bb.limit = buffer.byteOffset + buffer.byteLength;\r\n bb.view = new Uint8Array(buffer.buffer);\r\n }\r\n } else if (buffer instanceof ArrayBuffer) { // Reuse ArrayBuffer\r\n bb = new ByteBuffer(0, littleEndian, noAssert);\r\n if (buffer.byteLength > 0) {\r\n bb.buffer = buffer;\r\n bb.offset = 0;\r\n bb.limit = buffer.byteLength;\r\n bb.view = buffer.byteLength > 0 ? new Uint8Array(buffer) : null;\r\n }\r\n } else if (Object.prototype.toString.call(buffer) === \"[object Array]\") { // Create from octets\r\n bb = new ByteBuffer(buffer.length, littleEndian, noAssert);\r\n bb.limit = buffer.length;\r\n for (var i=0; i} value Array of booleans to write\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `length` if omitted.\r\n * @returns {!ByteBuffer}\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeBitSet = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (!(value instanceof Array))\r\n throw TypeError(\"Illegal BitSet: Not an array\");\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n\r\n var start = offset,\r\n bits = value.length,\r\n bytes = (bits >> 3),\r\n bit = 0,\r\n k;\r\n\r\n offset += this.writeVarint32(bits,offset);\r\n\r\n while(bytes--) {\r\n k = (!!value[bit++] & 1) |\r\n ((!!value[bit++] & 1) << 1) |\r\n ((!!value[bit++] & 1) << 2) |\r\n ((!!value[bit++] & 1) << 3) |\r\n ((!!value[bit++] & 1) << 4) |\r\n ((!!value[bit++] & 1) << 5) |\r\n ((!!value[bit++] & 1) << 6) |\r\n ((!!value[bit++] & 1) << 7);\r\n this.writeByte(k,offset++);\r\n }\r\n\r\n if(bit < bits) {\r\n var m = 0; k = 0;\r\n while(bit < bits) k = k | ((!!value[bit++] & 1) << (m++));\r\n this.writeByte(k,offset++);\r\n }\r\n\r\n if (relative) {\r\n this.offset = offset;\r\n return this;\r\n }\r\n return offset - start;\r\n }\r\n\r\n /**\r\n * Reads a BitSet as an array of booleans.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `length` if omitted.\r\n * @returns {Array\r\n * @expose\r\n */\r\n ByteBufferPrototype.readBitSet = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n\r\n var ret = this.readVarint32(offset),\r\n bits = ret.value,\r\n bytes = (bits >> 3),\r\n bit = 0,\r\n value = [],\r\n k;\r\n\r\n offset += ret.length;\r\n\r\n while(bytes--) {\r\n k = this.readByte(offset++);\r\n value[bit++] = !!(k & 0x01);\r\n value[bit++] = !!(k & 0x02);\r\n value[bit++] = !!(k & 0x04);\r\n value[bit++] = !!(k & 0x08);\r\n value[bit++] = !!(k & 0x10);\r\n value[bit++] = !!(k & 0x20);\r\n value[bit++] = !!(k & 0x40);\r\n value[bit++] = !!(k & 0x80);\r\n }\r\n\r\n if(bit < bits) {\r\n var m = 0;\r\n k = this.readByte(offset++);\r\n while(bit < bits) value[bit++] = !!((k >> (m++)) & 1);\r\n }\r\n\r\n if (relative) {\r\n this.offset = offset;\r\n }\r\n return value;\r\n }\r\n /**\r\n * Reads the specified number of bytes.\r\n * @param {number} length Number of bytes to read\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `length` if omitted.\r\n * @returns {!ByteBuffer}\r\n * @expose\r\n */\r\n ByteBufferPrototype.readBytes = function(length, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + length > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+length+\") <= \"+this.buffer.byteLength);\n }\r\n var slice = this.slice(offset, offset + length);\r\n if (relative) this.offset += length;\n return slice;\r\n };\r\n\r\n /**\r\n * Writes a payload of bytes. This is an alias of {@link ByteBuffer#append}.\r\n * @function\r\n * @param {!ByteBuffer|!ArrayBuffer|!Uint8Array|string} source Data to write. If `source` is a ByteBuffer, its offsets\r\n * will be modified according to the performed read operation.\r\n * @param {(string|number)=} encoding Encoding if `data` is a string (\"base64\", \"hex\", \"binary\", defaults to \"utf8\")\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * written if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeBytes = ByteBufferPrototype.append;\r\n\r\n // types/ints/int8\r\n\r\n /**\r\n * Writes an 8bit signed integer.\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeInt8 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value !== 'number' || value % 1 !== 0)\n throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n value |= 0;\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n offset += 1;\n var capacity0 = this.buffer.byteLength;\n if (offset > capacity0)\n this.resize((capacity0 *= 2) > offset ? capacity0 : offset);\n offset -= 1;\n this.view[offset] = value;\r\n if (relative) this.offset += 1;\n return this;\r\n };\r\n\r\n /**\r\n * Writes an 8bit signed integer. This is an alias of {@link ByteBuffer#writeInt8}.\r\n * @function\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeByte = ByteBufferPrototype.writeInt8;\r\n\r\n /**\r\n * Reads an 8bit signed integer.\r\n * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n * @returns {number} Value read\r\n * @expose\r\n */\r\n ByteBufferPrototype.readInt8 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 1 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+1+\") <= \"+this.buffer.byteLength);\n }\r\n var value = this.view[offset];\r\n if ((value & 0x80) === 0x80) value = -(0xFF - value + 1); // Cast to signed\r\n if (relative) this.offset += 1;\n return value;\r\n };\r\n\r\n /**\r\n * Reads an 8bit signed integer. This is an alias of {@link ByteBuffer#readInt8}.\r\n * @function\r\n * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n * @returns {number} Value read\r\n * @expose\r\n */\r\n ByteBufferPrototype.readByte = ByteBufferPrototype.readInt8;\r\n\r\n /**\r\n * Writes an 8bit unsigned integer.\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeUint8 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value !== 'number' || value % 1 !== 0)\n throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n value >>>= 0;\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n offset += 1;\n var capacity1 = this.buffer.byteLength;\n if (offset > capacity1)\n this.resize((capacity1 *= 2) > offset ? capacity1 : offset);\n offset -= 1;\n this.view[offset] = value;\r\n if (relative) this.offset += 1;\n return this;\r\n };\r\n\r\n /**\r\n * Writes an 8bit unsigned integer. This is an alias of {@link ByteBuffer#writeUint8}.\r\n * @function\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeUInt8 = ByteBufferPrototype.writeUint8;\r\n\r\n /**\r\n * Reads an 8bit unsigned integer.\r\n * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n * @returns {number} Value read\r\n * @expose\r\n */\r\n ByteBufferPrototype.readUint8 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 1 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+1+\") <= \"+this.buffer.byteLength);\n }\r\n var value = this.view[offset];\r\n if (relative) this.offset += 1;\n return value;\r\n };\r\n\r\n /**\r\n * Reads an 8bit unsigned integer. This is an alias of {@link ByteBuffer#readUint8}.\r\n * @function\r\n * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `1` if omitted.\r\n * @returns {number} Value read\r\n * @expose\r\n */\r\n ByteBufferPrototype.readUInt8 = ByteBufferPrototype.readUint8;\r\n\r\n // types/ints/int16\r\n\r\n /**\r\n * Writes a 16bit signed integer.\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n * @throws {TypeError} If `offset` or `value` is not a valid number\r\n * @throws {RangeError} If `offset` is out of bounds\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeInt16 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value !== 'number' || value % 1 !== 0)\n throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n value |= 0;\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n offset += 2;\n var capacity2 = this.buffer.byteLength;\n if (offset > capacity2)\n this.resize((capacity2 *= 2) > offset ? capacity2 : offset);\n offset -= 2;\n if (this.littleEndian) {\r\n this.view[offset+1] = (value & 0xFF00) >>> 8;\r\n this.view[offset ] = value & 0x00FF;\r\n } else {\r\n this.view[offset] = (value & 0xFF00) >>> 8;\r\n this.view[offset+1] = value & 0x00FF;\r\n }\r\n if (relative) this.offset += 2;\n return this;\r\n };\r\n\r\n /**\r\n * Writes a 16bit signed integer. This is an alias of {@link ByteBuffer#writeInt16}.\r\n * @function\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n * @throws {TypeError} If `offset` or `value` is not a valid number\r\n * @throws {RangeError} If `offset` is out of bounds\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeShort = ByteBufferPrototype.writeInt16;\r\n\r\n /**\r\n * Reads a 16bit signed integer.\r\n * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n * @returns {number} Value read\r\n * @throws {TypeError} If `offset` is not a valid number\r\n * @throws {RangeError} If `offset` is out of bounds\r\n * @expose\r\n */\r\n ByteBufferPrototype.readInt16 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 2 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+2+\") <= \"+this.buffer.byteLength);\n }\r\n var value = 0;\r\n if (this.littleEndian) {\r\n value = this.view[offset ];\r\n value |= this.view[offset+1] << 8;\r\n } else {\r\n value = this.view[offset ] << 8;\r\n value |= this.view[offset+1];\r\n }\r\n if ((value & 0x8000) === 0x8000) value = -(0xFFFF - value + 1); // Cast to signed\r\n if (relative) this.offset += 2;\n return value;\r\n };\r\n\r\n /**\r\n * Reads a 16bit signed integer. This is an alias of {@link ByteBuffer#readInt16}.\r\n * @function\r\n * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n * @returns {number} Value read\r\n * @throws {TypeError} If `offset` is not a valid number\r\n * @throws {RangeError} If `offset` is out of bounds\r\n * @expose\r\n */\r\n ByteBufferPrototype.readShort = ByteBufferPrototype.readInt16;\r\n\r\n /**\r\n * Writes a 16bit unsigned integer.\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n * @throws {TypeError} If `offset` or `value` is not a valid number\r\n * @throws {RangeError} If `offset` is out of bounds\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeUint16 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value !== 'number' || value % 1 !== 0)\n throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n value >>>= 0;\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n offset += 2;\n var capacity3 = this.buffer.byteLength;\n if (offset > capacity3)\n this.resize((capacity3 *= 2) > offset ? capacity3 : offset);\n offset -= 2;\n if (this.littleEndian) {\r\n this.view[offset+1] = (value & 0xFF00) >>> 8;\r\n this.view[offset ] = value & 0x00FF;\r\n } else {\r\n this.view[offset] = (value & 0xFF00) >>> 8;\r\n this.view[offset+1] = value & 0x00FF;\r\n }\r\n if (relative) this.offset += 2;\n return this;\r\n };\r\n\r\n /**\r\n * Writes a 16bit unsigned integer. This is an alias of {@link ByteBuffer#writeUint16}.\r\n * @function\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n * @throws {TypeError} If `offset` or `value` is not a valid number\r\n * @throws {RangeError} If `offset` is out of bounds\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeUInt16 = ByteBufferPrototype.writeUint16;\r\n\r\n /**\r\n * Reads a 16bit unsigned integer.\r\n * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n * @returns {number} Value read\r\n * @throws {TypeError} If `offset` is not a valid number\r\n * @throws {RangeError} If `offset` is out of bounds\r\n * @expose\r\n */\r\n ByteBufferPrototype.readUint16 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 2 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+2+\") <= \"+this.buffer.byteLength);\n }\r\n var value = 0;\r\n if (this.littleEndian) {\r\n value = this.view[offset ];\r\n value |= this.view[offset+1] << 8;\r\n } else {\r\n value = this.view[offset ] << 8;\r\n value |= this.view[offset+1];\r\n }\r\n if (relative) this.offset += 2;\n return value;\r\n };\r\n\r\n /**\r\n * Reads a 16bit unsigned integer. This is an alias of {@link ByteBuffer#readUint16}.\r\n * @function\r\n * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `2` if omitted.\r\n * @returns {number} Value read\r\n * @throws {TypeError} If `offset` is not a valid number\r\n * @throws {RangeError} If `offset` is out of bounds\r\n * @expose\r\n */\r\n ByteBufferPrototype.readUInt16 = ByteBufferPrototype.readUint16;\r\n\r\n // types/ints/int32\r\n\r\n /**\r\n * Writes a 32bit signed integer.\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeInt32 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value !== 'number' || value % 1 !== 0)\n throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n value |= 0;\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n offset += 4;\n var capacity4 = this.buffer.byteLength;\n if (offset > capacity4)\n this.resize((capacity4 *= 2) > offset ? capacity4 : offset);\n offset -= 4;\n if (this.littleEndian) {\n this.view[offset+3] = (value >>> 24) & 0xFF;\n this.view[offset+2] = (value >>> 16) & 0xFF;\n this.view[offset+1] = (value >>> 8) & 0xFF;\n this.view[offset ] = value & 0xFF;\n } else {\n this.view[offset ] = (value >>> 24) & 0xFF;\n this.view[offset+1] = (value >>> 16) & 0xFF;\n this.view[offset+2] = (value >>> 8) & 0xFF;\n this.view[offset+3] = value & 0xFF;\n }\n if (relative) this.offset += 4;\n return this;\r\n };\r\n\r\n /**\r\n * Writes a 32bit signed integer. This is an alias of {@link ByteBuffer#writeInt32}.\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeInt = ByteBufferPrototype.writeInt32;\r\n\r\n /**\r\n * Reads a 32bit signed integer.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n * @returns {number} Value read\r\n * @expose\r\n */\r\n ByteBufferPrototype.readInt32 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 4 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+4+\") <= \"+this.buffer.byteLength);\n }\r\n var value = 0;\r\n if (this.littleEndian) {\n value = this.view[offset+2] << 16;\n value |= this.view[offset+1] << 8;\n value |= this.view[offset ];\n value += this.view[offset+3] << 24 >>> 0;\n } else {\n value = this.view[offset+1] << 16;\n value |= this.view[offset+2] << 8;\n value |= this.view[offset+3];\n value += this.view[offset ] << 24 >>> 0;\n }\n value |= 0; // Cast to signed\r\n if (relative) this.offset += 4;\n return value;\r\n };\r\n\r\n /**\r\n * Reads a 32bit signed integer. This is an alias of {@link ByteBuffer#readInt32}.\r\n * @param {number=} offset Offset to read from. Will use and advance {@link ByteBuffer#offset} by `4` if omitted.\r\n * @returns {number} Value read\r\n * @expose\r\n */\r\n ByteBufferPrototype.readInt = ByteBufferPrototype.readInt32;\r\n\r\n /**\r\n * Writes a 32bit unsigned integer.\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeUint32 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value !== 'number' || value % 1 !== 0)\n throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n value >>>= 0;\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n offset += 4;\n var capacity5 = this.buffer.byteLength;\n if (offset > capacity5)\n this.resize((capacity5 *= 2) > offset ? capacity5 : offset);\n offset -= 4;\n if (this.littleEndian) {\n this.view[offset+3] = (value >>> 24) & 0xFF;\n this.view[offset+2] = (value >>> 16) & 0xFF;\n this.view[offset+1] = (value >>> 8) & 0xFF;\n this.view[offset ] = value & 0xFF;\n } else {\n this.view[offset ] = (value >>> 24) & 0xFF;\n this.view[offset+1] = (value >>> 16) & 0xFF;\n this.view[offset+2] = (value >>> 8) & 0xFF;\n this.view[offset+3] = value & 0xFF;\n }\n if (relative) this.offset += 4;\n return this;\r\n };\r\n\r\n /**\r\n * Writes a 32bit unsigned integer. This is an alias of {@link ByteBuffer#writeUint32}.\r\n * @function\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeUInt32 = ByteBufferPrototype.writeUint32;\r\n\r\n /**\r\n * Reads a 32bit unsigned integer.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n * @returns {number} Value read\r\n * @expose\r\n */\r\n ByteBufferPrototype.readUint32 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 4 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+4+\") <= \"+this.buffer.byteLength);\n }\r\n var value = 0;\r\n if (this.littleEndian) {\n value = this.view[offset+2] << 16;\n value |= this.view[offset+1] << 8;\n value |= this.view[offset ];\n value += this.view[offset+3] << 24 >>> 0;\n } else {\n value = this.view[offset+1] << 16;\n value |= this.view[offset+2] << 8;\n value |= this.view[offset+3];\n value += this.view[offset ] << 24 >>> 0;\n }\n if (relative) this.offset += 4;\n return value;\r\n };\r\n\r\n /**\r\n * Reads a 32bit unsigned integer. This is an alias of {@link ByteBuffer#readUint32}.\r\n * @function\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n * @returns {number} Value read\r\n * @expose\r\n */\r\n ByteBufferPrototype.readUInt32 = ByteBufferPrototype.readUint32;\r\n\r\n // types/ints/int64\r\n\r\n if (Long) {\r\n\r\n /**\r\n * Writes a 64bit signed integer.\r\n * @param {number|!Long} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeInt64 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value === 'number')\n value = Long.fromNumber(value);\n else if (typeof value === 'string')\n value = Long.fromString(value);\n else if (!(value && value instanceof Long))\n throw TypeError(\"Illegal value: \"+value+\" (not an integer or Long)\");\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n if (typeof value === 'number')\n value = Long.fromNumber(value);\n else if (typeof value === 'string')\n value = Long.fromString(value);\n offset += 8;\n var capacity6 = this.buffer.byteLength;\n if (offset > capacity6)\n this.resize((capacity6 *= 2) > offset ? capacity6 : offset);\n offset -= 8;\n var lo = value.low,\r\n hi = value.high;\r\n if (this.littleEndian) {\r\n this.view[offset+3] = (lo >>> 24) & 0xFF;\n this.view[offset+2] = (lo >>> 16) & 0xFF;\n this.view[offset+1] = (lo >>> 8) & 0xFF;\n this.view[offset ] = lo & 0xFF;\n offset += 4;\r\n this.view[offset+3] = (hi >>> 24) & 0xFF;\n this.view[offset+2] = (hi >>> 16) & 0xFF;\n this.view[offset+1] = (hi >>> 8) & 0xFF;\n this.view[offset ] = hi & 0xFF;\n } else {\r\n this.view[offset ] = (hi >>> 24) & 0xFF;\n this.view[offset+1] = (hi >>> 16) & 0xFF;\n this.view[offset+2] = (hi >>> 8) & 0xFF;\n this.view[offset+3] = hi & 0xFF;\n offset += 4;\r\n this.view[offset ] = (lo >>> 24) & 0xFF;\n this.view[offset+1] = (lo >>> 16) & 0xFF;\n this.view[offset+2] = (lo >>> 8) & 0xFF;\n this.view[offset+3] = lo & 0xFF;\n }\r\n if (relative) this.offset += 8;\n return this;\r\n };\r\n\r\n /**\r\n * Writes a 64bit signed integer. This is an alias of {@link ByteBuffer#writeInt64}.\r\n * @param {number|!Long} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeLong = ByteBufferPrototype.writeInt64;\r\n\r\n /**\r\n * Reads a 64bit signed integer.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {!Long}\r\n * @expose\r\n */\r\n ByteBufferPrototype.readInt64 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 8 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+8+\") <= \"+this.buffer.byteLength);\n }\r\n var lo = 0,\r\n hi = 0;\r\n if (this.littleEndian) {\r\n lo = this.view[offset+2] << 16;\n lo |= this.view[offset+1] << 8;\n lo |= this.view[offset ];\n lo += this.view[offset+3] << 24 >>> 0;\n offset += 4;\r\n hi = this.view[offset+2] << 16;\n hi |= this.view[offset+1] << 8;\n hi |= this.view[offset ];\n hi += this.view[offset+3] << 24 >>> 0;\n } else {\r\n hi = this.view[offset+1] << 16;\n hi |= this.view[offset+2] << 8;\n hi |= this.view[offset+3];\n hi += this.view[offset ] << 24 >>> 0;\n offset += 4;\r\n lo = this.view[offset+1] << 16;\n lo |= this.view[offset+2] << 8;\n lo |= this.view[offset+3];\n lo += this.view[offset ] << 24 >>> 0;\n }\r\n var value = new Long(lo, hi, false);\r\n if (relative) this.offset += 8;\n return value;\r\n };\r\n\r\n /**\r\n * Reads a 64bit signed integer. This is an alias of {@link ByteBuffer#readInt64}.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {!Long}\r\n * @expose\r\n */\r\n ByteBufferPrototype.readLong = ByteBufferPrototype.readInt64;\r\n\r\n /**\r\n * Writes a 64bit unsigned integer.\r\n * @param {number|!Long} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeUint64 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value === 'number')\n value = Long.fromNumber(value);\n else if (typeof value === 'string')\n value = Long.fromString(value);\n else if (!(value && value instanceof Long))\n throw TypeError(\"Illegal value: \"+value+\" (not an integer or Long)\");\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n if (typeof value === 'number')\n value = Long.fromNumber(value);\n else if (typeof value === 'string')\n value = Long.fromString(value);\n offset += 8;\n var capacity7 = this.buffer.byteLength;\n if (offset > capacity7)\n this.resize((capacity7 *= 2) > offset ? capacity7 : offset);\n offset -= 8;\n var lo = value.low,\r\n hi = value.high;\r\n if (this.littleEndian) {\r\n this.view[offset+3] = (lo >>> 24) & 0xFF;\n this.view[offset+2] = (lo >>> 16) & 0xFF;\n this.view[offset+1] = (lo >>> 8) & 0xFF;\n this.view[offset ] = lo & 0xFF;\n offset += 4;\r\n this.view[offset+3] = (hi >>> 24) & 0xFF;\n this.view[offset+2] = (hi >>> 16) & 0xFF;\n this.view[offset+1] = (hi >>> 8) & 0xFF;\n this.view[offset ] = hi & 0xFF;\n } else {\r\n this.view[offset ] = (hi >>> 24) & 0xFF;\n this.view[offset+1] = (hi >>> 16) & 0xFF;\n this.view[offset+2] = (hi >>> 8) & 0xFF;\n this.view[offset+3] = hi & 0xFF;\n offset += 4;\r\n this.view[offset ] = (lo >>> 24) & 0xFF;\n this.view[offset+1] = (lo >>> 16) & 0xFF;\n this.view[offset+2] = (lo >>> 8) & 0xFF;\n this.view[offset+3] = lo & 0xFF;\n }\r\n if (relative) this.offset += 8;\n return this;\r\n };\r\n\r\n /**\r\n * Writes a 64bit unsigned integer. This is an alias of {@link ByteBuffer#writeUint64}.\r\n * @function\r\n * @param {number|!Long} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeUInt64 = ByteBufferPrototype.writeUint64;\r\n\r\n /**\r\n * Reads a 64bit unsigned integer.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {!Long}\r\n * @expose\r\n */\r\n ByteBufferPrototype.readUint64 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 8 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+8+\") <= \"+this.buffer.byteLength);\n }\r\n var lo = 0,\r\n hi = 0;\r\n if (this.littleEndian) {\r\n lo = this.view[offset+2] << 16;\n lo |= this.view[offset+1] << 8;\n lo |= this.view[offset ];\n lo += this.view[offset+3] << 24 >>> 0;\n offset += 4;\r\n hi = this.view[offset+2] << 16;\n hi |= this.view[offset+1] << 8;\n hi |= this.view[offset ];\n hi += this.view[offset+3] << 24 >>> 0;\n } else {\r\n hi = this.view[offset+1] << 16;\n hi |= this.view[offset+2] << 8;\n hi |= this.view[offset+3];\n hi += this.view[offset ] << 24 >>> 0;\n offset += 4;\r\n lo = this.view[offset+1] << 16;\n lo |= this.view[offset+2] << 8;\n lo |= this.view[offset+3];\n lo += this.view[offset ] << 24 >>> 0;\n }\r\n var value = new Long(lo, hi, true);\r\n if (relative) this.offset += 8;\n return value;\r\n };\r\n\r\n /**\r\n * Reads a 64bit unsigned integer. This is an alias of {@link ByteBuffer#readUint64}.\r\n * @function\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {!Long}\r\n * @expose\r\n */\r\n ByteBufferPrototype.readUInt64 = ByteBufferPrototype.readUint64;\r\n\r\n } // Long\r\n\r\n\r\n // types/floats/float32\r\n\r\n /*\r\n ieee754 - https://github.com/feross/ieee754\r\n\r\n The MIT License (MIT)\r\n\r\n Copyright (c) Feross Aboukhadijeh\r\n\r\n Permission is hereby granted, free of charge, to any person obtaining a copy\r\n of this software and associated documentation files (the \"Software\"), to deal\r\n in the Software without restriction, including without limitation the rights\r\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n copies of the Software, and to permit persons to whom the Software is\r\n furnished to do so, subject to the following conditions:\r\n\r\n The above copyright notice and this permission notice shall be included in\r\n all copies or substantial portions of the Software.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n THE SOFTWARE.\r\n */\r\n\r\n /**\r\n * Reads an IEEE754 float from a byte array.\r\n * @param {!Array} buffer\r\n * @param {number} offset\r\n * @param {boolean} isLE\r\n * @param {number} mLen\r\n * @param {number} nBytes\r\n * @returns {number}\r\n * @inner\r\n */\r\n function ieee754_read(buffer, offset, isLE, mLen, nBytes) {\r\n var e, m,\r\n eLen = nBytes * 8 - mLen - 1,\r\n eMax = (1 << eLen) - 1,\r\n eBias = eMax >> 1,\r\n nBits = -7,\r\n i = isLE ? (nBytes - 1) : 0,\r\n d = isLE ? -1 : 1,\r\n s = buffer[offset + i];\r\n\r\n i += d;\r\n\r\n e = s & ((1 << (-nBits)) - 1);\r\n s >>= (-nBits);\r\n nBits += eLen;\r\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\r\n\r\n m = e & ((1 << (-nBits)) - 1);\r\n e >>= (-nBits);\r\n nBits += mLen;\r\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\r\n\r\n if (e === 0) {\r\n e = 1 - eBias;\r\n } else if (e === eMax) {\r\n return m ? NaN : ((s ? -1 : 1) * Infinity);\r\n } else {\r\n m = m + Math.pow(2, mLen);\r\n e = e - eBias;\r\n }\r\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen);\r\n }\r\n\r\n /**\r\n * Writes an IEEE754 float to a byte array.\r\n * @param {!Array} buffer\r\n * @param {number} value\r\n * @param {number} offset\r\n * @param {boolean} isLE\r\n * @param {number} mLen\r\n * @param {number} nBytes\r\n * @inner\r\n */\r\n function ieee754_write(buffer, value, offset, isLE, mLen, nBytes) {\r\n var e, m, c,\r\n eLen = nBytes * 8 - mLen - 1,\r\n eMax = (1 << eLen) - 1,\r\n eBias = eMax >> 1,\r\n rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0),\r\n i = isLE ? 0 : (nBytes - 1),\r\n d = isLE ? 1 : -1,\r\n s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;\r\n\r\n value = Math.abs(value);\r\n\r\n if (isNaN(value) || value === Infinity) {\r\n m = isNaN(value) ? 1 : 0;\r\n e = eMax;\r\n } else {\r\n e = Math.floor(Math.log(value) / Math.LN2);\r\n if (value * (c = Math.pow(2, -e)) < 1) {\r\n e--;\r\n c *= 2;\r\n }\r\n if (e + eBias >= 1) {\r\n value += rt / c;\r\n } else {\r\n value += rt * Math.pow(2, 1 - eBias);\r\n }\r\n if (value * c >= 2) {\r\n e++;\r\n c /= 2;\r\n }\r\n\r\n if (e + eBias >= eMax) {\r\n m = 0;\r\n e = eMax;\r\n } else if (e + eBias >= 1) {\r\n m = (value * c - 1) * Math.pow(2, mLen);\r\n e = e + eBias;\r\n } else {\r\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\r\n e = 0;\r\n }\r\n }\r\n\r\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\r\n\r\n e = (e << mLen) | m;\r\n eLen += mLen;\r\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\r\n\r\n buffer[offset + i - d] |= s * 128;\r\n }\r\n\r\n /**\r\n * Writes a 32bit float.\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeFloat32 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value !== 'number')\r\n throw TypeError(\"Illegal value: \"+value+\" (not a number)\");\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n offset += 4;\n var capacity8 = this.buffer.byteLength;\n if (offset > capacity8)\n this.resize((capacity8 *= 2) > offset ? capacity8 : offset);\n offset -= 4;\n ieee754_write(this.view, value, offset, this.littleEndian, 23, 4);\r\n if (relative) this.offset += 4;\n return this;\r\n };\r\n\r\n /**\r\n * Writes a 32bit float. This is an alias of {@link ByteBuffer#writeFloat32}.\r\n * @function\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeFloat = ByteBufferPrototype.writeFloat32;\r\n\r\n /**\r\n * Reads a 32bit float.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n * @returns {number}\r\n * @expose\r\n */\r\n ByteBufferPrototype.readFloat32 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 4 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+4+\") <= \"+this.buffer.byteLength);\n }\r\n var value = ieee754_read(this.view, offset, this.littleEndian, 23, 4);\r\n if (relative) this.offset += 4;\n return value;\r\n };\r\n\r\n /**\r\n * Reads a 32bit float. This is an alias of {@link ByteBuffer#readFloat32}.\r\n * @function\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `4` if omitted.\r\n * @returns {number}\r\n * @expose\r\n */\r\n ByteBufferPrototype.readFloat = ByteBufferPrototype.readFloat32;\r\n\r\n // types/floats/float64\r\n\r\n /**\r\n * Writes a 64bit float.\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeFloat64 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value !== 'number')\r\n throw TypeError(\"Illegal value: \"+value+\" (not a number)\");\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n offset += 8;\n var capacity9 = this.buffer.byteLength;\n if (offset > capacity9)\n this.resize((capacity9 *= 2) > offset ? capacity9 : offset);\n offset -= 8;\n ieee754_write(this.view, value, offset, this.littleEndian, 52, 8);\r\n if (relative) this.offset += 8;\n return this;\r\n };\r\n\r\n /**\r\n * Writes a 64bit float. This is an alias of {@link ByteBuffer#writeFloat64}.\r\n * @function\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeDouble = ByteBufferPrototype.writeFloat64;\r\n\r\n /**\r\n * Reads a 64bit float.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {number}\r\n * @expose\r\n */\r\n ByteBufferPrototype.readFloat64 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 8 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+8+\") <= \"+this.buffer.byteLength);\n }\r\n var value = ieee754_read(this.view, offset, this.littleEndian, 52, 8);\r\n if (relative) this.offset += 8;\n return value;\r\n };\r\n\r\n /**\r\n * Reads a 64bit float. This is an alias of {@link ByteBuffer#readFloat64}.\r\n * @function\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by `8` if omitted.\r\n * @returns {number}\r\n * @expose\r\n */\r\n ByteBufferPrototype.readDouble = ByteBufferPrototype.readFloat64;\r\n\r\n\r\n // types/varints/varint32\r\n\r\n /**\r\n * Maximum number of bytes required to store a 32bit base 128 variable-length integer.\r\n * @type {number}\r\n * @const\r\n * @expose\r\n */\r\n ByteBuffer.MAX_VARINT32_BYTES = 5;\r\n\r\n /**\r\n * Calculates the actual number of bytes required to store a 32bit base 128 variable-length integer.\r\n * @param {number} value Value to encode\r\n * @returns {number} Number of bytes required. Capped to {@link ByteBuffer.MAX_VARINT32_BYTES}\r\n * @expose\r\n */\r\n ByteBuffer.calculateVarint32 = function(value) {\r\n // ref: src/google/protobuf/io/coded_stream.cc\r\n value = value >>> 0;\r\n if (value < 1 << 7 ) return 1;\r\n else if (value < 1 << 14) return 2;\r\n else if (value < 1 << 21) return 3;\r\n else if (value < 1 << 28) return 4;\r\n else return 5;\r\n };\r\n\r\n /**\r\n * Zigzag encodes a signed 32bit integer so that it can be effectively used with varint encoding.\r\n * @param {number} n Signed 32bit integer\r\n * @returns {number} Unsigned zigzag encoded 32bit integer\r\n * @expose\r\n */\r\n ByteBuffer.zigZagEncode32 = function(n) {\r\n return (((n |= 0) << 1) ^ (n >> 31)) >>> 0; // ref: src/google/protobuf/wire_format_lite.h\r\n };\r\n\r\n /**\r\n * Decodes a zigzag encoded signed 32bit integer.\r\n * @param {number} n Unsigned zigzag encoded 32bit integer\r\n * @returns {number} Signed 32bit integer\r\n * @expose\r\n */\r\n ByteBuffer.zigZagDecode32 = function(n) {\r\n return ((n >>> 1) ^ -(n & 1)) | 0; // // ref: src/google/protobuf/wire_format_lite.h\r\n };\r\n\r\n /**\r\n * Writes a 32bit base 128 variable-length integer.\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * written if omitted.\r\n * @returns {!ByteBuffer|number} this if `offset` is omitted, else the actual number of bytes written\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeVarint32 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value !== 'number' || value % 1 !== 0)\n throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n value |= 0;\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n var size = ByteBuffer.calculateVarint32(value),\r\n b;\r\n offset += size;\n var capacity10 = this.buffer.byteLength;\n if (offset > capacity10)\n this.resize((capacity10 *= 2) > offset ? capacity10 : offset);\n offset -= size;\n value >>>= 0;\r\n while (value >= 0x80) {\r\n b = (value & 0x7f) | 0x80;\r\n this.view[offset++] = b;\r\n value >>>= 7;\r\n }\r\n this.view[offset++] = value;\r\n if (relative) {\r\n this.offset = offset;\r\n return this;\r\n }\r\n return size;\r\n };\r\n\r\n /**\r\n * Writes a zig-zag encoded (signed) 32bit base 128 variable-length integer.\r\n * @param {number} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * written if omitted.\r\n * @returns {!ByteBuffer|number} this if `offset` is omitted, else the actual number of bytes written\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeVarint32ZigZag = function(value, offset) {\r\n return this.writeVarint32(ByteBuffer.zigZagEncode32(value), offset);\r\n };\r\n\r\n /**\r\n * Reads a 32bit base 128 variable-length integer.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * written if omitted.\r\n * @returns {number|!{value: number, length: number}} The value read if offset is omitted, else the value read\r\n * and the actual number of bytes read.\r\n * @throws {Error} If it's not a valid varint. Has a property `truncated = true` if there is not enough data available\r\n * to fully decode the varint.\r\n * @expose\r\n */\r\n ByteBufferPrototype.readVarint32 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 1 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+1+\") <= \"+this.buffer.byteLength);\n }\r\n var c = 0,\r\n value = 0 >>> 0,\r\n b;\r\n do {\r\n if (!this.noAssert && offset > this.limit) {\r\n var err = Error(\"Truncated\");\r\n err['truncated'] = true;\r\n throw err;\r\n }\r\n b = this.view[offset++];\r\n if (c < 5)\r\n value |= (b & 0x7f) << (7*c);\r\n ++c;\r\n } while ((b & 0x80) !== 0);\r\n value |= 0;\r\n if (relative) {\r\n this.offset = offset;\r\n return value;\r\n }\r\n return {\r\n \"value\": value,\r\n \"length\": c\r\n };\r\n };\r\n\r\n /**\r\n * Reads a zig-zag encoded (signed) 32bit base 128 variable-length integer.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * written if omitted.\r\n * @returns {number|!{value: number, length: number}} The value read if offset is omitted, else the value read\r\n * and the actual number of bytes read.\r\n * @throws {Error} If it's not a valid varint\r\n * @expose\r\n */\r\n ByteBufferPrototype.readVarint32ZigZag = function(offset) {\r\n var val = this.readVarint32(offset);\r\n if (typeof val === 'object')\r\n val[\"value\"] = ByteBuffer.zigZagDecode32(val[\"value\"]);\r\n else\r\n val = ByteBuffer.zigZagDecode32(val);\r\n return val;\r\n };\r\n\r\n // types/varints/varint64\r\n\r\n if (Long) {\r\n\r\n /**\r\n * Maximum number of bytes required to store a 64bit base 128 variable-length integer.\r\n * @type {number}\r\n * @const\r\n * @expose\r\n */\r\n ByteBuffer.MAX_VARINT64_BYTES = 10;\r\n\r\n /**\r\n * Calculates the actual number of bytes required to store a 64bit base 128 variable-length integer.\r\n * @param {number|!Long} value Value to encode\r\n * @returns {number} Number of bytes required. Capped to {@link ByteBuffer.MAX_VARINT64_BYTES}\r\n * @expose\r\n */\r\n ByteBuffer.calculateVarint64 = function(value) {\r\n if (typeof value === 'number')\n value = Long.fromNumber(value);\n else if (typeof value === 'string')\n value = Long.fromString(value);\n // ref: src/google/protobuf/io/coded_stream.cc\r\n var part0 = value.toInt() >>> 0,\r\n part1 = value.shiftRightUnsigned(28).toInt() >>> 0,\r\n part2 = value.shiftRightUnsigned(56).toInt() >>> 0;\r\n if (part2 == 0) {\r\n if (part1 == 0) {\r\n if (part0 < 1 << 14)\r\n return part0 < 1 << 7 ? 1 : 2;\r\n else\r\n return part0 < 1 << 21 ? 3 : 4;\r\n } else {\r\n if (part1 < 1 << 14)\r\n return part1 < 1 << 7 ? 5 : 6;\r\n else\r\n return part1 < 1 << 21 ? 7 : 8;\r\n }\r\n } else\r\n return part2 < 1 << 7 ? 9 : 10;\r\n };\r\n\r\n /**\r\n * Zigzag encodes a signed 64bit integer so that it can be effectively used with varint encoding.\r\n * @param {number|!Long} value Signed long\r\n * @returns {!Long} Unsigned zigzag encoded long\r\n * @expose\r\n */\r\n ByteBuffer.zigZagEncode64 = function(value) {\r\n if (typeof value === 'number')\n value = Long.fromNumber(value, false);\n else if (typeof value === 'string')\n value = Long.fromString(value, false);\n else if (value.unsigned !== false) value = value.toSigned();\n // ref: src/google/protobuf/wire_format_lite.h\r\n return value.shiftLeft(1).xor(value.shiftRight(63)).toUnsigned();\r\n };\r\n\r\n /**\r\n * Decodes a zigzag encoded signed 64bit integer.\r\n * @param {!Long|number} value Unsigned zigzag encoded long or JavaScript number\r\n * @returns {!Long} Signed long\r\n * @expose\r\n */\r\n ByteBuffer.zigZagDecode64 = function(value) {\r\n if (typeof value === 'number')\n value = Long.fromNumber(value, false);\n else if (typeof value === 'string')\n value = Long.fromString(value, false);\n else if (value.unsigned !== false) value = value.toSigned();\n // ref: src/google/protobuf/wire_format_lite.h\r\n return value.shiftRightUnsigned(1).xor(value.and(Long.ONE).toSigned().negate()).toSigned();\r\n };\r\n\r\n /**\r\n * Writes a 64bit base 128 variable-length integer.\r\n * @param {number|Long} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * written if omitted.\r\n * @returns {!ByteBuffer|number} `this` if offset is omitted, else the actual number of bytes written.\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeVarint64 = function(value, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof value === 'number')\n value = Long.fromNumber(value);\n else if (typeof value === 'string')\n value = Long.fromString(value);\n else if (!(value && value instanceof Long))\n throw TypeError(\"Illegal value: \"+value+\" (not an integer or Long)\");\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n if (typeof value === 'number')\n value = Long.fromNumber(value, false);\n else if (typeof value === 'string')\n value = Long.fromString(value, false);\n else if (value.unsigned !== false) value = value.toSigned();\n var size = ByteBuffer.calculateVarint64(value),\r\n part0 = value.toInt() >>> 0,\r\n part1 = value.shiftRightUnsigned(28).toInt() >>> 0,\r\n part2 = value.shiftRightUnsigned(56).toInt() >>> 0;\r\n offset += size;\n var capacity11 = this.buffer.byteLength;\n if (offset > capacity11)\n this.resize((capacity11 *= 2) > offset ? capacity11 : offset);\n offset -= size;\n switch (size) {\r\n case 10: this.view[offset+9] = (part2 >>> 7) & 0x01;\r\n case 9 : this.view[offset+8] = size !== 9 ? (part2 ) | 0x80 : (part2 ) & 0x7F;\r\n case 8 : this.view[offset+7] = size !== 8 ? (part1 >>> 21) | 0x80 : (part1 >>> 21) & 0x7F;\r\n case 7 : this.view[offset+6] = size !== 7 ? (part1 >>> 14) | 0x80 : (part1 >>> 14) & 0x7F;\r\n case 6 : this.view[offset+5] = size !== 6 ? (part1 >>> 7) | 0x80 : (part1 >>> 7) & 0x7F;\r\n case 5 : this.view[offset+4] = size !== 5 ? (part1 ) | 0x80 : (part1 ) & 0x7F;\r\n case 4 : this.view[offset+3] = size !== 4 ? (part0 >>> 21) | 0x80 : (part0 >>> 21) & 0x7F;\r\n case 3 : this.view[offset+2] = size !== 3 ? (part0 >>> 14) | 0x80 : (part0 >>> 14) & 0x7F;\r\n case 2 : this.view[offset+1] = size !== 2 ? (part0 >>> 7) | 0x80 : (part0 >>> 7) & 0x7F;\r\n case 1 : this.view[offset ] = size !== 1 ? (part0 ) | 0x80 : (part0 ) & 0x7F;\r\n }\r\n if (relative) {\r\n this.offset += size;\r\n return this;\r\n } else {\r\n return size;\r\n }\r\n };\r\n\r\n /**\r\n * Writes a zig-zag encoded 64bit base 128 variable-length integer.\r\n * @param {number|Long} value Value to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * written if omitted.\r\n * @returns {!ByteBuffer|number} `this` if offset is omitted, else the actual number of bytes written.\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeVarint64ZigZag = function(value, offset) {\r\n return this.writeVarint64(ByteBuffer.zigZagEncode64(value), offset);\r\n };\r\n\r\n /**\r\n * Reads a 64bit base 128 variable-length integer. Requires Long.js.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * read if omitted.\r\n * @returns {!Long|!{value: Long, length: number}} The value read if offset is omitted, else the value read and\r\n * the actual number of bytes read.\r\n * @throws {Error} If it's not a valid varint\r\n * @expose\r\n */\r\n ByteBufferPrototype.readVarint64 = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 1 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+1+\") <= \"+this.buffer.byteLength);\n }\r\n // ref: src/google/protobuf/io/coded_stream.cc\r\n var start = offset,\r\n part0 = 0,\r\n part1 = 0,\r\n part2 = 0,\r\n b = 0;\r\n b = this.view[offset++]; part0 = (b & 0x7F) ; if ( b & 0x80 ) {\r\n b = this.view[offset++]; part0 |= (b & 0x7F) << 7; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n b = this.view[offset++]; part0 |= (b & 0x7F) << 14; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n b = this.view[offset++]; part0 |= (b & 0x7F) << 21; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n b = this.view[offset++]; part1 = (b & 0x7F) ; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n b = this.view[offset++]; part1 |= (b & 0x7F) << 7; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n b = this.view[offset++]; part1 |= (b & 0x7F) << 14; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n b = this.view[offset++]; part1 |= (b & 0x7F) << 21; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n b = this.view[offset++]; part2 = (b & 0x7F) ; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n b = this.view[offset++]; part2 |= (b & 0x7F) << 7; if ((b & 0x80) || (this.noAssert && typeof b === 'undefined')) {\r\n throw Error(\"Buffer overrun\"); }}}}}}}}}}\r\n var value = Long.fromBits(part0 | (part1 << 28), (part1 >>> 4) | (part2) << 24, false);\r\n if (relative) {\r\n this.offset = offset;\r\n return value;\r\n } else {\r\n return {\r\n 'value': value,\r\n 'length': offset-start\r\n };\r\n }\r\n };\r\n\r\n /**\r\n * Reads a zig-zag encoded 64bit base 128 variable-length integer. Requires Long.js.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * read if omitted.\r\n * @returns {!Long|!{value: Long, length: number}} The value read if offset is omitted, else the value read and\r\n * the actual number of bytes read.\r\n * @throws {Error} If it's not a valid varint\r\n * @expose\r\n */\r\n ByteBufferPrototype.readVarint64ZigZag = function(offset) {\r\n var val = this.readVarint64(offset);\r\n if (val && val['value'] instanceof Long)\r\n val[\"value\"] = ByteBuffer.zigZagDecode64(val[\"value\"]);\r\n else\r\n val = ByteBuffer.zigZagDecode64(val);\r\n return val;\r\n };\r\n\r\n } // Long\r\n\r\n\r\n // types/strings/cstring\r\n\r\n /**\r\n * Writes a NULL-terminated UTF8 encoded string. For this to work the specified string must not contain any NULL\r\n * characters itself.\r\n * @param {string} str String to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * contained in `str` + 1 if omitted.\r\n * @returns {!ByteBuffer|number} this if offset is omitted, else the actual number of bytes written\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeCString = function(str, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n var i,\r\n k = str.length;\r\n if (!this.noAssert) {\r\n if (typeof str !== 'string')\r\n throw TypeError(\"Illegal str: Not a string\");\r\n for (i=0; i>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n // UTF8 strings do not contain zero bytes in between except for the zero character, so:\r\n k = utfx.calculateUTF16asUTF8(stringSource(str))[1];\r\n offset += k+1;\n var capacity12 = this.buffer.byteLength;\n if (offset > capacity12)\n this.resize((capacity12 *= 2) > offset ? capacity12 : offset);\n offset -= k+1;\n utfx.encodeUTF16toUTF8(stringSource(str), function(b) {\r\n this.view[offset++] = b;\r\n }.bind(this));\r\n this.view[offset++] = 0;\r\n if (relative) {\r\n this.offset = offset;\r\n return this;\r\n }\r\n return k;\r\n };\r\n\r\n /**\r\n * Reads a NULL-terminated UTF8 encoded string. For this to work the string read must not contain any NULL characters\r\n * itself.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * read if omitted.\r\n * @returns {string|!{string: string, length: number}} The string read if offset is omitted, else the string\r\n * read and the actual number of bytes read.\r\n * @expose\r\n */\r\n ByteBufferPrototype.readCString = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 1 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+1+\") <= \"+this.buffer.byteLength);\n }\r\n var start = offset,\r\n temp;\r\n // UTF8 strings do not contain zero bytes in between except for the zero character itself, so:\r\n var sd, b = -1;\r\n utfx.decodeUTF8toUTF16(function() {\r\n if (b === 0) return null;\r\n if (offset >= this.limit)\r\n throw RangeError(\"Illegal range: Truncated data, \"+offset+\" < \"+this.limit);\r\n b = this.view[offset++];\r\n return b === 0 ? null : b;\r\n }.bind(this), sd = stringDestination(), true);\r\n if (relative) {\r\n this.offset = offset;\r\n return sd();\r\n } else {\r\n return {\r\n \"string\": sd(),\r\n \"length\": offset - start\r\n };\r\n }\r\n };\r\n\r\n // types/strings/istring\r\n\r\n /**\r\n * Writes a length as uint32 prefixed UTF8 encoded string.\r\n * @param {string} str String to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * written if omitted.\r\n * @returns {!ByteBuffer|number} `this` if `offset` is omitted, else the actual number of bytes written\r\n * @expose\r\n * @see ByteBuffer#writeVarint32\r\n */\r\n ByteBufferPrototype.writeIString = function(str, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof str !== 'string')\r\n throw TypeError(\"Illegal str: Not a string\");\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n var start = offset,\r\n k;\r\n k = utfx.calculateUTF16asUTF8(stringSource(str), this.noAssert)[1];\r\n offset += 4+k;\n var capacity13 = this.buffer.byteLength;\n if (offset > capacity13)\n this.resize((capacity13 *= 2) > offset ? capacity13 : offset);\n offset -= 4+k;\n if (this.littleEndian) {\n this.view[offset+3] = (k >>> 24) & 0xFF;\n this.view[offset+2] = (k >>> 16) & 0xFF;\n this.view[offset+1] = (k >>> 8) & 0xFF;\n this.view[offset ] = k & 0xFF;\n } else {\n this.view[offset ] = (k >>> 24) & 0xFF;\n this.view[offset+1] = (k >>> 16) & 0xFF;\n this.view[offset+2] = (k >>> 8) & 0xFF;\n this.view[offset+3] = k & 0xFF;\n }\n offset += 4;\r\n utfx.encodeUTF16toUTF8(stringSource(str), function(b) {\r\n this.view[offset++] = b;\r\n }.bind(this));\r\n if (offset !== start + 4 + k)\r\n throw RangeError(\"Illegal range: Truncated data, \"+offset+\" == \"+(offset+4+k));\r\n if (relative) {\r\n this.offset = offset;\r\n return this;\r\n }\r\n return offset - start;\r\n };\r\n\r\n /**\r\n * Reads a length as uint32 prefixed UTF8 encoded string.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * read if omitted.\r\n * @returns {string|!{string: string, length: number}} The string read if offset is omitted, else the string\r\n * read and the actual number of bytes read.\r\n * @expose\r\n * @see ByteBuffer#readVarint32\r\n */\r\n ByteBufferPrototype.readIString = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 4 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+4+\") <= \"+this.buffer.byteLength);\n }\r\n var start = offset;\r\n var len = this.readUint32(offset);\r\n var str = this.readUTF8String(len, ByteBuffer.METRICS_BYTES, offset += 4);\r\n offset += str['length'];\r\n if (relative) {\r\n this.offset = offset;\r\n return str['string'];\r\n } else {\r\n return {\r\n 'string': str['string'],\r\n 'length': offset - start\r\n };\r\n }\r\n };\r\n\r\n // types/strings/utf8string\r\n\r\n /**\r\n * Metrics representing number of UTF8 characters. Evaluates to `c`.\r\n * @type {string}\r\n * @const\r\n * @expose\r\n */\r\n ByteBuffer.METRICS_CHARS = 'c';\r\n\r\n /**\r\n * Metrics representing number of bytes. Evaluates to `b`.\r\n * @type {string}\r\n * @const\r\n * @expose\r\n */\r\n ByteBuffer.METRICS_BYTES = 'b';\r\n\r\n /**\r\n * Writes an UTF8 encoded string.\r\n * @param {string} str String to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} if omitted.\r\n * @returns {!ByteBuffer|number} this if offset is omitted, else the actual number of bytes written.\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeUTF8String = function(str, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n var k;\r\n var start = offset;\r\n k = utfx.calculateUTF16asUTF8(stringSource(str))[1];\r\n offset += k;\n var capacity14 = this.buffer.byteLength;\n if (offset > capacity14)\n this.resize((capacity14 *= 2) > offset ? capacity14 : offset);\n offset -= k;\n utfx.encodeUTF16toUTF8(stringSource(str), function(b) {\r\n this.view[offset++] = b;\r\n }.bind(this));\r\n if (relative) {\r\n this.offset = offset;\r\n return this;\r\n }\r\n return offset - start;\r\n };\r\n\r\n /**\r\n * Writes an UTF8 encoded string. This is an alias of {@link ByteBuffer#writeUTF8String}.\r\n * @function\r\n * @param {string} str String to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} if omitted.\r\n * @returns {!ByteBuffer|number} this if offset is omitted, else the actual number of bytes written.\r\n * @expose\r\n */\r\n ByteBufferPrototype.writeString = ByteBufferPrototype.writeUTF8String;\r\n\r\n /**\r\n * Calculates the number of UTF8 characters of a string. JavaScript itself uses UTF-16, so that a string's\r\n * `length` property does not reflect its actual UTF8 size if it contains code points larger than 0xFFFF.\r\n * @param {string} str String to calculate\r\n * @returns {number} Number of UTF8 characters\r\n * @expose\r\n */\r\n ByteBuffer.calculateUTF8Chars = function(str) {\r\n return utfx.calculateUTF16asUTF8(stringSource(str))[0];\r\n };\r\n\r\n /**\r\n * Calculates the number of UTF8 bytes of a string.\r\n * @param {string} str String to calculate\r\n * @returns {number} Number of UTF8 bytes\r\n * @expose\r\n */\r\n ByteBuffer.calculateUTF8Bytes = function(str) {\r\n return utfx.calculateUTF16asUTF8(stringSource(str))[1];\r\n };\r\n\r\n /**\r\n * Calculates the number of UTF8 bytes of a string. This is an alias of {@link ByteBuffer.calculateUTF8Bytes}.\r\n * @function\r\n * @param {string} str String to calculate\r\n * @returns {number} Number of UTF8 bytes\r\n * @expose\r\n */\r\n ByteBuffer.calculateString = ByteBuffer.calculateUTF8Bytes;\r\n\r\n /**\r\n * Reads an UTF8 encoded string.\r\n * @param {number} length Number of characters or bytes to read.\r\n * @param {string=} metrics Metrics specifying what `length` is meant to count. Defaults to\r\n * {@link ByteBuffer.METRICS_CHARS}.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * read if omitted.\r\n * @returns {string|!{string: string, length: number}} The string read if offset is omitted, else the string\r\n * read and the actual number of bytes read.\r\n * @expose\r\n */\r\n ByteBufferPrototype.readUTF8String = function(length, metrics, offset) {\r\n if (typeof metrics === 'number') {\r\n offset = metrics;\r\n metrics = undefined;\r\n }\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (typeof metrics === 'undefined') metrics = ByteBuffer.METRICS_CHARS;\r\n if (!this.noAssert) {\r\n if (typeof length !== 'number' || length % 1 !== 0)\n throw TypeError(\"Illegal length: \"+length+\" (not an integer)\");\n length |= 0;\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n var i = 0,\r\n start = offset,\r\n sd;\r\n if (metrics === ByteBuffer.METRICS_CHARS) { // The same for node and the browser\r\n sd = stringDestination();\r\n utfx.decodeUTF8(function() {\r\n return i < length && offset < this.limit ? this.view[offset++] : null;\r\n }.bind(this), function(cp) {\r\n ++i; utfx.UTF8toUTF16(cp, sd);\r\n });\r\n if (i !== length)\r\n throw RangeError(\"Illegal range: Truncated data, \"+i+\" == \"+length);\r\n if (relative) {\r\n this.offset = offset;\r\n return sd();\r\n } else {\r\n return {\r\n \"string\": sd(),\r\n \"length\": offset - start\r\n };\r\n }\r\n } else if (metrics === ByteBuffer.METRICS_BYTES) {\r\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + length > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+length+\") <= \"+this.buffer.byteLength);\n }\r\n var k = offset + length;\r\n utfx.decodeUTF8toUTF16(function() {\r\n return offset < k ? this.view[offset++] : null;\r\n }.bind(this), sd = stringDestination(), this.noAssert);\r\n if (offset !== k)\r\n throw RangeError(\"Illegal range: Truncated data, \"+offset+\" == \"+k);\r\n if (relative) {\r\n this.offset = offset;\r\n return sd();\r\n } else {\r\n return {\r\n 'string': sd(),\r\n 'length': offset - start\r\n };\r\n }\r\n } else\r\n throw TypeError(\"Unsupported metrics: \"+metrics);\r\n };\r\n\r\n /**\r\n * Reads an UTF8 encoded string. This is an alias of {@link ByteBuffer#readUTF8String}.\r\n * @function\r\n * @param {number} length Number of characters or bytes to read\r\n * @param {number=} metrics Metrics specifying what `n` is meant to count. Defaults to\r\n * {@link ByteBuffer.METRICS_CHARS}.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * read if omitted.\r\n * @returns {string|!{string: string, length: number}} The string read if offset is omitted, else the string\r\n * read and the actual number of bytes read.\r\n * @expose\r\n */\r\n ByteBufferPrototype.readString = ByteBufferPrototype.readUTF8String;\r\n\r\n // types/strings/vstring\r\n\r\n /**\r\n * Writes a length as varint32 prefixed UTF8 encoded string.\r\n * @param {string} str String to write\r\n * @param {number=} offset Offset to write to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * written if omitted.\r\n * @returns {!ByteBuffer|number} `this` if `offset` is omitted, else the actual number of bytes written\r\n * @expose\r\n * @see ByteBuffer#writeVarint32\r\n */\r\n ByteBufferPrototype.writeVString = function(str, offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof str !== 'string')\r\n throw TypeError(\"Illegal str: Not a string\");\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n var start = offset,\r\n k, l;\r\n k = utfx.calculateUTF16asUTF8(stringSource(str), this.noAssert)[1];\r\n l = ByteBuffer.calculateVarint32(k);\r\n offset += l+k;\n var capacity15 = this.buffer.byteLength;\n if (offset > capacity15)\n this.resize((capacity15 *= 2) > offset ? capacity15 : offset);\n offset -= l+k;\n offset += this.writeVarint32(k, offset);\r\n utfx.encodeUTF16toUTF8(stringSource(str), function(b) {\r\n this.view[offset++] = b;\r\n }.bind(this));\r\n if (offset !== start+k+l)\r\n throw RangeError(\"Illegal range: Truncated data, \"+offset+\" == \"+(offset+k+l));\r\n if (relative) {\r\n this.offset = offset;\r\n return this;\r\n }\r\n return offset - start;\r\n };\r\n\r\n /**\r\n * Reads a length as varint32 prefixed UTF8 encoded string.\r\n * @param {number=} offset Offset to read from. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * read if omitted.\r\n * @returns {string|!{string: string, length: number}} The string read if offset is omitted, else the string\r\n * read and the actual number of bytes read.\r\n * @expose\r\n * @see ByteBuffer#readVarint32\r\n */\r\n ByteBufferPrototype.readVString = function(offset) {\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 1 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+1+\") <= \"+this.buffer.byteLength);\n }\r\n var start = offset;\r\n var len = this.readVarint32(offset);\r\n var str = this.readUTF8String(len['value'], ByteBuffer.METRICS_BYTES, offset += len['length']);\r\n offset += str['length'];\r\n if (relative) {\r\n this.offset = offset;\r\n return str['string'];\r\n } else {\r\n return {\r\n 'string': str['string'],\r\n 'length': offset - start\r\n };\r\n }\r\n };\r\n\r\n\r\n /**\r\n * Appends some data to this ByteBuffer. This will overwrite any contents behind the specified offset up to the appended\r\n * data's length.\r\n * @param {!ByteBuffer|!ArrayBuffer|!Uint8Array|string} source Data to append. If `source` is a ByteBuffer, its offsets\r\n * will be modified according to the performed read operation.\r\n * @param {(string|number)=} encoding Encoding if `data` is a string (\"base64\", \"hex\", \"binary\", defaults to \"utf8\")\r\n * @param {number=} offset Offset to append at. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * written if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n * @example A relative `<01 02>03.append(<04 05>)` will result in `<01 02 04 05>, 04 05|`\r\n * @example An absolute `<01 02>03.append(04 05>, 1)` will result in `<01 04>05, 04 05|`\r\n */\r\n ByteBufferPrototype.append = function(source, encoding, offset) {\r\n if (typeof encoding === 'number' || typeof encoding !== 'string') {\r\n offset = encoding;\r\n encoding = undefined;\r\n }\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n if (!(source instanceof ByteBuffer))\r\n source = ByteBuffer.wrap(source, encoding);\r\n var length = source.limit - source.offset;\r\n if (length <= 0) return this; // Nothing to append\r\n offset += length;\n var capacity16 = this.buffer.byteLength;\n if (offset > capacity16)\n this.resize((capacity16 *= 2) > offset ? capacity16 : offset);\n offset -= length;\n this.view.set(source.view.subarray(source.offset, source.limit), offset);\r\n source.offset += length;\r\n if (relative) this.offset += length;\n return this;\r\n };\r\n\r\n /**\r\n * Appends this ByteBuffer's contents to another ByteBuffer. This will overwrite any contents at and after the\r\n specified offset up to the length of this ByteBuffer's data.\r\n * @param {!ByteBuffer} target Target ByteBuffer\r\n * @param {number=} offset Offset to append to. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * read if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n * @see ByteBuffer#append\r\n */\r\n ByteBufferPrototype.appendTo = function(target, offset) {\r\n target.append(this, offset);\r\n return this;\r\n };\r\n\r\n /**\r\n * Enables or disables assertions of argument types and offsets. Assertions are enabled by default but you can opt to\r\n * disable them if your code already makes sure that everything is valid.\r\n * @param {boolean} assert `true` to enable assertions, otherwise `false`\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.assert = function(assert) {\r\n this.noAssert = !assert;\r\n return this;\r\n };\r\n\r\n /**\r\n * Gets the capacity of this ByteBuffer's backing buffer.\r\n * @returns {number} Capacity of the backing buffer\r\n * @expose\r\n */\r\n ByteBufferPrototype.capacity = function() {\r\n return this.buffer.byteLength;\r\n };\r\n /**\r\n * Clears this ByteBuffer's offsets by setting {@link ByteBuffer#offset} to `0` and {@link ByteBuffer#limit} to the\r\n * backing buffer's capacity. Discards {@link ByteBuffer#markedOffset}.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.clear = function() {\r\n this.offset = 0;\r\n this.limit = this.buffer.byteLength;\r\n this.markedOffset = -1;\r\n return this;\r\n };\r\n\r\n /**\r\n * Creates a cloned instance of this ByteBuffer, preset with this ByteBuffer's values for {@link ByteBuffer#offset},\r\n * {@link ByteBuffer#markedOffset} and {@link ByteBuffer#limit}.\r\n * @param {boolean=} copy Whether to copy the backing buffer or to return another view on the same, defaults to `false`\r\n * @returns {!ByteBuffer} Cloned instance\r\n * @expose\r\n */\r\n ByteBufferPrototype.clone = function(copy) {\r\n var bb = new ByteBuffer(0, this.littleEndian, this.noAssert);\r\n if (copy) {\r\n bb.buffer = new ArrayBuffer(this.buffer.byteLength);\r\n bb.view = new Uint8Array(bb.buffer);\r\n } else {\r\n bb.buffer = this.buffer;\r\n bb.view = this.view;\r\n }\r\n bb.offset = this.offset;\r\n bb.markedOffset = this.markedOffset;\r\n bb.limit = this.limit;\r\n return bb;\r\n };\r\n\r\n /**\r\n * Compacts this ByteBuffer to be backed by a {@link ByteBuffer#buffer} of its contents' length. Contents are the bytes\r\n * between {@link ByteBuffer#offset} and {@link ByteBuffer#limit}. Will set `offset = 0` and `limit = capacity` and\r\n * adapt {@link ByteBuffer#markedOffset} to the same relative position if set.\r\n * @param {number=} begin Offset to start at, defaults to {@link ByteBuffer#offset}\r\n * @param {number=} end Offset to end at, defaults to {@link ByteBuffer#limit}\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.compact = function(begin, end) {\r\n if (typeof begin === 'undefined') begin = this.offset;\r\n if (typeof end === 'undefined') end = this.limit;\r\n if (!this.noAssert) {\r\n if (typeof begin !== 'number' || begin % 1 !== 0)\n throw TypeError(\"Illegal begin: Not an integer\");\n begin >>>= 0;\n if (typeof end !== 'number' || end % 1 !== 0)\n throw TypeError(\"Illegal end: Not an integer\");\n end >>>= 0;\n if (begin < 0 || begin > end || end > this.buffer.byteLength)\n throw RangeError(\"Illegal range: 0 <= \"+begin+\" <= \"+end+\" <= \"+this.buffer.byteLength);\n }\r\n if (begin === 0 && end === this.buffer.byteLength)\r\n return this; // Already compacted\r\n var len = end - begin;\r\n if (len === 0) {\r\n this.buffer = EMPTY_BUFFER;\r\n this.view = null;\r\n if (this.markedOffset >= 0) this.markedOffset -= begin;\r\n this.offset = 0;\r\n this.limit = 0;\r\n return this;\r\n }\r\n var buffer = new ArrayBuffer(len);\r\n var view = new Uint8Array(buffer);\r\n view.set(this.view.subarray(begin, end));\r\n this.buffer = buffer;\r\n this.view = view;\r\n if (this.markedOffset >= 0) this.markedOffset -= begin;\r\n this.offset = 0;\r\n this.limit = len;\r\n return this;\r\n };\r\n\r\n /**\r\n * Creates a copy of this ByteBuffer's contents. Contents are the bytes between {@link ByteBuffer#offset} and\r\n * {@link ByteBuffer#limit}.\r\n * @param {number=} begin Begin offset, defaults to {@link ByteBuffer#offset}.\r\n * @param {number=} end End offset, defaults to {@link ByteBuffer#limit}.\r\n * @returns {!ByteBuffer} Copy\r\n * @expose\r\n */\r\n ByteBufferPrototype.copy = function(begin, end) {\r\n if (typeof begin === 'undefined') begin = this.offset;\r\n if (typeof end === 'undefined') end = this.limit;\r\n if (!this.noAssert) {\r\n if (typeof begin !== 'number' || begin % 1 !== 0)\n throw TypeError(\"Illegal begin: Not an integer\");\n begin >>>= 0;\n if (typeof end !== 'number' || end % 1 !== 0)\n throw TypeError(\"Illegal end: Not an integer\");\n end >>>= 0;\n if (begin < 0 || begin > end || end > this.buffer.byteLength)\n throw RangeError(\"Illegal range: 0 <= \"+begin+\" <= \"+end+\" <= \"+this.buffer.byteLength);\n }\r\n if (begin === end)\r\n return new ByteBuffer(0, this.littleEndian, this.noAssert);\r\n var capacity = end - begin,\r\n bb = new ByteBuffer(capacity, this.littleEndian, this.noAssert);\r\n bb.offset = 0;\r\n bb.limit = capacity;\r\n if (bb.markedOffset >= 0) bb.markedOffset -= begin;\r\n this.copyTo(bb, 0, begin, end);\r\n return bb;\r\n };\r\n\r\n /**\r\n * Copies this ByteBuffer's contents to another ByteBuffer. Contents are the bytes between {@link ByteBuffer#offset} and\r\n * {@link ByteBuffer#limit}.\r\n * @param {!ByteBuffer} target Target ByteBuffer\r\n * @param {number=} targetOffset Offset to copy to. Will use and increase the target's {@link ByteBuffer#offset}\r\n * by the number of bytes copied if omitted.\r\n * @param {number=} sourceOffset Offset to start copying from. Will use and increase {@link ByteBuffer#offset} by the\r\n * number of bytes copied if omitted.\r\n * @param {number=} sourceLimit Offset to end copying from, defaults to {@link ByteBuffer#limit}\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.copyTo = function(target, targetOffset, sourceOffset, sourceLimit) {\r\n var relative,\r\n targetRelative;\r\n if (!this.noAssert) {\r\n if (!ByteBuffer.isByteBuffer(target))\r\n throw TypeError(\"Illegal target: Not a ByteBuffer\");\r\n }\r\n targetOffset = (targetRelative = typeof targetOffset === 'undefined') ? target.offset : targetOffset | 0;\r\n sourceOffset = (relative = typeof sourceOffset === 'undefined') ? this.offset : sourceOffset | 0;\r\n sourceLimit = typeof sourceLimit === 'undefined' ? this.limit : sourceLimit | 0;\r\n\r\n if (targetOffset < 0 || targetOffset > target.buffer.byteLength)\r\n throw RangeError(\"Illegal target range: 0 <= \"+targetOffset+\" <= \"+target.buffer.byteLength);\r\n if (sourceOffset < 0 || sourceLimit > this.buffer.byteLength)\r\n throw RangeError(\"Illegal source range: 0 <= \"+sourceOffset+\" <= \"+this.buffer.byteLength);\r\n\r\n var len = sourceLimit - sourceOffset;\r\n if (len === 0)\r\n return target; // Nothing to copy\r\n\r\n target.ensureCapacity(targetOffset + len);\r\n\r\n target.view.set(this.view.subarray(sourceOffset, sourceLimit), targetOffset);\r\n\r\n if (relative) this.offset += len;\r\n if (targetRelative) target.offset += len;\r\n\r\n return this;\r\n };\r\n\r\n /**\r\n * Makes sure that this ByteBuffer is backed by a {@link ByteBuffer#buffer} of at least the specified capacity. If the\r\n * current capacity is exceeded, it will be doubled. If double the current capacity is less than the required capacity,\r\n * the required capacity will be used instead.\r\n * @param {number} capacity Required capacity\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.ensureCapacity = function(capacity) {\r\n var current = this.buffer.byteLength;\r\n if (current < capacity)\r\n return this.resize((current *= 2) > capacity ? current : capacity);\r\n return this;\r\n };\r\n\r\n /**\r\n * Overwrites this ByteBuffer's contents with the specified value. Contents are the bytes between\r\n * {@link ByteBuffer#offset} and {@link ByteBuffer#limit}.\r\n * @param {number|string} value Byte value to fill with. If given as a string, the first character is used.\r\n * @param {number=} begin Begin offset. Will use and increase {@link ByteBuffer#offset} by the number of bytes\r\n * written if omitted. defaults to {@link ByteBuffer#offset}.\r\n * @param {number=} end End offset, defaults to {@link ByteBuffer#limit}.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n * @example `someByteBuffer.clear().fill(0)` fills the entire backing buffer with zeroes\r\n */\r\n ByteBufferPrototype.fill = function(value, begin, end) {\r\n var relative = typeof begin === 'undefined';\n if (relative) begin = this.offset;\n if (typeof value === 'string' && value.length > 0)\r\n value = value.charCodeAt(0);\r\n if (typeof begin === 'undefined') begin = this.offset;\r\n if (typeof end === 'undefined') end = this.limit;\r\n if (!this.noAssert) {\r\n if (typeof value !== 'number' || value % 1 !== 0)\n throw TypeError(\"Illegal value: \"+value+\" (not an integer)\");\n value |= 0;\n if (typeof begin !== 'number' || begin % 1 !== 0)\n throw TypeError(\"Illegal begin: Not an integer\");\n begin >>>= 0;\n if (typeof end !== 'number' || end % 1 !== 0)\n throw TypeError(\"Illegal end: Not an integer\");\n end >>>= 0;\n if (begin < 0 || begin > end || end > this.buffer.byteLength)\n throw RangeError(\"Illegal range: 0 <= \"+begin+\" <= \"+end+\" <= \"+this.buffer.byteLength);\n }\r\n if (begin >= end)\r\n return this; // Nothing to fill\r\n while (begin < end) this.view[begin++] = value;\r\n if (relative) this.offset = begin;\r\n return this;\r\n };\r\n\r\n /**\r\n * Makes this ByteBuffer ready for a new sequence of write or relative read operations. Sets `limit = offset` and\r\n * `offset = 0`. Make sure always to flip a ByteBuffer when all relative read or write operations are complete.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.flip = function() {\r\n this.limit = this.offset;\r\n this.offset = 0;\r\n return this;\r\n };\r\n /**\r\n * Marks an offset on this ByteBuffer to be used later.\r\n * @param {number=} offset Offset to mark. Defaults to {@link ByteBuffer#offset}.\r\n * @returns {!ByteBuffer} this\r\n * @throws {TypeError} If `offset` is not a valid number\r\n * @throws {RangeError} If `offset` is out of bounds\r\n * @see ByteBuffer#reset\r\n * @expose\r\n */\r\n ByteBufferPrototype.mark = function(offset) {\r\n offset = typeof offset === 'undefined' ? this.offset : offset;\r\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n this.markedOffset = offset;\r\n return this;\r\n };\r\n /**\r\n * Sets the byte order.\r\n * @param {boolean} littleEndian `true` for little endian byte order, `false` for big endian\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.order = function(littleEndian) {\r\n if (!this.noAssert) {\r\n if (typeof littleEndian !== 'boolean')\r\n throw TypeError(\"Illegal littleEndian: Not a boolean\");\r\n }\r\n this.littleEndian = !!littleEndian;\r\n return this;\r\n };\r\n\r\n /**\r\n * Switches (to) little endian byte order.\r\n * @param {boolean=} littleEndian Defaults to `true`, otherwise uses big endian\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.LE = function(littleEndian) {\r\n this.littleEndian = typeof littleEndian !== 'undefined' ? !!littleEndian : true;\r\n return this;\r\n };\r\n\r\n /**\r\n * Switches (to) big endian byte order.\r\n * @param {boolean=} bigEndian Defaults to `true`, otherwise uses little endian\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.BE = function(bigEndian) {\r\n this.littleEndian = typeof bigEndian !== 'undefined' ? !bigEndian : false;\r\n return this;\r\n };\r\n /**\r\n * Prepends some data to this ByteBuffer. This will overwrite any contents before the specified offset up to the\r\n * prepended data's length. If there is not enough space available before the specified `offset`, the backing buffer\r\n * will be resized and its contents moved accordingly.\r\n * @param {!ByteBuffer|string|!ArrayBuffer} source Data to prepend. If `source` is a ByteBuffer, its offset will be\r\n * modified according to the performed read operation.\r\n * @param {(string|number)=} encoding Encoding if `data` is a string (\"base64\", \"hex\", \"binary\", defaults to \"utf8\")\r\n * @param {number=} offset Offset to prepend at. Will use and decrease {@link ByteBuffer#offset} by the number of bytes\r\n * prepended if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n * @example A relative `00<01 02 03>.prepend(<04 05>)` results in `<04 05 01 02 03>, 04 05|`\r\n * @example An absolute `00<01 02 03>.prepend(<04 05>, 2)` results in `04<05 02 03>, 04 05|`\r\n */\r\n ByteBufferPrototype.prepend = function(source, encoding, offset) {\r\n if (typeof encoding === 'number' || typeof encoding !== 'string') {\r\n offset = encoding;\r\n encoding = undefined;\r\n }\r\n var relative = typeof offset === 'undefined';\n if (relative) offset = this.offset;\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: \"+offset+\" (not an integer)\");\n offset >>>= 0;\n if (offset < 0 || offset + 0 > this.buffer.byteLength)\n throw RangeError(\"Illegal offset: 0 <= \"+offset+\" (+\"+0+\") <= \"+this.buffer.byteLength);\n }\r\n if (!(source instanceof ByteBuffer))\r\n source = ByteBuffer.wrap(source, encoding);\r\n var len = source.limit - source.offset;\r\n if (len <= 0) return this; // Nothing to prepend\r\n var diff = len - offset;\r\n if (diff > 0) { // Not enough space before offset, so resize + move\r\n var buffer = new ArrayBuffer(this.buffer.byteLength + diff);\r\n var view = new Uint8Array(buffer);\r\n view.set(this.view.subarray(offset, this.buffer.byteLength), len);\r\n this.buffer = buffer;\r\n this.view = view;\r\n this.offset += diff;\r\n if (this.markedOffset >= 0) this.markedOffset += diff;\r\n this.limit += diff;\r\n offset += diff;\r\n } else {\r\n var arrayView = new Uint8Array(this.buffer);\r\n }\r\n this.view.set(source.view.subarray(source.offset, source.limit), offset - len);\r\n\r\n source.offset = source.limit;\r\n if (relative)\r\n this.offset -= len;\r\n return this;\r\n };\r\n\r\n /**\r\n * Prepends this ByteBuffer to another ByteBuffer. This will overwrite any contents before the specified offset up to the\r\n * prepended data's length. If there is not enough space available before the specified `offset`, the backing buffer\r\n * will be resized and its contents moved accordingly.\r\n * @param {!ByteBuffer} target Target ByteBuffer\r\n * @param {number=} offset Offset to prepend at. Will use and decrease {@link ByteBuffer#offset} by the number of bytes\r\n * prepended if omitted.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n * @see ByteBuffer#prepend\r\n */\r\n ByteBufferPrototype.prependTo = function(target, offset) {\r\n target.prepend(this, offset);\r\n return this;\r\n };\r\n /**\r\n * Prints debug information about this ByteBuffer's contents.\r\n * @param {function(string)=} out Output function to call, defaults to console.log\r\n * @expose\r\n */\r\n ByteBufferPrototype.printDebug = function(out) {\r\n if (typeof out !== 'function') out = console.log.bind(console);\r\n out(\r\n this.toString()+\"\\n\"+\r\n \"-------------------------------------------------------------------\\n\"+\r\n this.toDebug(/* columns */ true)\r\n );\r\n };\r\n\r\n /**\r\n * Gets the number of remaining readable bytes. Contents are the bytes between {@link ByteBuffer#offset} and\r\n * {@link ByteBuffer#limit}, so this returns `limit - offset`.\r\n * @returns {number} Remaining readable bytes. May be negative if `offset > limit`.\r\n * @expose\r\n */\r\n ByteBufferPrototype.remaining = function() {\r\n return this.limit - this.offset;\r\n };\r\n /**\r\n * Resets this ByteBuffer's {@link ByteBuffer#offset}. If an offset has been marked through {@link ByteBuffer#mark}\r\n * before, `offset` will be set to {@link ByteBuffer#markedOffset}, which will then be discarded. If no offset has been\r\n * marked, sets `offset = 0`.\r\n * @returns {!ByteBuffer} this\r\n * @see ByteBuffer#mark\r\n * @expose\r\n */\r\n ByteBufferPrototype.reset = function() {\r\n if (this.markedOffset >= 0) {\r\n this.offset = this.markedOffset;\r\n this.markedOffset = -1;\r\n } else {\r\n this.offset = 0;\r\n }\r\n return this;\r\n };\r\n /**\r\n * Resizes this ByteBuffer to be backed by a buffer of at least the given capacity. Will do nothing if already that\r\n * large or larger.\r\n * @param {number} capacity Capacity required\r\n * @returns {!ByteBuffer} this\r\n * @throws {TypeError} If `capacity` is not a number\r\n * @throws {RangeError} If `capacity < 0`\r\n * @expose\r\n */\r\n ByteBufferPrototype.resize = function(capacity) {\r\n if (!this.noAssert) {\r\n if (typeof capacity !== 'number' || capacity % 1 !== 0)\n throw TypeError(\"Illegal capacity: \"+capacity+\" (not an integer)\");\n capacity |= 0;\n if (capacity < 0)\r\n throw RangeError(\"Illegal capacity: 0 <= \"+capacity);\r\n }\r\n if (this.buffer.byteLength < capacity) {\r\n var buffer = new ArrayBuffer(capacity);\r\n var view = new Uint8Array(buffer);\r\n view.set(this.view);\r\n this.buffer = buffer;\r\n this.view = view;\r\n }\r\n return this;\r\n };\r\n /**\r\n * Reverses this ByteBuffer's contents.\r\n * @param {number=} begin Offset to start at, defaults to {@link ByteBuffer#offset}\r\n * @param {number=} end Offset to end at, defaults to {@link ByteBuffer#limit}\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.reverse = function(begin, end) {\r\n if (typeof begin === 'undefined') begin = this.offset;\r\n if (typeof end === 'undefined') end = this.limit;\r\n if (!this.noAssert) {\r\n if (typeof begin !== 'number' || begin % 1 !== 0)\n throw TypeError(\"Illegal begin: Not an integer\");\n begin >>>= 0;\n if (typeof end !== 'number' || end % 1 !== 0)\n throw TypeError(\"Illegal end: Not an integer\");\n end >>>= 0;\n if (begin < 0 || begin > end || end > this.buffer.byteLength)\n throw RangeError(\"Illegal range: 0 <= \"+begin+\" <= \"+end+\" <= \"+this.buffer.byteLength);\n }\r\n if (begin === end)\r\n return this; // Nothing to reverse\r\n Array.prototype.reverse.call(this.view.subarray(begin, end));\r\n return this;\r\n };\r\n /**\r\n * Skips the next `length` bytes. This will just advance\r\n * @param {number} length Number of bytes to skip. May also be negative to move the offset back.\r\n * @returns {!ByteBuffer} this\r\n * @expose\r\n */\r\n ByteBufferPrototype.skip = function(length) {\r\n if (!this.noAssert) {\r\n if (typeof length !== 'number' || length % 1 !== 0)\n throw TypeError(\"Illegal length: \"+length+\" (not an integer)\");\n length |= 0;\n }\r\n var offset = this.offset + length;\r\n if (!this.noAssert) {\r\n if (offset < 0 || offset > this.buffer.byteLength)\r\n throw RangeError(\"Illegal length: 0 <= \"+this.offset+\" + \"+length+\" <= \"+this.buffer.byteLength);\r\n }\r\n this.offset = offset;\r\n return this;\r\n };\r\n\r\n /**\r\n * Slices this ByteBuffer by creating a cloned instance with `offset = begin` and `limit = end`.\r\n * @param {number=} begin Begin offset, defaults to {@link ByteBuffer#offset}.\r\n * @param {number=} end End offset, defaults to {@link ByteBuffer#limit}.\r\n * @returns {!ByteBuffer} Clone of this ByteBuffer with slicing applied, backed by the same {@link ByteBuffer#buffer}\r\n * @expose\r\n */\r\n ByteBufferPrototype.slice = function(begin, end) {\r\n if (typeof begin === 'undefined') begin = this.offset;\r\n if (typeof end === 'undefined') end = this.limit;\r\n if (!this.noAssert) {\r\n if (typeof begin !== 'number' || begin % 1 !== 0)\n throw TypeError(\"Illegal begin: Not an integer\");\n begin >>>= 0;\n if (typeof end !== 'number' || end % 1 !== 0)\n throw TypeError(\"Illegal end: Not an integer\");\n end >>>= 0;\n if (begin < 0 || begin > end || end > this.buffer.byteLength)\n throw RangeError(\"Illegal range: 0 <= \"+begin+\" <= \"+end+\" <= \"+this.buffer.byteLength);\n }\r\n var bb = this.clone();\r\n bb.offset = begin;\r\n bb.limit = end;\r\n return bb;\r\n };\r\n /**\r\n * Returns a copy of the backing buffer that contains this ByteBuffer's contents. Contents are the bytes between\r\n * {@link ByteBuffer#offset} and {@link ByteBuffer#limit}.\r\n * @param {boolean=} forceCopy If `true` returns a copy, otherwise returns a view referencing the same memory if\r\n * possible. Defaults to `false`\r\n * @returns {!ArrayBuffer} Contents as an ArrayBuffer\r\n * @expose\r\n */\r\n ByteBufferPrototype.toBuffer = function(forceCopy) {\r\n var offset = this.offset,\r\n limit = this.limit;\r\n if (!this.noAssert) {\r\n if (typeof offset !== 'number' || offset % 1 !== 0)\n throw TypeError(\"Illegal offset: Not an integer\");\n offset >>>= 0;\n if (typeof limit !== 'number' || limit % 1 !== 0)\n throw TypeError(\"Illegal limit: Not an integer\");\n limit >>>= 0;\n if (offset < 0 || offset > limit || limit > this.buffer.byteLength)\n throw RangeError(\"Illegal range: 0 <= \"+offset+\" <= \"+limit+\" <= \"+this.buffer.byteLength);\n }\r\n // NOTE: It's not possible to have another ArrayBuffer reference the same memory as the backing buffer. This is\r\n // possible with Uint8Array#subarray only, but we have to return an ArrayBuffer by contract. So:\r\n if (!forceCopy && offset === 0 && limit === this.buffer.byteLength)\r\n return this.buffer;\r\n if (offset === limit)\r\n return EMPTY_BUFFER;\r\n var buffer = new ArrayBuffer(limit - offset);\r\n new Uint8Array(buffer).set(new Uint8Array(this.buffer).subarray(offset, limit), 0);\r\n return buffer;\r\n };\r\n\r\n /**\r\n * Returns a raw buffer compacted to contain this ByteBuffer's contents. Contents are the bytes between\r\n * {@link ByteBuffer#offset} and {@link ByteBuffer#limit}. This is an alias of {@link ByteBuffer#toBuffer}.\r\n * @function\r\n * @param {boolean=} forceCopy If `true` returns a copy, otherwise returns a view referencing the same memory.\r\n * Defaults to `false`\r\n * @returns {!ArrayBuffer} Contents as an ArrayBuffer\r\n * @expose\r\n */\r\n ByteBufferPrototype.toArrayBuffer = ByteBufferPrototype.toBuffer;\r\n\r\n /**\r\n * Converts the ByteBuffer's contents to a string.\r\n * @param {string=} encoding Output encoding. Returns an informative string representation if omitted but also allows\r\n * direct conversion to \"utf8\", \"hex\", \"base64\" and \"binary\" encoding. \"debug\" returns a hex representation with\r\n * highlighted offsets.\r\n * @param {number=} begin Offset to begin at, defaults to {@link ByteBuffer#offset}\r\n * @param {number=} end Offset to end at, defaults to {@link ByteBuffer#limit}\r\n * @returns {string} String representation\r\n * @throws {Error} If `encoding` is invalid\r\n * @expose\r\n */\r\n ByteBufferPrototype.toString = function(encoding, begin, end) {\r\n if (typeof encoding === 'undefined')\r\n return \"ByteBufferAB(offset=\"+this.offset+\",markedOffset=\"+this.markedOffset+\",limit=\"+this.limit+\",capacity=\"+this.capacity()+\")\";\r\n if (typeof encoding === 'number')\r\n encoding = \"utf8\",\r\n begin = encoding,\r\n end = begin;\r\n switch (encoding) {\r\n case \"utf8\":\r\n return this.toUTF8(begin, end);\r\n case \"base64\":\r\n return this.toBase64(begin, end);\r\n case \"hex\":\r\n return this.toHex(begin, end);\r\n case \"binary\":\r\n return this.toBinary(begin, end);\r\n case \"debug\":\r\n return this.toDebug();\r\n case \"columns\":\r\n return this.toColumns();\r\n default:\r\n throw Error(\"Unsupported encoding: \"+encoding);\r\n }\r\n };\r\n\r\n // lxiv-embeddable\r\n\r\n /**\r\n * lxiv-embeddable (c) 2014 Daniel Wirtz \r\n * Released under the Apache License, Version 2.0\r\n * see: https://github.com/dcodeIO/lxiv for details\r\n */\r\n var lxiv = function() {\r\n \"use strict\";\r\n\r\n /**\r\n * lxiv namespace.\r\n * @type {!Object.}\r\n * @exports lxiv\r\n */\r\n var lxiv = {};\r\n\r\n /**\r\n * Character codes for output.\r\n * @type {!Array.}\r\n * @inner\r\n */\r\n var aout = [\r\n 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,\r\n 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102,\r\n 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,\r\n 119, 120, 121, 122, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 43, 47\r\n ];\r\n\r\n /**\r\n * Character codes for input.\r\n * @type {!Array.}\r\n * @inner\r\n */\r\n var ain = [];\r\n for (var i=0, k=aout.length; i>2)&0x3f]);\r\n t = (b&0x3)<<4;\r\n if ((b = src()) !== null) {\r\n t |= (b>>4)&0xf;\r\n dst(aout[(t|((b>>4)&0xf))&0x3f]);\r\n t = (b&0xf)<<2;\r\n if ((b = src()) !== null)\r\n dst(aout[(t|((b>>6)&0x3))&0x3f]),\r\n dst(aout[b&0x3f]);\r\n else\r\n dst(aout[t&0x3f]),\r\n dst(61);\r\n } else\r\n dst(aout[t&0x3f]),\r\n dst(61),\r\n dst(61);\r\n }\r\n };\r\n\r\n /**\r\n * Decodes base64 char codes to bytes.\r\n * @param {!function():number|null} src Characters source as a function returning the next char code respectively\r\n * `null` if there are no more characters left.\r\n * @param {!function(number)} dst Bytes destination as a function successively called with the next byte.\r\n * @throws {Error} If a character code is invalid\r\n */\r\n lxiv.decode = function(src, dst) {\r\n var c, t1, t2;\r\n function fail(c) {\r\n throw Error(\"Illegal character code: \"+c);\r\n }\r\n while ((c = src()) !== null) {\r\n t1 = ain[c];\r\n if (typeof t1 === 'undefined') fail(c);\r\n if ((c = src()) !== null) {\r\n t2 = ain[c];\r\n if (typeof t2 === 'undefined') fail(c);\r\n dst((t1<<2)>>>0|(t2&0x30)>>4);\r\n if ((c = src()) !== null) {\r\n t1 = ain[c];\r\n if (typeof t1 === 'undefined')\r\n if (c === 61) break; else fail(c);\r\n dst(((t2&0xf)<<4)>>>0|(t1&0x3c)>>2);\r\n if ((c = src()) !== null) {\r\n t2 = ain[c];\r\n if (typeof t2 === 'undefined')\r\n if (c === 61) break; else fail(c);\r\n dst(((t1&0x3)<<6)>>>0|t2);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Tests if a string is valid base64.\r\n * @param {string} str String to test\r\n * @returns {boolean} `true` if valid, otherwise `false`\r\n */\r\n lxiv.test = function(str) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(str);\r\n };\r\n\r\n return lxiv;\r\n }();\r\n\r\n // encodings/base64\r\n\r\n /**\r\n * Encodes this ByteBuffer's contents to a base64 encoded string.\r\n * @param {number=} begin Offset to begin at, defaults to {@link ByteBuffer#offset}.\r\n * @param {number=} end Offset to end at, defaults to {@link ByteBuffer#limit}.\r\n * @returns {string} Base64 encoded string\r\n * @throws {RangeError} If `begin` or `end` is out of bounds\r\n * @expose\r\n */\r\n ByteBufferPrototype.toBase64 = function(begin, end) {\r\n if (typeof begin === 'undefined')\r\n begin = this.offset;\r\n if (typeof end === 'undefined')\r\n end = this.limit;\r\n begin = begin | 0; end = end | 0;\r\n if (begin < 0 || end > this.capacity || begin > end)\r\n throw RangeError(\"begin, end\");\r\n var sd; lxiv.encode(function() {\r\n return begin < end ? this.view[begin++] : null;\r\n }.bind(this), sd = stringDestination());\r\n return sd();\r\n };\r\n\r\n /**\r\n * Decodes a base64 encoded string to a ByteBuffer.\r\n * @param {string} str String to decode\r\n * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n * {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n * @returns {!ByteBuffer} ByteBuffer\r\n * @expose\r\n */\r\n ByteBuffer.fromBase64 = function(str, littleEndian) {\r\n if (typeof str !== 'string')\r\n throw TypeError(\"str\");\r\n var bb = new ByteBuffer(str.length/4*3, littleEndian),\r\n i = 0;\r\n lxiv.decode(stringSource(str), function(b) {\r\n bb.view[i++] = b;\r\n });\r\n bb.limit = i;\r\n return bb;\r\n };\r\n\r\n /**\r\n * Encodes a binary string to base64 like `window.btoa` does.\r\n * @param {string} str Binary string\r\n * @returns {string} Base64 encoded string\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window.btoa\r\n * @expose\r\n */\r\n ByteBuffer.btoa = function(str) {\r\n return ByteBuffer.fromBinary(str).toBase64();\r\n };\r\n\r\n /**\r\n * Decodes a base64 encoded string to binary like `window.atob` does.\r\n * @param {string} b64 Base64 encoded string\r\n * @returns {string} Binary string\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window.atob\r\n * @expose\r\n */\r\n ByteBuffer.atob = function(b64) {\r\n return ByteBuffer.fromBase64(b64).toBinary();\r\n };\r\n\r\n // encodings/binary\r\n\r\n /**\r\n * Encodes this ByteBuffer to a binary encoded string, that is using only characters 0x00-0xFF as bytes.\r\n * @param {number=} begin Offset to begin at. Defaults to {@link ByteBuffer#offset}.\r\n * @param {number=} end Offset to end at. Defaults to {@link ByteBuffer#limit}.\r\n * @returns {string} Binary encoded string\r\n * @throws {RangeError} If `offset > limit`\r\n * @expose\r\n */\r\n ByteBufferPrototype.toBinary = function(begin, end) {\r\n if (typeof begin === 'undefined')\r\n begin = this.offset;\r\n if (typeof end === 'undefined')\r\n end = this.limit;\r\n begin |= 0; end |= 0;\r\n if (begin < 0 || end > this.capacity() || begin > end)\r\n throw RangeError(\"begin, end\");\r\n if (begin === end)\r\n return \"\";\r\n var chars = [],\r\n parts = [];\r\n while (begin < end) {\r\n chars.push(this.view[begin++]);\r\n if (chars.length >= 1024)\r\n parts.push(String.fromCharCode.apply(String, chars)),\r\n chars = [];\r\n }\r\n return parts.join('') + String.fromCharCode.apply(String, chars);\r\n };\r\n\r\n /**\r\n * Decodes a binary encoded string, that is using only characters 0x00-0xFF as bytes, to a ByteBuffer.\r\n * @param {string} str String to decode\r\n * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n * {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n * @returns {!ByteBuffer} ByteBuffer\r\n * @expose\r\n */\r\n ByteBuffer.fromBinary = function(str, littleEndian) {\r\n if (typeof str !== 'string')\r\n throw TypeError(\"str\");\r\n var i = 0,\r\n k = str.length,\r\n charCode,\r\n bb = new ByteBuffer(k, littleEndian);\r\n while (i 0xff)\r\n throw RangeError(\"illegal char code: \"+charCode);\r\n bb.view[i++] = charCode;\r\n }\r\n bb.limit = k;\r\n return bb;\r\n };\r\n\r\n // encodings/debug\r\n\r\n /**\r\n * Encodes this ByteBuffer to a hex encoded string with marked offsets. Offset symbols are:\r\n * * `<` : offset,\r\n * * `'` : markedOffset,\r\n * * `>` : limit,\r\n * * `|` : offset and limit,\r\n * * `[` : offset and markedOffset,\r\n * * `]` : markedOffset and limit,\r\n * * `!` : offset, markedOffset and limit\r\n * @param {boolean=} columns If `true` returns two columns hex + ascii, defaults to `false`\r\n * @returns {string|!Array.} Debug string or array of lines if `asArray = true`\r\n * @expose\r\n * @example `>00'01 02<03` contains four bytes with `limit=0, markedOffset=1, offset=3`\r\n * @example `00[01 02 03>` contains four bytes with `offset=markedOffset=1, limit=4`\r\n * @example `00|01 02 03` contains four bytes with `offset=limit=1, markedOffset=-1`\r\n * @example `|` contains zero bytes with `offset=limit=0, markedOffset=-1`\r\n */\r\n ByteBufferPrototype.toDebug = function(columns) {\r\n var i = -1,\r\n k = this.buffer.byteLength,\r\n b,\r\n hex = \"\",\r\n asc = \"\",\r\n out = \"\";\r\n while (i 32 && b < 127 ? String.fromCharCode(b) : '.';\r\n }\r\n ++i;\r\n if (columns) {\r\n if (i > 0 && i % 16 === 0 && i !== k) {\r\n while (hex.length < 3*16+3) hex += \" \";\r\n out += hex+asc+\"\\n\";\r\n hex = asc = \"\";\r\n }\r\n }\r\n if (i === this.offset && i === this.limit)\r\n hex += i === this.markedOffset ? \"!\" : \"|\";\r\n else if (i === this.offset)\r\n hex += i === this.markedOffset ? \"[\" : \"<\";\r\n else if (i === this.limit)\r\n hex += i === this.markedOffset ? \"]\" : \">\";\r\n else\r\n hex += i === this.markedOffset ? \"'\" : (columns || (i !== 0 && i !== k) ? \" \" : \"\");\r\n }\r\n if (columns && hex !== \" \") {\r\n while (hex.length < 3*16+3)\r\n hex += \" \";\r\n out += hex + asc + \"\\n\";\r\n }\r\n return columns ? out : hex;\r\n };\r\n\r\n /**\r\n * Decodes a hex encoded string with marked offsets to a ByteBuffer.\r\n * @param {string} str Debug string to decode (not be generated with `columns = true`)\r\n * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n * {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n * @param {boolean=} noAssert Whether to skip assertions of offsets and values. Defaults to\r\n * {@link ByteBuffer.DEFAULT_NOASSERT}.\r\n * @returns {!ByteBuffer} ByteBuffer\r\n * @expose\r\n * @see ByteBuffer#toDebug\r\n */\r\n ByteBuffer.fromDebug = function(str, littleEndian, noAssert) {\r\n var k = str.length,\r\n bb = new ByteBuffer(((k+1)/3)|0, littleEndian, noAssert);\r\n var i = 0, j = 0, ch, b,\r\n rs = false, // Require symbol next\r\n ho = false, hm = false, hl = false, // Already has offset (ho), markedOffset (hm), limit (hl)?\r\n fail = false;\r\n while (i':\r\n if (!noAssert) {\r\n if (hl) {\r\n fail = true;\r\n break;\r\n }\r\n hl = true;\r\n }\r\n bb.limit = j;\r\n rs = false;\r\n break;\r\n case \"'\":\r\n if (!noAssert) {\r\n if (hm) {\r\n fail = true;\r\n break;\r\n }\r\n hm = true;\r\n }\r\n bb.markedOffset = j;\r\n rs = false;\r\n break;\r\n case ' ':\r\n rs = false;\r\n break;\r\n default:\r\n if (!noAssert) {\r\n if (rs) {\r\n fail = true;\r\n break;\r\n }\r\n }\r\n b = parseInt(ch+str.charAt(i++), 16);\r\n if (!noAssert) {\r\n if (isNaN(b) || b < 0 || b > 255)\r\n throw TypeError(\"Illegal str: Not a debug encoded string\");\r\n }\r\n bb.view[j++] = b;\r\n rs = true;\r\n }\r\n if (fail)\r\n throw TypeError(\"Illegal str: Invalid symbol at \"+i);\r\n }\r\n if (!noAssert) {\r\n if (!ho || !hl)\r\n throw TypeError(\"Illegal str: Missing offset or limit\");\r\n if (j>>= 0;\n if (typeof end !== 'number' || end % 1 !== 0)\n throw TypeError(\"Illegal end: Not an integer\");\n end >>>= 0;\n if (begin < 0 || begin > end || end > this.buffer.byteLength)\n throw RangeError(\"Illegal range: 0 <= \"+begin+\" <= \"+end+\" <= \"+this.buffer.byteLength);\n }\r\n var out = new Array(end - begin),\r\n b;\r\n while (begin < end) {\r\n b = this.view[begin++];\r\n if (b < 0x10)\r\n out.push(\"0\", b.toString(16));\r\n else out.push(b.toString(16));\r\n }\r\n return out.join('');\r\n };\r\n\r\n /**\r\n * Decodes a hex encoded string to a ByteBuffer.\r\n * @param {string} str String to decode\r\n * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n * {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n * @param {boolean=} noAssert Whether to skip assertions of offsets and values. Defaults to\r\n * {@link ByteBuffer.DEFAULT_NOASSERT}.\r\n * @returns {!ByteBuffer} ByteBuffer\r\n * @expose\r\n */\r\n ByteBuffer.fromHex = function(str, littleEndian, noAssert) {\r\n if (!noAssert) {\r\n if (typeof str !== 'string')\r\n throw TypeError(\"Illegal str: Not a string\");\r\n if (str.length % 2 !== 0)\r\n throw TypeError(\"Illegal str: Length not a multiple of 2\");\r\n }\r\n var k = str.length,\r\n bb = new ByteBuffer((k / 2) | 0, littleEndian),\r\n b;\r\n for (var i=0, j=0; i 255)\r\n throw TypeError(\"Illegal str: Contains non-hex characters\");\r\n bb.view[j++] = b;\r\n }\r\n bb.limit = j;\r\n return bb;\r\n };\r\n\r\n // utfx-embeddable\r\n\r\n /**\r\n * utfx-embeddable (c) 2014 Daniel Wirtz \r\n * Released under the Apache License, Version 2.0\r\n * see: https://github.com/dcodeIO/utfx for details\r\n */\r\n var utfx = function() {\r\n \"use strict\";\r\n\r\n /**\r\n * utfx namespace.\r\n * @inner\r\n * @type {!Object.}\r\n */\r\n var utfx = {};\r\n\r\n /**\r\n * Maximum valid code point.\r\n * @type {number}\r\n * @const\r\n */\r\n utfx.MAX_CODEPOINT = 0x10FFFF;\r\n\r\n /**\r\n * Encodes UTF8 code points to UTF8 bytes.\r\n * @param {(!function():number|null) | number} src Code points source, either as a function returning the next code point\r\n * respectively `null` if there are no more code points left or a single numeric code point.\r\n * @param {!function(number)} dst Bytes destination as a function successively called with the next byte\r\n */\r\n utfx.encodeUTF8 = function(src, dst) {\r\n var cp = null;\r\n if (typeof src === 'number')\r\n cp = src,\r\n src = function() { return null; };\r\n while (cp !== null || (cp = src()) !== null) {\r\n if (cp < 0x80)\r\n dst(cp&0x7F);\r\n else if (cp < 0x800)\r\n dst(((cp>>6)&0x1F)|0xC0),\r\n dst((cp&0x3F)|0x80);\r\n else if (cp < 0x10000)\r\n dst(((cp>>12)&0x0F)|0xE0),\r\n dst(((cp>>6)&0x3F)|0x80),\r\n dst((cp&0x3F)|0x80);\r\n else\r\n dst(((cp>>18)&0x07)|0xF0),\r\n dst(((cp>>12)&0x3F)|0x80),\r\n dst(((cp>>6)&0x3F)|0x80),\r\n dst((cp&0x3F)|0x80);\r\n cp = null;\r\n }\r\n };\r\n\r\n /**\r\n * Decodes UTF8 bytes to UTF8 code points.\r\n * @param {!function():number|null} src Bytes source as a function returning the next byte respectively `null` if there\r\n * are no more bytes left.\r\n * @param {!function(number)} dst Code points destination as a function successively called with each decoded code point.\r\n * @throws {RangeError} If a starting byte is invalid in UTF8\r\n * @throws {Error} If the last sequence is truncated. Has an array property `bytes` holding the\r\n * remaining bytes.\r\n */\r\n utfx.decodeUTF8 = function(src, dst) {\r\n var a, b, c, d, fail = function(b) {\r\n b = b.slice(0, b.indexOf(null));\r\n var err = Error(b.toString());\r\n err.name = \"TruncatedError\";\r\n err['bytes'] = b;\r\n throw err;\r\n };\r\n while ((a = src()) !== null) {\r\n if ((a&0x80) === 0)\r\n dst(a);\r\n else if ((a&0xE0) === 0xC0)\r\n ((b = src()) === null) && fail([a, b]),\r\n dst(((a&0x1F)<<6) | (b&0x3F));\r\n else if ((a&0xF0) === 0xE0)\r\n ((b=src()) === null || (c=src()) === null) && fail([a, b, c]),\r\n dst(((a&0x0F)<<12) | ((b&0x3F)<<6) | (c&0x3F));\r\n else if ((a&0xF8) === 0xF0)\r\n ((b=src()) === null || (c=src()) === null || (d=src()) === null) && fail([a, b, c ,d]),\r\n dst(((a&0x07)<<18) | ((b&0x3F)<<12) | ((c&0x3F)<<6) | (d&0x3F));\r\n else throw RangeError(\"Illegal starting byte: \"+a);\r\n }\r\n };\r\n\r\n /**\r\n * Converts UTF16 characters to UTF8 code points.\r\n * @param {!function():number|null} src Characters source as a function returning the next char code respectively\r\n * `null` if there are no more characters left.\r\n * @param {!function(number)} dst Code points destination as a function successively called with each converted code\r\n * point.\r\n */\r\n utfx.UTF16toUTF8 = function(src, dst) {\r\n var c1, c2 = null;\r\n while (true) {\r\n if ((c1 = c2 !== null ? c2 : src()) === null)\r\n break;\r\n if (c1 >= 0xD800 && c1 <= 0xDFFF) {\r\n if ((c2 = src()) !== null) {\r\n if (c2 >= 0xDC00 && c2 <= 0xDFFF) {\r\n dst((c1-0xD800)*0x400+c2-0xDC00+0x10000);\r\n c2 = null; continue;\r\n }\r\n }\r\n }\r\n dst(c1);\r\n }\r\n if (c2 !== null) dst(c2);\r\n };\r\n\r\n /**\r\n * Converts UTF8 code points to UTF16 characters.\r\n * @param {(!function():number|null) | number} src Code points source, either as a function returning the next code point\r\n * respectively `null` if there are no more code points left or a single numeric code point.\r\n * @param {!function(number)} dst Characters destination as a function successively called with each converted char code.\r\n * @throws {RangeError} If a code point is out of range\r\n */\r\n utfx.UTF8toUTF16 = function(src, dst) {\r\n var cp = null;\r\n if (typeof src === 'number')\r\n cp = src, src = function() { return null; };\r\n while (cp !== null || (cp = src()) !== null) {\r\n if (cp <= 0xFFFF)\r\n dst(cp);\r\n else\r\n cp -= 0x10000,\r\n dst((cp>>10)+0xD800),\r\n dst((cp%0x400)+0xDC00);\r\n cp = null;\r\n }\r\n };\r\n\r\n /**\r\n * Converts and encodes UTF16 characters to UTF8 bytes.\r\n * @param {!function():number|null} src Characters source as a function returning the next char code respectively `null`\r\n * if there are no more characters left.\r\n * @param {!function(number)} dst Bytes destination as a function successively called with the next byte.\r\n */\r\n utfx.encodeUTF16toUTF8 = function(src, dst) {\r\n utfx.UTF16toUTF8(src, function(cp) {\r\n utfx.encodeUTF8(cp, dst);\r\n });\r\n };\r\n\r\n /**\r\n * Decodes and converts UTF8 bytes to UTF16 characters.\r\n * @param {!function():number|null} src Bytes source as a function returning the next byte respectively `null` if there\r\n * are no more bytes left.\r\n * @param {!function(number)} dst Characters destination as a function successively called with each converted char code.\r\n * @throws {RangeError} If a starting byte is invalid in UTF8\r\n * @throws {Error} If the last sequence is truncated. Has an array property `bytes` holding the remaining bytes.\r\n */\r\n utfx.decodeUTF8toUTF16 = function(src, dst) {\r\n utfx.decodeUTF8(src, function(cp) {\r\n utfx.UTF8toUTF16(cp, dst);\r\n });\r\n };\r\n\r\n /**\r\n * Calculates the byte length of an UTF8 code point.\r\n * @param {number} cp UTF8 code point\r\n * @returns {number} Byte length\r\n */\r\n utfx.calculateCodePoint = function(cp) {\r\n return (cp < 0x80) ? 1 : (cp < 0x800) ? 2 : (cp < 0x10000) ? 3 : 4;\r\n };\r\n\r\n /**\r\n * Calculates the number of UTF8 bytes required to store UTF8 code points.\r\n * @param {(!function():number|null)} src Code points source as a function returning the next code point respectively\r\n * `null` if there are no more code points left.\r\n * @returns {number} The number of UTF8 bytes required\r\n */\r\n utfx.calculateUTF8 = function(src) {\r\n var cp, l=0;\r\n while ((cp = src()) !== null)\r\n l += (cp < 0x80) ? 1 : (cp < 0x800) ? 2 : (cp < 0x10000) ? 3 : 4;\r\n return l;\r\n };\r\n\r\n /**\r\n * Calculates the number of UTF8 code points respectively UTF8 bytes required to store UTF16 char codes.\r\n * @param {(!function():number|null)} src Characters source as a function returning the next char code respectively\r\n * `null` if there are no more characters left.\r\n * @returns {!Array.} The number of UTF8 code points at index 0 and the number of UTF8 bytes required at index 1.\r\n */\r\n utfx.calculateUTF16asUTF8 = function(src) {\r\n var n=0, l=0;\r\n utfx.UTF16toUTF8(src, function(cp) {\r\n ++n; l += (cp < 0x80) ? 1 : (cp < 0x800) ? 2 : (cp < 0x10000) ? 3 : 4;\r\n });\r\n return [n,l];\r\n };\r\n\r\n return utfx;\r\n }();\r\n\r\n // encodings/utf8\r\n\r\n /**\r\n * Encodes this ByteBuffer's contents between {@link ByteBuffer#offset} and {@link ByteBuffer#limit} to an UTF8 encoded\r\n * string.\r\n * @returns {string} Hex encoded string\r\n * @throws {RangeError} If `offset > limit`\r\n * @expose\r\n */\r\n ByteBufferPrototype.toUTF8 = function(begin, end) {\r\n if (typeof begin === 'undefined') begin = this.offset;\r\n if (typeof end === 'undefined') end = this.limit;\r\n if (!this.noAssert) {\r\n if (typeof begin !== 'number' || begin % 1 !== 0)\n throw TypeError(\"Illegal begin: Not an integer\");\n begin >>>= 0;\n if (typeof end !== 'number' || end % 1 !== 0)\n throw TypeError(\"Illegal end: Not an integer\");\n end >>>= 0;\n if (begin < 0 || begin > end || end > this.buffer.byteLength)\n throw RangeError(\"Illegal range: 0 <= \"+begin+\" <= \"+end+\" <= \"+this.buffer.byteLength);\n }\r\n var sd; try {\r\n utfx.decodeUTF8toUTF16(function() {\r\n return begin < end ? this.view[begin++] : null;\r\n }.bind(this), sd = stringDestination());\r\n } catch (e) {\r\n if (begin !== end)\r\n throw RangeError(\"Illegal range: Truncated data, \"+begin+\" != \"+end);\r\n }\r\n return sd();\r\n };\r\n\r\n /**\r\n * Decodes an UTF8 encoded string to a ByteBuffer.\r\n * @param {string} str String to decode\r\n * @param {boolean=} littleEndian Whether to use little or big endian byte order. Defaults to\r\n * {@link ByteBuffer.DEFAULT_ENDIAN}.\r\n * @param {boolean=} noAssert Whether to skip assertions of offsets and values. Defaults to\r\n * {@link ByteBuffer.DEFAULT_NOASSERT}.\r\n * @returns {!ByteBuffer} ByteBuffer\r\n * @expose\r\n */\r\n ByteBuffer.fromUTF8 = function(str, littleEndian, noAssert) {\r\n if (!noAssert)\r\n if (typeof str !== 'string')\r\n throw TypeError(\"Illegal str: Not a string\");\r\n var bb = new ByteBuffer(utfx.calculateUTF16asUTF8(stringSource(str), true)[1], littleEndian, noAssert),\r\n i = 0;\r\n utfx.encodeUTF16toUTF8(stringSource(str), function(b) {\r\n bb.view[i++] = b;\r\n });\r\n bb.limit = i;\r\n return bb;\r\n };\r\n\r\n return ByteBuffer;\r\n});\r\n","/*\r\n Copyright 2013 Daniel Wirtz \r\n Copyright 2009 The Closure Library Authors. All Rights Reserved.\r\n\r\n Licensed under the Apache License, Version 2.0 (the \"License\");\r\n you may not use this file except in compliance with the License.\r\n You may obtain a copy of the License at\r\n\r\n http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n Unless required by applicable law or agreed to in writing, software\r\n distributed under the License is distributed on an \"AS-IS\" BASIS,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n See the License for the specific language governing permissions and\r\n limitations under the License.\r\n */\r\n\r\n/**\r\n * @license long.js (c) 2013 Daniel Wirtz \r\n * Released under the Apache License, Version 2.0\r\n * see: https://github.com/dcodeIO/long.js for details\r\n */\r\n(function(global, factory) {\r\n\r\n /* AMD */ if (typeof define === 'function' && define[\"amd\"])\r\n define([], factory);\r\n /* CommonJS */ else if (typeof require === 'function' && typeof module === \"object\" && module && module[\"exports\"])\r\n module[\"exports\"] = factory();\r\n /* Global */ else\r\n (global[\"dcodeIO\"] = global[\"dcodeIO\"] || {})[\"Long\"] = factory();\r\n\r\n})(this, function() {\r\n \"use strict\";\r\n\r\n /**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n * See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed\r\n * @constructor\r\n */\r\n function Long(low, high, unsigned) {\r\n\r\n /**\r\n * The low 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.low = low | 0;\r\n\r\n /**\r\n * The high 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.high = high | 0;\r\n\r\n /**\r\n * Whether unsigned or not.\r\n * @type {boolean}\r\n */\r\n this.unsigned = !!unsigned;\r\n }\r\n\r\n // The internal representation of a long is the two given signed, 32-bit values.\r\n // We use 32-bit pieces because these are the size of integers on which\r\n // Javascript performs bit-operations. For operations like addition and\r\n // multiplication, we split each number into 16 bit pieces, which can easily be\r\n // multiplied within Javascript's floating-point representation without overflow\r\n // or change in sign.\r\n //\r\n // In the algorithms below, we frequently reduce the negative case to the\r\n // positive case by negating the input(s) and then post-processing the result.\r\n // Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n // (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n // a positive number, it overflows back into a negative). Not handling this\r\n // case would often result in infinite recursion.\r\n //\r\n // Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n // methods on which they depend.\r\n\r\n /**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\n Long.prototype.__isLong__;\r\n\r\n Object.defineProperty(Long.prototype, \"__isLong__\", {\r\n value: true,\r\n enumerable: false,\r\n configurable: false\r\n });\r\n\r\n /**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\n function isLong(obj) {\r\n return (obj && obj[\"__isLong__\"]) === true;\r\n }\r\n\r\n /**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\n Long.isLong = isLong;\r\n\r\n /**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\n var INT_CACHE = {};\r\n\r\n /**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\n var UINT_CACHE = {};\r\n\r\n /**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\n function fromInt(value, unsigned) {\r\n var obj, cachedObj, cache;\r\n if (unsigned) {\r\n value >>>= 0;\r\n if (cache = (0 <= value && value < 256)) {\r\n cachedObj = UINT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n if (cache)\r\n UINT_CACHE[value] = obj;\r\n return obj;\r\n } else {\r\n value |= 0;\r\n if (cache = (-128 <= value && value < 128)) {\r\n cachedObj = INT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n if (cache)\r\n INT_CACHE[value] = obj;\r\n return obj;\r\n }\r\n }\r\n\r\n /**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\n Long.fromInt = fromInt;\r\n\r\n /**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\n function fromNumber(value, unsigned) {\r\n if (isNaN(value) || !isFinite(value))\r\n return unsigned ? UZERO : ZERO;\r\n if (unsigned) {\r\n if (value < 0)\r\n return UZERO;\r\n if (value >= TWO_PWR_64_DBL)\r\n return MAX_UNSIGNED_VALUE;\r\n } else {\r\n if (value <= -TWO_PWR_63_DBL)\r\n return MIN_VALUE;\r\n if (value + 1 >= TWO_PWR_63_DBL)\r\n return MAX_VALUE;\r\n }\r\n if (value < 0)\r\n return fromNumber(-value, unsigned).neg();\r\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n }\r\n\r\n /**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\n Long.fromNumber = fromNumber;\r\n\r\n /**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\n function fromBits(lowBits, highBits, unsigned) {\r\n return new Long(lowBits, highBits, unsigned);\r\n }\r\n\r\n /**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n * assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to `false` for signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\n Long.fromBits = fromBits;\r\n\r\n /**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\n var pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n /**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\n function fromString(str, unsigned, radix) {\r\n if (str.length === 0)\r\n throw Error('empty string');\r\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n return ZERO;\r\n if (typeof unsigned === 'number') {\r\n // For goog.math.long compatibility\r\n radix = unsigned,\r\n unsigned = false;\r\n } else {\r\n unsigned = !! unsigned;\r\n }\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n\r\n var p;\r\n if ((p = str.indexOf('-')) > 0)\r\n throw Error('interior hyphen');\r\n else if (p === 0) {\r\n return fromString(str.substring(1), unsigned, radix).neg();\r\n }\r\n\r\n // Do several (8) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n var result = ZERO;\r\n for (var i = 0; i < str.length; i += 8) {\r\n var size = Math.min(8, str.length - i),\r\n value = parseInt(str.substring(i, i + size), radix);\r\n if (size < 8) {\r\n var power = fromNumber(pow_dbl(radix, size));\r\n result = result.mul(power).add(fromNumber(value));\r\n } else {\r\n result = result.mul(radixToPower);\r\n result = result.add(fromNumber(value));\r\n }\r\n }\r\n result.unsigned = unsigned;\r\n return result;\r\n }\r\n\r\n /**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to `false` for signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\n Long.fromString = fromString;\r\n\r\n /**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @returns {!Long}\r\n * @inner\r\n */\r\n function fromValue(val) {\r\n if (val /* is compatible */ instanceof Long)\r\n return val;\r\n if (typeof val === 'number')\r\n return fromNumber(val);\r\n if (typeof val === 'string')\r\n return fromString(val);\r\n // Throws for non-objects, converts non-instanceof Long:\r\n return fromBits(val.low, val.high, val.unsigned);\r\n }\r\n\r\n /**\r\n * Converts the specified value to a Long.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @returns {!Long}\r\n */\r\n Long.fromValue = fromValue;\r\n\r\n // NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n // no runtime penalty for these.\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var TWO_PWR_16_DBL = 1 << 16;\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var TWO_PWR_24_DBL = 1 << 24;\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n /**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\n var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n /**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\n var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var ZERO = fromInt(0);\r\n\r\n /**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\n Long.ZERO = ZERO;\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var UZERO = fromInt(0, true);\r\n\r\n /**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\n Long.UZERO = UZERO;\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var ONE = fromInt(1);\r\n\r\n /**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\n Long.ONE = ONE;\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var UONE = fromInt(1, true);\r\n\r\n /**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\n Long.UONE = UONE;\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var NEG_ONE = fromInt(-1);\r\n\r\n /**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\n Long.NEG_ONE = NEG_ONE;\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n /**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\n Long.MAX_VALUE = MAX_VALUE;\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n /**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\n Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n /**\r\n * @type {!Long}\r\n * @inner\r\n */\r\n var MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n /**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\n Long.MIN_VALUE = MIN_VALUE;\r\n\r\n /**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\n var LongPrototype = Long.prototype;\r\n\r\n /**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\n LongPrototype.toInt = function toInt() {\r\n return this.unsigned ? this.low >>> 0 : this.low;\r\n };\r\n\r\n /**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\n LongPrototype.toNumber = function toNumber() {\r\n if (this.unsigned)\r\n return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n };\r\n\r\n /**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\n LongPrototype.toString = function toString(radix) {\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n if (this.isZero())\r\n return '0';\r\n if (this.isNegative()) { // Unsigned Longs are never negative\r\n if (this.eq(MIN_VALUE)) {\r\n // We need to change the Long value before it can be negated, so we remove\r\n // the bottom-most digit in this base and then recurse to do the rest.\r\n var radixLong = fromNumber(radix),\r\n div = this.div(radixLong),\r\n rem1 = div.mul(radixLong).sub(this);\r\n return div.toString(radix) + rem1.toInt().toString(radix);\r\n } else\r\n return '-' + this.neg().toString(radix);\r\n }\r\n\r\n // Do several (6) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n rem = this;\r\n var result = '';\r\n while (true) {\r\n var remDiv = rem.div(radixToPower),\r\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n digits = intval.toString(radix);\r\n rem = remDiv;\r\n if (rem.isZero())\r\n return digits + result;\r\n else {\r\n while (digits.length < 6)\r\n digits = '0' + digits;\r\n result = '' + digits + result;\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\n LongPrototype.getHighBits = function getHighBits() {\r\n return this.high;\r\n };\r\n\r\n /**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\n LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n return this.high >>> 0;\r\n };\r\n\r\n /**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\n LongPrototype.getLowBits = function getLowBits() {\r\n return this.low;\r\n };\r\n\r\n /**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\n LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n return this.low >>> 0;\r\n };\r\n\r\n /**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\n LongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n if (this.isNegative()) // Unsigned Longs are never negative\r\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n var val = this.high != 0 ? this.high : this.low;\r\n for (var bit = 31; bit > 0; bit--)\r\n if ((val & (1 << bit)) != 0)\r\n break;\r\n return this.high != 0 ? bit + 33 : bit + 1;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\n LongPrototype.isZero = function isZero() {\r\n return this.high === 0 && this.low === 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\n LongPrototype.isNegative = function isNegative() {\r\n return !this.unsigned && this.high < 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\n LongPrototype.isPositive = function isPositive() {\r\n return this.unsigned || this.high >= 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\n LongPrototype.isOdd = function isOdd() {\r\n return (this.low & 1) === 1;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\n LongPrototype.isEven = function isEven() {\r\n return (this.low & 1) === 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.equals = function equals(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n return false;\r\n return this.high === other.high && this.low === other.low;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.eq = LongPrototype.equals;\r\n\r\n /**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.notEquals = function notEquals(other) {\r\n return !this.eq(/* validates */ other);\r\n };\r\n\r\n /**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.neq = LongPrototype.notEquals;\r\n\r\n /**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.lessThan = function lessThan(other) {\r\n return this.comp(/* validates */ other) < 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.lt = LongPrototype.lessThan;\r\n\r\n /**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n return this.comp(/* validates */ other) <= 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n /**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.greaterThan = function greaterThan(other) {\r\n return this.comp(/* validates */ other) > 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n /**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n return this.comp(/* validates */ other) >= 0;\r\n };\r\n\r\n /**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\n LongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n /**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\n LongPrototype.compare = function compare(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.eq(other))\r\n return 0;\r\n var thisNeg = this.isNegative(),\r\n otherNeg = other.isNegative();\r\n if (thisNeg && !otherNeg)\r\n return -1;\r\n if (!thisNeg && otherNeg)\r\n return 1;\r\n // At this point the sign bits are the same\r\n if (!this.unsigned)\r\n return this.sub(other).isNegative() ? -1 : 1;\r\n // Both are positive if at least one is unsigned\r\n return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n };\r\n\r\n /**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\n LongPrototype.comp = LongPrototype.compare;\r\n\r\n /**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\n LongPrototype.negate = function negate() {\r\n if (!this.unsigned && this.eq(MIN_VALUE))\r\n return MIN_VALUE;\r\n return this.not().add(ONE);\r\n };\r\n\r\n /**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\n LongPrototype.neg = LongPrototype.negate;\r\n\r\n /**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\n LongPrototype.add = function add(addend) {\r\n if (!isLong(addend))\r\n addend = fromValue(addend);\r\n\r\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = addend.high >>> 16;\r\n var b32 = addend.high & 0xFFFF;\r\n var b16 = addend.low >>> 16;\r\n var b00 = addend.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 + b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 + b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 + b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 + b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\n LongPrototype.subtract = function subtract(subtrahend) {\r\n if (!isLong(subtrahend))\r\n subtrahend = fromValue(subtrahend);\r\n return this.add(subtrahend.neg());\r\n };\r\n\r\n /**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\n LongPrototype.sub = LongPrototype.subtract;\r\n\r\n /**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\n LongPrototype.multiply = function multiply(multiplier) {\r\n if (this.isZero())\r\n return ZERO;\r\n if (!isLong(multiplier))\r\n multiplier = fromValue(multiplier);\r\n if (multiplier.isZero())\r\n return ZERO;\r\n if (this.eq(MIN_VALUE))\r\n return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n if (multiplier.eq(MIN_VALUE))\r\n return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n if (this.isNegative()) {\r\n if (multiplier.isNegative())\r\n return this.neg().mul(multiplier.neg());\r\n else\r\n return this.neg().mul(multiplier).neg();\r\n } else if (multiplier.isNegative())\r\n return this.mul(multiplier.neg()).neg();\r\n\r\n // If both longs are small, use float multiplication\r\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n // We can skip products that would overflow.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = multiplier.high >>> 16;\r\n var b32 = multiplier.high & 0xFFFF;\r\n var b16 = multiplier.low >>> 16;\r\n var b00 = multiplier.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 * b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 * b00;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c16 += a00 * b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 * b00;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a16 * b16;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a00 * b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\n LongPrototype.mul = LongPrototype.multiply;\r\n\r\n /**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n * unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\n LongPrototype.divide = function divide(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n if (divisor.isZero())\r\n throw Error('division by zero');\r\n if (this.isZero())\r\n return this.unsigned ? UZERO : ZERO;\r\n var approx, rem, res;\r\n if (!this.unsigned) {\r\n // This section is only relevant for signed longs and is derived from the\r\n // closure library as a whole.\r\n if (this.eq(MIN_VALUE)) {\r\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\r\n else if (divisor.eq(MIN_VALUE))\r\n return ONE;\r\n else {\r\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n var halfThis = this.shr(1);\r\n approx = halfThis.div(divisor).shl(1);\r\n if (approx.eq(ZERO)) {\r\n return divisor.isNegative() ? ONE : NEG_ONE;\r\n } else {\r\n rem = this.sub(divisor.mul(approx));\r\n res = approx.add(rem.div(divisor));\r\n return res;\r\n }\r\n }\r\n } else if (divisor.eq(MIN_VALUE))\r\n return this.unsigned ? UZERO : ZERO;\r\n if (this.isNegative()) {\r\n if (divisor.isNegative())\r\n return this.neg().div(divisor.neg());\r\n return this.neg().div(divisor).neg();\r\n } else if (divisor.isNegative())\r\n return this.div(divisor.neg()).neg();\r\n res = ZERO;\r\n } else {\r\n // The algorithm below has not been made for unsigned longs. It's therefore\r\n // required to take special care of the MSB prior to running it.\r\n if (!divisor.unsigned)\r\n divisor = divisor.toUnsigned();\r\n if (divisor.gt(this))\r\n return UZERO;\r\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n return UONE;\r\n res = UZERO;\r\n }\r\n\r\n // Repeat the following until the remainder is less than other: find a\r\n // floating-point that approximates remainder / other *from below*, add this\r\n // into the result, and subtract it from the remainder. It is critical that\r\n // the approximate value is less than or equal to the real value so that the\r\n // remainder never becomes negative.\r\n rem = this;\r\n while (rem.gte(divisor)) {\r\n // Approximate the result of division. This may be a little greater or\r\n // smaller than the actual value.\r\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n // We will tweak the approximate result by changing it in the 48-th digit or\r\n // the smallest non-fractional digit, whichever is larger.\r\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n // Decrease the approximation until it is smaller than the remainder. Note\r\n // that if it is too large, the product overflows and is negative.\r\n approxRes = fromNumber(approx),\r\n approxRem = approxRes.mul(divisor);\r\n while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n approx -= delta;\r\n approxRes = fromNumber(approx, this.unsigned);\r\n approxRem = approxRes.mul(divisor);\r\n }\r\n\r\n // We know the answer can't be zero... and actually, zero would cause\r\n // infinite recursion since we would make no progress.\r\n if (approxRes.isZero())\r\n approxRes = ONE;\r\n\r\n res = res.add(approxRes);\r\n rem = rem.sub(approxRem);\r\n }\r\n return res;\r\n };\r\n\r\n /**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\n LongPrototype.div = LongPrototype.divide;\r\n\r\n /**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\n LongPrototype.modulo = function modulo(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n return this.sub(this.div(divisor).mul(divisor));\r\n };\r\n\r\n /**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\n LongPrototype.mod = LongPrototype.modulo;\r\n\r\n /**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\n LongPrototype.not = function not() {\r\n return fromBits(~this.low, ~this.high, this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\n LongPrototype.and = function and(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\n LongPrototype.or = function or(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\n LongPrototype.xor = function xor(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\n LongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n else\r\n return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\n LongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n /**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\n LongPrototype.shiftRight = function shiftRight(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n else\r\n return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n };\r\n\r\n /**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\n LongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n /**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\n LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n numBits &= 63;\r\n if (numBits === 0)\r\n return this;\r\n else {\r\n var high = this.high;\r\n if (numBits < 32) {\r\n var low = this.low;\r\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n } else if (numBits === 32)\r\n return fromBits(high, 0, this.unsigned);\r\n else\r\n return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n }\r\n };\r\n\r\n /**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\n LongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n /**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\n LongPrototype.toSigned = function toSigned() {\r\n if (!this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, false);\r\n };\r\n\r\n /**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\n LongPrototype.toUnsigned = function toUnsigned() {\r\n if (this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, true);\r\n };\r\n\r\n /**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.} Byte representation\r\n */\r\n LongPrototype.toBytes = function(le) {\r\n return le ? this.toBytesLE() : this.toBytesBE();\r\n }\r\n\r\n /**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.} Little endian byte representation\r\n */\r\n LongPrototype.toBytesLE = function() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n lo & 0xff,\r\n (lo >>> 8) & 0xff,\r\n (lo >>> 16) & 0xff,\r\n (lo >>> 24) & 0xff,\r\n hi & 0xff,\r\n (hi >>> 8) & 0xff,\r\n (hi >>> 16) & 0xff,\r\n (hi >>> 24) & 0xff\r\n ];\r\n }\r\n\r\n /**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.} Big endian byte representation\r\n */\r\n LongPrototype.toBytesBE = function() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n (hi >>> 24) & 0xff,\r\n (hi >>> 16) & 0xff,\r\n (hi >>> 8) & 0xff,\r\n hi & 0xff,\r\n (lo >>> 24) & 0xff,\r\n (lo >>> 16) & 0xff,\r\n (lo >>> 8) & 0xff,\r\n lo & 0xff\r\n ];\r\n }\r\n\r\n return Long;\r\n});\r\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*\r\n Copyright 2013 Daniel Wirtz \r\n\r\n Licensed under the Apache License, Version 2.0 (the \"License\");\r\n you may not use this file except in compliance with the License.\r\n You may obtain a copy of the License at\r\n\r\n http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n Unless required by applicable law or agreed to in writing, software\r\n distributed under the License is distributed on an \"AS IS\" BASIS,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n See the License for the specific language governing permissions and\r\n limitations under the License.\r\n */\r\n\r\n/**\r\n * @license protobuf.js (c) 2013 Daniel Wirtz \r\n * Released under the Apache License, Version 2.0\r\n * see: https://github.com/dcodeIO/protobuf.js for details\r\n */\r\n(function(global, factory) {\r\n\r\n /* AMD */ if (typeof define === 'function' && define[\"amd\"])\r\n define([\"bytebuffer\"], factory);\r\n /* CommonJS */ else if (typeof require === \"function\" && typeof module === \"object\" && module && module[\"exports\"])\r\n module[\"exports\"] = factory(require(\"bytebuffer\"), true);\r\n /* Global */ else\r\n (global[\"dcodeIO\"] = global[\"dcodeIO\"] || {})[\"ProtoBuf\"] = factory(global[\"dcodeIO\"][\"ByteBuffer\"]);\r\n\r\n})(this, function(ByteBuffer, isCommonJS) {\r\n \"use strict\";\r\n\r\n /**\r\n * The ProtoBuf namespace.\r\n * @exports ProtoBuf\r\n * @namespace\r\n * @expose\r\n */\r\n var ProtoBuf = {};\r\n\r\n /**\r\n * @type {!function(new: ByteBuffer, ...[*])}\r\n * @expose\r\n */\r\n ProtoBuf.ByteBuffer = ByteBuffer;\r\n\r\n /**\r\n * @type {?function(new: Long, ...[*])}\r\n * @expose\r\n */\r\n ProtoBuf.Long = ByteBuffer.Long || null;\r\n\r\n /**\r\n * ProtoBuf.js version.\r\n * @type {string}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.VERSION = \"5.0.3\";\r\n\r\n /**\r\n * Wire types.\r\n * @type {Object.}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.WIRE_TYPES = {};\r\n\r\n /**\r\n * Varint wire type.\r\n * @type {number}\r\n * @expose\r\n */\r\n ProtoBuf.WIRE_TYPES.VARINT = 0;\r\n\r\n /**\r\n * Fixed 64 bits wire type.\r\n * @type {number}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.WIRE_TYPES.BITS64 = 1;\r\n\r\n /**\r\n * Length delimited wire type.\r\n * @type {number}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.WIRE_TYPES.LDELIM = 2;\r\n\r\n /**\r\n * Start group wire type.\r\n * @type {number}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.WIRE_TYPES.STARTGROUP = 3;\r\n\r\n /**\r\n * End group wire type.\r\n * @type {number}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.WIRE_TYPES.ENDGROUP = 4;\r\n\r\n /**\r\n * Fixed 32 bits wire type.\r\n * @type {number}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.WIRE_TYPES.BITS32 = 5;\r\n\r\n /**\r\n * Packable wire types.\r\n * @type {!Array.}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.PACKABLE_WIRE_TYPES = [\r\n ProtoBuf.WIRE_TYPES.VARINT,\r\n ProtoBuf.WIRE_TYPES.BITS64,\r\n ProtoBuf.WIRE_TYPES.BITS32\r\n ];\r\n\r\n /**\r\n * Types.\r\n * @dict\r\n * @type {!Object.}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.TYPES = {\r\n // According to the protobuf spec.\r\n \"int32\": {\r\n name: \"int32\",\r\n wireType: ProtoBuf.WIRE_TYPES.VARINT,\r\n defaultValue: 0\r\n },\r\n \"uint32\": {\r\n name: \"uint32\",\r\n wireType: ProtoBuf.WIRE_TYPES.VARINT,\r\n defaultValue: 0\r\n },\r\n \"sint32\": {\r\n name: \"sint32\",\r\n wireType: ProtoBuf.WIRE_TYPES.VARINT,\r\n defaultValue: 0\r\n },\r\n \"int64\": {\r\n name: \"int64\",\r\n wireType: ProtoBuf.WIRE_TYPES.VARINT,\r\n defaultValue: ProtoBuf.Long ? ProtoBuf.Long.ZERO : undefined\r\n },\r\n \"uint64\": {\r\n name: \"uint64\",\r\n wireType: ProtoBuf.WIRE_TYPES.VARINT,\r\n defaultValue: ProtoBuf.Long ? ProtoBuf.Long.UZERO : undefined\r\n },\r\n \"sint64\": {\r\n name: \"sint64\",\r\n wireType: ProtoBuf.WIRE_TYPES.VARINT,\r\n defaultValue: ProtoBuf.Long ? ProtoBuf.Long.ZERO : undefined\r\n },\r\n \"bool\": {\r\n name: \"bool\",\r\n wireType: ProtoBuf.WIRE_TYPES.VARINT,\r\n defaultValue: false\r\n },\r\n \"double\": {\r\n name: \"double\",\r\n wireType: ProtoBuf.WIRE_TYPES.BITS64,\r\n defaultValue: 0\r\n },\r\n \"string\": {\r\n name: \"string\",\r\n wireType: ProtoBuf.WIRE_TYPES.LDELIM,\r\n defaultValue: \"\"\r\n },\r\n \"bytes\": {\r\n name: \"bytes\",\r\n wireType: ProtoBuf.WIRE_TYPES.LDELIM,\r\n defaultValue: null // overridden in the code, must be a unique instance\r\n },\r\n \"fixed32\": {\r\n name: \"fixed32\",\r\n wireType: ProtoBuf.WIRE_TYPES.BITS32,\r\n defaultValue: 0\r\n },\r\n \"sfixed32\": {\r\n name: \"sfixed32\",\r\n wireType: ProtoBuf.WIRE_TYPES.BITS32,\r\n defaultValue: 0\r\n },\r\n \"fixed64\": {\r\n name: \"fixed64\",\r\n wireType: ProtoBuf.WIRE_TYPES.BITS64,\r\n defaultValue: ProtoBuf.Long ? ProtoBuf.Long.UZERO : undefined\r\n },\r\n \"sfixed64\": {\r\n name: \"sfixed64\",\r\n wireType: ProtoBuf.WIRE_TYPES.BITS64,\r\n defaultValue: ProtoBuf.Long ? ProtoBuf.Long.ZERO : undefined\r\n },\r\n \"float\": {\r\n name: \"float\",\r\n wireType: ProtoBuf.WIRE_TYPES.BITS32,\r\n defaultValue: 0\r\n },\r\n \"enum\": {\r\n name: \"enum\",\r\n wireType: ProtoBuf.WIRE_TYPES.VARINT,\r\n defaultValue: 0\r\n },\r\n \"message\": {\r\n name: \"message\",\r\n wireType: ProtoBuf.WIRE_TYPES.LDELIM,\r\n defaultValue: null\r\n },\r\n \"group\": {\r\n name: \"group\",\r\n wireType: ProtoBuf.WIRE_TYPES.STARTGROUP,\r\n defaultValue: null\r\n }\r\n };\r\n\r\n /**\r\n * Valid map key types.\r\n * @type {!Array.>}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.MAP_KEY_TYPES = [\r\n ProtoBuf.TYPES[\"int32\"],\r\n ProtoBuf.TYPES[\"sint32\"],\r\n ProtoBuf.TYPES[\"sfixed32\"],\r\n ProtoBuf.TYPES[\"uint32\"],\r\n ProtoBuf.TYPES[\"fixed32\"],\r\n ProtoBuf.TYPES[\"int64\"],\r\n ProtoBuf.TYPES[\"sint64\"],\r\n ProtoBuf.TYPES[\"sfixed64\"],\r\n ProtoBuf.TYPES[\"uint64\"],\r\n ProtoBuf.TYPES[\"fixed64\"],\r\n ProtoBuf.TYPES[\"bool\"],\r\n ProtoBuf.TYPES[\"string\"],\r\n ProtoBuf.TYPES[\"bytes\"]\r\n ];\r\n\r\n /**\r\n * Minimum field id.\r\n * @type {number}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.ID_MIN = 1;\r\n\r\n /**\r\n * Maximum field id.\r\n * @type {number}\r\n * @const\r\n * @expose\r\n */\r\n ProtoBuf.ID_MAX = 0x1FFFFFFF;\r\n\r\n /**\r\n * If set to `true`, field names will be converted from underscore notation to camel case. Defaults to `false`.\r\n * Must be set prior to parsing.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n ProtoBuf.convertFieldsToCamelCase = false;\r\n\r\n /**\r\n * By default, messages are populated with (setX, set_x) accessors for each field. This can be disabled by\r\n * setting this to `false` prior to building messages.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n ProtoBuf.populateAccessors = true;\r\n\r\n /**\r\n * By default, messages are populated with default values if a field is not present on the wire. To disable\r\n * this behavior, set this setting to `false`.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n ProtoBuf.populateDefaults = true;\r\n\r\n /**\r\n * @alias ProtoBuf.Util\r\n * @expose\r\n */\r\n ProtoBuf.Util = (function() {\r\n \"use strict\";\r\n\r\n /**\r\n * ProtoBuf utilities.\r\n * @exports ProtoBuf.Util\r\n * @namespace\r\n */\r\n var Util = {};\r\n\r\n /**\r\n * Flag if running in node or not.\r\n * @type {boolean}\r\n * @const\r\n * @expose\r\n */\r\n Util.IS_NODE = !!(\r\n typeof process === 'object' && process+'' === '[object process]' && !process['browser']\r\n );\r\n\r\n /**\r\n * Constructs a XMLHttpRequest object.\r\n * @return {XMLHttpRequest}\r\n * @throws {Error} If XMLHttpRequest is not supported\r\n * @expose\r\n */\r\n Util.XHR = function() {\r\n // No dependencies please, ref: http://www.quirksmode.org/js/xmlhttp.html\r\n var XMLHttpFactories = [\r\n function () {return new XMLHttpRequest()},\r\n function () {return new ActiveXObject(\"Msxml2.XMLHTTP\")},\r\n function () {return new ActiveXObject(\"Msxml3.XMLHTTP\")},\r\n function () {return new ActiveXObject(\"Microsoft.XMLHTTP\")}\r\n ];\r\n /** @type {?XMLHttpRequest} */\r\n var xhr = null;\r\n for (var i=0;i}\r\n * @expose\r\n */\r\n ProtoBuf.Lang = {\r\n\r\n // Characters always ending a statement\r\n DELIM: /[\\s\\{\\}=;:\\[\\],'\"\\(\\)<>]/g,\r\n\r\n // Field rules\r\n RULE: /^(?:required|optional|repeated|map)$/,\r\n\r\n // Field types\r\n TYPE: /^(?:double|float|int32|uint32|sint32|int64|uint64|sint64|fixed32|sfixed32|fixed64|sfixed64|bool|string|bytes)$/,\r\n\r\n // Names\r\n NAME: /^[a-zA-Z_][a-zA-Z_0-9]*$/,\r\n\r\n // Type definitions\r\n TYPEDEF: /^[a-zA-Z][a-zA-Z_0-9]*$/,\r\n\r\n // Type references\r\n TYPEREF: /^(?:\\.?[a-zA-Z_][a-zA-Z_0-9]*)(?:\\.[a-zA-Z_][a-zA-Z_0-9]*)*$/,\r\n\r\n // Fully qualified type references\r\n FQTYPEREF: /^(?:\\.[a-zA-Z_][a-zA-Z_0-9]*)+$/,\r\n\r\n // All numbers\r\n NUMBER: /^-?(?:[1-9][0-9]*|0|0[xX][0-9a-fA-F]+|0[0-7]+|([0-9]*(\\.[0-9]*)?([Ee][+-]?[0-9]+)?)|inf|nan)$/,\r\n\r\n // Decimal numbers\r\n NUMBER_DEC: /^(?:[1-9][0-9]*|0)$/,\r\n\r\n // Hexadecimal numbers\r\n NUMBER_HEX: /^0[xX][0-9a-fA-F]+$/,\r\n\r\n // Octal numbers\r\n NUMBER_OCT: /^0[0-7]+$/,\r\n\r\n // Floating point numbers\r\n NUMBER_FLT: /^([0-9]*(\\.[0-9]*)?([Ee][+-]?[0-9]+)?|inf|nan)$/,\r\n\r\n // Booleans\r\n BOOL: /^(?:true|false)$/i,\r\n\r\n // Id numbers\r\n ID: /^(?:[1-9][0-9]*|0|0[xX][0-9a-fA-F]+|0[0-7]+)$/,\r\n\r\n // Negative id numbers (enum values)\r\n NEGID: /^\\-?(?:[1-9][0-9]*|0|0[xX][0-9a-fA-F]+|0[0-7]+)$/,\r\n\r\n // Whitespaces\r\n WHITESPACE: /\\s/,\r\n\r\n // All strings\r\n STRING: /(?:\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\")|(?:'([^'\\\\]*(?:\\\\.[^'\\\\]*)*)')/g,\r\n\r\n // Double quoted strings\r\n STRING_DQ: /(?:\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\")/g,\r\n\r\n // Single quoted strings\r\n STRING_SQ: /(?:'([^'\\\\]*(?:\\\\.[^'\\\\]*)*)')/g\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.DotProto\r\n * @expose\r\n */\r\n ProtoBuf.DotProto = (function(ProtoBuf, Lang) {\r\n \"use strict\";\r\n\r\n /**\r\n * Utilities to parse .proto files.\r\n * @exports ProtoBuf.DotProto\r\n * @namespace\r\n */\r\n var DotProto = {};\r\n\r\n /**\r\n * Constructs a new Tokenizer.\r\n * @exports ProtoBuf.DotProto.Tokenizer\r\n * @class prototype tokenizer\r\n * @param {string} proto Proto to tokenize\r\n * @constructor\r\n */\r\n var Tokenizer = function(proto) {\r\n\r\n /**\r\n * Source to parse.\r\n * @type {string}\r\n * @expose\r\n */\r\n this.source = proto+\"\";\r\n\r\n /**\r\n * Current index.\r\n * @type {number}\r\n * @expose\r\n */\r\n this.index = 0;\r\n\r\n /**\r\n * Current line.\r\n * @type {number}\r\n * @expose\r\n */\r\n this.line = 1;\r\n\r\n /**\r\n * Token stack.\r\n * @type {!Array.}\r\n * @expose\r\n */\r\n this.stack = [];\r\n\r\n /**\r\n * Opening character of the current string read, if any.\r\n * @type {?string}\r\n * @private\r\n */\r\n this._stringOpen = null;\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.DotProto.Tokenizer.prototype\r\n * @inner\r\n */\r\n var TokenizerPrototype = Tokenizer.prototype;\r\n\r\n /**\r\n * Reads a string beginning at the current index.\r\n * @return {string}\r\n * @private\r\n */\r\n TokenizerPrototype._readString = function() {\r\n var re = this._stringOpen === '\"'\r\n ? Lang.STRING_DQ\r\n : Lang.STRING_SQ;\r\n re.lastIndex = this.index - 1; // Include the open quote\r\n var match = re.exec(this.source);\r\n if (!match)\r\n throw Error(\"unterminated string\");\r\n this.index = re.lastIndex;\r\n this.stack.push(this._stringOpen);\r\n this._stringOpen = null;\r\n return match[1];\r\n };\r\n\r\n /**\r\n * Gets the next token and advances by one.\r\n * @return {?string} Token or `null` on EOF\r\n * @expose\r\n */\r\n TokenizerPrototype.next = function() {\r\n if (this.stack.length > 0)\r\n return this.stack.shift();\r\n if (this.index >= this.source.length)\r\n return null;\r\n if (this._stringOpen !== null)\r\n return this._readString();\r\n\r\n var repeat,\r\n prev,\r\n next;\r\n do {\r\n repeat = false;\r\n\r\n // Strip white spaces\r\n while (Lang.WHITESPACE.test(next = this.source.charAt(this.index))) {\r\n if (next === '\\n')\r\n ++this.line;\r\n if (++this.index === this.source.length)\r\n return null;\r\n }\r\n\r\n // Strip comments\r\n if (this.source.charAt(this.index) === '/') {\r\n ++this.index;\r\n if (this.source.charAt(this.index) === '/') { // Line\r\n while (this.source.charAt(++this.index) !== '\\n')\r\n if (this.index == this.source.length)\r\n return null;\r\n ++this.index;\r\n ++this.line;\r\n repeat = true;\r\n } else if ((next = this.source.charAt(this.index)) === '*') { /* Block */\r\n do {\r\n if (next === '\\n')\r\n ++this.line;\r\n if (++this.index === this.source.length)\r\n return null;\r\n prev = next;\r\n next = this.source.charAt(this.index);\r\n } while (prev !== '*' || next !== '/');\r\n ++this.index;\r\n repeat = true;\r\n } else\r\n return '/';\r\n }\r\n } while (repeat);\r\n\r\n if (this.index === this.source.length)\r\n return null;\r\n\r\n // Read the next token\r\n var end = this.index;\r\n Lang.DELIM.lastIndex = 0;\r\n var delim = Lang.DELIM.test(this.source.charAt(end++));\r\n if (!delim)\r\n while(end < this.source.length && !Lang.DELIM.test(this.source.charAt(end)))\r\n ++end;\r\n var token = this.source.substring(this.index, this.index = end);\r\n if (token === '\"' || token === \"'\")\r\n this._stringOpen = token;\r\n return token;\r\n };\r\n\r\n /**\r\n * Peeks for the next token.\r\n * @return {?string} Token or `null` on EOF\r\n * @expose\r\n */\r\n TokenizerPrototype.peek = function() {\r\n if (this.stack.length === 0) {\r\n var token = this.next();\r\n if (token === null)\r\n return null;\r\n this.stack.push(token);\r\n }\r\n return this.stack[0];\r\n };\r\n\r\n /**\r\n * Skips a specific token and throws if it differs.\r\n * @param {string} expected Expected token\r\n * @throws {Error} If the actual token differs\r\n */\r\n TokenizerPrototype.skip = function(expected) {\r\n var actual = this.next();\r\n if (actual !== expected)\r\n throw Error(\"illegal '\"+actual+\"', '\"+expected+\"' expected\");\r\n };\r\n\r\n /**\r\n * Omits an optional token.\r\n * @param {string} expected Expected optional token\r\n * @returns {boolean} `true` if the token exists\r\n */\r\n TokenizerPrototype.omit = function(expected) {\r\n if (this.peek() === expected) {\r\n this.next();\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n /**\r\n * Returns a string representation of this object.\r\n * @return {string} String representation as of \"Tokenizer(index/length)\"\r\n * @expose\r\n */\r\n TokenizerPrototype.toString = function() {\r\n return \"Tokenizer (\"+this.index+\"/\"+this.source.length+\" at line \"+this.line+\")\";\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.DotProto.Tokenizer\r\n * @expose\r\n */\r\n DotProto.Tokenizer = Tokenizer;\r\n\r\n /**\r\n * Constructs a new Parser.\r\n * @exports ProtoBuf.DotProto.Parser\r\n * @class prototype parser\r\n * @param {string} source Source\r\n * @constructor\r\n */\r\n var Parser = function(source) {\r\n\r\n /**\r\n * Tokenizer.\r\n * @type {!ProtoBuf.DotProto.Tokenizer}\r\n * @expose\r\n */\r\n this.tn = new Tokenizer(source);\r\n\r\n /**\r\n * Whether parsing proto3 or not.\r\n * @type {boolean}\r\n */\r\n this.proto3 = false;\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.DotProto.Parser.prototype\r\n * @inner\r\n */\r\n var ParserPrototype = Parser.prototype;\r\n\r\n /**\r\n * Parses the source.\r\n * @returns {!Object}\r\n * @throws {Error} If the source cannot be parsed\r\n * @expose\r\n */\r\n ParserPrototype.parse = function() {\r\n var topLevel = {\r\n \"name\": \"[ROOT]\", // temporary\r\n \"package\": null,\r\n \"messages\": [],\r\n \"enums\": [],\r\n \"imports\": [],\r\n \"options\": {},\r\n \"services\": []\r\n // \"syntax\": undefined\r\n };\r\n var token,\r\n head = true,\r\n weak;\r\n try {\r\n while (token = this.tn.next()) {\r\n switch (token) {\r\n case 'package':\r\n if (!head || topLevel[\"package\"] !== null)\r\n throw Error(\"unexpected 'package'\");\r\n token = this.tn.next();\r\n if (!Lang.TYPEREF.test(token))\r\n throw Error(\"illegal package name: \" + token);\r\n this.tn.skip(\";\");\r\n topLevel[\"package\"] = token;\r\n break;\r\n case 'import':\r\n if (!head)\r\n throw Error(\"unexpected 'import'\");\r\n token = this.tn.peek();\r\n if (token === \"public\" || (weak = token === \"weak\")) // token ignored\r\n this.tn.next();\r\n token = this._readString();\r\n this.tn.skip(\";\");\r\n if (!weak) // import ignored\r\n topLevel[\"imports\"].push(token);\r\n break;\r\n case 'syntax':\r\n if (!head)\r\n throw Error(\"unexpected 'syntax'\");\r\n this.tn.skip(\"=\");\r\n if ((topLevel[\"syntax\"] = this._readString()) === \"proto3\")\r\n this.proto3 = true;\r\n this.tn.skip(\";\");\r\n break;\r\n case 'message':\r\n this._parseMessage(topLevel, null);\r\n head = false;\r\n break;\r\n case 'enum':\r\n this._parseEnum(topLevel);\r\n head = false;\r\n break;\r\n case 'option':\r\n this._parseOption(topLevel);\r\n break;\r\n case 'service':\r\n this._parseService(topLevel);\r\n break;\r\n case 'extend':\r\n this._parseExtend(topLevel);\r\n break;\r\n default:\r\n throw Error(\"unexpected '\" + token + \"'\");\r\n }\r\n }\r\n } catch (e) {\r\n e.message = \"Parse error at line \"+this.tn.line+\": \" + e.message;\r\n throw e;\r\n }\r\n delete topLevel[\"name\"];\r\n return topLevel;\r\n };\r\n\r\n /**\r\n * Parses the specified source.\r\n * @returns {!Object}\r\n * @throws {Error} If the source cannot be parsed\r\n * @expose\r\n */\r\n Parser.parse = function(source) {\r\n return new Parser(source).parse();\r\n };\r\n\r\n // ----- Conversion ------\r\n\r\n /**\r\n * Converts a numerical string to an id.\r\n * @param {string} value\r\n * @param {boolean=} mayBeNegative\r\n * @returns {number}\r\n * @inner\r\n */\r\n function mkId(value, mayBeNegative) {\r\n var id = -1,\r\n sign = 1;\r\n if (value.charAt(0) == '-') {\r\n sign = -1;\r\n value = value.substring(1);\r\n }\r\n if (Lang.NUMBER_DEC.test(value))\r\n id = parseInt(value);\r\n else if (Lang.NUMBER_HEX.test(value))\r\n id = parseInt(value.substring(2), 16);\r\n else if (Lang.NUMBER_OCT.test(value))\r\n id = parseInt(value.substring(1), 8);\r\n else\r\n throw Error(\"illegal id value: \" + (sign < 0 ? '-' : '') + value);\r\n id = (sign*id)|0; // Force to 32bit\r\n if (!mayBeNegative && id < 0)\r\n throw Error(\"illegal id value: \" + (sign < 0 ? '-' : '') + value);\r\n return id;\r\n }\r\n\r\n /**\r\n * Converts a numerical string to a number.\r\n * @param {string} val\r\n * @returns {number}\r\n * @inner\r\n */\r\n function mkNumber(val) {\r\n var sign = 1;\r\n if (val.charAt(0) == '-') {\r\n sign = -1;\r\n val = val.substring(1);\r\n }\r\n if (Lang.NUMBER_DEC.test(val))\r\n return sign * parseInt(val, 10);\r\n else if (Lang.NUMBER_HEX.test(val))\r\n return sign * parseInt(val.substring(2), 16);\r\n else if (Lang.NUMBER_OCT.test(val))\r\n return sign * parseInt(val.substring(1), 8);\r\n else if (val === 'inf')\r\n return sign * Infinity;\r\n else if (val === 'nan')\r\n return NaN;\r\n else if (Lang.NUMBER_FLT.test(val))\r\n return sign * parseFloat(val);\r\n throw Error(\"illegal number value: \" + (sign < 0 ? '-' : '') + val);\r\n }\r\n\r\n // ----- Reading ------\r\n\r\n /**\r\n * Reads a string.\r\n * @returns {string}\r\n * @private\r\n */\r\n ParserPrototype._readString = function() {\r\n var value = \"\",\r\n token,\r\n delim;\r\n do {\r\n delim = this.tn.next();\r\n if (delim !== \"'\" && delim !== '\"')\r\n throw Error(\"illegal string delimiter: \"+delim);\r\n value += this.tn.next();\r\n this.tn.skip(delim);\r\n token = this.tn.peek();\r\n } while (token === '\"' || token === '\"'); // multi line?\r\n return value;\r\n };\r\n\r\n /**\r\n * Reads a value.\r\n * @param {boolean=} mayBeTypeRef\r\n * @returns {number|boolean|string}\r\n * @private\r\n */\r\n ParserPrototype._readValue = function(mayBeTypeRef) {\r\n var token = this.tn.peek(),\r\n value;\r\n if (token === '\"' || token === \"'\")\r\n return this._readString();\r\n this.tn.next();\r\n if (Lang.NUMBER.test(token))\r\n return mkNumber(token);\r\n if (Lang.BOOL.test(token))\r\n return (token.toLowerCase() === 'true');\r\n if (mayBeTypeRef && Lang.TYPEREF.test(token))\r\n return token;\r\n throw Error(\"illegal value: \"+token);\r\n\r\n };\r\n\r\n // ----- Parsing constructs -----\r\n\r\n /**\r\n * Parses a namespace option.\r\n * @param {!Object} parent Parent definition\r\n * @param {boolean=} isList\r\n * @private\r\n */\r\n ParserPrototype._parseOption = function(parent, isList) {\r\n var token = this.tn.next(),\r\n custom = false;\r\n if (token === '(') {\r\n custom = true;\r\n token = this.tn.next();\r\n }\r\n if (!Lang.TYPEREF.test(token))\r\n // we can allow options of the form google.protobuf.* since they will just get ignored anyways\r\n // if (!/google\\.protobuf\\./.test(token)) // FIXME: Why should that not be a valid typeref?\r\n throw Error(\"illegal option name: \"+token);\r\n var name = token;\r\n if (custom) { // (my_method_option).foo, (my_method_option), some_method_option, (foo.my_option).bar\r\n this.tn.skip(')');\r\n name = '('+name+')';\r\n token = this.tn.peek();\r\n if (Lang.FQTYPEREF.test(token)) {\r\n name += token;\r\n this.tn.next();\r\n }\r\n }\r\n this.tn.skip('=');\r\n this._parseOptionValue(parent, name);\r\n if (!isList)\r\n this.tn.skip(\";\");\r\n };\r\n\r\n /**\r\n * Sets an option on the specified options object.\r\n * @param {!Object.} options\r\n * @param {string} name\r\n * @param {string|number|boolean} value\r\n * @inner\r\n */\r\n function setOption(options, name, value) {\r\n if (typeof options[name] === 'undefined')\r\n options[name] = value;\r\n else {\r\n if (!Array.isArray(options[name]))\r\n options[name] = [ options[name] ];\r\n options[name].push(value);\r\n }\r\n }\r\n\r\n /**\r\n * Parses an option value.\r\n * @param {!Object} parent\r\n * @param {string} name\r\n * @private\r\n */\r\n ParserPrototype._parseOptionValue = function(parent, name) {\r\n var token = this.tn.peek();\r\n if (token !== '{') { // Plain value\r\n setOption(parent[\"options\"], name, this._readValue(true));\r\n } else { // Aggregate options\r\n this.tn.skip(\"{\");\r\n while ((token = this.tn.next()) !== '}') {\r\n if (!Lang.NAME.test(token))\r\n throw Error(\"illegal option name: \" + name + \".\" + token);\r\n if (this.tn.omit(\":\"))\r\n setOption(parent[\"options\"], name + \".\" + token, this._readValue(true));\r\n else\r\n this._parseOptionValue(parent, name + \".\" + token);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Parses a service definition.\r\n * @param {!Object} parent Parent definition\r\n * @private\r\n */\r\n ParserPrototype._parseService = function(parent) {\r\n var token = this.tn.next();\r\n if (!Lang.NAME.test(token))\r\n throw Error(\"illegal service name at line \"+this.tn.line+\": \"+token);\r\n var name = token;\r\n var svc = {\r\n \"name\": name,\r\n \"rpc\": {},\r\n \"options\": {}\r\n };\r\n this.tn.skip(\"{\");\r\n while ((token = this.tn.next()) !== '}') {\r\n if (token === \"option\")\r\n this._parseOption(svc);\r\n else if (token === 'rpc')\r\n this._parseServiceRPC(svc);\r\n else\r\n throw Error(\"illegal service token: \"+token);\r\n }\r\n this.tn.omit(\";\");\r\n parent[\"services\"].push(svc);\r\n };\r\n\r\n /**\r\n * Parses a RPC service definition of the form ['rpc', name, (request), 'returns', (response)].\r\n * @param {!Object} svc Service definition\r\n * @private\r\n */\r\n ParserPrototype._parseServiceRPC = function(svc) {\r\n var type = \"rpc\",\r\n token = this.tn.next();\r\n if (!Lang.NAME.test(token))\r\n throw Error(\"illegal rpc service method name: \"+token);\r\n var name = token;\r\n var method = {\r\n \"request\": null,\r\n \"response\": null,\r\n \"request_stream\": false,\r\n \"response_stream\": false,\r\n \"options\": {}\r\n };\r\n this.tn.skip(\"(\");\r\n token = this.tn.next();\r\n if (token.toLowerCase() === \"stream\") {\r\n method[\"request_stream\"] = true;\r\n token = this.tn.next();\r\n }\r\n if (!Lang.TYPEREF.test(token))\r\n throw Error(\"illegal rpc service request type: \"+token);\r\n method[\"request\"] = token;\r\n this.tn.skip(\")\");\r\n token = this.tn.next();\r\n if (token.toLowerCase() !== \"returns\")\r\n throw Error(\"illegal rpc service request type delimiter: \"+token);\r\n this.tn.skip(\"(\");\r\n token = this.tn.next();\r\n if (token.toLowerCase() === \"stream\") {\r\n method[\"response_stream\"] = true;\r\n token = this.tn.next();\r\n }\r\n method[\"response\"] = token;\r\n this.tn.skip(\")\");\r\n token = this.tn.peek();\r\n if (token === '{') {\r\n this.tn.next();\r\n while ((token = this.tn.next()) !== '}') {\r\n if (token === 'option')\r\n this._parseOption(method);\r\n else\r\n throw Error(\"illegal rpc service token: \" + token);\r\n }\r\n this.tn.omit(\";\");\r\n } else\r\n this.tn.skip(\";\");\r\n if (typeof svc[type] === 'undefined')\r\n svc[type] = {};\r\n svc[type][name] = method;\r\n };\r\n\r\n /**\r\n * Parses a message definition.\r\n * @param {!Object} parent Parent definition\r\n * @param {!Object=} fld Field definition if this is a group\r\n * @returns {!Object}\r\n * @private\r\n */\r\n ParserPrototype._parseMessage = function(parent, fld) {\r\n var isGroup = !!fld,\r\n token = this.tn.next();\r\n var msg = {\r\n \"name\": \"\",\r\n \"fields\": [],\r\n \"enums\": [],\r\n \"messages\": [],\r\n \"options\": {},\r\n \"services\": [],\r\n \"oneofs\": {}\r\n // \"extensions\": undefined\r\n };\r\n if (!Lang.NAME.test(token))\r\n throw Error(\"illegal \"+(isGroup ? \"group\" : \"message\")+\" name: \"+token);\r\n msg[\"name\"] = token;\r\n if (isGroup) {\r\n this.tn.skip(\"=\");\r\n fld[\"id\"] = mkId(this.tn.next());\r\n msg[\"isGroup\"] = true;\r\n }\r\n token = this.tn.peek();\r\n if (token === '[' && fld)\r\n this._parseFieldOptions(fld);\r\n this.tn.skip(\"{\");\r\n while ((token = this.tn.next()) !== '}') {\r\n if (Lang.RULE.test(token))\r\n this._parseMessageField(msg, token);\r\n else if (token === \"oneof\")\r\n this._parseMessageOneOf(msg);\r\n else if (token === \"enum\")\r\n this._parseEnum(msg);\r\n else if (token === \"message\")\r\n this._parseMessage(msg);\r\n else if (token === \"option\")\r\n this._parseOption(msg);\r\n else if (token === \"service\")\r\n this._parseService(msg);\r\n else if (token === \"extensions\")\r\n if (msg.hasOwnProperty(\"extensions\")) {\r\n msg[\"extensions\"] = msg[\"extensions\"].concat(this._parseExtensionRanges())\r\n } else {\r\n msg[\"extensions\"] = this._parseExtensionRanges();\r\n }\r\n else if (token === \"reserved\")\r\n this._parseIgnored(); // TODO\r\n else if (token === \"extend\")\r\n this._parseExtend(msg);\r\n else if (Lang.TYPEREF.test(token)) {\r\n if (!this.proto3)\r\n throw Error(\"illegal field rule: \"+token);\r\n this._parseMessageField(msg, \"optional\", token);\r\n } else\r\n throw Error(\"illegal message token: \"+token);\r\n }\r\n this.tn.omit(\";\");\r\n parent[\"messages\"].push(msg);\r\n return msg;\r\n };\r\n\r\n /**\r\n * Parses an ignored statement.\r\n * @private\r\n */\r\n ParserPrototype._parseIgnored = function() {\r\n while (this.tn.peek() !== ';')\r\n this.tn.next();\r\n this.tn.skip(\";\");\r\n };\r\n\r\n /**\r\n * Parses a message field.\r\n * @param {!Object} msg Message definition\r\n * @param {string} rule Field rule\r\n * @param {string=} type Field type if already known (never known for maps)\r\n * @returns {!Object} Field descriptor\r\n * @private\r\n */\r\n ParserPrototype._parseMessageField = function(msg, rule, type) {\r\n if (!Lang.RULE.test(rule))\r\n throw Error(\"illegal message field rule: \"+rule);\r\n var fld = {\r\n \"rule\": rule,\r\n \"type\": \"\",\r\n \"name\": \"\",\r\n \"options\": {},\r\n \"id\": 0\r\n };\r\n var token;\r\n if (rule === \"map\") {\r\n\r\n if (type)\r\n throw Error(\"illegal type: \" + type);\r\n this.tn.skip('<');\r\n token = this.tn.next();\r\n if (!Lang.TYPE.test(token) && !Lang.TYPEREF.test(token))\r\n throw Error(\"illegal message field type: \" + token);\r\n fld[\"keytype\"] = token;\r\n this.tn.skip(',');\r\n token = this.tn.next();\r\n if (!Lang.TYPE.test(token) && !Lang.TYPEREF.test(token))\r\n throw Error(\"illegal message field: \" + token);\r\n fld[\"type\"] = token;\r\n this.tn.skip('>');\r\n token = this.tn.next();\r\n if (!Lang.NAME.test(token))\r\n throw Error(\"illegal message field name: \" + token);\r\n fld[\"name\"] = token;\r\n this.tn.skip(\"=\");\r\n fld[\"id\"] = mkId(this.tn.next());\r\n token = this.tn.peek();\r\n if (token === '[')\r\n this._parseFieldOptions(fld);\r\n this.tn.skip(\";\");\r\n\r\n } else {\r\n\r\n type = typeof type !== 'undefined' ? type : this.tn.next();\r\n\r\n if (type === \"group\") {\r\n\r\n // \"A [legacy] group simply combines a nested message type and a field into a single declaration. In your\r\n // code, you can treat this message just as if it had a Result type field called result (the latter name is\r\n // converted to lower-case so that it does not conflict with the former).\"\r\n var grp = this._parseMessage(msg, fld);\r\n if (!/^[A-Z]/.test(grp[\"name\"]))\r\n throw Error('illegal group name: '+grp[\"name\"]);\r\n fld[\"type\"] = grp[\"name\"];\r\n fld[\"name\"] = grp[\"name\"].toLowerCase();\r\n this.tn.omit(\";\");\r\n\r\n } else {\r\n\r\n if (!Lang.TYPE.test(type) && !Lang.TYPEREF.test(type))\r\n throw Error(\"illegal message field type: \" + type);\r\n fld[\"type\"] = type;\r\n token = this.tn.next();\r\n if (!Lang.NAME.test(token))\r\n throw Error(\"illegal message field name: \" + token);\r\n fld[\"name\"] = token;\r\n this.tn.skip(\"=\");\r\n fld[\"id\"] = mkId(this.tn.next());\r\n token = this.tn.peek();\r\n if (token === \"[\")\r\n this._parseFieldOptions(fld);\r\n this.tn.skip(\";\");\r\n\r\n }\r\n }\r\n msg[\"fields\"].push(fld);\r\n return fld;\r\n };\r\n\r\n /**\r\n * Parses a message oneof.\r\n * @param {!Object} msg Message definition\r\n * @private\r\n */\r\n ParserPrototype._parseMessageOneOf = function(msg) {\r\n var token = this.tn.next();\r\n if (!Lang.NAME.test(token))\r\n throw Error(\"illegal oneof name: \"+token);\r\n var name = token,\r\n fld;\r\n var fields = [];\r\n this.tn.skip(\"{\");\r\n while ((token = this.tn.next()) !== \"}\") {\r\n fld = this._parseMessageField(msg, \"optional\", token);\r\n fld[\"oneof\"] = name;\r\n fields.push(fld[\"id\"]);\r\n }\r\n this.tn.omit(\";\");\r\n msg[\"oneofs\"][name] = fields;\r\n };\r\n\r\n /**\r\n * Parses a set of field option definitions.\r\n * @param {!Object} fld Field definition\r\n * @private\r\n */\r\n ParserPrototype._parseFieldOptions = function(fld) {\r\n this.tn.skip(\"[\");\r\n var token,\r\n first = true;\r\n while ((token = this.tn.peek()) !== ']') {\r\n if (!first)\r\n this.tn.skip(\",\");\r\n this._parseOption(fld, true);\r\n first = false;\r\n }\r\n this.tn.next();\r\n };\r\n\r\n /**\r\n * Parses an enum.\r\n * @param {!Object} msg Message definition\r\n * @private\r\n */\r\n ParserPrototype._parseEnum = function(msg) {\r\n var enm = {\r\n \"name\": \"\",\r\n \"values\": [],\r\n \"options\": {}\r\n };\r\n var token = this.tn.next();\r\n if (!Lang.NAME.test(token))\r\n throw Error(\"illegal name: \"+token);\r\n enm[\"name\"] = token;\r\n this.tn.skip(\"{\");\r\n while ((token = this.tn.next()) !== '}') {\r\n if (token === \"option\")\r\n this._parseOption(enm);\r\n else {\r\n if (!Lang.NAME.test(token))\r\n throw Error(\"illegal name: \"+token);\r\n this.tn.skip(\"=\");\r\n var val = {\r\n \"name\": token,\r\n \"id\": mkId(this.tn.next(), true)\r\n };\r\n token = this.tn.peek();\r\n if (token === \"[\")\r\n this._parseFieldOptions({ \"options\": {} });\r\n this.tn.skip(\";\");\r\n enm[\"values\"].push(val);\r\n }\r\n }\r\n this.tn.omit(\";\");\r\n msg[\"enums\"].push(enm);\r\n };\r\n\r\n /**\r\n * Parses extension / reserved ranges.\r\n * @returns {!Array.>}\r\n * @private\r\n */\r\n ParserPrototype._parseExtensionRanges = function() {\r\n var ranges = [];\r\n var token,\r\n range,\r\n value;\r\n do {\r\n range = [];\r\n while (true) {\r\n token = this.tn.next();\r\n switch (token) {\r\n case \"min\":\r\n value = ProtoBuf.ID_MIN;\r\n break;\r\n case \"max\":\r\n value = ProtoBuf.ID_MAX;\r\n break;\r\n default:\r\n value = mkNumber(token);\r\n break;\r\n }\r\n range.push(value);\r\n if (range.length === 2)\r\n break;\r\n if (this.tn.peek() !== \"to\") {\r\n range.push(value);\r\n break;\r\n }\r\n this.tn.next();\r\n }\r\n ranges.push(range);\r\n } while (this.tn.omit(\",\"));\r\n this.tn.skip(\";\");\r\n return ranges;\r\n };\r\n\r\n /**\r\n * Parses an extend block.\r\n * @param {!Object} parent Parent object\r\n * @private\r\n */\r\n ParserPrototype._parseExtend = function(parent) {\r\n var token = this.tn.next();\r\n if (!Lang.TYPEREF.test(token))\r\n throw Error(\"illegal extend reference: \"+token);\r\n var ext = {\r\n \"ref\": token,\r\n \"fields\": []\r\n };\r\n this.tn.skip(\"{\");\r\n while ((token = this.tn.next()) !== '}') {\r\n if (Lang.RULE.test(token))\r\n this._parseMessageField(ext, token);\r\n else if (Lang.TYPEREF.test(token)) {\r\n if (!this.proto3)\r\n throw Error(\"illegal field rule: \"+token);\r\n this._parseMessageField(ext, \"optional\", token);\r\n } else\r\n throw Error(\"illegal extend token: \"+token);\r\n }\r\n this.tn.omit(\";\");\r\n parent[\"messages\"].push(ext);\r\n return ext;\r\n };\r\n\r\n // ----- General -----\r\n\r\n /**\r\n * Returns a string representation of this parser.\r\n * @returns {string}\r\n */\r\n ParserPrototype.toString = function() {\r\n return \"Parser at line \"+this.tn.line;\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.DotProto.Parser\r\n * @expose\r\n */\r\n DotProto.Parser = Parser;\r\n\r\n return DotProto;\r\n\r\n })(ProtoBuf, ProtoBuf.Lang);\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect\r\n * @expose\r\n */\r\n ProtoBuf.Reflect = (function(ProtoBuf) {\r\n \"use strict\";\r\n\r\n /**\r\n * Reflection types.\r\n * @exports ProtoBuf.Reflect\r\n * @namespace\r\n */\r\n var Reflect = {};\r\n\r\n /**\r\n * Constructs a Reflect base class.\r\n * @exports ProtoBuf.Reflect.T\r\n * @constructor\r\n * @abstract\r\n * @param {!ProtoBuf.Builder} builder Builder reference\r\n * @param {?ProtoBuf.Reflect.T} parent Parent object\r\n * @param {string} name Object name\r\n */\r\n var T = function(builder, parent, name) {\r\n\r\n /**\r\n * Builder reference.\r\n * @type {!ProtoBuf.Builder}\r\n * @expose\r\n */\r\n this.builder = builder;\r\n\r\n /**\r\n * Parent object.\r\n * @type {?ProtoBuf.Reflect.T}\r\n * @expose\r\n */\r\n this.parent = parent;\r\n\r\n /**\r\n * Object name in namespace.\r\n * @type {string}\r\n * @expose\r\n */\r\n this.name = name;\r\n\r\n /**\r\n * Fully qualified class name\r\n * @type {string}\r\n * @expose\r\n */\r\n this.className;\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.T.prototype\r\n * @inner\r\n */\r\n var TPrototype = T.prototype;\r\n\r\n /**\r\n * Returns the fully qualified name of this object.\r\n * @returns {string} Fully qualified name as of \".PATH.TO.THIS\"\r\n * @expose\r\n */\r\n TPrototype.fqn = function() {\r\n var name = this.name,\r\n ptr = this;\r\n do {\r\n ptr = ptr.parent;\r\n if (ptr == null)\r\n break;\r\n name = ptr.name+\".\"+name;\r\n } while (true);\r\n return name;\r\n };\r\n\r\n /**\r\n * Returns a string representation of this Reflect object (its fully qualified name).\r\n * @param {boolean=} includeClass Set to true to include the class name. Defaults to false.\r\n * @return String representation\r\n * @expose\r\n */\r\n TPrototype.toString = function(includeClass) {\r\n return (includeClass ? this.className + \" \" : \"\") + this.fqn();\r\n };\r\n\r\n /**\r\n * Builds this type.\r\n * @throws {Error} If this type cannot be built directly\r\n * @expose\r\n */\r\n TPrototype.build = function() {\r\n throw Error(this.toString(true)+\" cannot be built directly\");\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.T\r\n * @expose\r\n */\r\n Reflect.T = T;\r\n\r\n /**\r\n * Constructs a new Namespace.\r\n * @exports ProtoBuf.Reflect.Namespace\r\n * @param {!ProtoBuf.Builder} builder Builder reference\r\n * @param {?ProtoBuf.Reflect.Namespace} parent Namespace parent\r\n * @param {string} name Namespace name\r\n * @param {Object.=} options Namespace options\r\n * @param {string?} syntax The syntax level of this definition (e.g., proto3)\r\n * @constructor\r\n * @extends ProtoBuf.Reflect.T\r\n */\r\n var Namespace = function(builder, parent, name, options, syntax) {\r\n T.call(this, builder, parent, name);\r\n\r\n /**\r\n * @override\r\n */\r\n this.className = \"Namespace\";\r\n\r\n /**\r\n * Children inside the namespace.\r\n * @type {!Array.}\r\n */\r\n this.children = [];\r\n\r\n /**\r\n * Options.\r\n * @type {!Object.}\r\n */\r\n this.options = options || {};\r\n\r\n /**\r\n * Syntax level (e.g., proto2 or proto3).\r\n * @type {!string}\r\n */\r\n this.syntax = syntax || \"proto2\";\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Namespace.prototype\r\n * @inner\r\n */\r\n var NamespacePrototype = Namespace.prototype = Object.create(T.prototype);\r\n\r\n /**\r\n * Returns an array of the namespace's children.\r\n * @param {ProtoBuf.Reflect.T=} type Filter type (returns instances of this type only). Defaults to null (all children).\r\n * @return {Array.}\r\n * @expose\r\n */\r\n NamespacePrototype.getChildren = function(type) {\r\n type = type || null;\r\n if (type == null)\r\n return this.children.slice();\r\n var children = [];\r\n for (var i=0, k=this.children.length; i} qn Qualified name to resolve\r\n * @param {boolean=} excludeNonNamespace Excludes non-namespace types, defaults to `false`\r\n * @return {?ProtoBuf.Reflect.Namespace} The resolved type or null if not found\r\n * @expose\r\n */\r\n NamespacePrototype.resolve = function(qn, excludeNonNamespace) {\r\n var part = typeof qn === 'string' ? qn.split(\".\") : qn,\r\n ptr = this,\r\n i = 0;\r\n if (part[i] === \"\") { // Fully qualified name, e.g. \".My.Message'\r\n while (ptr.parent !== null)\r\n ptr = ptr.parent;\r\n i++;\r\n }\r\n var child;\r\n do {\r\n do {\r\n if (!(ptr instanceof Reflect.Namespace)) {\r\n ptr = null;\r\n break;\r\n }\r\n child = ptr.getChild(part[i]);\r\n if (!child || !(child instanceof Reflect.T) || (excludeNonNamespace && !(child instanceof Reflect.Namespace))) {\r\n ptr = null;\r\n break;\r\n }\r\n ptr = child; i++;\r\n } while (i < part.length);\r\n if (ptr != null)\r\n break; // Found\r\n // Else search the parent\r\n if (this.parent !== null)\r\n return this.parent.resolve(qn, excludeNonNamespace);\r\n } while (ptr != null);\r\n return ptr;\r\n };\r\n\r\n /**\r\n * Determines the shortest qualified name of the specified type, if any, relative to this namespace.\r\n * @param {!ProtoBuf.Reflect.T} t Reflection type\r\n * @returns {string} The shortest qualified name or, if there is none, the fqn\r\n * @expose\r\n */\r\n NamespacePrototype.qn = function(t) {\r\n var part = [], ptr = t;\r\n do {\r\n part.unshift(ptr.name);\r\n ptr = ptr.parent;\r\n } while (ptr !== null);\r\n for (var len=1; len <= part.length; len++) {\r\n var qn = part.slice(part.length-len);\r\n if (t === this.resolve(qn, t instanceof Reflect.Namespace))\r\n return qn.join(\".\");\r\n }\r\n return t.fqn();\r\n };\r\n\r\n /**\r\n * Builds the namespace and returns the runtime counterpart.\r\n * @return {Object.} Runtime namespace\r\n * @expose\r\n */\r\n NamespacePrototype.build = function() {\r\n /** @dict */\r\n var ns = {};\r\n var children = this.children;\r\n for (var i=0, k=children.length, child; i}\r\n */\r\n NamespacePrototype.buildOpt = function() {\r\n var opt = {},\r\n keys = Object.keys(this.options);\r\n for (var i=0, k=keys.length; i}null} Option value or NULL if there is no such option\r\n */\r\n NamespacePrototype.getOption = function(name) {\r\n if (typeof name === 'undefined')\r\n return this.options;\r\n return typeof this.options[name] !== 'undefined' ? this.options[name] : null;\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Namespace\r\n * @expose\r\n */\r\n Reflect.Namespace = Namespace;\r\n\r\n /**\r\n * Constructs a new Element implementation that checks and converts values for a\r\n * particular field type, as appropriate.\r\n *\r\n * An Element represents a single value: either the value of a singular field,\r\n * or a value contained in one entry of a repeated field or map field. This\r\n * class does not implement these higher-level concepts; it only encapsulates\r\n * the low-level typechecking and conversion.\r\n *\r\n * @exports ProtoBuf.Reflect.Element\r\n * @param {{name: string, wireType: number}} type Resolved data type\r\n * @param {ProtoBuf.Reflect.T|null} resolvedType Resolved type, if relevant\r\n * (e.g. submessage field).\r\n * @param {boolean} isMapKey Is this element a Map key? The value will be\r\n * converted to string form if so.\r\n * @param {string} syntax Syntax level of defining message type, e.g.,\r\n * proto2 or proto3.\r\n * @param {string} name Name of the field containing this element (for error\r\n * messages)\r\n * @constructor\r\n */\r\n var Element = function(type, resolvedType, isMapKey, syntax, name) {\r\n\r\n /**\r\n * Element type, as a string (e.g., int32).\r\n * @type {{name: string, wireType: number}}\r\n */\r\n this.type = type;\r\n\r\n /**\r\n * Element type reference to submessage or enum definition, if needed.\r\n * @type {ProtoBuf.Reflect.T|null}\r\n */\r\n this.resolvedType = resolvedType;\r\n\r\n /**\r\n * Element is a map key.\r\n * @type {boolean}\r\n */\r\n this.isMapKey = isMapKey;\r\n\r\n /**\r\n * Syntax level of defining message type, e.g., proto2 or proto3.\r\n * @type {string}\r\n */\r\n this.syntax = syntax;\r\n\r\n /**\r\n * Name of the field containing this element (for error messages)\r\n * @type {string}\r\n */\r\n this.name = name;\r\n\r\n if (isMapKey && ProtoBuf.MAP_KEY_TYPES.indexOf(type) < 0)\r\n throw Error(\"Invalid map key type: \" + type.name);\r\n };\r\n\r\n var ElementPrototype = Element.prototype;\r\n\r\n /**\r\n * Obtains a (new) default value for the specified type.\r\n * @param type {string|{name: string, wireType: number}} Field type\r\n * @returns {*} Default value\r\n * @inner\r\n */\r\n function mkDefault(type) {\r\n if (typeof type === 'string')\r\n type = ProtoBuf.TYPES[type];\r\n if (typeof type.defaultValue === 'undefined')\r\n throw Error(\"default value for type \"+type.name+\" is not supported\");\r\n if (type == ProtoBuf.TYPES[\"bytes\"])\r\n return new ByteBuffer(0);\r\n return type.defaultValue;\r\n }\r\n\r\n /**\r\n * Returns the default value for this field in proto3.\r\n * @function\r\n * @param type {string|{name: string, wireType: number}} the field type\r\n * @returns {*} Default value\r\n */\r\n Element.defaultFieldValue = mkDefault;\r\n\r\n /**\r\n * Makes a Long from a value.\r\n * @param {{low: number, high: number, unsigned: boolean}|string|number} value Value\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to reuse it from Long-like objects or to signed for\r\n * strings and numbers\r\n * @returns {!Long}\r\n * @throws {Error} If the value cannot be converted to a Long\r\n * @inner\r\n */\r\n function mkLong(value, unsigned) {\r\n if (value && typeof value.low === 'number' && typeof value.high === 'number' && typeof value.unsigned === 'boolean'\r\n && value.low === value.low && value.high === value.high)\r\n return new ProtoBuf.Long(value.low, value.high, typeof unsigned === 'undefined' ? value.unsigned : unsigned);\r\n if (typeof value === 'string')\r\n return ProtoBuf.Long.fromString(value, unsigned || false, 10);\r\n if (typeof value === 'number')\r\n return ProtoBuf.Long.fromNumber(value, unsigned || false);\r\n throw Error(\"not convertible to Long\");\r\n }\r\n\r\n ElementPrototype.toString = function() {\r\n return (this.name || '') + (this.isMapKey ? 'map' : 'value') + ' element';\r\n }\r\n\r\n /**\r\n * Checks if the given value can be set for an element of this type (singular\r\n * field or one element of a repeated field or map).\r\n * @param {*} value Value to check\r\n * @return {*} Verified, maybe adjusted, value\r\n * @throws {Error} If the value cannot be verified for this element slot\r\n * @expose\r\n */\r\n ElementPrototype.verifyValue = function(value) {\r\n var self = this;\r\n function fail(val, msg) {\r\n throw Error(\"Illegal value for \"+self.toString(true)+\" of type \"+self.type.name+\": \"+val+\" (\"+msg+\")\");\r\n }\r\n switch (this.type) {\r\n // Signed 32bit\r\n case ProtoBuf.TYPES[\"int32\"]:\r\n case ProtoBuf.TYPES[\"sint32\"]:\r\n case ProtoBuf.TYPES[\"sfixed32\"]:\r\n // Account for !NaN: value === value\r\n if (typeof value !== 'number' || (value === value && value % 1 !== 0))\r\n fail(typeof value, \"not an integer\");\r\n return value > 4294967295 ? value | 0 : value;\r\n\r\n // Unsigned 32bit\r\n case ProtoBuf.TYPES[\"uint32\"]:\r\n case ProtoBuf.TYPES[\"fixed32\"]:\r\n if (typeof value !== 'number' || (value === value && value % 1 !== 0))\r\n fail(typeof value, \"not an integer\");\r\n return value < 0 ? value >>> 0 : value;\r\n\r\n // Signed 64bit\r\n case ProtoBuf.TYPES[\"int64\"]:\r\n case ProtoBuf.TYPES[\"sint64\"]:\r\n case ProtoBuf.TYPES[\"sfixed64\"]: {\r\n if (ProtoBuf.Long)\r\n try {\r\n return mkLong(value, false);\r\n } catch (e) {\r\n fail(typeof value, e.message);\r\n }\r\n else\r\n fail(typeof value, \"requires Long.js\");\r\n }\r\n\r\n // Unsigned 64bit\r\n case ProtoBuf.TYPES[\"uint64\"]:\r\n case ProtoBuf.TYPES[\"fixed64\"]: {\r\n if (ProtoBuf.Long)\r\n try {\r\n return mkLong(value, true);\r\n } catch (e) {\r\n fail(typeof value, e.message);\r\n }\r\n else\r\n fail(typeof value, \"requires Long.js\");\r\n }\r\n\r\n // Bool\r\n case ProtoBuf.TYPES[\"bool\"]:\r\n if (typeof value !== 'boolean')\r\n fail(typeof value, \"not a boolean\");\r\n return value;\r\n\r\n // Float\r\n case ProtoBuf.TYPES[\"float\"]:\r\n case ProtoBuf.TYPES[\"double\"]:\r\n if (typeof value !== 'number')\r\n fail(typeof value, \"not a number\");\r\n return value;\r\n\r\n // Length-delimited string\r\n case ProtoBuf.TYPES[\"string\"]:\r\n if (typeof value !== 'string' && !(value && value instanceof String))\r\n fail(typeof value, \"not a string\");\r\n return \"\"+value; // Convert String object to string\r\n\r\n // Length-delimited bytes\r\n case ProtoBuf.TYPES[\"bytes\"]:\r\n if (ByteBuffer.isByteBuffer(value))\r\n return value;\r\n return ByteBuffer.wrap(value, \"base64\");\r\n\r\n // Constant enum value\r\n case ProtoBuf.TYPES[\"enum\"]: {\r\n var values = this.resolvedType.getChildren(ProtoBuf.Reflect.Enum.Value);\r\n for (i=0; i 4294967295 || value < 0)\r\n fail(typeof value, \"not in range for uint32\")\r\n return value;\r\n } else {\r\n // proto2 requires enum values to be valid.\r\n fail(value, \"not a valid enum value\");\r\n }\r\n }\r\n // Embedded message\r\n case ProtoBuf.TYPES[\"group\"]:\r\n case ProtoBuf.TYPES[\"message\"]: {\r\n if (!value || typeof value !== 'object')\r\n fail(typeof value, \"object expected\");\r\n if (value instanceof this.resolvedType.clazz)\r\n return value;\r\n if (value instanceof ProtoBuf.Builder.Message) {\r\n // Mismatched type: Convert to object (see: https://github.com/dcodeIO/ProtoBuf.js/issues/180)\r\n var obj = {};\r\n for (var i in value)\r\n if (value.hasOwnProperty(i))\r\n obj[i] = value[i];\r\n value = obj;\r\n }\r\n // Else let's try to construct one from a key-value object\r\n return new (this.resolvedType.clazz)(value); // May throw for a hundred of reasons\r\n }\r\n }\r\n\r\n // We should never end here\r\n throw Error(\"[INTERNAL] Illegal value for \"+this.toString(true)+\": \"+value+\" (undefined type \"+this.type+\")\");\r\n };\r\n\r\n /**\r\n * Calculates the byte length of an element on the wire.\r\n * @param {number} id Field number\r\n * @param {*} value Field value\r\n * @returns {number} Byte length\r\n * @throws {Error} If the value cannot be calculated\r\n * @expose\r\n */\r\n ElementPrototype.calculateLength = function(id, value) {\r\n if (value === null) return 0; // Nothing to encode\r\n // Tag has already been written\r\n var n;\r\n switch (this.type) {\r\n case ProtoBuf.TYPES[\"int32\"]:\r\n return value < 0 ? ByteBuffer.calculateVarint64(value) : ByteBuffer.calculateVarint32(value);\r\n case ProtoBuf.TYPES[\"uint32\"]:\r\n return ByteBuffer.calculateVarint32(value);\r\n case ProtoBuf.TYPES[\"sint32\"]:\r\n return ByteBuffer.calculateVarint32(ByteBuffer.zigZagEncode32(value));\r\n case ProtoBuf.TYPES[\"fixed32\"]:\r\n case ProtoBuf.TYPES[\"sfixed32\"]:\r\n case ProtoBuf.TYPES[\"float\"]:\r\n return 4;\r\n case ProtoBuf.TYPES[\"int64\"]:\r\n case ProtoBuf.TYPES[\"uint64\"]:\r\n return ByteBuffer.calculateVarint64(value);\r\n case ProtoBuf.TYPES[\"sint64\"]:\r\n return ByteBuffer.calculateVarint64(ByteBuffer.zigZagEncode64(value));\r\n case ProtoBuf.TYPES[\"fixed64\"]:\r\n case ProtoBuf.TYPES[\"sfixed64\"]:\r\n return 8;\r\n case ProtoBuf.TYPES[\"bool\"]:\r\n return 1;\r\n case ProtoBuf.TYPES[\"enum\"]:\r\n return ByteBuffer.calculateVarint32(value);\r\n case ProtoBuf.TYPES[\"double\"]:\r\n return 8;\r\n case ProtoBuf.TYPES[\"string\"]:\r\n n = ByteBuffer.calculateUTF8Bytes(value);\r\n return ByteBuffer.calculateVarint32(n) + n;\r\n case ProtoBuf.TYPES[\"bytes\"]:\r\n if (value.remaining() < 0)\r\n throw Error(\"Illegal value for \"+this.toString(true)+\": \"+value.remaining()+\" bytes remaining\");\r\n return ByteBuffer.calculateVarint32(value.remaining()) + value.remaining();\r\n case ProtoBuf.TYPES[\"message\"]:\r\n n = this.resolvedType.calculate(value);\r\n return ByteBuffer.calculateVarint32(n) + n;\r\n case ProtoBuf.TYPES[\"group\"]:\r\n n = this.resolvedType.calculate(value);\r\n return n + ByteBuffer.calculateVarint32((id << 3) | ProtoBuf.WIRE_TYPES.ENDGROUP);\r\n }\r\n // We should never end here\r\n throw Error(\"[INTERNAL] Illegal value to encode in \"+this.toString(true)+\": \"+value+\" (unknown type)\");\r\n };\r\n\r\n /**\r\n * Encodes a value to the specified buffer. Does not encode the key.\r\n * @param {number} id Field number\r\n * @param {*} value Field value\r\n * @param {ByteBuffer} buffer ByteBuffer to encode to\r\n * @return {ByteBuffer} The ByteBuffer for chaining\r\n * @throws {Error} If the value cannot be encoded\r\n * @expose\r\n */\r\n ElementPrototype.encodeValue = function(id, value, buffer) {\r\n if (value === null) return buffer; // Nothing to encode\r\n // Tag has already been written\r\n\r\n switch (this.type) {\r\n // 32bit signed varint\r\n case ProtoBuf.TYPES[\"int32\"]:\r\n // \"If you use int32 or int64 as the type for a negative number, the resulting varint is always ten bytes\r\n // long – it is, effectively, treated like a very large unsigned integer.\" (see #122)\r\n if (value < 0)\r\n buffer.writeVarint64(value);\r\n else\r\n buffer.writeVarint32(value);\r\n break;\r\n\r\n // 32bit unsigned varint\r\n case ProtoBuf.TYPES[\"uint32\"]:\r\n buffer.writeVarint32(value);\r\n break;\r\n\r\n // 32bit varint zig-zag\r\n case ProtoBuf.TYPES[\"sint32\"]:\r\n buffer.writeVarint32ZigZag(value);\r\n break;\r\n\r\n // Fixed unsigned 32bit\r\n case ProtoBuf.TYPES[\"fixed32\"]:\r\n buffer.writeUint32(value);\r\n break;\r\n\r\n // Fixed signed 32bit\r\n case ProtoBuf.TYPES[\"sfixed32\"]:\r\n buffer.writeInt32(value);\r\n break;\r\n\r\n // 64bit varint as-is\r\n case ProtoBuf.TYPES[\"int64\"]:\r\n case ProtoBuf.TYPES[\"uint64\"]:\r\n buffer.writeVarint64(value); // throws\r\n break;\r\n\r\n // 64bit varint zig-zag\r\n case ProtoBuf.TYPES[\"sint64\"]:\r\n buffer.writeVarint64ZigZag(value); // throws\r\n break;\r\n\r\n // Fixed unsigned 64bit\r\n case ProtoBuf.TYPES[\"fixed64\"]:\r\n buffer.writeUint64(value); // throws\r\n break;\r\n\r\n // Fixed signed 64bit\r\n case ProtoBuf.TYPES[\"sfixed64\"]:\r\n buffer.writeInt64(value); // throws\r\n break;\r\n\r\n // Bool\r\n case ProtoBuf.TYPES[\"bool\"]:\r\n if (typeof value === 'string')\r\n buffer.writeVarint32(value.toLowerCase() === 'false' ? 0 : !!value);\r\n else\r\n buffer.writeVarint32(value ? 1 : 0);\r\n break;\r\n\r\n // Constant enum value\r\n case ProtoBuf.TYPES[\"enum\"]:\r\n buffer.writeVarint32(value);\r\n break;\r\n\r\n // 32bit float\r\n case ProtoBuf.TYPES[\"float\"]:\r\n buffer.writeFloat32(value);\r\n break;\r\n\r\n // 64bit float\r\n case ProtoBuf.TYPES[\"double\"]:\r\n buffer.writeFloat64(value);\r\n break;\r\n\r\n // Length-delimited string\r\n case ProtoBuf.TYPES[\"string\"]:\r\n buffer.writeVString(value);\r\n break;\r\n\r\n // Length-delimited bytes\r\n case ProtoBuf.TYPES[\"bytes\"]:\r\n if (value.remaining() < 0)\r\n throw Error(\"Illegal value for \"+this.toString(true)+\": \"+value.remaining()+\" bytes remaining\");\r\n var prevOffset = value.offset;\r\n buffer.writeVarint32(value.remaining());\r\n buffer.append(value);\r\n value.offset = prevOffset;\r\n break;\r\n\r\n // Embedded message\r\n case ProtoBuf.TYPES[\"message\"]:\r\n var bb = new ByteBuffer().LE();\r\n this.resolvedType.encode(value, bb);\r\n buffer.writeVarint32(bb.offset);\r\n buffer.append(bb.flip());\r\n break;\r\n\r\n // Legacy group\r\n case ProtoBuf.TYPES[\"group\"]:\r\n this.resolvedType.encode(value, buffer);\r\n buffer.writeVarint32((id << 3) | ProtoBuf.WIRE_TYPES.ENDGROUP);\r\n break;\r\n\r\n default:\r\n // We should never end here\r\n throw Error(\"[INTERNAL] Illegal value to encode in \"+this.toString(true)+\": \"+value+\" (unknown type)\");\r\n }\r\n return buffer;\r\n };\r\n\r\n /**\r\n * Decode one element value from the specified buffer.\r\n * @param {ByteBuffer} buffer ByteBuffer to decode from\r\n * @param {number} wireType The field wire type\r\n * @param {number} id The field number\r\n * @return {*} Decoded value\r\n * @throws {Error} If the field cannot be decoded\r\n * @expose\r\n */\r\n ElementPrototype.decode = function(buffer, wireType, id) {\r\n if (wireType != this.type.wireType)\r\n throw Error(\"Unexpected wire type for element\");\r\n\r\n var value, nBytes;\r\n switch (this.type) {\r\n // 32bit signed varint\r\n case ProtoBuf.TYPES[\"int32\"]:\r\n return buffer.readVarint32() | 0;\r\n\r\n // 32bit unsigned varint\r\n case ProtoBuf.TYPES[\"uint32\"]:\r\n return buffer.readVarint32() >>> 0;\r\n\r\n // 32bit signed varint zig-zag\r\n case ProtoBuf.TYPES[\"sint32\"]:\r\n return buffer.readVarint32ZigZag() | 0;\r\n\r\n // Fixed 32bit unsigned\r\n case ProtoBuf.TYPES[\"fixed32\"]:\r\n return buffer.readUint32() >>> 0;\r\n\r\n case ProtoBuf.TYPES[\"sfixed32\"]:\r\n return buffer.readInt32() | 0;\r\n\r\n // 64bit signed varint\r\n case ProtoBuf.TYPES[\"int64\"]:\r\n return buffer.readVarint64();\r\n\r\n // 64bit unsigned varint\r\n case ProtoBuf.TYPES[\"uint64\"]:\r\n return buffer.readVarint64().toUnsigned();\r\n\r\n // 64bit signed varint zig-zag\r\n case ProtoBuf.TYPES[\"sint64\"]:\r\n return buffer.readVarint64ZigZag();\r\n\r\n // Fixed 64bit unsigned\r\n case ProtoBuf.TYPES[\"fixed64\"]:\r\n return buffer.readUint64();\r\n\r\n // Fixed 64bit signed\r\n case ProtoBuf.TYPES[\"sfixed64\"]:\r\n return buffer.readInt64();\r\n\r\n // Bool varint\r\n case ProtoBuf.TYPES[\"bool\"]:\r\n return !!buffer.readVarint32();\r\n\r\n // Constant enum value (varint)\r\n case ProtoBuf.TYPES[\"enum\"]:\r\n // The following Builder.Message#set will already throw\r\n return buffer.readVarint32();\r\n\r\n // 32bit float\r\n case ProtoBuf.TYPES[\"float\"]:\r\n return buffer.readFloat();\r\n\r\n // 64bit float\r\n case ProtoBuf.TYPES[\"double\"]:\r\n return buffer.readDouble();\r\n\r\n // Length-delimited string\r\n case ProtoBuf.TYPES[\"string\"]:\r\n return buffer.readVString();\r\n\r\n // Length-delimited bytes\r\n case ProtoBuf.TYPES[\"bytes\"]: {\r\n nBytes = buffer.readVarint32();\r\n if (buffer.remaining() < nBytes)\r\n throw Error(\"Illegal number of bytes for \"+this.toString(true)+\": \"+nBytes+\" required but got only \"+buffer.remaining());\r\n value = buffer.clone(); // Offset already set\r\n value.limit = value.offset+nBytes;\r\n buffer.offset += nBytes;\r\n return value;\r\n }\r\n\r\n // Length-delimited embedded message\r\n case ProtoBuf.TYPES[\"message\"]: {\r\n nBytes = buffer.readVarint32();\r\n return this.resolvedType.decode(buffer, nBytes);\r\n }\r\n\r\n // Legacy group\r\n case ProtoBuf.TYPES[\"group\"]:\r\n return this.resolvedType.decode(buffer, -1, id);\r\n }\r\n\r\n // We should never end here\r\n throw Error(\"[INTERNAL] Illegal decode type\");\r\n };\r\n\r\n /**\r\n * Converts a value from a string to the canonical element type.\r\n *\r\n * Legal only when isMapKey is true.\r\n *\r\n * @param {string} str The string value\r\n * @returns {*} The value\r\n */\r\n ElementPrototype.valueFromString = function(str) {\r\n if (!this.isMapKey) {\r\n throw Error(\"valueFromString() called on non-map-key element\");\r\n }\r\n\r\n switch (this.type) {\r\n case ProtoBuf.TYPES[\"int32\"]:\r\n case ProtoBuf.TYPES[\"sint32\"]:\r\n case ProtoBuf.TYPES[\"sfixed32\"]:\r\n case ProtoBuf.TYPES[\"uint32\"]:\r\n case ProtoBuf.TYPES[\"fixed32\"]:\r\n return this.verifyValue(parseInt(str));\r\n\r\n case ProtoBuf.TYPES[\"int64\"]:\r\n case ProtoBuf.TYPES[\"sint64\"]:\r\n case ProtoBuf.TYPES[\"sfixed64\"]:\r\n case ProtoBuf.TYPES[\"uint64\"]:\r\n case ProtoBuf.TYPES[\"fixed64\"]:\r\n // Long-based fields support conversions from string already.\r\n return this.verifyValue(str);\r\n\r\n case ProtoBuf.TYPES[\"bool\"]:\r\n return str === \"true\";\r\n\r\n case ProtoBuf.TYPES[\"string\"]:\r\n return this.verifyValue(str);\r\n\r\n case ProtoBuf.TYPES[\"bytes\"]:\r\n return ByteBuffer.fromBinary(str);\r\n }\r\n };\r\n\r\n /**\r\n * Converts a value from the canonical element type to a string.\r\n *\r\n * It should be the case that `valueFromString(valueToString(val))` returns\r\n * a value equivalent to `verifyValue(val)` for every legal value of `val`\r\n * according to this element type.\r\n *\r\n * This may be used when the element must be stored or used as a string,\r\n * e.g., as a map key on an Object.\r\n *\r\n * Legal only when isMapKey is true.\r\n *\r\n * @param {*} val The value\r\n * @returns {string} The string form of the value.\r\n */\r\n ElementPrototype.valueToString = function(value) {\r\n if (!this.isMapKey) {\r\n throw Error(\"valueToString() called on non-map-key element\");\r\n }\r\n\r\n if (this.type === ProtoBuf.TYPES[\"bytes\"]) {\r\n return value.toString(\"binary\");\r\n } else {\r\n return value.toString();\r\n }\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Element\r\n * @expose\r\n */\r\n Reflect.Element = Element;\r\n\r\n /**\r\n * Constructs a new Message.\r\n * @exports ProtoBuf.Reflect.Message\r\n * @param {!ProtoBuf.Builder} builder Builder reference\r\n * @param {!ProtoBuf.Reflect.Namespace} parent Parent message or namespace\r\n * @param {string} name Message name\r\n * @param {Object.=} options Message options\r\n * @param {boolean=} isGroup `true` if this is a legacy group\r\n * @param {string?} syntax The syntax level of this definition (e.g., proto3)\r\n * @constructor\r\n * @extends ProtoBuf.Reflect.Namespace\r\n */\r\n var Message = function(builder, parent, name, options, isGroup, syntax) {\r\n Namespace.call(this, builder, parent, name, options, syntax);\r\n\r\n /**\r\n * @override\r\n */\r\n this.className = \"Message\";\r\n\r\n /**\r\n * Extensions range.\r\n * @type {!Array.|undefined}\r\n * @expose\r\n */\r\n this.extensions = undefined;\r\n\r\n /**\r\n * Runtime message class.\r\n * @type {?function(new:ProtoBuf.Builder.Message)}\r\n * @expose\r\n */\r\n this.clazz = null;\r\n\r\n /**\r\n * Whether this is a legacy group or not.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n this.isGroup = !!isGroup;\r\n\r\n // The following cached collections are used to efficiently iterate over or look up fields when decoding.\r\n\r\n /**\r\n * Cached fields.\r\n * @type {?Array.}\r\n * @private\r\n */\r\n this._fields = null;\r\n\r\n /**\r\n * Cached fields by id.\r\n * @type {?Object.}\r\n * @private\r\n */\r\n this._fieldsById = null;\r\n\r\n /**\r\n * Cached fields by name.\r\n * @type {?Object.}\r\n * @private\r\n */\r\n this._fieldsByName = null;\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Message.prototype\r\n * @inner\r\n */\r\n var MessagePrototype = Message.prototype = Object.create(Namespace.prototype);\r\n\r\n /**\r\n * Builds the message and returns the runtime counterpart, which is a fully functional class.\r\n * @see ProtoBuf.Builder.Message\r\n * @param {boolean=} rebuild Whether to rebuild or not, defaults to false\r\n * @return {ProtoBuf.Reflect.Message} Message class\r\n * @throws {Error} If the message cannot be built\r\n * @expose\r\n */\r\n MessagePrototype.build = function(rebuild) {\r\n if (this.clazz && !rebuild)\r\n return this.clazz;\r\n\r\n // Create the runtime Message class in its own scope\r\n var clazz = (function(ProtoBuf, T) {\r\n\r\n var fields = T.getChildren(ProtoBuf.Reflect.Message.Field),\r\n oneofs = T.getChildren(ProtoBuf.Reflect.Message.OneOf);\r\n\r\n /**\r\n * Constructs a new runtime Message.\r\n * @name ProtoBuf.Builder.Message\r\n * @class Barebone of all runtime messages.\r\n * @param {!Object.|string} values Preset values\r\n * @param {...string} var_args\r\n * @constructor\r\n * @throws {Error} If the message cannot be created\r\n */\r\n var Message = function(values, var_args) {\r\n ProtoBuf.Builder.Message.call(this);\r\n\r\n // Create virtual oneof properties\r\n for (var i=0, k=oneofs.length; i 0) {\r\n var value;\r\n // Set field values from a values object\r\n if (arguments.length === 1 && values !== null && typeof values === 'object' &&\r\n /* not _another_ Message */ (typeof values.encode !== 'function' || values instanceof Message) &&\r\n /* not a repeated field */ !Array.isArray(values) &&\r\n /* not a Map */ !(values instanceof ProtoBuf.Map) &&\r\n /* not a ByteBuffer */ !ByteBuffer.isByteBuffer(values) &&\r\n /* not an ArrayBuffer */ !(values instanceof ArrayBuffer) &&\r\n /* not a Long */ !(ProtoBuf.Long && values instanceof ProtoBuf.Long)) {\r\n this.$set(values);\r\n } else // Set field values from arguments, in declaration order\r\n for (i=0, k=arguments.length; i} keyOrObj String key or plain object holding multiple values\r\n * @param {(*|boolean)=} value Value to set if key is a string, otherwise omitted\r\n * @param {boolean=} noAssert Whether to not assert for an actual field / proper value type, defaults to `false`\r\n * @returns {!ProtoBuf.Builder.Message} this\r\n * @throws {Error} If the value cannot be set\r\n * @expose\r\n */\r\n MessagePrototype.set = function(keyOrObj, value, noAssert) {\r\n if (keyOrObj && typeof keyOrObj === 'object') {\r\n noAssert = value;\r\n for (var ikey in keyOrObj) {\r\n // Check if virtual oneof field - don't set these\r\n if (keyOrObj.hasOwnProperty(ikey) && typeof (value = keyOrObj[ikey]) !== 'undefined' && T._oneofsByName[ikey] === undefined)\r\n this.$set(ikey, value, noAssert);\r\n }\r\n return this;\r\n }\r\n var field = T._fieldsByName[keyOrObj];\r\n if (!noAssert) {\r\n if (!field)\r\n throw Error(this+\"#\"+keyOrObj+\" is not a field: undefined\");\r\n if (!(field instanceof ProtoBuf.Reflect.Message.Field))\r\n throw Error(this+\"#\"+keyOrObj+\" is not a field: \"+field.toString(true));\r\n this[field.name] = (value = field.verifyValue(value)); // May throw\r\n } else\r\n this[keyOrObj] = value;\r\n if (field && field.oneof) { // Field is part of an OneOf (not a virtual OneOf field)\r\n var currentField = this[field.oneof.name]; // Virtual field references currently set field\r\n if (value !== null) {\r\n if (currentField !== null && currentField !== field.name)\r\n this[currentField] = null; // Clear currently set field\r\n this[field.oneof.name] = field.name; // Point virtual field at this field\r\n } else if (/* value === null && */currentField === keyOrObj)\r\n this[field.oneof.name] = null; // Clear virtual field (current field explicitly cleared)\r\n }\r\n return this;\r\n };\r\n\r\n /**\r\n * Sets a field's value. This is an alias for [@link ProtoBuf.Builder.Message#set}.\r\n * @name ProtoBuf.Builder.Message#$set\r\n * @function\r\n * @param {string|!Object.} keyOrObj String key or plain object holding multiple values\r\n * @param {(*|boolean)=} value Value to set if key is a string, otherwise omitted\r\n * @param {boolean=} noAssert Whether to not assert the value, defaults to `false`\r\n * @throws {Error} If the value cannot be set\r\n * @expose\r\n */\r\n MessagePrototype.$set = MessagePrototype.set;\r\n\r\n /**\r\n * Gets a field's value.\r\n * @name ProtoBuf.Builder.Message#get\r\n * @function\r\n * @param {string} key Key\r\n * @param {boolean=} noAssert Whether to not assert for an actual field, defaults to `false`\r\n * @return {*} Value\r\n * @throws {Error} If there is no such field\r\n * @expose\r\n */\r\n MessagePrototype.get = function(key, noAssert) {\r\n if (noAssert)\r\n return this[key];\r\n var field = T._fieldsByName[key];\r\n if (!field || !(field instanceof ProtoBuf.Reflect.Message.Field))\r\n throw Error(this+\"#\"+key+\" is not a field: undefined\");\r\n if (!(field instanceof ProtoBuf.Reflect.Message.Field))\r\n throw Error(this+\"#\"+key+\" is not a field: \"+field.toString(true));\r\n return this[field.name];\r\n };\r\n\r\n /**\r\n * Gets a field's value. This is an alias for {@link ProtoBuf.Builder.Message#$get}.\r\n * @name ProtoBuf.Builder.Message#$get\r\n * @function\r\n * @param {string} key Key\r\n * @return {*} Value\r\n * @throws {Error} If there is no such field\r\n * @expose\r\n */\r\n MessagePrototype.$get = MessagePrototype.get;\r\n\r\n // Getters and setters\r\n\r\n for (var i=0; i} data Data payload\r\n * @param {(!ByteBuffer|boolean)=} buffer ByteBuffer to encode to. Will create a new one and flip it if omitted.\r\n * @param {boolean=} noVerify Whether to not verify field values, defaults to `false`\r\n * @return {!ByteBuffer} Encoded message as a ByteBuffer\r\n * @expose\r\n */\r\n Message.encode = function(data, buffer, noVerify) {\r\n return new Message(data).encode(buffer, noVerify);\r\n };\r\n\r\n /**\r\n * Calculates the byte length of the message.\r\n * @name ProtoBuf.Builder.Message#calculate\r\n * @function\r\n * @returns {number} Byte length\r\n * @throws {Error} If the message cannot be calculated or if required fields are missing.\r\n * @expose\r\n */\r\n MessagePrototype.calculate = function() {\r\n return T.calculate(this);\r\n };\r\n\r\n /**\r\n * Encodes the varint32 length-delimited message.\r\n * @name ProtoBuf.Builder.Message#encodeDelimited\r\n * @function\r\n * @param {(!ByteBuffer|boolean)=} buffer ByteBuffer to encode to. Will create a new one and flip it if omitted.\r\n * @param {boolean=} noVerify Whether to not verify field values, defaults to `false`\r\n * @return {!ByteBuffer} Encoded message as a ByteBuffer\r\n * @throws {Error} If the message cannot be encoded or if required fields are missing. The later still\r\n * returns the encoded ByteBuffer in the `encoded` property on the error.\r\n * @expose\r\n */\r\n MessagePrototype.encodeDelimited = function(buffer, noVerify) {\r\n var isNew = false;\r\n if (!buffer)\r\n buffer = new ByteBuffer(),\r\n isNew = true;\r\n var enc = new ByteBuffer().LE();\r\n T.encode(this, enc, noVerify).flip();\r\n buffer.writeVarint32(enc.remaining());\r\n buffer.append(enc);\r\n return isNew ? buffer.flip() : buffer;\r\n };\r\n\r\n /**\r\n * Directly encodes the message to an ArrayBuffer.\r\n * @name ProtoBuf.Builder.Message#encodeAB\r\n * @function\r\n * @return {ArrayBuffer} Encoded message as ArrayBuffer\r\n * @throws {Error} If the message cannot be encoded or if required fields are missing. The later still\r\n * returns the encoded ArrayBuffer in the `encoded` property on the error.\r\n * @expose\r\n */\r\n MessagePrototype.encodeAB = function() {\r\n try {\r\n return this.encode().toArrayBuffer();\r\n } catch (e) {\r\n if (e[\"encoded\"]) e[\"encoded\"] = e[\"encoded\"].toArrayBuffer();\r\n throw(e);\r\n }\r\n };\r\n\r\n /**\r\n * Returns the message as an ArrayBuffer. This is an alias for {@link ProtoBuf.Builder.Message#encodeAB}.\r\n * @name ProtoBuf.Builder.Message#toArrayBuffer\r\n * @function\r\n * @return {ArrayBuffer} Encoded message as ArrayBuffer\r\n * @throws {Error} If the message cannot be encoded or if required fields are missing. The later still\r\n * returns the encoded ArrayBuffer in the `encoded` property on the error.\r\n * @expose\r\n */\r\n MessagePrototype.toArrayBuffer = MessagePrototype.encodeAB;\r\n\r\n /**\r\n * Directly encodes the message to a node Buffer.\r\n * @name ProtoBuf.Builder.Message#encodeNB\r\n * @function\r\n * @return {!Buffer}\r\n * @throws {Error} If the message cannot be encoded, not running under node.js or if required fields are\r\n * missing. The later still returns the encoded node Buffer in the `encoded` property on the error.\r\n * @expose\r\n */\r\n MessagePrototype.encodeNB = function() {\r\n try {\r\n return this.encode().toBuffer();\r\n } catch (e) {\r\n if (e[\"encoded\"]) e[\"encoded\"] = e[\"encoded\"].toBuffer();\r\n throw(e);\r\n }\r\n };\r\n\r\n /**\r\n * Returns the message as a node Buffer. This is an alias for {@link ProtoBuf.Builder.Message#encodeNB}.\r\n * @name ProtoBuf.Builder.Message#toBuffer\r\n * @function\r\n * @return {!Buffer}\r\n * @throws {Error} If the message cannot be encoded or if required fields are missing. The later still\r\n * returns the encoded node Buffer in the `encoded` property on the error.\r\n * @expose\r\n */\r\n MessagePrototype.toBuffer = MessagePrototype.encodeNB;\r\n\r\n /**\r\n * Directly encodes the message to a base64 encoded string.\r\n * @name ProtoBuf.Builder.Message#encode64\r\n * @function\r\n * @return {string} Base64 encoded string\r\n * @throws {Error} If the underlying buffer cannot be encoded or if required fields are missing. The later\r\n * still returns the encoded base64 string in the `encoded` property on the error.\r\n * @expose\r\n */\r\n MessagePrototype.encode64 = function() {\r\n try {\r\n return this.encode().toBase64();\r\n } catch (e) {\r\n if (e[\"encoded\"]) e[\"encoded\"] = e[\"encoded\"].toBase64();\r\n throw(e);\r\n }\r\n };\r\n\r\n /**\r\n * Returns the message as a base64 encoded string. This is an alias for {@link ProtoBuf.Builder.Message#encode64}.\r\n * @name ProtoBuf.Builder.Message#toBase64\r\n * @function\r\n * @return {string} Base64 encoded string\r\n * @throws {Error} If the message cannot be encoded or if required fields are missing. The later still\r\n * returns the encoded base64 string in the `encoded` property on the error.\r\n * @expose\r\n */\r\n MessagePrototype.toBase64 = MessagePrototype.encode64;\r\n\r\n /**\r\n * Directly encodes the message to a hex encoded string.\r\n * @name ProtoBuf.Builder.Message#encodeHex\r\n * @function\r\n * @return {string} Hex encoded string\r\n * @throws {Error} If the underlying buffer cannot be encoded or if required fields are missing. The later\r\n * still returns the encoded hex string in the `encoded` property on the error.\r\n * @expose\r\n */\r\n MessagePrototype.encodeHex = function() {\r\n try {\r\n return this.encode().toHex();\r\n } catch (e) {\r\n if (e[\"encoded\"]) e[\"encoded\"] = e[\"encoded\"].toHex();\r\n throw(e);\r\n }\r\n };\r\n\r\n /**\r\n * Returns the message as a hex encoded string. This is an alias for {@link ProtoBuf.Builder.Message#encodeHex}.\r\n * @name ProtoBuf.Builder.Message#toHex\r\n * @function\r\n * @return {string} Hex encoded string\r\n * @throws {Error} If the message cannot be encoded or if required fields are missing. The later still\r\n * returns the encoded hex string in the `encoded` property on the error.\r\n * @expose\r\n */\r\n MessagePrototype.toHex = MessagePrototype.encodeHex;\r\n\r\n /**\r\n * Clones a message object or field value to a raw object.\r\n * @param {*} obj Object to clone\r\n * @param {boolean} binaryAsBase64 Whether to include binary data as base64 strings or as a buffer otherwise\r\n * @param {boolean} longsAsStrings Whether to encode longs as strings\r\n * @param {!ProtoBuf.Reflect.T=} resolvedType The resolved field type if a field\r\n * @returns {*} Cloned object\r\n * @inner\r\n */\r\n function cloneRaw(obj, binaryAsBase64, longsAsStrings, resolvedType) {\r\n if (obj === null || typeof obj !== 'object') {\r\n // Convert enum values to their respective names\r\n if (resolvedType && resolvedType instanceof ProtoBuf.Reflect.Enum) {\r\n var name = ProtoBuf.Reflect.Enum.getName(resolvedType.object, obj);\r\n if (name !== null)\r\n return name;\r\n }\r\n // Pass-through string, number, boolean, null...\r\n return obj;\r\n }\r\n // Convert ByteBuffers to raw buffer or strings\r\n if (ByteBuffer.isByteBuffer(obj))\r\n return binaryAsBase64 ? obj.toBase64() : obj.toBuffer();\r\n // Convert Longs to proper objects or strings\r\n if (ProtoBuf.Long.isLong(obj))\r\n return longsAsStrings ? obj.toString() : ProtoBuf.Long.fromValue(obj);\r\n var clone;\r\n // Clone arrays\r\n if (Array.isArray(obj)) {\r\n clone = [];\r\n obj.forEach(function(v, k) {\r\n clone[k] = cloneRaw(v, binaryAsBase64, longsAsStrings, resolvedType);\r\n });\r\n return clone;\r\n }\r\n clone = {};\r\n // Convert maps to objects\r\n if (obj instanceof ProtoBuf.Map) {\r\n var it = obj.entries();\r\n for (var e = it.next(); !e.done; e = it.next())\r\n clone[obj.keyElem.valueToString(e.value[0])] = cloneRaw(e.value[1], binaryAsBase64, longsAsStrings, obj.valueElem.resolvedType);\r\n return clone;\r\n }\r\n // Everything else is a non-null object\r\n var type = obj.$type,\r\n field = undefined;\r\n for (var i in obj)\r\n if (obj.hasOwnProperty(i)) {\r\n if (type && (field = type.getChild(i)))\r\n clone[i] = cloneRaw(obj[i], binaryAsBase64, longsAsStrings, field.resolvedType);\r\n else\r\n clone[i] = cloneRaw(obj[i], binaryAsBase64, longsAsStrings);\r\n }\r\n return clone;\r\n }\r\n\r\n /**\r\n * Returns the message's raw payload.\r\n * @param {boolean=} binaryAsBase64 Whether to include binary data as base64 strings instead of Buffers, defaults to `false`\r\n * @param {boolean} longsAsStrings Whether to encode longs as strings\r\n * @returns {Object.} Raw payload\r\n * @expose\r\n */\r\n MessagePrototype.toRaw = function(binaryAsBase64, longsAsStrings) {\r\n return cloneRaw(this, !!binaryAsBase64, !!longsAsStrings, this.$type);\r\n };\r\n\r\n /**\r\n * Encodes a message to JSON.\r\n * @returns {string} JSON string\r\n * @expose\r\n */\r\n MessagePrototype.encodeJSON = function() {\r\n return JSON.stringify(\r\n cloneRaw(this,\r\n /* binary-as-base64 */ true,\r\n /* longs-as-strings */ true,\r\n this.$type\r\n )\r\n );\r\n };\r\n\r\n /**\r\n * Decodes a message from the specified buffer or string.\r\n * @name ProtoBuf.Builder.Message.decode\r\n * @function\r\n * @param {!ByteBuffer|!ArrayBuffer|!Buffer|string} buffer Buffer to decode from\r\n * @param {(number|string)=} length Message length. Defaults to decode all the remainig data.\r\n * @param {string=} enc Encoding if buffer is a string: hex, utf8 (not recommended), defaults to base64\r\n * @return {!ProtoBuf.Builder.Message} Decoded message\r\n * @throws {Error} If the message cannot be decoded or if required fields are missing. The later still\r\n * returns the decoded message with missing fields in the `decoded` property on the error.\r\n * @expose\r\n * @see ProtoBuf.Builder.Message.decode64\r\n * @see ProtoBuf.Builder.Message.decodeHex\r\n */\r\n Message.decode = function(buffer, length, enc) {\r\n if (typeof length === 'string')\r\n enc = length,\r\n length = -1;\r\n if (typeof buffer === 'string')\r\n buffer = ByteBuffer.wrap(buffer, enc ? enc : \"base64\");\r\n else if (!ByteBuffer.isByteBuffer(buffer))\r\n buffer = ByteBuffer.wrap(buffer); // May throw\r\n var le = buffer.littleEndian;\r\n try {\r\n var msg = T.decode(buffer.LE(), length);\r\n buffer.LE(le);\r\n return msg;\r\n } catch (e) {\r\n buffer.LE(le);\r\n throw(e);\r\n }\r\n };\r\n\r\n /**\r\n * Decodes a varint32 length-delimited message from the specified buffer or string.\r\n * @name ProtoBuf.Builder.Message.decodeDelimited\r\n * @function\r\n * @param {!ByteBuffer|!ArrayBuffer|!Buffer|string} buffer Buffer to decode from\r\n * @param {string=} enc Encoding if buffer is a string: hex, utf8 (not recommended), defaults to base64\r\n * @return {ProtoBuf.Builder.Message} Decoded message or `null` if not enough bytes are available yet\r\n * @throws {Error} If the message cannot be decoded or if required fields are missing. The later still\r\n * returns the decoded message with missing fields in the `decoded` property on the error.\r\n * @expose\r\n */\r\n Message.decodeDelimited = function(buffer, enc) {\r\n if (typeof buffer === 'string')\r\n buffer = ByteBuffer.wrap(buffer, enc ? enc : \"base64\");\r\n else if (!ByteBuffer.isByteBuffer(buffer))\r\n buffer = ByteBuffer.wrap(buffer); // May throw\r\n if (buffer.remaining() < 1)\r\n return null;\r\n var off = buffer.offset,\r\n len = buffer.readVarint32();\r\n if (buffer.remaining() < len) {\r\n buffer.offset = off;\r\n return null;\r\n }\r\n try {\r\n var msg = T.decode(buffer.slice(buffer.offset, buffer.offset + len).LE());\r\n buffer.offset += len;\r\n return msg;\r\n } catch (err) {\r\n buffer.offset += len;\r\n throw err;\r\n }\r\n };\r\n\r\n /**\r\n * Decodes the message from the specified base64 encoded string.\r\n * @name ProtoBuf.Builder.Message.decode64\r\n * @function\r\n * @param {string} str String to decode from\r\n * @return {!ProtoBuf.Builder.Message} Decoded message\r\n * @throws {Error} If the message cannot be decoded or if required fields are missing. The later still\r\n * returns the decoded message with missing fields in the `decoded` property on the error.\r\n * @expose\r\n */\r\n Message.decode64 = function(str) {\r\n return Message.decode(str, \"base64\");\r\n };\r\n\r\n /**\r\n * Decodes the message from the specified hex encoded string.\r\n * @name ProtoBuf.Builder.Message.decodeHex\r\n * @function\r\n * @param {string} str String to decode from\r\n * @return {!ProtoBuf.Builder.Message} Decoded message\r\n * @throws {Error} If the message cannot be decoded or if required fields are missing. The later still\r\n * returns the decoded message with missing fields in the `decoded` property on the error.\r\n * @expose\r\n */\r\n Message.decodeHex = function(str) {\r\n return Message.decode(str, \"hex\");\r\n };\r\n\r\n /**\r\n * Decodes the message from a JSON string.\r\n * @name ProtoBuf.Builder.Message.decodeJSON\r\n * @function\r\n * @param {string} str String to decode from\r\n * @return {!ProtoBuf.Builder.Message} Decoded message\r\n * @throws {Error} If the message cannot be decoded or if required fields are\r\n * missing.\r\n * @expose\r\n */\r\n Message.decodeJSON = function(str) {\r\n return new Message(JSON.parse(str));\r\n };\r\n\r\n // Utility\r\n\r\n /**\r\n * Returns a string representation of this Message.\r\n * @name ProtoBuf.Builder.Message#toString\r\n * @function\r\n * @return {string} String representation as of \".Fully.Qualified.MessageName\"\r\n * @expose\r\n */\r\n MessagePrototype.toString = function() {\r\n return T.toString();\r\n };\r\n\r\n // Properties\r\n\r\n /**\r\n * Message options.\r\n * @name ProtoBuf.Builder.Message.$options\r\n * @type {Object.}\r\n * @expose\r\n */\r\n var $optionsS; // cc needs this\r\n\r\n /**\r\n * Message options.\r\n * @name ProtoBuf.Builder.Message#$options\r\n * @type {Object.}\r\n * @expose\r\n */\r\n var $options;\r\n\r\n /**\r\n * Reflection type.\r\n * @name ProtoBuf.Builder.Message.$type\r\n * @type {!ProtoBuf.Reflect.Message}\r\n * @expose\r\n */\r\n var $typeS;\r\n\r\n /**\r\n * Reflection type.\r\n * @name ProtoBuf.Builder.Message#$type\r\n * @type {!ProtoBuf.Reflect.Message}\r\n * @expose\r\n */\r\n var $type;\r\n\r\n if (Object.defineProperty)\r\n Object.defineProperty(Message, '$options', { \"value\": T.buildOpt() }),\r\n Object.defineProperty(MessagePrototype, \"$options\", { \"value\": Message[\"$options\"] }),\r\n Object.defineProperty(Message, \"$type\", { \"value\": T }),\r\n Object.defineProperty(MessagePrototype, \"$type\", { \"value\": T });\r\n\r\n return Message;\r\n\r\n })(ProtoBuf, this);\r\n\r\n // Static enums and prototyped sub-messages / cached collections\r\n this._fields = [];\r\n this._fieldsById = {};\r\n this._fieldsByName = {};\r\n this._oneofsByName = {};\r\n for (var i=0, k=this.children.length, child; i>> 3;\r\n switch (wireType) {\r\n case ProtoBuf.WIRE_TYPES.VARINT:\r\n do tag = buf.readUint8();\r\n while ((tag & 0x80) === 0x80);\r\n break;\r\n case ProtoBuf.WIRE_TYPES.BITS64:\r\n buf.offset += 8;\r\n break;\r\n case ProtoBuf.WIRE_TYPES.LDELIM:\r\n tag = buf.readVarint32(); // reads the varint\r\n buf.offset += tag; // skips n bytes\r\n break;\r\n case ProtoBuf.WIRE_TYPES.STARTGROUP:\r\n skipTillGroupEnd(id, buf);\r\n break;\r\n case ProtoBuf.WIRE_TYPES.ENDGROUP:\r\n if (id === expectedId)\r\n return false;\r\n else\r\n throw Error(\"Illegal GROUPEND after unknown group: \"+id+\" (\"+expectedId+\" expected)\");\r\n case ProtoBuf.WIRE_TYPES.BITS32:\r\n buf.offset += 4;\r\n break;\r\n default:\r\n throw Error(\"Illegal wire type in unknown group \"+expectedId+\": \"+wireType);\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Decodes an encoded message and returns the decoded message.\r\n * @param {ByteBuffer} buffer ByteBuffer to decode from\r\n * @param {number=} length Message length. Defaults to decode all remaining data.\r\n * @param {number=} expectedGroupEndId Expected GROUPEND id if this is a legacy group\r\n * @return {ProtoBuf.Builder.Message} Decoded message\r\n * @throws {Error} If the message cannot be decoded\r\n * @expose\r\n */\r\n MessagePrototype.decode = function(buffer, length, expectedGroupEndId) {\r\n if (typeof length !== 'number')\r\n length = -1;\r\n var start = buffer.offset,\r\n msg = new (this.clazz)(),\r\n tag, wireType, id, field;\r\n while (buffer.offset < start+length || (length === -1 && buffer.remaining() > 0)) {\r\n tag = buffer.readVarint32();\r\n wireType = tag & 0x07;\r\n id = tag >>> 3;\r\n if (wireType === ProtoBuf.WIRE_TYPES.ENDGROUP) {\r\n if (id !== expectedGroupEndId)\r\n throw Error(\"Illegal group end indicator for \"+this.toString(true)+\": \"+id+\" (\"+(expectedGroupEndId ? expectedGroupEndId+\" expected\" : \"not a group\")+\")\");\r\n break;\r\n }\r\n if (!(field = this._fieldsById[id])) {\r\n // \"messages created by your new code can be parsed by your old code: old binaries simply ignore the new field when parsing.\"\r\n switch (wireType) {\r\n case ProtoBuf.WIRE_TYPES.VARINT:\r\n buffer.readVarint32();\r\n break;\r\n case ProtoBuf.WIRE_TYPES.BITS32:\r\n buffer.offset += 4;\r\n break;\r\n case ProtoBuf.WIRE_TYPES.BITS64:\r\n buffer.offset += 8;\r\n break;\r\n case ProtoBuf.WIRE_TYPES.LDELIM:\r\n var len = buffer.readVarint32();\r\n buffer.offset += len;\r\n break;\r\n case ProtoBuf.WIRE_TYPES.STARTGROUP:\r\n while (skipTillGroupEnd(id, buffer)) {}\r\n break;\r\n default:\r\n throw Error(\"Illegal wire type for unknown field \"+id+\" in \"+this.toString(true)+\"#decode: \"+wireType);\r\n }\r\n continue;\r\n }\r\n if (field.repeated && !field.options[\"packed\"]) {\r\n msg[field.name].push(field.decode(wireType, buffer));\r\n } else if (field.map) {\r\n var keyval = field.decode(wireType, buffer);\r\n msg[field.name].set(keyval[0], keyval[1]);\r\n } else {\r\n msg[field.name] = field.decode(wireType, buffer);\r\n if (field.oneof) { // Field is part of an OneOf (not a virtual OneOf field)\r\n var currentField = msg[field.oneof.name]; // Virtual field references currently set field\r\n if (currentField !== null && currentField !== field.name)\r\n msg[currentField] = null; // Clear currently set field\r\n msg[field.oneof.name] = field.name; // Point virtual field at this field\r\n }\r\n }\r\n }\r\n\r\n // Check if all required fields are present and set default values for optional fields that are not\r\n for (var i=0, k=this._fields.length; i=} options Options\r\n * @param {!ProtoBuf.Reflect.Message.OneOf=} oneof Enclosing OneOf\r\n * @param {string?} syntax The syntax level of this definition (e.g., proto3)\r\n * @constructor\r\n * @extends ProtoBuf.Reflect.T\r\n */\r\n var Field = function(builder, message, rule, keytype, type, name, id, options, oneof, syntax) {\r\n T.call(this, builder, message, name);\r\n\r\n /**\r\n * @override\r\n */\r\n this.className = \"Message.Field\";\r\n\r\n /**\r\n * Message field required flag.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n this.required = rule === \"required\";\r\n\r\n /**\r\n * Message field repeated flag.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n this.repeated = rule === \"repeated\";\r\n\r\n /**\r\n * Message field map flag.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n this.map = rule === \"map\";\r\n\r\n /**\r\n * Message field key type. Type reference string if unresolved, protobuf\r\n * type if resolved. Valid only if this.map === true, null otherwise.\r\n * @type {string|{name: string, wireType: number}|null}\r\n * @expose\r\n */\r\n this.keyType = keytype || null;\r\n\r\n /**\r\n * Message field type. Type reference string if unresolved, protobuf type if\r\n * resolved. In a map field, this is the value type.\r\n * @type {string|{name: string, wireType: number}}\r\n * @expose\r\n */\r\n this.type = type;\r\n\r\n /**\r\n * Resolved type reference inside the global namespace.\r\n * @type {ProtoBuf.Reflect.T|null}\r\n * @expose\r\n */\r\n this.resolvedType = null;\r\n\r\n /**\r\n * Unique message field id.\r\n * @type {number}\r\n * @expose\r\n */\r\n this.id = id;\r\n\r\n /**\r\n * Message field options.\r\n * @type {!Object.}\r\n * @dict\r\n * @expose\r\n */\r\n this.options = options || {};\r\n\r\n /**\r\n * Default value.\r\n * @type {*}\r\n * @expose\r\n */\r\n this.defaultValue = null;\r\n\r\n /**\r\n * Enclosing OneOf.\r\n * @type {?ProtoBuf.Reflect.Message.OneOf}\r\n * @expose\r\n */\r\n this.oneof = oneof || null;\r\n\r\n /**\r\n * Syntax level of this definition (e.g., proto3).\r\n * @type {string}\r\n * @expose\r\n */\r\n this.syntax = syntax || 'proto2';\r\n\r\n /**\r\n * Original field name.\r\n * @type {string}\r\n * @expose\r\n */\r\n this.originalName = this.name; // Used to revert camelcase transformation on naming collisions\r\n\r\n /**\r\n * Element implementation. Created in build() after types are resolved.\r\n * @type {ProtoBuf.Element}\r\n * @expose\r\n */\r\n this.element = null;\r\n\r\n /**\r\n * Key element implementation, for map fields. Created in build() after\r\n * types are resolved.\r\n * @type {ProtoBuf.Element}\r\n * @expose\r\n */\r\n this.keyElement = null;\r\n\r\n // Convert field names to camel case notation if the override is set\r\n if (this.builder.options['convertFieldsToCamelCase'] && !(this instanceof Message.ExtensionField))\r\n this.name = ProtoBuf.Util.toCamelCase(this.name);\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Message.Field.prototype\r\n * @inner\r\n */\r\n var FieldPrototype = Field.prototype = Object.create(T.prototype);\r\n\r\n /**\r\n * Builds the field.\r\n * @override\r\n * @expose\r\n */\r\n FieldPrototype.build = function() {\r\n this.element = new Element(this.type, this.resolvedType, false, this.syntax, this.name);\r\n if (this.map)\r\n this.keyElement = new Element(this.keyType, undefined, true, this.syntax, this.name);\r\n\r\n // In proto3, fields do not have field presence, and every field is set to\r\n // its type's default value (\"\", 0, 0.0, or false).\r\n if (this.syntax === 'proto3' && !this.repeated && !this.map)\r\n this.defaultValue = Element.defaultFieldValue(this.type);\r\n\r\n // Otherwise, default values are present when explicitly specified\r\n else if (typeof this.options['default'] !== 'undefined')\r\n this.defaultValue = this.verifyValue(this.options['default']);\r\n };\r\n\r\n /**\r\n * Checks if the given value can be set for this field.\r\n * @param {*} value Value to check\r\n * @param {boolean=} skipRepeated Whether to skip the repeated value check or not. Defaults to false.\r\n * @return {*} Verified, maybe adjusted, value\r\n * @throws {Error} If the value cannot be set for this field\r\n * @expose\r\n */\r\n FieldPrototype.verifyValue = function(value, skipRepeated) {\r\n skipRepeated = skipRepeated || false;\r\n var self = this;\r\n function fail(val, msg) {\r\n throw Error(\"Illegal value for \"+self.toString(true)+\" of type \"+self.type.name+\": \"+val+\" (\"+msg+\")\");\r\n }\r\n if (value === null) { // NULL values for optional fields\r\n if (this.required)\r\n fail(typeof value, \"required\");\r\n if (this.syntax === 'proto3' && this.type !== ProtoBuf.TYPES[\"message\"])\r\n fail(typeof value, \"proto3 field without field presence cannot be null\");\r\n return null;\r\n }\r\n var i;\r\n if (this.repeated && !skipRepeated) { // Repeated values as arrays\r\n if (!Array.isArray(value))\r\n value = [value];\r\n var res = [];\r\n for (i=0; i 0;\r\n\r\n case ProtoBuf.TYPES[\"bytes\"]:\r\n return value.remaining() > 0;\r\n\r\n case ProtoBuf.TYPES[\"enum\"]:\r\n return value !== 0;\r\n\r\n case ProtoBuf.TYPES[\"message\"]:\r\n return value !== null;\r\n default:\r\n return true;\r\n }\r\n };\r\n\r\n /**\r\n * Encodes the specified field value to the specified buffer.\r\n * @param {*} value Verified field value\r\n * @param {ByteBuffer} buffer ByteBuffer to encode to\r\n * @param {!ProtoBuf.Builder.Message} message Runtime message\r\n * @return {ByteBuffer} The ByteBuffer for chaining\r\n * @throws {Error} If the field cannot be encoded\r\n * @expose\r\n */\r\n FieldPrototype.encode = function(value, buffer, message) {\r\n if (this.type === null || typeof this.type !== 'object')\r\n throw Error(\"[INTERNAL] Unresolved type in \"+this.toString(true)+\": \"+this.type);\r\n if (value === null || (this.repeated && value.length == 0))\r\n return buffer; // Optional omitted\r\n try {\r\n if (this.repeated) {\r\n var i;\r\n // \"Only repeated fields of primitive numeric types (types which use the varint, 32-bit, or 64-bit wire\r\n // types) can be declared 'packed'.\"\r\n if (this.options[\"packed\"] && ProtoBuf.PACKABLE_WIRE_TYPES.indexOf(this.type.wireType) >= 0) {\r\n // \"All of the elements of the field are packed into a single key-value pair with wire type 2\r\n // (length-delimited). Each element is encoded the same way it would be normally, except without a\r\n // tag preceding it.\"\r\n buffer.writeVarint32((this.id << 3) | ProtoBuf.WIRE_TYPES.LDELIM);\r\n buffer.ensureCapacity(buffer.offset += 1); // We do not know the length yet, so let's assume a varint of length 1\r\n var start = buffer.offset; // Remember where the contents begin\r\n for (i=0; i 1) { // We need to move the contents\r\n var contents = buffer.slice(start, buffer.offset);\r\n start += varintLen-1;\r\n buffer.offset = start;\r\n buffer.append(contents);\r\n }\r\n buffer.writeVarint32(len, start-varintLen);\r\n } else {\r\n // \"If your message definition has repeated elements (without the [packed=true] option), the encoded\r\n // message has zero or more key-value pairs with the same tag number\"\r\n for (i=0; i= 0) {\r\n n += ByteBuffer.calculateVarint32((this.id << 3) | ProtoBuf.WIRE_TYPES.LDELIM);\r\n ni = 0;\r\n for (i=0; i= 0) {\r\n if (!skipRepeated) {\r\n nBytes = buffer.readVarint32();\r\n nBytes = buffer.offset + nBytes; // Limit\r\n var values = [];\r\n while (buffer.offset < nBytes)\r\n values.push(this.decode(this.type.wireType, buffer, true));\r\n return values;\r\n }\r\n // Read the next value otherwise...\r\n }\r\n\r\n // Handle maps.\r\n if (this.map) {\r\n // Read one (key, value) submessage, and return [key, value]\r\n var key = Element.defaultFieldValue(this.keyType);\r\n value = Element.defaultFieldValue(this.type);\r\n\r\n // Read the length\r\n nBytes = buffer.readVarint32();\r\n if (buffer.remaining() < nBytes)\r\n throw Error(\"Illegal number of bytes for \"+this.toString(true)+\": \"+nBytes+\" required but got only \"+buffer.remaining());\r\n\r\n // Get a sub-buffer of this key/value submessage\r\n var msgbuf = buffer.clone();\r\n msgbuf.limit = msgbuf.offset + nBytes;\r\n buffer.offset += nBytes;\r\n\r\n while (msgbuf.remaining() > 0) {\r\n var tag = msgbuf.readVarint32();\r\n wireType = tag & 0x07;\r\n var id = tag >>> 3;\r\n if (id === 1) {\r\n key = this.keyElement.decode(msgbuf, wireType, id);\r\n } else if (id === 2) {\r\n value = this.element.decode(msgbuf, wireType, id);\r\n } else {\r\n throw Error(\"Unexpected tag in map field key/value submessage\");\r\n }\r\n }\r\n\r\n return [key, value];\r\n }\r\n\r\n // Handle singular and non-packed repeated field values.\r\n return this.element.decode(buffer, wireType, this.id);\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Message.Field\r\n * @expose\r\n */\r\n Reflect.Message.Field = Field;\r\n\r\n /**\r\n * Constructs a new Message ExtensionField.\r\n * @exports ProtoBuf.Reflect.Message.ExtensionField\r\n * @param {!ProtoBuf.Builder} builder Builder reference\r\n * @param {!ProtoBuf.Reflect.Message} message Message reference\r\n * @param {string} rule Rule, one of requried, optional, repeated\r\n * @param {string} type Data type, e.g. int32\r\n * @param {string} name Field name\r\n * @param {number} id Unique field id\r\n * @param {!Object.=} options Options\r\n * @constructor\r\n * @extends ProtoBuf.Reflect.Message.Field\r\n */\r\n var ExtensionField = function(builder, message, rule, type, name, id, options) {\r\n Field.call(this, builder, message, rule, /* keytype = */ null, type, name, id, options);\r\n\r\n /**\r\n * Extension reference.\r\n * @type {!ProtoBuf.Reflect.Extension}\r\n * @expose\r\n */\r\n this.extension;\r\n };\r\n\r\n // Extends Field\r\n ExtensionField.prototype = Object.create(Field.prototype);\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Message.ExtensionField\r\n * @expose\r\n */\r\n Reflect.Message.ExtensionField = ExtensionField;\r\n\r\n /**\r\n * Constructs a new Message OneOf.\r\n * @exports ProtoBuf.Reflect.Message.OneOf\r\n * @param {!ProtoBuf.Builder} builder Builder reference\r\n * @param {!ProtoBuf.Reflect.Message} message Message reference\r\n * @param {string} name OneOf name\r\n * @constructor\r\n * @extends ProtoBuf.Reflect.T\r\n */\r\n var OneOf = function(builder, message, name) {\r\n T.call(this, builder, message, name);\r\n\r\n /**\r\n * Enclosed fields.\r\n * @type {!Array.}\r\n * @expose\r\n */\r\n this.fields = [];\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Message.OneOf\r\n * @expose\r\n */\r\n Reflect.Message.OneOf = OneOf;\r\n\r\n /**\r\n * Constructs a new Enum.\r\n * @exports ProtoBuf.Reflect.Enum\r\n * @param {!ProtoBuf.Builder} builder Builder reference\r\n * @param {!ProtoBuf.Reflect.T} parent Parent Reflect object\r\n * @param {string} name Enum name\r\n * @param {Object.=} options Enum options\r\n * @param {string?} syntax The syntax level (e.g., proto3)\r\n * @constructor\r\n * @extends ProtoBuf.Reflect.Namespace\r\n */\r\n var Enum = function(builder, parent, name, options, syntax) {\r\n Namespace.call(this, builder, parent, name, options, syntax);\r\n\r\n /**\r\n * @override\r\n */\r\n this.className = \"Enum\";\r\n\r\n /**\r\n * Runtime enum object.\r\n * @type {Object.|null}\r\n * @expose\r\n */\r\n this.object = null;\r\n };\r\n\r\n /**\r\n * Gets the string name of an enum value.\r\n * @param {!ProtoBuf.Builder.Enum} enm Runtime enum\r\n * @param {number} value Enum value\r\n * @returns {?string} Name or `null` if not present\r\n * @expose\r\n */\r\n Enum.getName = function(enm, value) {\r\n var keys = Object.keys(enm);\r\n for (var i=0, key; i}\r\n * @expose\r\n */\r\n EnumPrototype.build = function(rebuild) {\r\n if (this.object && !rebuild)\r\n return this.object;\r\n var enm = new ProtoBuf.Builder.Enum(),\r\n values = this.getChildren(Enum.Value);\r\n for (var i=0, k=values.length; i=} options Options\r\n * @constructor\r\n * @extends ProtoBuf.Reflect.Namespace\r\n */\r\n var Service = function(builder, root, name, options) {\r\n Namespace.call(this, builder, root, name, options);\r\n\r\n /**\r\n * @override\r\n */\r\n this.className = \"Service\";\r\n\r\n /**\r\n * Built runtime service class.\r\n * @type {?function(new:ProtoBuf.Builder.Service)}\r\n */\r\n this.clazz = null;\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Service.prototype\r\n * @inner\r\n */\r\n var ServicePrototype = Service.prototype = Object.create(Namespace.prototype);\r\n\r\n /**\r\n * Builds the service and returns the runtime counterpart, which is a fully functional class.\r\n * @see ProtoBuf.Builder.Service\r\n * @param {boolean=} rebuild Whether to rebuild or not\r\n * @return {Function} Service class\r\n * @throws {Error} If the message cannot be built\r\n * @expose\r\n */\r\n ServicePrototype.build = function(rebuild) {\r\n if (this.clazz && !rebuild)\r\n return this.clazz;\r\n\r\n // Create the runtime Service class in its own scope\r\n return this.clazz = (function(ProtoBuf, T) {\r\n\r\n /**\r\n * Constructs a new runtime Service.\r\n * @name ProtoBuf.Builder.Service\r\n * @param {function(string, ProtoBuf.Builder.Message, function(Error, ProtoBuf.Builder.Message=))=} rpcImpl RPC implementation receiving the method name and the message\r\n * @class Barebone of all runtime services.\r\n * @constructor\r\n * @throws {Error} If the service cannot be created\r\n */\r\n var Service = function(rpcImpl) {\r\n ProtoBuf.Builder.Service.call(this);\r\n\r\n /**\r\n * Service implementation.\r\n * @name ProtoBuf.Builder.Service#rpcImpl\r\n * @type {!function(string, ProtoBuf.Builder.Message, function(Error, ProtoBuf.Builder.Message=))}\r\n * @expose\r\n */\r\n this.rpcImpl = rpcImpl || function(name, msg, callback) {\r\n // This is what a user has to implement: A function receiving the method name, the actual message to\r\n // send (type checked) and the callback that's either provided with the error as its first\r\n // argument or null and the actual response message.\r\n setTimeout(callback.bind(this, Error(\"Not implemented, see: https://github.com/dcodeIO/ProtoBuf.js/wiki/Services\")), 0); // Must be async!\r\n };\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Builder.Service.prototype\r\n * @inner\r\n */\r\n var ServicePrototype = Service.prototype = Object.create(ProtoBuf.Builder.Service.prototype);\r\n\r\n /**\r\n * Asynchronously performs an RPC call using the given RPC implementation.\r\n * @name ProtoBuf.Builder.Service.[Method]\r\n * @function\r\n * @param {!function(string, ProtoBuf.Builder.Message, function(Error, ProtoBuf.Builder.Message=))} rpcImpl RPC implementation\r\n * @param {ProtoBuf.Builder.Message} req Request\r\n * @param {function(Error, (ProtoBuf.Builder.Message|ByteBuffer|Buffer|string)=)} callback Callback receiving\r\n * the error if any and the response either as a pre-parsed message or as its raw bytes\r\n * @abstract\r\n */\r\n\r\n /**\r\n * Asynchronously performs an RPC call using the instance's RPC implementation.\r\n * @name ProtoBuf.Builder.Service#[Method]\r\n * @function\r\n * @param {ProtoBuf.Builder.Message} req Request\r\n * @param {function(Error, (ProtoBuf.Builder.Message|ByteBuffer|Buffer|string)=)} callback Callback receiving\r\n * the error if any and the response either as a pre-parsed message or as its raw bytes\r\n * @abstract\r\n */\r\n\r\n var rpc = T.getChildren(ProtoBuf.Reflect.Service.RPCMethod);\r\n for (var i=0; i}\r\n * @expose\r\n */\r\n var $optionsS; // cc needs this\r\n\r\n /**\r\n * Service options.\r\n * @name ProtoBuf.Builder.Service#$options\r\n * @type {Object.}\r\n * @expose\r\n */\r\n var $options;\r\n\r\n /**\r\n * Reflection type.\r\n * @name ProtoBuf.Builder.Service.$type\r\n * @type {!ProtoBuf.Reflect.Service}\r\n * @expose\r\n */\r\n var $typeS;\r\n\r\n /**\r\n * Reflection type.\r\n * @name ProtoBuf.Builder.Service#$type\r\n * @type {!ProtoBuf.Reflect.Service}\r\n * @expose\r\n */\r\n var $type;\r\n\r\n if (Object.defineProperty)\r\n Object.defineProperty(Service, \"$options\", { \"value\": T.buildOpt() }),\r\n Object.defineProperty(ServicePrototype, \"$options\", { \"value\": Service[\"$options\"] }),\r\n Object.defineProperty(Service, \"$type\", { \"value\": T }),\r\n Object.defineProperty(ServicePrototype, \"$type\", { \"value\": T });\r\n\r\n return Service;\r\n\r\n })(ProtoBuf, this);\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Service\r\n * @expose\r\n */\r\n Reflect.Service = Service;\r\n\r\n /**\r\n * Abstract service method.\r\n * @exports ProtoBuf.Reflect.Service.Method\r\n * @param {!ProtoBuf.Builder} builder Builder reference\r\n * @param {!ProtoBuf.Reflect.Service} svc Service\r\n * @param {string} name Method name\r\n * @param {Object.=} options Options\r\n * @constructor\r\n * @extends ProtoBuf.Reflect.T\r\n */\r\n var Method = function(builder, svc, name, options) {\r\n T.call(this, builder, svc, name);\r\n\r\n /**\r\n * @override\r\n */\r\n this.className = \"Service.Method\";\r\n\r\n /**\r\n * Options.\r\n * @type {Object.}\r\n * @expose\r\n */\r\n this.options = options || {};\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Service.Method.prototype\r\n * @inner\r\n */\r\n var MethodPrototype = Method.prototype = Object.create(T.prototype);\r\n\r\n /**\r\n * Builds the method's '$options' property.\r\n * @name ProtoBuf.Reflect.Service.Method#buildOpt\r\n * @function\r\n * @return {Object.}\r\n */\r\n MethodPrototype.buildOpt = NamespacePrototype.buildOpt;\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Service.Method\r\n * @expose\r\n */\r\n Reflect.Service.Method = Method;\r\n\r\n /**\r\n * RPC service method.\r\n * @exports ProtoBuf.Reflect.Service.RPCMethod\r\n * @param {!ProtoBuf.Builder} builder Builder reference\r\n * @param {!ProtoBuf.Reflect.Service} svc Service\r\n * @param {string} name Method name\r\n * @param {string} request Request message name\r\n * @param {string} response Response message name\r\n * @param {boolean} request_stream Whether requests are streamed\r\n * @param {boolean} response_stream Whether responses are streamed\r\n * @param {Object.=} options Options\r\n * @constructor\r\n * @extends ProtoBuf.Reflect.Service.Method\r\n */\r\n var RPCMethod = function(builder, svc, name, request, response, request_stream, response_stream, options) {\r\n Method.call(this, builder, svc, name, options);\r\n\r\n /**\r\n * @override\r\n */\r\n this.className = \"Service.RPCMethod\";\r\n\r\n /**\r\n * Request message name.\r\n * @type {string}\r\n * @expose\r\n */\r\n this.requestName = request;\r\n\r\n /**\r\n * Response message name.\r\n * @type {string}\r\n * @expose\r\n */\r\n this.responseName = response;\r\n\r\n /**\r\n * Whether requests are streamed\r\n * @type {bool}\r\n * @expose\r\n */\r\n this.requestStream = request_stream;\r\n\r\n /**\r\n * Whether responses are streamed\r\n * @type {bool}\r\n * @expose\r\n */\r\n this.responseStream = response_stream;\r\n\r\n /**\r\n * Resolved request message type.\r\n * @type {ProtoBuf.Reflect.Message}\r\n * @expose\r\n */\r\n this.resolvedRequestType = null;\r\n\r\n /**\r\n * Resolved response message type.\r\n * @type {ProtoBuf.Reflect.Message}\r\n * @expose\r\n */\r\n this.resolvedResponseType = null;\r\n };\r\n\r\n // Extends Method\r\n RPCMethod.prototype = Object.create(Method.prototype);\r\n\r\n /**\r\n * @alias ProtoBuf.Reflect.Service.RPCMethod\r\n * @expose\r\n */\r\n Reflect.Service.RPCMethod = RPCMethod;\r\n\r\n return Reflect;\r\n\r\n })(ProtoBuf);\r\n\r\n /**\r\n * @alias ProtoBuf.Builder\r\n * @expose\r\n */\r\n ProtoBuf.Builder = (function(ProtoBuf, Lang, Reflect) {\r\n \"use strict\";\r\n\r\n /**\r\n * Constructs a new Builder.\r\n * @exports ProtoBuf.Builder\r\n * @class Provides the functionality to build protocol messages.\r\n * @param {Object.=} options Options\r\n * @constructor\r\n */\r\n var Builder = function(options) {\r\n\r\n /**\r\n * Namespace.\r\n * @type {ProtoBuf.Reflect.Namespace}\r\n * @expose\r\n */\r\n this.ns = new Reflect.Namespace(this, null, \"\"); // Global namespace\r\n\r\n /**\r\n * Namespace pointer.\r\n * @type {ProtoBuf.Reflect.T}\r\n * @expose\r\n */\r\n this.ptr = this.ns;\r\n\r\n /**\r\n * Resolved flag.\r\n * @type {boolean}\r\n * @expose\r\n */\r\n this.resolved = false;\r\n\r\n /**\r\n * The current building result.\r\n * @type {Object.|null}\r\n * @expose\r\n */\r\n this.result = null;\r\n\r\n /**\r\n * Imported files.\r\n * @type {Array.}\r\n * @expose\r\n */\r\n this.files = {};\r\n\r\n /**\r\n * Import root override.\r\n * @type {?string}\r\n * @expose\r\n */\r\n this.importRoot = null;\r\n\r\n /**\r\n * Options.\r\n * @type {!Object.}\r\n * @expose\r\n */\r\n this.options = options || {};\r\n };\r\n\r\n /**\r\n * @alias ProtoBuf.Builder.prototype\r\n * @inner\r\n */\r\n var BuilderPrototype = Builder.prototype;\r\n\r\n // ----- Definition tests -----\r\n\r\n /**\r\n * Tests if a definition most likely describes a message.\r\n * @param {!Object} def\r\n * @returns {boolean}\r\n * @expose\r\n */\r\n Builder.isMessage = function(def) {\r\n // Messages require a string name\r\n if (typeof def[\"name\"] !== 'string')\r\n return false;\r\n // Messages do not contain values (enum) or rpc methods (service)\r\n if (typeof def[\"values\"] !== 'undefined' || typeof def[\"rpc\"] !== 'undefined')\r\n return false;\r\n return true;\r\n };\r\n\r\n /**\r\n * Tests if a definition most likely describes a message field.\r\n * @param {!Object} def\r\n * @returns {boolean}\r\n * @expose\r\n */\r\n Builder.isMessageField = function(def) {\r\n // Message fields require a string rule, name and type and an id\r\n if (typeof def[\"rule\"] !== 'string' || typeof def[\"name\"] !== 'string' || typeof def[\"type\"] !== 'string' || typeof def[\"id\"] === 'undefined')\r\n return false;\r\n return true;\r\n };\r\n\r\n /**\r\n * Tests if a definition most likely describes an enum.\r\n * @param {!Object} def\r\n * @returns {boolean}\r\n * @expose\r\n */\r\n Builder.isEnum = function(def) {\r\n // Enums require a string name\r\n if (typeof def[\"name\"] !== 'string')\r\n return false;\r\n // Enums require at least one value\r\n if (typeof def[\"values\"] === 'undefined' || !Array.isArray(def[\"values\"]) || def[\"values\"].length === 0)\r\n return false;\r\n return true;\r\n };\r\n\r\n /**\r\n * Tests if a definition most likely describes a service.\r\n * @param {!Object} def\r\n * @returns {boolean}\r\n * @expose\r\n */\r\n Builder.isService = function(def) {\r\n // Services require a string name and an rpc object\r\n if (typeof def[\"name\"] !== 'string' || typeof def[\"rpc\"] !== 'object' || !def[\"rpc\"])\r\n return false;\r\n return true;\r\n };\r\n\r\n /**\r\n * Tests if a definition most likely describes an extended message\r\n * @param {!Object} def\r\n * @returns {boolean}\r\n * @expose\r\n */\r\n Builder.isExtend = function(def) {\r\n // Extends rquire a string ref\r\n if (typeof def[\"ref\"] !== 'string')\r\n return false;\r\n return true;\r\n };\r\n\r\n // ----- Building -----\r\n\r\n /**\r\n * Resets the pointer to the root namespace.\r\n * @returns {!ProtoBuf.Builder} this\r\n * @expose\r\n */\r\n BuilderPrototype.reset = function() {\r\n this.ptr = this.ns;\r\n return this;\r\n };\r\n\r\n /**\r\n * Defines a namespace on top of the current pointer position and places the pointer on it.\r\n * @param {string} namespace\r\n * @return {!ProtoBuf.Builder} this\r\n * @expose\r\n */\r\n BuilderPrototype.define = function(namespace) {\r\n if (typeof namespace !== 'string' || !Lang.TYPEREF.test(namespace))\r\n throw Error(\"illegal namespace: \"+namespace);\r\n namespace.split(\".\").forEach(function(part) {\r\n var ns = this.ptr.getChild(part);\r\n if (ns === null) // Keep existing\r\n this.ptr.addChild(ns = new Reflect.Namespace(this, this.ptr, part));\r\n this.ptr = ns;\r\n }, this);\r\n return this;\r\n };\r\n\r\n /**\r\n * Creates the specified definitions at the current pointer position.\r\n * @param {!Array.} defs Messages, enums or services to create\r\n * @returns {!ProtoBuf.Builder} this\r\n * @throws {Error} If a message definition is invalid\r\n * @expose\r\n */\r\n BuilderPrototype.create = function(defs) {\r\n if (!defs)\r\n return this; // Nothing to create\r\n if (!Array.isArray(defs))\r\n defs = [defs];\r\n else {\r\n if (defs.length === 0)\r\n return this;\r\n defs = defs.slice();\r\n }\r\n\r\n // It's quite hard to keep track of scopes and memory here, so let's do this iteratively.\r\n var stack = [defs];\r\n while (stack.length > 0) {\r\n defs = stack.pop();\r\n\r\n if (!Array.isArray(defs)) // Stack always contains entire namespaces\r\n throw Error(\"not a valid namespace: \"+JSON.stringify(defs));\r\n\r\n while (defs.length > 0) {\r\n var def = defs.shift(); // Namespaces always contain an array of messages, enums and services\r\n\r\n if (Builder.isMessage(def)) {\r\n var obj = new Reflect.Message(this, this.ptr, def[\"name\"], def[\"options\"], def[\"isGroup\"], def[\"syntax\"]);\r\n\r\n // Create OneOfs\r\n var oneofs = {};\r\n if (def[\"oneofs\"])\r\n Object.keys(def[\"oneofs\"]).forEach(function(name) {\r\n obj.addChild(oneofs[name] = new Reflect.Message.OneOf(this, obj, name));\r\n }, this);\r\n\r\n // Create fields\r\n if (def[\"fields\"])\r\n def[\"fields\"].forEach(function(fld) {\r\n if (obj.getChild(fld[\"id\"]|0) !== null)\r\n throw Error(\"duplicate or invalid field id in \"+obj.name+\": \"+fld['id']);\r\n if (fld[\"options\"] && typeof fld[\"options\"] !== 'object')\r\n throw Error(\"illegal field options in \"+obj.name+\"#\"+fld[\"name\"]);\r\n var oneof = null;\r\n if (typeof fld[\"oneof\"] === 'string' && !(oneof = oneofs[fld[\"oneof\"]]))\r\n throw Error(\"illegal oneof in \"+obj.name+\"#\"+fld[\"name\"]+\": \"+fld[\"oneof\"]);\r\n fld = new Reflect.Message.Field(this, obj, fld[\"rule\"], fld[\"keytype\"], fld[\"type\"], fld[\"name\"], fld[\"id\"], fld[\"options\"], oneof, def[\"syntax\"]);\r\n if (oneof)\r\n oneof.fields.push(fld);\r\n obj.addChild(fld);\r\n }, this);\r\n\r\n // Push children to stack\r\n var subObj = [];\r\n if (def[\"enums\"])\r\n def[\"enums\"].forEach(function(enm) {\r\n subObj.push(enm);\r\n });\r\n if (def[\"messages\"])\r\n def[\"messages\"].forEach(function(msg) {\r\n subObj.push(msg);\r\n });\r\n if (def[\"services\"])\r\n def[\"services\"].forEach(function(svc) {\r\n subObj.push(svc);\r\n });\r\n\r\n // Set extension ranges\r\n if (def[\"extensions\"]) {\r\n if (typeof def[\"extensions\"][0] === 'number') // pre 5.0.1\r\n obj.extensions = [ def[\"extensions\"] ];\r\n else\r\n obj.extensions = def[\"extensions\"];\r\n }\r\n\r\n // Create on top of current namespace\r\n this.ptr.addChild(obj);\r\n if (subObj.length > 0) {\r\n stack.push(defs); // Push the current level back\r\n defs = subObj; // Continue processing sub level\r\n subObj = null;\r\n this.ptr = obj; // And move the pointer to this namespace\r\n obj = null;\r\n continue;\r\n }\r\n subObj = null;\r\n\r\n } else if (Builder.isEnum(def)) {\r\n\r\n obj = new Reflect.Enum(this, this.ptr, def[\"name\"], def[\"options\"], def[\"syntax\"]);\r\n def[\"values\"].forEach(function(val) {\r\n obj.addChild(new Reflect.Enum.Value(this, obj, val[\"name\"], val[\"id\"]));\r\n }, this);\r\n this.ptr.addChild(obj);\r\n\r\n } else if (Builder.isService(def)) {\r\n\r\n obj = new Reflect.Service(this, this.ptr, def[\"name\"], def[\"options\"]);\r\n Object.keys(def[\"rpc\"]).forEach(function(name) {\r\n var mtd = def[\"rpc\"][name];\r\n obj.addChild(new Reflect.Service.RPCMethod(this, obj, name, mtd[\"request\"], mtd[\"response\"], !!mtd[\"request_stream\"], !!mtd[\"response_stream\"], mtd[\"options\"]));\r\n }, this);\r\n this.ptr.addChild(obj);\r\n\r\n } else if (Builder.isExtend(def)) {\r\n\r\n obj = this.ptr.resolve(def[\"ref\"], true);\r\n if (obj) {\r\n def[\"fields\"].forEach(function(fld) {\r\n if (obj.getChild(fld['id']|0) !== null)\r\n throw Error(\"duplicate extended field id in \"+obj.name+\": \"+fld['id']);\r\n // Check if field id is allowed to be extended\r\n if (obj.extensions) {\r\n var valid = false;\r\n obj.extensions.forEach(function(range) {\r\n if (fld[\"id\"] >= range[0] && fld[\"id\"] <= range[1])\r\n valid = true;\r\n });\r\n if (!valid)\r\n throw Error(\"illegal extended field id in \"+obj.name+\": \"+fld['id']+\" (not within valid ranges)\");\r\n }\r\n // Convert extension field names to camel case notation if the override is set\r\n var name = fld[\"name\"];\r\n if (this.options['convertFieldsToCamelCase'])\r\n name = ProtoBuf.Util.toCamelCase(name);\r\n // see #161: Extensions use their fully qualified name as their runtime key and...\r\n var field = new Reflect.Message.ExtensionField(this, obj, fld[\"rule\"], fld[\"type\"], this.ptr.fqn()+'.'+name, fld[\"id\"], fld[\"options\"]);\r\n // ...are added on top of the current namespace as an extension which is used for\r\n // resolving their type later on (the extension always keeps the original name to\r\n // prevent naming collisions)\r\n var ext = new Reflect.Extension(this, this.ptr, fld[\"name\"], field);\r\n field.extension = ext;\r\n this.ptr.addChild(ext);\r\n obj.addChild(field);\r\n }, this);\r\n\r\n } else if (!/\\.?google\\.protobuf\\./.test(def[\"ref\"])) // Silently skip internal extensions\r\n throw Error(\"extended message \"+def[\"ref\"]+\" is not defined\");\r\n\r\n } else\r\n throw Error(\"not a valid definition: \"+JSON.stringify(def));\r\n\r\n def = null;\r\n obj = null;\r\n }\r\n // Break goes here\r\n defs = null;\r\n this.ptr = this.ptr.parent; // Namespace done, continue at parent\r\n }\r\n this.resolved = false; // Require re-resolve\r\n this.result = null; // Require re-build\r\n return this;\r\n };\r\n\r\n /**\r\n * Propagates syntax to all children.\r\n * @param {!Object} parent\r\n * @inner\r\n */\r\n function propagateSyntax(parent) {\r\n if (parent['messages']) {\r\n parent['messages'].forEach(function(child) {\r\n child[\"syntax\"] = parent[\"syntax\"];\r\n propagateSyntax(child);\r\n });\r\n }\r\n if (parent['enums']) {\r\n parent['enums'].forEach(function(child) {\r\n child[\"syntax\"] = parent[\"syntax\"];\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Imports another definition into this builder.\r\n * @param {Object.} json Parsed import\r\n * @param {(string|{root: string, file: string})=} filename Imported file name\r\n * @returns {!ProtoBuf.Builder} this\r\n * @throws {Error} If the definition or file cannot be imported\r\n * @expose\r\n */\r\n BuilderPrototype[\"import\"] = function(json, filename) {\r\n var delim = '/';\r\n\r\n // Make sure to skip duplicate imports\r\n\r\n if (typeof filename === 'string') {\r\n\r\n if (ProtoBuf.Util.IS_NODE)\r\n filename = require(\"path\")['resolve'](filename);\r\n if (this.files[filename] === true)\r\n return this.reset();\r\n this.files[filename] = true;\r\n\r\n } else if (typeof filename === 'object') { // Object with root, file.\r\n\r\n var root = filename.root;\r\n if (ProtoBuf.Util.IS_NODE)\r\n root = require(\"path\")['resolve'](root);\r\n if (root.indexOf(\"\\\\\") >= 0 || filename.file.indexOf(\"\\\\\") >= 0)\r\n delim = '\\\\';\r\n var fname;\r\n if (ProtoBuf.Util.IS_NODE)\r\n fname = require(\"path\")['join'](root, filename.file);\r\n else\r\n fname = root + delim + filename.file;\r\n if (this.files[fname] === true)\r\n return this.reset();\r\n this.files[fname] = true;\r\n }\r\n\r\n // Import imports\r\n\r\n if (json['imports'] && json['imports'].length > 0) {\r\n var importRoot,\r\n resetRoot = false;\r\n\r\n if (typeof filename === 'object') { // If an import root is specified, override\r\n\r\n this.importRoot = filename[\"root\"]; resetRoot = true; // ... and reset afterwards\r\n importRoot = this.importRoot;\r\n filename = filename[\"file\"];\r\n if (importRoot.indexOf(\"\\\\\") >= 0 || filename.indexOf(\"\\\\\") >= 0)\r\n delim = '\\\\';\r\n\r\n } else if (typeof filename === 'string') {\r\n\r\n if (this.importRoot) // If import root is overridden, use it\r\n importRoot = this.importRoot;\r\n else { // Otherwise compute from filename\r\n if (filename.indexOf(\"/\") >= 0) { // Unix\r\n importRoot = filename.replace(/\\/[^\\/]*$/, \"\");\r\n if (/* /file.proto */ importRoot === \"\")\r\n importRoot = \"/\";\r\n } else if (filename.indexOf(\"\\\\\") >= 0) { // Windows\r\n importRoot = filename.replace(/\\\\[^\\\\]*$/, \"\");\r\n delim = '\\\\';\r\n } else\r\n importRoot = \".\";\r\n }\r\n\r\n } else\r\n importRoot = null;\r\n\r\n for (var i=0; i)=} path Specifies what to return. If omitted, the entire namespace will be returned.\r\n * @returns {!ProtoBuf.Builder.Message|!Object.}\r\n * @throws {Error} If a type could not be resolved\r\n * @expose\r\n */\r\n BuilderPrototype.build = function(path) {\r\n this.reset();\r\n if (!this.resolved)\r\n this.resolveAll(),\r\n this.resolved = true,\r\n this.result = null; // Require re-build\r\n if (this.result === null) // (Re-)Build\r\n this.result = this.ns.build();\r\n if (!path)\r\n return this.result;\r\n var part = typeof path === 'string' ? path.split(\".\") : path,\r\n ptr = this.result; // Build namespace pointer (no hasChild etc.)\r\n for (var i=0; i=} contents Initial contents\r\n * @constructor\r\n */\r\n var Map = function(field, contents) {\r\n if (!field.map)\r\n throw Error(\"field is not a map\");\r\n\r\n /**\r\n * The field corresponding to this map.\r\n * @type {!ProtoBuf.Reflect.Field}\r\n */\r\n this.field = field;\r\n\r\n /**\r\n * Element instance corresponding to key type.\r\n * @type {!ProtoBuf.Reflect.Element}\r\n */\r\n this.keyElem = new Reflect.Element(field.keyType, null, true, field.syntax);\r\n\r\n /**\r\n * Element instance corresponding to value type.\r\n * @type {!ProtoBuf.Reflect.Element}\r\n */\r\n this.valueElem = new Reflect.Element(field.type, field.resolvedType, false, field.syntax);\r\n\r\n /**\r\n * Internal map: stores mapping of (string form of key) -> (key, value)\r\n * pair.\r\n *\r\n * We provide map semantics for arbitrary key types, but we build on top\r\n * of an Object, which has only string keys. In order to avoid the need\r\n * to convert a string key back to its native type in many situations,\r\n * we store the native key value alongside the value. Thus, we only need\r\n * a one-way mapping from a key type to its string form that guarantees\r\n * uniqueness and equality (i.e., str(K1) === str(K2) if and only if K1\r\n * === K2).\r\n *\r\n * @type {!Object}\r\n */\r\n this.map = {};\r\n\r\n /**\r\n * Returns the number of elements in the map.\r\n */\r\n Object.defineProperty(this, \"size\", {\r\n get: function() { return Object.keys(this.map).length; }\r\n });\r\n\r\n // Fill initial contents from a raw object.\r\n if (contents) {\r\n var keys = Object.keys(contents);\r\n for (var i = 0; i < keys.length; i++) {\r\n var key = this.keyElem.valueFromString(keys[i]);\r\n var val = this.valueElem.verifyValue(contents[keys[i]]);\r\n this.map[this.keyElem.valueToString(key)] =\r\n { key: key, value: val };\r\n }\r\n }\r\n };\r\n\r\n var MapPrototype = Map.prototype;\r\n\r\n /**\r\n * Helper: return an iterator over an array.\r\n * @param {!Array<*>} arr the array\r\n * @returns {!Object} an iterator\r\n * @inner\r\n */\r\n function arrayIterator(arr) {\r\n var idx = 0;\r\n return {\r\n next: function() {\r\n if (idx < arr.length)\r\n return { done: false, value: arr[idx++] };\r\n return { done: true };\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clears the map.\r\n */\r\n MapPrototype.clear = function() {\r\n this.map = {};\r\n };\r\n\r\n /**\r\n * Deletes a particular key from the map.\r\n * @returns {boolean} Whether any entry with this key was deleted.\r\n */\r\n MapPrototype[\"delete\"] = function(key) {\r\n var keyValue = this.keyElem.valueToString(this.keyElem.verifyValue(key));\r\n var hadKey = keyValue in this.map;\r\n delete this.map[keyValue];\r\n return hadKey;\r\n };\r\n\r\n /**\r\n * Returns an iterator over [key, value] pairs in the map.\r\n * @returns {Object} The iterator\r\n */\r\n MapPrototype.entries = function() {\r\n var entries = [];\r\n var strKeys = Object.keys(this.map);\r\n for (var i = 0, entry; i < strKeys.length; i++)\r\n entries.push([(entry=this.map[strKeys[i]]).key, entry.value]);\r\n return arrayIterator(entries);\r\n };\r\n\r\n /**\r\n * Returns an iterator over keys in the map.\r\n * @returns {Object} The iterator\r\n */\r\n MapPrototype.keys = function() {\r\n var keys = [];\r\n var strKeys = Object.keys(this.map);\r\n for (var i = 0; i < strKeys.length; i++)\r\n keys.push(this.map[strKeys[i]].key);\r\n return arrayIterator(keys);\r\n };\r\n\r\n /**\r\n * Returns an iterator over values in the map.\r\n * @returns {!Object} The iterator\r\n */\r\n MapPrototype.values = function() {\r\n var values = [];\r\n var strKeys = Object.keys(this.map);\r\n for (var i = 0; i < strKeys.length; i++)\r\n values.push(this.map[strKeys[i]].value);\r\n return arrayIterator(values);\r\n };\r\n\r\n /**\r\n * Iterates over entries in the map, calling a function on each.\r\n * @param {function(this:*, *, *, *)} cb The callback to invoke with value, key, and map arguments.\r\n * @param {Object=} thisArg The `this` value for the callback\r\n */\r\n MapPrototype.forEach = function(cb, thisArg) {\r\n var strKeys = Object.keys(this.map);\r\n for (var i = 0, entry; i < strKeys.length; i++)\r\n cb.call(thisArg, (entry=this.map[strKeys[i]]).value, entry.key, this);\r\n };\r\n\r\n /**\r\n * Sets a key in the map to the given value.\r\n * @param {*} key The key\r\n * @param {*} value The value\r\n * @returns {!ProtoBuf.Map} The map instance\r\n */\r\n MapPrototype.set = function(key, value) {\r\n var keyValue = this.keyElem.verifyValue(key);\r\n var valValue = this.valueElem.verifyValue(value);\r\n this.map[this.keyElem.valueToString(keyValue)] =\r\n { key: keyValue, value: valValue };\r\n return this;\r\n };\r\n\r\n /**\r\n * Gets the value corresponding to a key in the map.\r\n * @param {*} key The key\r\n * @returns {*|undefined} The value, or `undefined` if key not present\r\n */\r\n MapPrototype.get = function(key) {\r\n var keyValue = this.keyElem.valueToString(this.keyElem.verifyValue(key));\r\n if (!(keyValue in this.map))\r\n return undefined;\r\n return this.map[keyValue].value;\r\n };\r\n\r\n /**\r\n * Determines whether the given key is present in the map.\r\n * @param {*} key The key\r\n * @returns {boolean} `true` if the key is present\r\n */\r\n MapPrototype.has = function(key) {\r\n var keyValue = this.keyElem.valueToString(this.keyElem.verifyValue(key));\r\n return (keyValue in this.map);\r\n };\r\n\r\n return Map;\r\n })(ProtoBuf, ProtoBuf.Reflect);\r\n\r\n\r\n /**\r\n * Loads a .proto string and returns the Builder.\r\n * @param {string} proto .proto file contents\r\n * @param {(ProtoBuf.Builder|string|{root: string, file: string})=} builder Builder to append to. Will create a new one if omitted.\r\n * @param {(string|{root: string, file: string})=} filename The corresponding file name if known. Must be specified for imports.\r\n * @return {ProtoBuf.Builder} Builder to create new messages\r\n * @throws {Error} If the definition cannot be parsed or built\r\n * @expose\r\n */\r\n ProtoBuf.loadProto = function(proto, builder, filename) {\r\n if (typeof builder === 'string' || (builder && typeof builder[\"file\"] === 'string' && typeof builder[\"root\"] === 'string'))\r\n filename = builder,\r\n builder = undefined;\r\n return ProtoBuf.loadJson(ProtoBuf.DotProto.Parser.parse(proto), builder, filename);\r\n };\r\n\r\n /**\r\n * Loads a .proto string and returns the Builder. This is an alias of {@link ProtoBuf.loadProto}.\r\n * @function\r\n * @param {string} proto .proto file contents\r\n * @param {(ProtoBuf.Builder|string)=} builder Builder to append to. Will create a new one if omitted.\r\n * @param {(string|{root: string, file: string})=} filename The corresponding file name if known. Must be specified for imports.\r\n * @return {ProtoBuf.Builder} Builder to create new messages\r\n * @throws {Error} If the definition cannot be parsed or built\r\n * @expose\r\n */\r\n ProtoBuf.protoFromString = ProtoBuf.loadProto; // Legacy\r\n\r\n /**\r\n * Loads a .proto file and returns the Builder.\r\n * @param {string|{root: string, file: string}} filename Path to proto file or an object specifying 'file' with\r\n * an overridden 'root' path for all imported files.\r\n * @param {function(?Error, !ProtoBuf.Builder=)=} callback Callback that will receive `null` as the first and\r\n * the Builder as its second argument on success, otherwise the error as its first argument. If omitted, the\r\n * file will be read synchronously and this function will return the Builder.\r\n * @param {ProtoBuf.Builder=} builder Builder to append to. Will create a new one if omitted.\r\n * @return {?ProtoBuf.Builder|undefined} The Builder if synchronous (no callback specified, will be NULL if the\r\n * request has failed), else undefined\r\n * @expose\r\n */\r\n ProtoBuf.loadProtoFile = function(filename, callback, builder) {\r\n if (callback && typeof callback === 'object')\r\n builder = callback,\r\n callback = null;\r\n else if (!callback || typeof callback !== 'function')\r\n callback = null;\r\n if (callback)\r\n return ProtoBuf.Util.fetch(typeof filename === 'string' ? filename : filename[\"root\"]+\"/\"+filename[\"file\"], function(contents) {\r\n if (contents === null) {\r\n callback(Error(\"Failed to fetch file\"));\r\n return;\r\n }\r\n try {\r\n callback(null, ProtoBuf.loadProto(contents, builder, filename));\r\n } catch (e) {\r\n callback(e);\r\n }\r\n });\r\n var contents = ProtoBuf.Util.fetch(typeof filename === 'object' ? filename[\"root\"]+\"/\"+filename[\"file\"] : filename);\r\n return contents === null ? null : ProtoBuf.loadProto(contents, builder, filename);\r\n };\r\n\r\n /**\r\n * Loads a .proto file and returns the Builder. This is an alias of {@link ProtoBuf.loadProtoFile}.\r\n * @function\r\n * @param {string|{root: string, file: string}} filename Path to proto file or an object specifying 'file' with\r\n * an overridden 'root' path for all imported files.\r\n * @param {function(?Error, !ProtoBuf.Builder=)=} callback Callback that will receive `null` as the first and\r\n * the Builder as its second argument on success, otherwise the error as its first argument. If omitted, the\r\n * file will be read synchronously and this function will return the Builder.\r\n * @param {ProtoBuf.Builder=} builder Builder to append to. Will create a new one if omitted.\r\n * @return {!ProtoBuf.Builder|undefined} The Builder if synchronous (no callback specified, will be NULL if the\r\n * request has failed), else undefined\r\n * @expose\r\n */\r\n ProtoBuf.protoFromFile = ProtoBuf.loadProtoFile; // Legacy\r\n\r\n\r\n /**\r\n * Constructs a new empty Builder.\r\n * @param {Object.=} options Builder options, defaults to global options set on ProtoBuf\r\n * @return {!ProtoBuf.Builder} Builder\r\n * @expose\r\n */\r\n ProtoBuf.newBuilder = function(options) {\r\n options = options || {};\r\n if (typeof options['convertFieldsToCamelCase'] === 'undefined')\r\n options['convertFieldsToCamelCase'] = ProtoBuf.convertFieldsToCamelCase;\r\n if (typeof options['populateAccessors'] === 'undefined')\r\n options['populateAccessors'] = ProtoBuf.populateAccessors;\r\n return new ProtoBuf.Builder(options);\r\n };\r\n\r\n /**\r\n * Loads a .json definition and returns the Builder.\r\n * @param {!*|string} json JSON definition\r\n * @param {(ProtoBuf.Builder|string|{root: string, file: string})=} builder Builder to append to. Will create a new one if omitted.\r\n * @param {(string|{root: string, file: string})=} filename The corresponding file name if known. Must be specified for imports.\r\n * @return {ProtoBuf.Builder} Builder to create new messages\r\n * @throws {Error} If the definition cannot be parsed or built\r\n * @expose\r\n */\r\n ProtoBuf.loadJson = function(json, builder, filename) {\r\n if (typeof builder === 'string' || (builder && typeof builder[\"file\"] === 'string' && typeof builder[\"root\"] === 'string'))\r\n filename = builder,\r\n builder = null;\r\n if (!builder || typeof builder !== 'object')\r\n builder = ProtoBuf.newBuilder();\r\n if (typeof json === 'string')\r\n json = JSON.parse(json);\r\n builder[\"import\"](json, filename);\r\n builder.resolveAll();\r\n return builder;\r\n };\r\n\r\n /**\r\n * Loads a .json file and returns the Builder.\r\n * @param {string|!{root: string, file: string}} filename Path to json file or an object specifying 'file' with\r\n * an overridden 'root' path for all imported files.\r\n * @param {function(?Error, !ProtoBuf.Builder=)=} callback Callback that will receive `null` as the first and\r\n * the Builder as its second argument on success, otherwise the error as its first argument. If omitted, the\r\n * file will be read synchronously and this function will return the Builder.\r\n * @param {ProtoBuf.Builder=} builder Builder to append to. Will create a new one if omitted.\r\n * @return {?ProtoBuf.Builder|undefined} The Builder if synchronous (no callback specified, will be NULL if the\r\n * request has failed), else undefined\r\n * @expose\r\n */\r\n ProtoBuf.loadJsonFile = function(filename, callback, builder) {\r\n if (callback && typeof callback === 'object')\r\n builder = callback,\r\n callback = null;\r\n else if (!callback || typeof callback !== 'function')\r\n callback = null;\r\n if (callback)\r\n return ProtoBuf.Util.fetch(typeof filename === 'string' ? filename : filename[\"root\"]+\"/\"+filename[\"file\"], function(contents) {\r\n if (contents === null) {\r\n callback(Error(\"Failed to fetch file\"));\r\n return;\r\n }\r\n try {\r\n callback(null, ProtoBuf.loadJson(JSON.parse(contents), builder, filename));\r\n } catch (e) {\r\n callback(e);\r\n }\r\n });\r\n var contents = ProtoBuf.Util.fetch(typeof filename === 'object' ? filename[\"root\"]+\"/\"+filename[\"file\"] : filename);\r\n return contents === null ? null : ProtoBuf.loadJson(JSON.parse(contents), builder, filename);\r\n };\r\n\r\n return ProtoBuf;\r\n});\r\n"]} diff --git a/src/libraries/proto/js/examples/encoding_message_container.js b/src/libraries/proto/js/examples/encoding_message_container.js index 23d0726986..5b041556d6 100644 --- a/src/libraries/proto/js/examples/encoding_message_container.js +++ b/src/libraries/proto/js/examples/encoding_message_container.js @@ -12,4 +12,4 @@ var encodedMessageContainer = machinetalkProtobuf.message.Container.encode(messa var encodedBuffer = encodedMessageContainer.buffer.slice(encodedMessageContainer.offset, encodedMessageContainer.limit); // Print the buffer. -console.log(encodedBuffer); \ No newline at end of file +console.log(encodedBuffer); diff --git a/src/libraries/proto/src/machinetalk/protobuf/emcclass.proto b/src/libraries/proto/src/machinetalk/protobuf/emcclass.proto index a2d12fe984..fbb562920b 100644 --- a/src/libraries/proto/src/machinetalk/protobuf/emcclass.proto +++ b/src/libraries/proto/src/machinetalk/protobuf/emcclass.proto @@ -51,4 +51,4 @@ message EmcPose { // required double u = 50; // required double v = 60; // required double w = 70; -// }; \ No newline at end of file +// }; diff --git a/src/libraries/proto/src/machinetalk/protobuf/object.proto b/src/libraries/proto/src/machinetalk/protobuf/object.proto index faab29f83f..c083a904ee 100644 --- a/src/libraries/proto/src/machinetalk/protobuf/object.proto +++ b/src/libraries/proto/src/machinetalk/protobuf/object.proto @@ -282,4 +282,3 @@ message Inst { repeated Param param = 17; repeated Function funct = 19; } - diff --git a/src/libraries/proto/src/machinetalk/protobuf/types.proto b/src/libraries/proto/src/machinetalk/protobuf/types.proto index 48cfc775e1..7a7f5393e6 100644 --- a/src/libraries/proto/src/machinetalk/protobuf/types.proto +++ b/src/libraries/proto/src/machinetalk/protobuf/types.proto @@ -332,7 +332,7 @@ enum ContainerType { // introspection request MT_HALRCOMMAND_DESCRIBE = 276; - // full HAL description + // full HAL description MT_HALRCOMMAND_DESCRIPTION = 277; // rcomp tracking diff --git a/src/libraries/pru_app_loader/include/pru_app_loader/pruss_intc_mapping.h b/src/libraries/pru_app_loader/include/pru_app_loader/pruss_intc_mapping.h old mode 100755 new mode 100644 index ad04658f63..0c25bf39f9 --- a/src/libraries/pru_app_loader/include/pru_app_loader/pruss_intc_mapping.h +++ b/src/libraries/pru_app_loader/include/pru_app_loader/pruss_intc_mapping.h @@ -101,4 +101,3 @@ { {CHANNEL0,PRU0}, {CHANNEL1, PRU1}, {CHANNEL2, PRU_EVTOUT0}, {CHANNEL3, PRU_EVTOUT1}, {-1,-1} }, \ (PRU0_HOSTEN_MASK | PRU1_HOSTEN_MASK | PRU_EVTOUT0_HOSTEN_MASK | PRU_EVTOUT1_HOSTEN_MASK) /*Enable PRU0, PRU1, PRU_EVTOUT0 */ \ } \ - diff --git a/src/libraries/pru_defines/include/pru_defines/pru.h b/src/libraries/pru_defines/include/pru_defines/pru.h old mode 100755 new mode 100644 index 5645339486..7bd465b010 --- a/src/libraries/pru_defines/include/pru_defines/pru.h +++ b/src/libraries/pru_defines/include/pru_defines/pru.h @@ -347,4 +347,3 @@ #endif // _pru_H_ - diff --git a/src/libraries/pru_defines/include/pru_defines/pru_macros.hp b/src/libraries/pru_defines/include/pru_defines/pru_macros.hp index 30bd93c8d6..0018fa2e9c 100644 --- a/src/libraries/pru_defines/include/pru_defines/pru_macros.hp +++ b/src/libraries/pru_defines/include/pru_defines/pru_macros.hp @@ -88,4 +88,4 @@ .assign Global, r2, *, global -#endif // _pru_macros_HP_ \ No newline at end of file +#endif // _pru_macros_HP_ diff --git a/src/libraries/pyhalmodule/src/pyproject.toml.in b/src/libraries/pyhalmodule/src/pyproject.toml.in index 4773730dae..54e69360a9 100644 --- a/src/libraries/pyhalmodule/src/pyproject.toml.in +++ b/src/libraries/pyhalmodule/src/pyproject.toml.in @@ -54,4 +54,4 @@ build = "build.py" [build-system] requires = ["pdm-pep517", "setuptools", "cmake", "cmake_build_extension", "ninja"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/libraries/raspi_cpuinfo/src/cpuinfo.c b/src/libraries/raspi_cpuinfo/src/cpuinfo.c index c88ca8d975..6778e5744e 100644 --- a/src/libraries/raspi_cpuinfo/src/cpuinfo.c +++ b/src/libraries/raspi_cpuinfo/src/cpuinfo.c @@ -55,10 +55,10 @@ char *get_cpuinfo_revision(char *revision) int get_rpi_revision(void) { char revision[1024] = {'\0'}; - + if (get_cpuinfo_revision(revision) == NULL) return -1; - + if ((strcmp(revision, "0002") == 0) || (strcmp(revision, "1000002") == 0 ) || (strcmp(revision, "0003") == 0) || diff --git a/src/libraries/rtapi_compat/README.asciidoc b/src/libraries/rtapi_compat/README.asciidoc index 37ca3d24a6..7377cab804 100644 --- a/src/libraries/rtapi_compat/README.asciidoc +++ b/src/libraries/rtapi_compat/README.asciidoc @@ -1,7 +1,7 @@ = RTAPI compat -:author: Jakub Fišer -:description: RTAPI_compat sourcetree README -:sectanchors: +:author: Jakub Fišer +:description: RTAPI_compat sourcetree README +:sectanchors: :url-repo: https://machinekit.io Temporary solution for sharing single sourcefile between multiple `CMAKE` targets. Should go away once executables can be linked against **runtime** (`libulapi.so`) without its symbols infusing the managed linker namespace (where **runtime_module** [`rtapi_module.so`] is loaded). @@ -15,4 +15,4 @@ Objects created in `CMAKE` Machinekit-HAL's namespace used for building. * Used for adding sourcefiles to multiple other targets (executables) with the same compile options * Compile once, use multiple times -**This is ungly and hopefully temporary solution. In perfect world it would not be needed. But we don't live in perfect world.** \ No newline at end of file +**This is ungly and hopefully temporary solution. In perfect world it would not be needed. But we don't live in perfect world.** diff --git a/src/libraries/rtapi_pci/README.asciidoc b/src/libraries/rtapi_pci/README.asciidoc index 7e56cbd51c..ea22698401 100644 --- a/src/libraries/rtapi_pci/README.asciidoc +++ b/src/libraries/rtapi_pci/README.asciidoc @@ -1,7 +1,7 @@ = RTAPI PCI -:author: Jakub Fišer -:description: RTAPI_pci sourcetree README -:sectanchors: +:author: Jakub Fišer +:description: RTAPI_pci sourcetree README +:sectanchors: :url-repo: https://machinekit.io Temporary solution to allow conditional inclusion of PCI related code for architectures supporting current implementation (all except ARM64). Should go away once the implementation can support PCI(e) on all supported platforms. @@ -17,4 +17,4 @@ Objects created in `CMAKE` Machinekit-HAL's namespace used for building. * Used for adding sourcefiles to multiple other targets (executables) with the same compile options * Compile once, use multiple times -**This is ungly and hopefully temporary solution. In perfect world it would not be needed. But we don't live in perfect world.** \ No newline at end of file +**This is ungly and hopefully temporary solution. In perfect world it would not be needed. But we don't live in perfect world.** diff --git a/src/libraries/rtapi_pci/src/rtapi_pci.c b/src/libraries/rtapi_pci/src/rtapi_pci.c index 64aeac7a35..d8ec8fc71c 100644 --- a/src/libraries/rtapi_pci/src/rtapi_pci.c +++ b/src/libraries/rtapi_pci/src/rtapi_pci.c @@ -741,4 +741,3 @@ EXPORT_SYMBOL(pci_disable_device); EXPORT_SYMBOL(pci_register_driver); EXPORT_SYMBOL(pci_unregister_driver); EXPORT_SYMBOL(pci_ioremap_bar); - diff --git a/src/libraries/rtapi_support/README.asciidoc b/src/libraries/rtapi_support/README.asciidoc index 01b5829d3f..32bbc30c4c 100644 --- a/src/libraries/rtapi_support/README.asciidoc +++ b/src/libraries/rtapi_support/README.asciidoc @@ -1,7 +1,7 @@ = RTAPI support -:author: Jakub Fišer -:description: RTAPI_support sourcetree README -:sectanchors: +:author: Jakub Fišer +:description: RTAPI_support sourcetree README +:sectanchors: :url-repo: https://machinekit.io Temporary solution for sharing single sourcefile between multiple `CMAKE` targets. Should go away once executables can be linked against **runtime** (`libulapi.so`) without its symbols infusing the managed linker namespace (where **runtime_module** [`rtapi_module.so`] is loaded). @@ -14,4 +14,4 @@ Objects created in `CMAKE` Machinekit-HAL's namespace used for building. * Fully abstract `CMAKE` object with no output representation * Used for adding sourcefiles to multiple other targets (executables) with the same compile options -**This is ungly and hopefully temporary solution. In perfect world it would not be needed. But we don't live in perfect world.** \ No newline at end of file +**This is ungly and hopefully temporary solution. In perfect world it would not be needed. But we don't live in perfect world.** diff --git a/src/libraries/runtime/README.asciidoc b/src/libraries/runtime/README.asciidoc index 84fe399711..b3219ca8f5 100644 --- a/src/libraries/runtime/README.asciidoc +++ b/src/libraries/runtime/README.asciidoc @@ -1,7 +1,7 @@ = Runtime :author: Jakub Fišer -:description: Runtime sourcetree README -:sectanchors: +:description: Runtime sourcetree README +:sectanchors: :url-repo: https://machinekit.io Runtime export the basic API for Machinekit-HAL function. It provides the lowest lewel set of symbols and has to be loaded first. diff --git a/src/libraries/runtime/include/runtime/ring.h b/src/libraries/runtime/include/runtime/ring.h index 1d8790480c..c0e076b2e4 100644 --- a/src/libraries/runtime/include/runtime/ring.h +++ b/src/libraries/runtime/include/runtime/ring.h @@ -39,7 +39,7 @@ * Portable Audio I/O Library Ring Buffer utility. * Author: Phil Burk, http://www.softsynth.com * License: -* PortAudio Portable Real-Time Audio Library +* PortAudio Portable Real-Time Audio Library * Copyright (c) 1999-2011 Ross Bencina and Phil Burk * Permission is hereby granted, free of charge, to any person obtaining a copy of this @@ -52,7 +52,7 @@ * 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. +* PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -596,8 +596,8 @@ static inline rrecsize_t _ring_shift_offset(const ringbuffer_t *ring, if (h->head == rtapi_load_u32(&t->tail)) return -1; - // ensure that previous reads (copies out of the ring buffer) are always completed - // before updating (writing) the read index. + // ensure that previous reads (copies out of the ring buffer) are always completed + // before updating (writing) the read index. // (write-after-read) => full barrier rtapi_smp_rmb(); diff --git a/src/libraries/runtime/include/runtime/rtapi_global.h b/src/libraries/runtime/include/runtime/rtapi_global.h index 4f1aa7f5e9..ee365a69b7 100644 --- a/src/libraries/runtime/include/runtime/rtapi_global.h +++ b/src/libraries/runtime/include/runtime/rtapi_global.h @@ -23,7 +23,7 @@ nowadays 'posix threads') session, or a an RT session as supported by the currently running kernel - Dynamic sizing values, e.g. the HAL shm segment size. These values + Dynamic sizing values, e.g. the HAL shm segment size. These values change from 'compiled in' to 'startup parameter'. Data which should be shared within a session, for instance, the @@ -38,7 +38,7 @@ instance. Other possible uses of global_data include, but are not limited to, - for instance instance management if one were to support multiple + for instance instance management if one were to support multiple HAL/RTAPI instances within a single machine. */ diff --git a/src/libraries/runtime/include/runtime/rtapi_shmkeys.h b/src/libraries/runtime/include/runtime/rtapi_shmkeys.h index 419a3d50d6..dc1b1eb20d 100644 --- a/src/libraries/runtime/include/runtime/rtapi_shmkeys.h +++ b/src/libraries/runtime/include/runtime/rtapi_shmkeys.h @@ -22,8 +22,8 @@ // the single place for shared memory keys // convention: allocate a new key such that its -// most significant byte is zero, which is used for -// instance management. +// most significant byte is zero, which is used for +// instance management. // the rtapi_shmem_new code actually ignores the MSB // and replaces it be the rtapi_instance variable, so we // dont have to do the big shm key rename right away; just @@ -39,7 +39,7 @@ #define DEFAULT_MOTION_SHMEM_KEY 0x00000064 // the global segment shm key -#define GLOBAL_KEY 0x00154711 // key for GLOBAL +#define GLOBAL_KEY 0x00154711 // key for GLOBAL // from scope_shm.h #define SCOPE_SHM_KEY 0x000CF406 @@ -55,7 +55,7 @@ #define RTAPI_KEY 0x00280A48 /* key used to open RTAPI shared memory */ // RTAPI rings -#define RTAPI_RING_SHM_KEY 0x00415000 +#define RTAPI_RING_SHM_KEY 0x00415000 // filename format in /dev/shm for POSIX shm_open() names: // 'hal-- diff --git a/src/libraries/runtime/src/machinekit.ini.in b/src/libraries/runtime/src/machinekit.ini.in index 99a8131443..4db2fb15d7 100644 --- a/src/libraries/runtime/src/machinekit.ini.in +++ b/src/libraries/runtime/src/machinekit.ini.in @@ -88,10 +88,3 @@ REMOTE=0 #defaults are: #ANNOUNCE_IPV4=1 #ANNOUNCE_IPV6=1 - - - - - - - diff --git a/src/libraries/runtime/src/rt-preempt.c b/src/libraries/runtime/src/rt-preempt.c index b059ad4326..0c1fd02506 100644 --- a/src/libraries/runtime/src/rt-preempt.c +++ b/src/libraries/runtime/src/rt-preempt.c @@ -122,9 +122,9 @@ int rt_preempt_module_init_hook(void) pm_qos_fd = open("/dev/cpu_dma_latency", O_RDWR); - if (pm_qos_fd < 0) - { - rtapi_print_msg(RTAPI_MSG_ERR, "RT PREEMPT: Could not open the Power Management Quality of Service interface file. Error: %s", strerror(errno)); + if (pm_qos_fd < 0) + { + rtapi_print_msg(RTAPI_MSG_ERR, "RT PREEMPT: Could not open the Power Management Quality of Service interface file. Error: %s", strerror(errno)); retval = -errno; } @@ -143,9 +143,9 @@ int rt_preempt_module_init_hook(void){ return posix_module_init_hook(); } #ifdef RTAPI void rt_preempt_module_exit_hook(void) { - if (pm_qos_fd < 0) - { - rtapi_print_msg(RTAPI_MSG_ERR, "RT PREEMPT: The Power Management Quality of Service interface file is not open!"); + if (pm_qos_fd < 0) + { + rtapi_print_msg(RTAPI_MSG_ERR, "RT PREEMPT: The Power Management Quality of Service interface file is not open!"); return; } diff --git a/src/libraries/runtime/src/ulapi.c b/src/libraries/runtime/src/ulapi.c index f71f5bae09..0a9fba092d 100644 --- a/src/libraries/runtime/src/ulapi.c +++ b/src/libraries/runtime/src/ulapi.c @@ -41,4 +41,3 @@ flavor_descriptor_t flavor_ulapi_descriptor = { .task_pll_get_reference_hook = NULL, .task_pll_set_correction_hook = NULL }; - diff --git a/src/libraries/runtime/src/xenomai2.h b/src/libraries/runtime/src/xenomai2.h index 6a07b680b2..6e982f3d2f 100644 --- a/src/libraries/runtime/src/xenomai2.h +++ b/src/libraries/runtime/src/xenomai2.h @@ -66,4 +66,4 @@ typedef struct { // Check the stats struct size ASSERT_SIZE_WITHIN(xenomai2_stats_t, MAX_FLAVOR_THREADSTATUS_SIZE); -extern flavor_descriptor_t flavor_xenomai2_descriptor; \ No newline at end of file +extern flavor_descriptor_t flavor_xenomai2_descriptor; diff --git a/src/libraries/runtime/test/bitops/src/bitops.c b/src/libraries/runtime/test/bitops/src/bitops.c index d57d9019ea..567efe5d78 100644 --- a/src/libraries/runtime/test/bitops/src/bitops.c +++ b/src/libraries/runtime/test/bitops/src/bitops.c @@ -1,15 +1,15 @@ /* Copyright (C) 2012, 2013 Michael Haberler - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 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 * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA diff --git a/src/libraries/runtime/test/module_init/src/module_init.c b/src/libraries/runtime/test/module_init/src/module_init.c index 654360dd90..053dc843b5 100644 --- a/src/libraries/runtime/test/module_init/src/module_init.c +++ b/src/libraries/runtime/test/module_init/src/module_init.c @@ -1,15 +1,15 @@ /* Copyright (C) 2012, 2013 Michael Haberler - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 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 * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA diff --git a/src/libraries/runtime/test/rtapi_flavor/src/rtapi_flavor.c b/src/libraries/runtime/test/rtapi_flavor/src/rtapi_flavor.c index 515405b7b5..bfb65c9c6a 100644 --- a/src/libraries/runtime/test/rtapi_flavor/src/rtapi_flavor.c +++ b/src/libraries/runtime/test/rtapi_flavor/src/rtapi_flavor.c @@ -228,7 +228,7 @@ static void test_flavor_default_runner(flavor_default_test_data_t *td) if (td->getenv_ret && td->getenv_ret[0]) { // $FLAVOR is set in environment if (td->ret > 0 || td->exit == 101) - // Get flavor_descriptor for tests where $FLAVOR is valid + // Get flavor_descriptor for tests where $FLAVOR is valid flavor = flavor_byname(td->getenv_ret); if (td->ret > 0) { @@ -405,5 +405,5 @@ int main(void) cmocka_unit_test(test_flavor_install_success), }; - return cmocka_run_group_tests_name("rtapi_flavor tests", tests, NULL, NULL); + return cmocka_run_group_tests_name("rtapi_flavor tests", tests, NULL, NULL); } diff --git a/src/libraries/runtime_bootstrap/README.asciidoc b/src/libraries/runtime_bootstrap/README.asciidoc index 26e6e623d8..c27a9b772e 100644 --- a/src/libraries/runtime_bootstrap/README.asciidoc +++ b/src/libraries/runtime_bootstrap/README.asciidoc @@ -1,7 +1,7 @@ = Runtime :author: Jakub Fišer -:description: Runtime sourcetree README -:sectanchors: +:description: Runtime sourcetree README +:sectanchors: :url-repo: https://machinekit.io Runtime-bootstrap experts exports the core functionality for build workflow of Machinekit-HAL. To use during the main build and also in out-of-tree build of additional functionality (related libraries, executables and HAL modules). @@ -19,4 +19,4 @@ Objects created in `CMAKE` Machinekit-HAL's namespace used for building. == Notes -* Possibility to further split this package into `runtime_config` et all. \ No newline at end of file +* Possibility to further split this package into `runtime_config` et all. diff --git a/src/libraries/runtime_bootstrap/include/runtime/config.h.in b/src/libraries/runtime_bootstrap/include/runtime/config.h.in index 385760f2b5..99346ec387 100644 --- a/src/libraries/runtime_bootstrap/include/runtime/config.h.in +++ b/src/libraries/runtime_bootstrap/include/runtime/config.h.in @@ -71,4 +71,4 @@ extern const char *const machinekit_hal_bin_directory; # define _GNU_SOURCE #endif -#endif \ No newline at end of file +#endif diff --git a/src/libraries/runtime_bootstrap/include/runtime/git_config.h.in b/src/libraries/runtime_bootstrap/include/runtime/git_config.h.in index d5eeb0f37e..15ff946d79 100644 --- a/src/libraries/runtime_bootstrap/include/runtime/git_config.h.in +++ b/src/libraries/runtime_bootstrap/include/runtime/git_config.h.in @@ -44,4 +44,4 @@ #define GIT_DESCRIBE = "@GIT_DESCRIBE@" -#endif \ No newline at end of file +#endif diff --git a/src/libraries/runtime_math/README b/src/libraries/runtime_math/README index c5bff5e279..c95e70a1db 100644 --- a/src/libraries/runtime_math/README +++ b/src/libraries/runtime_math/README @@ -6,4 +6,4 @@ only with rtapi_math.h includes # -D_IEEE_LIBM \ # -D_ISOC99_SOURCE \ # -D_SVID_SOURCE \ -# -I$(BASEPWD) \ No newline at end of file +# -I$(BASEPWD) diff --git a/src/libraries/runtime_math/README.asciidoc b/src/libraries/runtime_math/README.asciidoc index db6c838645..d5248d3ef3 100644 --- a/src/libraries/runtime_math/README.asciidoc +++ b/src/libraries/runtime_math/README.asciidoc @@ -1,7 +1,7 @@ = Runtime math :author: Jakub Fišer -:description: Runtime_math sourcetree README -:sectanchors: +:description: Runtime_math sourcetree README +:sectanchors: :url-repo: https://machinekit.io Runtime_math is a library exporting set of mathematical functions. diff --git a/src/libraries/runtime_math/include/runtime/rtapi_byteorder.h b/src/libraries/runtime_math/include/runtime/rtapi_byteorder.h index 6183885673..b1e0250159 100644 --- a/src/libraries/runtime_math/include/runtime/rtapi_byteorder.h +++ b/src/libraries/runtime_math/include/runtime/rtapi_byteorder.h @@ -23,4 +23,4 @@ #define RTAPI_LITTLE_ENDIAN (__BYTE_ORDER == __LITTLE_ENDIAN) #define RTAPI_FLOAT_BIG_ENDIAN (__FLOAT_WORD_ORDER == __BIG_ENDIAN) -#endif \ No newline at end of file +#endif diff --git a/src/libraries/runtime_math/include/runtime/rtapi_math64.h b/src/libraries/runtime_math/include/runtime/rtapi_math64.h index 5165331893..b74893cb95 100644 --- a/src/libraries/runtime_math/include/runtime/rtapi_math64.h +++ b/src/libraries/runtime_math/include/runtime/rtapi_math64.h @@ -37,4 +37,4 @@ static inline __s64 rtapi_div_s64(__s64 dividend, __s32 divisor) { return dividend / divisor; } -#endif \ No newline at end of file +#endif diff --git a/src/libraries/runtime_math/src/e_acos.c b/src/libraries/runtime_math/src/e_acos.c index 1b2587cecb..a1772dd489 100644 --- a/src/libraries/runtime_math/src/e_acos.c +++ b/src/libraries/runtime_math/src/e_acos.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -15,14 +15,14 @@ static char rcsid[] = "$NetBSD: e_acos.c,v 1.9 1995/05/12 04:57:13 jtc Exp $"; #endif /* __ieee754_acos(x) - * Method : + * Method : * acos(x) = pi/2 - asin(x) * acos(-x) = pi/2 + asin(x) * For |x|<=0.5 * acos(x) = pi/2 - (x + x*x^2*R(x^2)) (see asin.c) * For x>0.5 * acos(x) = pi/2 - (pi/2 - 2asin(sqrt((1-x)/2))) - * = 2asin(sqrt((1-x)/2)) + * = 2asin(sqrt((1-x)/2)) * = 2s + 2s*z*R(z) ...z=(1-x)/2, s=sqrt(z) * = 2f + (2c + 2s*z*R(z)) * where f=hi part of s, and c = (z-f*f)/(s+f) is the correction term @@ -42,9 +42,9 @@ static char rcsid[] = "$NetBSD: e_acos.c,v 1.9 1995/05/12 04:57:13 jtc Exp $"; #include "mathP.h" #ifdef __STDC__ -static const double +static const double #else -static double +static double #endif one= 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */ pi = 3.14159265358979311600e+00, /* 0x400921FB, 0x54442D18 */ diff --git a/src/libraries/runtime_math/src/e_acosh.c b/src/libraries/runtime_math/src/e_acosh.c index 66971a6645..11a896bb20 100644 --- a/src/libraries/runtime_math/src/e_acosh.c +++ b/src/libraries/runtime_math/src/e_acosh.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -16,7 +16,7 @@ static char rcsid[] = "$NetBSD: e_acosh.c,v 1.9 1995/05/12 04:57:18 jtc Exp $"; /* __ieee754_acosh(x) * Method : - * Based on + * Based on * acosh(x) = log [ x + sqrt(x*x-1) ] * we have * acosh(x) := log(x)+ln2, if x is large; else @@ -32,9 +32,9 @@ static char rcsid[] = "$NetBSD: e_acosh.c,v 1.9 1995/05/12 04:57:18 jtc Exp $"; #include "mathP.h" #ifdef __STDC__ -static const double +static const double #else -static double +static double #endif one = 1.0, ln2 = 6.93147180559945286227e-01; /* 0x3FE62E42, 0xFEFA39EF */ @@ -45,7 +45,7 @@ ln2 = 6.93147180559945286227e-01; /* 0x3FE62E42, 0xFEFA39EF */ double __ieee754_acosh(x) double x; #endif -{ +{ double t; int32_t hx; u_int32_t lx; @@ -55,7 +55,7 @@ ln2 = 6.93147180559945286227e-01; /* 0x3FE62E42, 0xFEFA39EF */ } else if(hx >=0x41b00000) { /* x > 2**28 */ if(hx >=0x7ff00000) { /* x is inf of NaN */ return x+x; - } else + } else return __ieee754_log(x)+ln2; /* acosh(huge)=log(2x) */ } else if(((hx-0x3ff00000)|lx)==0) { return 0.0; /* acosh(1) = 0 */ diff --git a/src/libraries/runtime_math/src/e_asin.c b/src/libraries/runtime_math/src/e_asin.c index 6c5ef9976e..6035a0c59d 100644 --- a/src/libraries/runtime_math/src/e_asin.c +++ b/src/libraries/runtime_math/src/e_asin.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -15,12 +15,12 @@ static char rcsid[] = "$NetBSD: e_asin.c,v 1.9 1995/05/12 04:57:22 jtc Exp $"; #endif /* __ieee754_asin(x) - * Method : + * Method : * Since asin(x) = x + x^3/6 + x^5*3/40 + x^7*15/336 + ... * we approximate asin(x) on [0,0.5] by * asin(x) = x + x*x^2*R(x^2) * where - * R(x^2) is a rational approximation of (asin(x)-x)/x^3 + * R(x^2) is a rational approximation of (asin(x)-x)/x^3 * and its remez error is bounded by * |(asin(x)-x)/x^3 - R(x^2)| < 2^(-58.75) * @@ -49,9 +49,9 @@ static char rcsid[] = "$NetBSD: e_asin.c,v 1.9 1995/05/12 04:57:22 jtc Exp $"; #include "mathP.h" #ifdef __STDC__ -static const double +static const double #else -static double +static double #endif one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */ huge = 1.000e+300, @@ -90,14 +90,14 @@ qS4 = 7.70381505559019352791e-02; /* 0x3FB3B8C5, 0xB12E9282 */ GET_LOW_WORD(lx,x); if(((ix-0x3ff00000)|lx)==0) /* asin(1)=+-pi/2 with inexact */ - return x*pio2_hi+x*pio2_lo; - return (x-x)/(x-x); /* asin(|x|>1) is NaN */ - } + return x*pio2_hi+x*pio2_lo; + return (x-x)/(x-x); /* asin(|x|>1) is NaN */ + } else if (ix<0x3fe00000){ /* |x|<0.5 */ if(ix<0x3e400000){ /* if |x| < 2**-27 */ if(huge+x>one) return x; /* return x with inexact if x!=0*/ - }else{ + }else{ t = x*x; p = t*(pS0+t*(pS1+t*(pS2+t*(pS3+t*(pS4+t*pS5))))); q = one+t*(qS1+t*(qS2+t*(qS3+t*qS4))); @@ -122,9 +122,9 @@ qS4 = 7.70381505559019352791e-02; /* 0x3FB3B8C5, 0xB12E9282 */ p = 2.0*s*r-(pio2_lo-2.0*c); q = pio4_hi-2.0*w; t = pio4_hi-(p-q); - } - if(hx>0) - return t; - else - return -t; + } + if(hx>0) + return t; + else + return -t; } diff --git a/src/libraries/runtime_math/src/e_atan2.c b/src/libraries/runtime_math/src/e_atan2.c index 3159f27d58..1491cde56b 100644 --- a/src/libraries/runtime_math/src/e_atan2.c +++ b/src/libraries/runtime_math/src/e_atan2.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -17,7 +17,7 @@ static char rcsid[] = "$NetBSD: e_atan2.c,v 1.8 1995/05/10 20:44:51 jtc Exp $"; /* __ieee754_atan2(y,x) * Method : * 1. Reduce y to positive by atan2(y,x)=-atan2(-y,x). - * 2. Reduce x to positive by (if x and y are unexceptional): + * 2. Reduce x to positive by (if x and y are unexceptional): * ARG (x+iy) = arctan(y/x) ... if x > 0, * ARG (x+iy) = pi - arctan[y/(-x)] ... if x < 0, * @@ -35,9 +35,9 @@ static char rcsid[] = "$NetBSD: e_atan2.c,v 1.8 1995/05/10 20:44:51 jtc Exp $"; * ATAN2(+-INF, (anything but,0,NaN, and INF)) is +-pi/2; * * Constants: - * The hexadecimal values are the intended ones for the following - * constants. The decimal values may be used, provided that the - * compiler will convert from decimal to binary accurately enough + * The hexadecimal values are the intended ones for the following + * constants. The decimal values may be used, provided that the + * compiler will convert from decimal to binary accurately enough * to produce the hexadecimal values shown. */ @@ -45,9 +45,9 @@ static char rcsid[] = "$NetBSD: e_atan2.c,v 1.8 1995/05/10 20:44:51 jtc Exp $"; #include "mathP.h" #ifdef __STDC__ -static const double +static const double #else -static double +static double #endif tiny = 1.0e-300, zero = 0.0, @@ -62,7 +62,7 @@ pi_lo = 1.2246467991473531772E-16; /* 0x3CA1A626, 0x33145C07 */ double __ieee754_atan2(y,x) double y,x; #endif -{ +{ double z; int32_t k,m,hx,hy,ix,iy; u_int32_t lx,ly; @@ -80,7 +80,7 @@ pi_lo = 1.2246467991473531772E-16; /* 0x3CA1A626, 0x33145C07 */ /* when y = 0 */ if((iy|ly)==0) { switch(m) { - case 0: + case 0: case 1: return y; /* atan(+-0,+anything)=+-0 */ case 2: return pi+tiny;/* atan(+0,-anything) = pi */ case 3: return -pi-tiny;/* atan(-0,-anything) =-pi */ @@ -88,7 +88,7 @@ pi_lo = 1.2246467991473531772E-16; /* 0x3CA1A626, 0x33145C07 */ } /* when x = 0 */ if((ix|lx)==0) return (hy<0)? -pi_o_2-tiny: pi_o_2+tiny; - + /* when x is INF */ if(ix==0x7ff00000) { if(iy==0x7ff00000) { diff --git a/src/libraries/runtime_math/src/e_atanh.c b/src/libraries/runtime_math/src/e_atanh.c index f5b147de35..1edb60f003 100644 --- a/src/libraries/runtime_math/src/e_atanh.c +++ b/src/libraries/runtime_math/src/e_atanh.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -21,7 +21,7 @@ static char rcsid[] = "$NetBSD: e_atanh.c,v 1.8 1995/05/10 20:44:55 jtc Exp $"; * 1 2x x * atanh(x) = --- * log(1 + -------) = 0.5 * log1p(2 * --------) * 2 1 - x 1 - x - * + * * For x<0.5 * atanh(x) = 0.5*log1p(2x+2x*x/(1-x)) * @@ -61,14 +61,14 @@ static double zero = 0.0; ix = hx&0x7fffffff; if ((ix|((lx|(-lx))>>31))>0x3ff00000) /* |x|>1 */ return (x-x)/(x-x); - if(ix==0x3ff00000) + if(ix==0x3ff00000) return x/zero; if(ix<0x3e300000&&(huge+x)>zero) return x; /* x<2**-28 */ SET_HIGH_WORD(x,ix); if(ix<0x3fe00000) { /* x < 0.5 */ t = x+x; t = 0.5*log1p(t+t*x/(one-x)); - } else + } else t = 0.5*log1p((x+x)/(one-x)); if(hx>=0) return t; else return -t; } diff --git a/src/libraries/runtime_math/src/e_cosh.c b/src/libraries/runtime_math/src/e_cosh.c index 504413d06b..3b6e99cc5d 100644 --- a/src/libraries/runtime_math/src/e_cosh.c +++ b/src/libraries/runtime_math/src/e_cosh.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -15,18 +15,18 @@ static char rcsid[] = "$NetBSD: e_cosh.c,v 1.7 1995/05/10 20:44:58 jtc Exp $"; #endif /* __ieee754_cosh(x) - * Method : + * Method : * mathematically cosh(x) if defined to be (exp(x)+exp(-x))/2 - * 1. Replace x by |x| (cosh(x) = cosh(-x)). - * 2. - * [ exp(x) - 1 ]^2 + * 1. Replace x by |x| (cosh(x) = cosh(-x)). + * 2. + * [ exp(x) - 1 ]^2 * 0 <= x <= ln2/2 : cosh(x) := 1 + ------------------- * 2*exp(x) * * exp(x) + 1/exp(x) * ln2/2 <= x <= 22 : cosh(x) := ------------------- * 2 - * 22 <= x <= lnovft : cosh(x) := exp(x)/2 + * 22 <= x <= lnovft : cosh(x) := exp(x)/2 * lnovft <= x <= ln2ovft: cosh(x) := exp(x/2)/2 * exp(x/2) * ln2ovft < x : cosh(x) := huge*huge (overflow) * @@ -50,7 +50,7 @@ static double one = 1.0, half=0.5, huge = 1.0e300; double __ieee754_cosh(x) double x; #endif -{ +{ double t,w; int32_t ix; u_int32_t lx; @@ -60,7 +60,7 @@ static double one = 1.0, half=0.5, huge = 1.0e300; ix &= 0x7fffffff; /* x is INF or NaN */ - if(ix>=0x7ff00000) return x*x; + if(ix>=0x7ff00000) return x*x; /* |x| in [0,0.5*ln2], return 1+expm1(|x|)^2/(2*exp(|x|)) */ if(ix<0x3fd62e43) { @@ -81,7 +81,7 @@ static double one = 1.0, half=0.5, huge = 1.0e300; /* |x| in [log(maxdouble), overflowthresold] */ GET_LOW_WORD(lx,x); - if (ix<0x408633CE || + if (ix<0x408633CE || ((ix==0x408633ce)&&(lx<=(u_int32_t)0x8fb9f87d))) { w = __ieee754_exp(half*fabs(x)); t = half*w; diff --git a/src/libraries/runtime_math/src/e_exp.c b/src/libraries/runtime_math/src/e_exp.c index de5cae9aad..b725d8cfb1 100644 --- a/src/libraries/runtime_math/src/e_exp.c +++ b/src/libraries/runtime_math/src/e_exp.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -22,36 +22,36 @@ static char rcsid[] = "$NetBSD: e_exp.c,v 1.8 1995/05/10 20:45:03 jtc Exp $"; * Reduce x to an r so that |r| <= 0.5*ln2 ~ 0.34658. * Given x, find r and integer k such that * - * x = k*ln2 + r, |r| <= 0.5*ln2. + * x = k*ln2 + r, |r| <= 0.5*ln2. * - * Here r will be represented as r = hi-lo for better + * Here r will be represented as r = hi-lo for better * accuracy. * * 2. Approximation of exp(r) by a special rational function on * the interval [0,0.34658]: * Write * R(r**2) = r*(exp(r)+1)/(exp(r)-1) = 2 + r*r/6 - r**4/360 + ... - * We use a special Reme algorithm on [0,0.34658] to generate - * a polynomial of degree 5 to approximate R. The maximum error + * We use a special Reme algorithm on [0,0.34658] to generate + * a polynomial of degree 5 to approximate R. The maximum error * of this polynomial approximation is bounded by 2**-59. In * other words, * R(z) ~ 2.0 + P1*z + P2*z**2 + P3*z**3 + P4*z**4 + P5*z**5 * (where z=r*r, and the values of P1 to P5 are listed below) * and * | 5 | -59 - * | 2.0+P1*z+...+P5*z - R(z) | <= 2 + * | 2.0+P1*z+...+P5*z - R(z) | <= 2 * | | * The computation of exp(r) thus becomes * 2*r * exp(r) = 1 + ------- * R - r - * r*R1(r) + * r*R1(r) * = 1 + r + ----------- (for better accuracy) * 2 - R1(r) * where * 2 4 10 * R1(r) = r - (P1*r + P2*r + ... + P5*r ). - * + * * 3. Scale back to obtain exp(x): * From step 1, we have * exp(x) = 2^k * exp(r) @@ -66,13 +66,13 @@ static char rcsid[] = "$NetBSD: e_exp.c,v 1.8 1995/05/10 20:45:03 jtc Exp $"; * 1 ulp (unit in the last place). * * Misc. info. - * For IEEE double + * For IEEE double * if x > 7.09782712893383973096e+02 then exp(x) overflow * if x < -7.45133219101941108420e+02 then exp(x) underflow * * Constants: - * The hexadecimal values are the intended ones for the following - * constants. The decimal values may be used, provided that the + * The hexadecimal values are the intended ones for the following + * constants. The decimal values may be used, provided that the * compiler will convert from decimal to binary accurately enough * to produce the hexadecimal values shown. */ @@ -126,7 +126,7 @@ P5 = 4.13813679705723846039e-08; /* 0x3E663769, 0x72BEA4D0 */ if(hx>=0x7ff00000) { u_int32_t lx; GET_LOW_WORD(lx,x); - if(((hx&0xfffff)|lx)!=0) + if(((hx&0xfffff)|lx)!=0) return x+x; /* NaN */ else return (xsb==0)? x:0.0; /* exp(+-inf)={inf,0} */ } @@ -135,7 +135,7 @@ P5 = 4.13813679705723846039e-08; /* 0x3E663769, 0x72BEA4D0 */ } /* argument reduction */ - if(hx > 0x3fd62e42) { /* if |x| > 0.5 ln2 */ + if(hx > 0x3fd62e42) { /* if |x| > 0.5 ln2 */ if(hx < 0x3FF0A2B2) { /* and |x| < 1.5 ln2 */ hi = x-ln2HI[xsb]; lo=ln2LO[xsb]; k = 1-xsb-xsb; } else { @@ -145,7 +145,7 @@ P5 = 4.13813679705723846039e-08; /* 0x3E663769, 0x72BEA4D0 */ lo = t*ln2LO[0]; } x = hi - lo; - } + } else if(hx < 0x3e300000) { /* when |x|<2**-28 */ if(huge+x>one) return one+x;/* trigger inexact */ } @@ -154,7 +154,7 @@ P5 = 4.13813679705723846039e-08; /* 0x3E663769, 0x72BEA4D0 */ /* x is now in primary range */ t = x*x; c = x - t*(P1+t*(P2+t*(P3+t*(P4+t*P5)))); - if(k==0) return one-((x*c)/(c-2.0)-x); + if(k==0) return one-((x*c)/(c-2.0)-x); else y = one-((lo-(x*c)/(2.0-c))-hi); if(k >= -1021) { u_int32_t hy; diff --git a/src/libraries/runtime_math/src/e_fmod.c b/src/libraries/runtime_math/src/e_fmod.c index 5140fb40ab..cb4a7ad2a8 100644 --- a/src/libraries/runtime_math/src/e_fmod.c +++ b/src/libraries/runtime_math/src/e_fmod.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -14,7 +14,7 @@ static char rcsid[] = "$NetBSD: e_fmod.c,v 1.8 1995/05/10 20:45:07 jtc Exp $"; #endif -/* +/* * __ieee754_fmod(x,y) * Return x mod y in exact arithmetic * Method: shift and subtract @@ -51,7 +51,7 @@ static double one = 1.0, Zero[] = {0.0, -0.0,}; return (x*y)/(x*y); if(hx<=hy) { if((hx>31]; /* |x|=|y| return x*0*/ } @@ -74,7 +74,7 @@ static double one = 1.0, Zero[] = {0.0, -0.0,}; } else iy = (hy>>20)-1023; /* set up {hx,lx}, {hy,ly} and align y to x */ - if(ix >= -1022) + if(ix >= -1022) hx = 0x00100000|(0x000fffff&hx); else { /* subnormal x, shift x to normal */ n = -1022-ix; @@ -86,7 +86,7 @@ static double one = 1.0, Zero[] = {0.0, -0.0,}; lx = 0; } } - if(iy >= -1022) + if(iy >= -1022) hy = 0x00100000|(0x000fffff&hy); else { /* subnormal y, shift y to normal */ n = -1022-iy; @@ -115,7 +115,7 @@ static double one = 1.0, Zero[] = {0.0, -0.0,}; /* convert back to floating value and restore the sign */ if((hx|lx)==0) /* return sign(x)*0 */ - return Zero[(u_int32_t)sx>>31]; + return Zero[(u_int32_t)sx>>31]; while(hx<0x00100000) { /* normalize x */ hx = hx+hx+(lx>>31); lx = lx+lx; iy -= 1; diff --git a/src/libraries/runtime_math/src/e_gamma.c b/src/libraries/runtime_math/src/e_gamma.c index fd160a7f46..cc941e6197 100644 --- a/src/libraries/runtime_math/src/e_gamma.c +++ b/src/libraries/runtime_math/src/e_gamma.c @@ -6,7 +6,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== * diff --git a/src/libraries/runtime_math/src/e_gamma_r.c b/src/libraries/runtime_math/src/e_gamma_r.c index 53cd04a076..f7ebb902bd 100644 --- a/src/libraries/runtime_math/src/e_gamma_r.c +++ b/src/libraries/runtime_math/src/e_gamma_r.c @@ -6,15 +6,15 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== * */ /* __ieee754_gamma_r(x, signgamp) - * Reentrant version of the logarithm of the Gamma function - * with user provide pointer for the sign of Gamma(x). + * Reentrant version of the logarithm of the Gamma function + * with user provide pointer for the sign of Gamma(x). * * Method: See __ieee754_lgamma_r */ diff --git a/src/libraries/runtime_math/src/e_hypot.c b/src/libraries/runtime_math/src/e_hypot.c index 01d27995fb..30391d47e6 100644 --- a/src/libraries/runtime_math/src/e_hypot.c +++ b/src/libraries/runtime_math/src/e_hypot.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -16,12 +16,12 @@ static char rcsid[] = "$NetBSD: e_hypot.c,v 1.9 1995/05/12 04:57:27 jtc Exp $"; /* __ieee754_hypot(x,y) * - * Method : - * If (assume round-to-nearest) z=x*x+y*y - * has error less than sqrt(2)/2 ulp, than + * Method : + * If (assume round-to-nearest) z=x*x+y*y + * has error less than sqrt(2)/2 ulp, than * sqrt(z) has error less than 1 ulp (exercise). * - * So, compute sqrt(x*x+y*y) with some care as + * So, compute sqrt(x*x+y*y) with some care as * follows to get the error below 1 ulp: * * Assume x>y>0; @@ -31,10 +31,10 @@ static char rcsid[] = "$NetBSD: e_hypot.c,v 1.9 1995/05/12 04:57:27 jtc Exp $"; * where x1 = x with lower 32 bits cleared, x2 = x-x1; else * 2. if x <= 2y use * t1*y1+((x-y)*(x-y)+(t1*y2+t2*y)) - * where t1 = 2x with lower 32 bits cleared, t2 = 2x-t1, + * where t1 = 2x with lower 32 bits cleared, t2 = 2x-t1, * y1= y with lower 32 bits chopped, y2 = y-y1. - * - * NOTE: scaling may be necessary if some argument is too + * + * NOTE: scaling may be necessary if some argument is too * large or too tiny * * Special cases: @@ -42,8 +42,8 @@ static char rcsid[] = "$NetBSD: e_hypot.c,v 1.9 1995/05/12 04:57:27 jtc Exp $"; * hypot(x,y) is NAN if x or y is NAN. * * Accuracy: - * hypot(x,y) returns sqrt(x^2+y^2) with error less - * than 1 ulps (units in the last place) + * hypot(x,y) returns sqrt(x^2+y^2) with error less + * than 1 ulps (units in the last place) */ #include "runtime/rtapi_math.h" @@ -84,7 +84,7 @@ static char rcsid[] = "$NetBSD: e_hypot.c,v 1.9 1995/05/12 04:57:27 jtc Exp $"; SET_HIGH_WORD(b,hb); } if(hb < 0x20b00000) { /* b < 2**-500 */ - if(hb <= 0x000fffff) { /* subnormal b or 0 */ + if(hb <= 0x000fffff) { /* subnormal b or 0 */ u_int32_t low; GET_LOW_WORD(low,b); if((hb|low)==0) return a; diff --git a/src/libraries/runtime_math/src/e_j0.c b/src/libraries/runtime_math/src/e_j0.c index af83b76a8f..c52741f2b6 100644 --- a/src/libraries/runtime_math/src/e_j0.c +++ b/src/libraries/runtime_math/src/e_j0.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -33,20 +33,20 @@ static char rcsid[] = "$NetBSD: e_j0.c,v 1.8 1995/05/10 20:45:23 jtc Exp $"; * (To avoid cancellation, use * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) * to compute the worse one.) - * + * * 3 Special cases * j0(nan)= nan * j0(0) = 1 * j0(inf) = 0 - * + * * Method -- y0(x): * 1. For x<2. - * Since + * Since * y0(x) = 2/pi*(j0(x)*(ln(x/2)+Euler) + x^2/4 - ...) * therefore y0(x)-2/pi*j0(x)*ln(x) is an even function. * We use the following function to approximate y0, * y0(x) = U(z)/V(z) + (2/pi)*(j0(x)*ln(x)), z= x^2 - * where + * where * U(z) = u00 + u01*z + ... + u06*z^6 * V(z) = 1 + v01*z + ... + v04*z^4 * with absolute approximation error bounded by 2**-72. @@ -69,9 +69,9 @@ static double pzero(), qzero(); #endif #ifdef __STDC__ -static const double +static const double #else -static double +static double #endif huge = 1e300, one = 1.0, @@ -94,9 +94,9 @@ static double zero = 0.0; #endif #ifdef __STDC__ - double __ieee754_j0(double x) + double __ieee754_j0(double x) #else - double __ieee754_j0(x) + double __ieee754_j0(x) double x; #endif { @@ -163,9 +163,9 @@ v03 = 2.59150851840457805467e-07, /* 0x3E91642D, 0x7FF202FD */ v04 = 4.41110311332675467403e-10; /* 0x3DFE5018, 0x3BD6D9EF */ #ifdef __STDC__ - double __ieee754_y0(double x) + double __ieee754_y0(double x) #else - double __ieee754_y0(x) + double __ieee754_y0(x) double x; #endif { @@ -175,7 +175,7 @@ v04 = 4.41110311332675467403e-10; /* 0x3DFE5018, 0x3BD6D9EF */ EXTRACT_WORDS(hx,lx,x); ix = 0x7fffffff&hx; /* Y0(NaN) is NaN, y0(-inf) is Nan, y0(inf) is 0 */ - if(ix>=0x7ff00000) return one/(x+x*x); + if(ix>=0x7ff00000) return one/(x+x*x); if((ix|lx)==0) return -one/zero; if(hx<0) return zero/zero; if(ix >= 0x40000000) { /* |x| >= 2.0 */ @@ -349,7 +349,7 @@ static double pS2[5] = { s = one+z*(q[0]+z*(q[1]+z*(q[2]+z*(q[3]+z*q[4])))); return one+ r/s; } - + /* For x >= 8, the asymptotic expansions of qzero is * -1/8 s + 75/1024 s^3 - ..., where s = 1/x. diff --git a/src/libraries/runtime_math/src/e_j1.c b/src/libraries/runtime_math/src/e_j1.c index 778a736aa8..0af3b38b0c 100644 --- a/src/libraries/runtime_math/src/e_j1.c +++ b/src/libraries/runtime_math/src/e_j1.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -34,16 +34,16 @@ static char rcsid[] = "$NetBSD: e_j1.c,v 1.8 1995/05/10 20:45:27 jtc Exp $"; * (To avoid cancellation, use * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x)) * to compute the worse one.) - * + * * 3 Special cases * j1(nan)= nan * j1(0) = 0 * j1(inf) = 0 - * + * * Method -- y1(x): - * 1. screen out x<=0 cases: y1(0)=-inf, y1(x<0)=NaN + * 1. screen out x<=0 cases: y1(0)=-inf, y1(x<0)=NaN * 2. For x<2. - * Since + * Since * y1(x) = 2/pi*(j1(x)*(ln(x/2)+Euler)-1/x-x/2+5/64*x^3-...) * therefore y1(x)-2/pi*j1(x)*ln(x)-1/x is an odd function. * We use the following function to approximate y1, @@ -69,9 +69,9 @@ static double pone(), qone(); #endif #ifdef __STDC__ -static const double +static const double #else -static double +static double #endif huge = 1e300, one = 1.0, @@ -95,9 +95,9 @@ static double zero = 0.0; #endif #ifdef __STDC__ - double __ieee754_j1(double x) + double __ieee754_j1(double x) #else - double __ieee754_j1(x) + double __ieee754_j1(x) double x; #endif { @@ -164,9 +164,9 @@ static double V0[5] = { }; #ifdef __STDC__ - double __ieee754_y1(double x) + double __ieee754_y1(double x) #else - double __ieee754_y1(x) + double __ieee754_y1(x) double x; #endif { @@ -176,7 +176,7 @@ static double V0[5] = { EXTRACT_WORDS(hx,lx,x); ix = 0x7fffffff&hx; /* if Y1(NaN) is NaN, Y1(-inf) is NaN, Y1(inf) is 0 */ - if(ix>=0x7ff00000) return one/(x+x*x); + if(ix>=0x7ff00000) return one/(x+x*x); if((ix|lx)==0) return -one/zero; if(hx<0) return zero/zero; if(ix >= 0x40000000) { /* |x| >= 2.0 */ @@ -206,10 +206,10 @@ static double V0[5] = { z = invsqrtpi*(u*ss+v*cc)/sqrt(x); } return z; - } + } if(ix<=0x3c900000) { /* x < 2**-54 */ return(-tpi/x); - } + } z = x*x; u = U0[0]+z*(U0[1]+z*(U0[2]+z*(U0[3]+z*U0[4]))); v = one+z*(V0[0]+z*(V0[1]+z*(V0[2]+z*(V0[3]+z*V0[4])))); @@ -347,7 +347,7 @@ static double ps2[5] = { s = one+z*(q[0]+z*(q[1]+z*(q[2]+z*(q[3]+z*q[4])))); return one+ r/s; } - + /* For x >= 8, the asymptotic expansions of qone is * 3/8 s - 105/1024 s^3 - ..., where s = 1/x. diff --git a/src/libraries/runtime_math/src/e_jn.c b/src/libraries/runtime_math/src/e_jn.c index a824c93cb6..286499d603 100644 --- a/src/libraries/runtime_math/src/e_jn.c +++ b/src/libraries/runtime_math/src/e_jn.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -18,7 +18,7 @@ static char rcsid[] = "$NetBSD: e_jn.c,v 1.9 1995/05/10 20:45:34 jtc Exp $"; * __ieee754_jn(n, x), __ieee754_yn(n, x) * floating point Bessel's function of the 1st and 2nd kind * of order n - * + * * Special cases: * y0(0)=y1(0)=yn(n,0) = -inf with division by zero signal; * y0(-ve)=y1(-ve)=yn(n,-ve) are NaN with invalid signal. @@ -37,7 +37,7 @@ static char rcsid[] = "$NetBSD: e_jn.c,v 1.9 1995/05/10 20:45:34 jtc Exp $"; * yn(n,x) is similar in all respects, except * that forward recursion is used for all * values of n>1. - * + * */ #include "runtime/rtapi_math.h" @@ -76,7 +76,7 @@ static double zero = 0.00000000000000000000e+00; ix = 0x7fffffff&hx; /* if J(n,NaN) is NaN */ if((ix|((u_int32_t)(lx|-lx))>>31)>0x7ff00000) return x+x; - if(n<0){ + if(n<0){ n = -n; x = -x; hx ^= 0x80000000; @@ -87,13 +87,13 @@ static double zero = 0.00000000000000000000e+00; x = fabs(x); if((ix|lx)==0||ix>=0x7ff00000) /* if x is 0 or inf */ b = zero; - else if((double)n<=x) { + else if((double)n<=x) { /* Safe to use J(n+1,x)=2n/x *J(n,x)-J(n-1,x) */ if(ix>=0x52D00000) { /* x > 2**302 */ - /* (x >> n**2) + /* (x >> n**2) * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) - * Let s=sin(x), c=cos(x), + * Let s=sin(x), c=cos(x), * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then * * n sin(xn)*sqt2 cos(xn)*sqt2 @@ -111,7 +111,7 @@ static double zero = 0.00000000000000000000e+00; default: temp = 0.0; } b = invsqrtpi*temp/sqrt(x); - } else { + } else { a = __ieee754_j0(x); b = __ieee754_j1(x); for(i=1;i33) /* underflow */ @@ -137,14 +137,14 @@ static double zero = 0.00000000000000000000e+00; } } else { /* use backward recurrence */ - /* x x^2 x^2 + /* x x^2 x^2 * J(n,x)/J(n-1,x) = ---- ------ ------ ..... * 2n - 2(n+1) - 2(n+2) * - * 1 1 1 + * 1 1 1 * (for large x) = ---- ------ ------ ..... * 2n 2(n+1) 2(n+2) - * -- - ------ - ------ - + * -- - ------ - ------ - * x x x * * Let w = 2n/x and h=2/x, then the above quotient @@ -160,9 +160,9 @@ static double zero = 0.00000000000000000000e+00; * To determine how many terms needed, let * Q(0) = w, Q(1) = w(w+h) - 1, * Q(k) = (w+k*h)*Q(k-1) - Q(k-2), - * When Q(k) > 1e4 good for single - * When Q(k) > 1e9 good for double - * When Q(k) > 1e17 good for quadruple + * When Q(k) > 1e4 good for single + * When Q(k) > 1e9 good for double + * When Q(k) > 1e17 good for quadruple */ /* determine k */ double t,v; @@ -184,7 +184,7 @@ static double zero = 0.00000000000000000000e+00; * single 8.8722839355e+01 * double 7.09782712893383973096e+02 * long double 1.1356523406294143949491931077970765006170e+04 - * then recurrent value may overflow and the result is + * then recurrent value may overflow and the result is * likely underflow to zero */ tmp = n; @@ -220,9 +220,9 @@ static double zero = 0.00000000000000000000e+00; } #ifdef __STDC__ - double __ieee754_yn(int n, double x) + double __ieee754_yn(int n, double x) #else - double __ieee754_yn(n,x) + double __ieee754_yn(n,x) int n; double x; #endif { @@ -245,10 +245,10 @@ static double zero = 0.00000000000000000000e+00; if(n==1) return(sign*__ieee754_y1(x)); if(ix==0x7ff00000) return zero; if(ix>=0x52D00000) { /* x > 2**302 */ - /* (x >> n**2) + /* (x >> n**2) * Jn(x) = cos(x-(2n+1)*pi/4)*sqrt(2/x*pi) * Yn(x) = sin(x-(2n+1)*pi/4)*sqrt(2/x*pi) - * Let s=sin(x), c=cos(x), + * Let s=sin(x), c=cos(x), * xn=x-(2n+1)*pi/4, sqt2 = sqrt(2),then * * n sin(xn)*sqt2 cos(xn)*sqt2 @@ -272,7 +272,7 @@ static double zero = 0.00000000000000000000e+00; b = __ieee754_y1(x); /* quit if b is -inf */ GET_HIGH_WORD(high,b); - for(i=1;i= 0x7ff00000) return x+x; k += (hx>>20)-1023; hx &= 0x000fffff; @@ -126,14 +126,14 @@ static double zero = 0.0; if(k==0) return f-R; else {dk=(double)k; return dk*ln2_hi-((R-dk*ln2_lo)-f);} } - s = f/(2.0+f); + s = f/(2.0+f); dk = (double)k; z = s*s; i = hx-0x6147a; w = z*z; j = 0x6b851-hx; - t1= w*(Lg2+w*(Lg4+w*Lg6)); - t2= z*(Lg1+w*(Lg3+w*(Lg5+w*Lg7))); + t1= w*(Lg2+w*(Lg4+w*Lg6)); + t2= z*(Lg1+w*(Lg3+w*(Lg5+w*Lg7))); i |= j; R = t2+t1; if(i>0) { diff --git a/src/libraries/runtime_math/src/e_log10.c b/src/libraries/runtime_math/src/e_log10.c index 88f622dafa..610c529e8f 100644 --- a/src/libraries/runtime_math/src/e_log10.c +++ b/src/libraries/runtime_math/src/e_log10.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -16,26 +16,26 @@ static char rcsid[] = "$NetBSD: e_log10.c,v 1.9 1995/05/10 20:45:51 jtc Exp $"; /* __ieee754_log10(x) * Return the base 10 logarithm of x - * + * * Method : * Let log10_2hi = leading 40 bits of log10(2) and * log10_2lo = log10(2) - log10_2hi, * ivln10 = 1/log(10) rounded. * Then - * n = ilogb(x), + * n = ilogb(x), * if(n<0) n = n+1; * x = scalbn(x,-n); * log10(x) := n*log10_2hi + (n*log10_2lo + ivln10*log(x)) * * Note 1: - * To guarantee log10(10**n)=n, where 10**n is normal, the rounding + * To guarantee log10(10**n)=n, where 10**n is normal, the rounding * mode must set to Round-to-Nearest. * Note 2: * [1/log(10)] rounded to 53 bits has error .198 ulps; * log10 is monotonic at all binary break points. * * Special cases: - * log10(x) is NaN with signal if x < 0; + * log10(x) is NaN with signal if x < 0; * log10(+INF) is +INF with no signal; log10(0) is -INF with signal; * log10(NaN) is that NaN with no signal; * log10(10**N) = N for N=0,1,...,22. diff --git a/src/libraries/runtime_math/src/e_pow.c b/src/libraries/runtime_math/src/e_pow.c index 6cc20776d2..e47aafbf47 100644 --- a/src/libraries/runtime_math/src/e_pow.c +++ b/src/libraries/runtime_math/src/e_pow.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -21,7 +21,7 @@ static char rcsid[] = "$NetBSD: e_pow.c,v 1.9 1995/05/12 04:57:32 jtc Exp $"; * 1. Compute and return log2(x) in two pieces: * log2(x) = w1 + w2, * where w1 has 53-24 = 29 bit trailing zeros. - * 2. Perform y*log2(x) = n+y' by simulating muti-precision + * 2. Perform y*log2(x) = n+y' by simulating muti-precision * arithmetic, where |y'|<=0.5. * 3. Return x**y = 2**n*exp(y'*log2) * @@ -49,13 +49,13 @@ static char rcsid[] = "$NetBSD: e_pow.c,v 1.9 1995/05/12 04:57:32 jtc Exp $"; * Accuracy: * pow(x,y) returns x**y nearly rounded. In particular * pow(integer,integer) - * always returns the correct integer provided it is + * always returns the correct integer provided it is * representable. * * Constants : - * The hexadecimal values are the intended ones for the following - * constants. The decimal values may be used, provided that the - * compiler will convert from decimal to binary accurately enough + * The hexadecimal values are the intended ones for the following + * constants. The decimal values may be used, provided that the + * compiler will convert from decimal to binary accurately enough * to produce the hexadecimal values shown. */ @@ -63,9 +63,9 @@ static char rcsid[] = "$NetBSD: e_pow.c,v 1.9 1995/05/12 04:57:32 jtc Exp $"; #include "mathP.h" #ifdef __STDC__ -static const double +static const double #else -static double +static double #endif bp[] = {1.0, 1.5,}, dp_h[] = { 0.0, 5.84962487220764160156e-01,}, /* 0x3FE2B803, 0x40000000 */ @@ -117,12 +117,12 @@ ivln2_l = 1.92596299112661746887e-08; /* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/ ix = hx&0x7fffffff; iy = hy&0x7fffffff; /* y==zero: x**0 = 1 */ - if((iy|ly)==0) return one; + if((iy|ly)==0) return one; /* +-NaN return x+y */ if(ix > 0x7ff00000 || ((ix==0x7ff00000)&&(lx!=0)) || - iy > 0x7ff00000 || ((iy==0x7ff00000)&&(ly!=0))) - return x+y; + iy > 0x7ff00000 || ((iy==0x7ff00000)&&(ly!=0))) + return x+y; /* determine if y is an odd int when x < 0 * yisint = 0 ... y is not an integer @@ -130,7 +130,7 @@ ivln2_l = 1.92596299112661746887e-08; /* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/ * yisint = 2 ... y is an even int */ yisint = 0; - if(hx<0) { + if(hx<0) { if(iy>=0x43400000) yisint = 2; /* even integer y */ else if(iy>=0x3ff00000) { k = (iy>>20)-0x3ff; /* exponent */ @@ -141,11 +141,11 @@ ivln2_l = 1.92596299112661746887e-08; /* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/ j = iy>>(20-k); if((j<<(20-k))==iy) yisint = 2-(j&1); } - } - } + } + } /* special value of y */ - if(ly==0) { + if(ly==0) { if (iy==0x7ff00000) { /* y is +-inf */ if(((ix-0x3ff00000)|lx)==0) return y - y; /* inf**+-1 is NaN */ @@ -153,14 +153,14 @@ ivln2_l = 1.92596299112661746887e-08; /* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/ return (hy>=0)? y: zero; else /* (|x|<1)**-,+inf = inf,0 */ return (hy<0)?-y: zero; - } + } if(iy==0x3ff00000) { /* y is +-1 */ if(hy<0) return one/x; else return x; } if(hy==0x40000000) return x*x; /* y is 2 */ if(hy==0x3fe00000) { /* y is 0.5 */ if(hx>=0) /* x >= +0 */ - return __ieee754_sqrt(x); + return __ieee754_sqrt(x); } } @@ -173,13 +173,13 @@ ivln2_l = 1.92596299112661746887e-08; /* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/ if(hx<0) { if(((ix-0x3ff00000)|yisint)==0) { z = (z-z)/(z-z); /* (-1)**non-int is NaN */ - } else if(yisint==1) + } else if(yisint==1) z = -z; /* (x<0)**odd = -(|x|**odd) */ } return z; } } - + /* (x<0)**(non-int) is NaN */ if(((((u_int32_t)hx>>31)-1)|yisint)==0) return (x-x)/(x-x); @@ -192,7 +192,7 @@ ivln2_l = 1.92596299112661746887e-08; /* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/ /* over/underflow if x is not close to one */ if(ix<0x3fefffff) return (hy<0)? huge*huge:tiny*tiny; if(ix>0x3ff00000) return (hy>0)? huge*huge:tiny*tiny; - /* now |1-x| is tiny <= 2**-20, suffice to compute + /* now |1-x| is tiny <= 2**-20, suffice to compute log(x) by x-x^2/2+x^3/3-x^4/4 */ t = x-1; /* t has 20 trailing zeros */ w = (t*t)*(0.5-t*(0.3333333333333333333333-t*0.25)); @@ -289,7 +289,7 @@ ivln2_l = 1.92596299112661746887e-08; /* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/ n = ((n&0x000fffff)|0x00100000)>>(20-k); if(j<0) n = -n; p_h -= t; - } + } t = p_l+p_h; SET_LOW_WORD(t,0); u = t*lg2_h; diff --git a/src/libraries/runtime_math/src/e_rem_pio2.c b/src/libraries/runtime_math/src/e_rem_pio2.c index b032f2b291..08eaee5104 100644 --- a/src/libraries/runtime_math/src/e_rem_pio2.c +++ b/src/libraries/runtime_math/src/e_rem_pio2.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -15,8 +15,8 @@ static char rcsid[] = "$NetBSD: e_rem_pio2.c,v 1.8 1995/05/10 20:46:02 jtc Exp $ #endif /* __ieee754_rem_pio2(x,y) - * - * return the remainder of x rem pi/2 in y[0]+y[1] + * + * return the remainder of x rem pi/2 in y[0]+y[1] * use __kernel_rem_pio2() */ @@ -24,24 +24,24 @@ static char rcsid[] = "$NetBSD: e_rem_pio2.c,v 1.8 1995/05/10 20:46:02 jtc Exp $ #include "mathP.h" /* - * Table of constants for 2/pi, 396 Hex digits (476 decimal) of 2/pi + * Table of constants for 2/pi, 396 Hex digits (476 decimal) of 2/pi */ #ifdef __STDC__ static const int32_t two_over_pi[] = { #else static int32_t two_over_pi[] = { #endif -0xA2F983, 0x6E4E44, 0x1529FC, 0x2757D1, 0xF534DD, 0xC0DB62, -0x95993C, 0x439041, 0xFE5163, 0xABDEBB, 0xC561B7, 0x246E3A, -0x424DD2, 0xE00649, 0x2EEA09, 0xD1921C, 0xFE1DEB, 0x1CB129, -0xA73EE8, 0x8235F5, 0x2EBB44, 0x84E99C, 0x7026B4, 0x5F7E41, -0x3991D6, 0x398353, 0x39F49C, 0x845F8B, 0xBDF928, 0x3B1FF8, -0x97FFDE, 0x05980F, 0xEF2F11, 0x8B5A0A, 0x6D1F6D, 0x367ECF, -0x27CB09, 0xB74F46, 0x3F669E, 0x5FEA2D, 0x7527BA, 0xC7EBE5, -0xF17B3D, 0x0739F7, 0x8A5292, 0xEA6BFB, 0x5FB11F, 0x8D5D08, -0x560330, 0x46FC7B, 0x6BABF0, 0xCFBC20, 0x9AF436, 0x1DA9E3, -0x91615E, 0xE61B08, 0x659985, 0x5F14A0, 0x68408D, 0xFFD880, -0x4D7327, 0x310606, 0x1556CA, 0x73A8C9, 0x60E27B, 0xC08C6B, +0xA2F983, 0x6E4E44, 0x1529FC, 0x2757D1, 0xF534DD, 0xC0DB62, +0x95993C, 0x439041, 0xFE5163, 0xABDEBB, 0xC561B7, 0x246E3A, +0x424DD2, 0xE00649, 0x2EEA09, 0xD1921C, 0xFE1DEB, 0x1CB129, +0xA73EE8, 0x8235F5, 0x2EBB44, 0x84E99C, 0x7026B4, 0x5F7E41, +0x3991D6, 0x398353, 0x39F49C, 0x845F8B, 0xBDF928, 0x3B1FF8, +0x97FFDE, 0x05980F, 0xEF2F11, 0x8B5A0A, 0x6D1F6D, 0x367ECF, +0x27CB09, 0xB74F46, 0x3F669E, 0x5FEA2D, 0x7527BA, 0xC7EBE5, +0xF17B3D, 0x0739F7, 0x8A5292, 0xEA6BFB, 0x5FB11F, 0x8D5D08, +0x560330, 0x46FC7B, 0x6BABF0, 0xCFBC20, 0x9AF436, 0x1DA9E3, +0x91615E, 0xE61B08, 0x659985, 0x5F14A0, 0x68408D, 0xFFD880, +0x4D7327, 0x310606, 0x1556CA, 0x73A8C9, 0x60E27B, 0xC08C6B, }; #ifdef __STDC__ @@ -68,9 +68,9 @@ static int32_t npio2_hw[] = { */ #ifdef __STDC__ -static const double +static const double #else -static double +static double #endif zero = 0.00000000000000000000e+00, /* 0x00000000, 0x00000000 */ half = 5.00000000000000000000e-01, /* 0x3FE00000, 0x00000000 */ @@ -104,7 +104,7 @@ pio2_3t = 8.47842766036889956997e-32; /* 0x397B839A, 0x252049C1 */ if(ix<=0x3fe921fb) /* |x| ~<= pi/4 , no need for reduction */ {y[0] = x; y[1] = 0; return 0;} if(ix<0x4002d97c) { /* |x| < 3pi/4, special case with n=+-1 */ - if(hx>0) { + if(hx>0) { z = x - pio2_1; if(ix!=0x3ff921fb) { /* 33+53 bit pi is good enough */ y[0] = z - pio2_1t; @@ -134,27 +134,27 @@ pio2_3t = 8.47842766036889956997e-32; /* 0x397B839A, 0x252049C1 */ fn = (double)n; r = t-fn*pio2_1; w = fn*pio2_1t; /* 1st round good to 85 bit */ - if(n<32&&ix!=npio2_hw[n-1]) { + if(n<32&&ix!=npio2_hw[n-1]) { y[0] = r-w; /* quick check no cancellation */ } else { u_int32_t high; j = ix>>20; - y[0] = r-w; + y[0] = r-w; GET_HIGH_WORD(high,y[0]); i = j-((high>>20)&0x7ff); if(i>16) { /* 2nd iteration needed, good to 118 */ t = r; - w = fn*pio2_2; + w = fn*pio2_2; r = t-w; - w = fn*pio2_2t-((t-r)-w); + w = fn*pio2_2t-((t-r)-w); y[0] = r-w; GET_HIGH_WORD(high,y[0]); i = j-((high>>20)&0x7ff); if(i>49) { /* 3rd iteration need, 151 bits acc */ t = r; /* will cover all possible cases */ - w = fn*pio2_3; + w = fn*pio2_3; r = t-w; - w = fn*pio2_3t-((t-r)-w); + w = fn*pio2_3t-((t-r)-w); y[0] = r-w; } } @@ -163,7 +163,7 @@ pio2_3t = 8.47842766036889956997e-32; /* 0x397B839A, 0x252049C1 */ if(hx<0) {y[0] = -y[0]; y[1] = -y[1]; return -n;} else return n; } - /* + /* * all other (large) arguments */ if(ix>=0x7ff00000) { /* x is inf or NaN */ diff --git a/src/libraries/runtime_math/src/e_remainder.c b/src/libraries/runtime_math/src/e_remainder.c index 4e363c83dc..72b88ac4c7 100644 --- a/src/libraries/runtime_math/src/e_remainder.c +++ b/src/libraries/runtime_math/src/e_remainder.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -15,11 +15,11 @@ static char rcsid[] = "$NetBSD: e_remainder.c,v 1.8 1995/05/10 20:46:05 jtc Exp #endif /* __ieee754_remainder(x,p) - * Return : - * returns x REM p = x - [x/p]*p as if in infinite - * precise arithmetic, where [x/p] is the (infinite bit) + * Return : + * returns x REM p = x - [x/p]*p as if in infinite + * precise arithmetic, where [x/p] is the (infinite bit) * integer nearest x/p (in half way case choose the even one). - * Method : + * Method : * Based on fmod() return x-[x/p]chopped*p exactlp. */ diff --git a/src/libraries/runtime_math/src/e_scalb.c b/src/libraries/runtime_math/src/e_scalb.c index bb7b0ab941..952e7f8e68 100644 --- a/src/libraries/runtime_math/src/e_scalb.c +++ b/src/libraries/runtime_math/src/e_scalb.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -16,7 +16,7 @@ static char rcsid[] = "$NetBSD: e_scalb.c,v 1.6 1995/05/10 20:46:09 jtc Exp $"; /* * __ieee754_scalb(x, fn) is provide for - * passing various standard test suite. One + * passing various standard test suite. One * should use scalbn() instead. */ diff --git a/src/libraries/runtime_math/src/e_sinh.c b/src/libraries/runtime_math/src/e_sinh.c index 5dfd4026c0..074765d0d5 100644 --- a/src/libraries/runtime_math/src/e_sinh.c +++ b/src/libraries/runtime_math/src/e_sinh.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -15,15 +15,15 @@ static char rcsid[] = "$NetBSD: e_sinh.c,v 1.7 1995/05/10 20:46:13 jtc Exp $"; #endif /* __ieee754_sinh(x) - * Method : + * Method : * mathematically sinh(x) if defined to be (exp(x)-exp(-x))/2 - * 1. Replace x by |x| (sinh(-x) = -sinh(x)). - * 2. + * 1. Replace x by |x| (sinh(-x) = -sinh(x)). + * 2. * E + E/(E+1) * 0 <= x <= 22 : sinh(x) := --------------, E=expm1(x) * 2 * - * 22 <= x <= lnovft : sinh(x) := exp(x)/2 + * 22 <= x <= lnovft : sinh(x) := exp(x)/2 * lnovft <= x <= ln2ovft: sinh(x) := exp(x/2)/2 * exp(x/2) * ln2ovft < x : sinh(x) := x*shuge (overflow) * @@ -47,7 +47,7 @@ static double one = 1.0, shuge = 1.0e307; double __ieee754_sinh(x) double x; #endif -{ +{ double t,w,h; int32_t ix,jx; u_int32_t lx; @@ -57,7 +57,7 @@ static double one = 1.0, shuge = 1.0e307; ix = jx&0x7fffffff; /* x is INF or NaN */ - if(ix>=0x7ff00000) return x+x; + if(ix>=0x7ff00000) return x+x; h = 0.5; if (jx<0) h = -h; diff --git a/src/libraries/runtime_math/src/e_sqrt.c b/src/libraries/runtime_math/src/e_sqrt.c index 77d7c65327..cbaad1cb61 100644 --- a/src/libraries/runtime_math/src/e_sqrt.c +++ b/src/libraries/runtime_math/src/e_sqrt.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -19,10 +19,10 @@ static char rcsid[] = "$NetBSD: e_sqrt.c,v 1.8 1995/05/10 20:46:17 jtc Exp $"; * ------------------------------------------ * | Use the hardware sqrt if you have one | * ------------------------------------------ - * Method: - * Bit by bit method using integer arithmetic. (Slow, but portable) + * Method: + * Bit by bit method using integer arithmetic. (Slow, but portable) * 1. Normalization - * Scale x to y in [1,4) with even powers of 2: + * Scale x to y in [1,4) with even powers of 2: * find an integer k such that 1 <= (y=x*2^(2k)) < 4, then * sqrt(x) = 2^k * sqrt(y) * 2. Bit by bit computation @@ -31,9 +31,9 @@ static char rcsid[] = "$NetBSD: e_sqrt.c,v 1.8 1995/05/10 20:46:17 jtc Exp $"; * i+1 2 * s = 2*q , and y = 2 * ( y - q ). (1) * i i i i - * - * To compute q from q , one checks whether - * i+1 i + * + * To compute q from q , one checks whether + * i+1 i * * -(i+1) 2 * (q + 2 ) <= y. (2) @@ -43,12 +43,12 @@ static char rcsid[] = "$NetBSD: e_sqrt.c,v 1.8 1995/05/10 20:46:17 jtc Exp $"; * i+1 i i+1 i * * With some algebric manipulation, it is not difficult to see - * that (2) is equivalent to + * that (2) is equivalent to * -(i+1) * s + 2 <= y (3) * i i * - * The advantage of (3) is that s and y can be computed by + * The advantage of (3) is that s and y can be computed by * i i * the following recurrence formula: * if (3) is false @@ -60,10 +60,10 @@ static char rcsid[] = "$NetBSD: e_sqrt.c,v 1.8 1995/05/10 20:46:17 jtc Exp $"; * -i -(i+1) * s = s + 2 , y = y - s - 2 (5) * i+1 i i+1 i i - * - * One may easily use induction to prove (4) and (5). + * + * One may easily use induction to prove (4) and (5). * Note. Since the left hand side of (3) contain only i+2 bits, - * it does not necessary to do a full (53-bit) comparison + * it does not necessary to do a full (53-bit) comparison * in (3). * 3. Final rounding * After generating the 53 bits result, we compute one more bit. @@ -73,7 +73,7 @@ static char rcsid[] = "$NetBSD: e_sqrt.c,v 1.8 1995/05/10 20:46:17 jtc Exp $"; * The rounding mode can be detected by checking whether * huge + tiny is equal to huge, and whether huge - tiny is * equal to huge for some floating point number "huge" and "tiny". - * + * * Special cases: * sqrt(+-0) = +-0 ... exact * sqrt(inf) = inf @@ -101,17 +101,17 @@ static double one = 1.0, tiny=1.0e-300; #endif { double z; - int32_t sign = (int)0x80000000; + int32_t sign = (int)0x80000000; int32_t ix0,s0,q,m,t,i; u_int32_t r,t1,s1,ix1,q1; EXTRACT_WORDS(ix0,ix1,x); /* take care of Inf and NaN */ - if((ix0&0x7ff00000)==0x7ff00000) { + if((ix0&0x7ff00000)==0x7ff00000) { return x*x+x; /* sqrt(NaN)=NaN, sqrt(+inf)=+inf sqrt(-inf)=sNaN */ - } + } /* take care of zero */ if(ix0<=0) { if(((ix0&(~sign))|ix1)==0) return x;/* sqrt(+-0) = +-0 */ @@ -145,12 +145,12 @@ static double one = 1.0, tiny=1.0e-300; r = 0x00200000; /* r = moving bit from right to left */ while(r!=0) { - t = s0+r; - if(t<=ix0) { - s0 = t+r; - ix0 -= t; - q += r; - } + t = s0+r; + if(t<=ix0) { + s0 = t+r; + ix0 -= t; + q += r; + } ix0 += ix0 + ((ix1&sign)>>31); ix1 += ix1; r>>=1; @@ -158,9 +158,9 @@ static double one = 1.0, tiny=1.0e-300; r = sign; while(r!=0) { - t1 = s1+r; + t1 = s1+r; t = s0; - if((tone) { if (q1==(u_int32_t)0xfffffffe) q+=1; - q1+=2; + q1+=2; } else q1 += (q1&1); } @@ -197,18 +197,18 @@ static double one = 1.0, tiny=1.0e-300; /* Other methods (use floating-point arithmetic) ------------- -(This is a copy of a drafted paper by Prof W. Kahan +(This is a copy of a drafted paper by Prof W. Kahan and K.C. Ng, written in May, 1986) - Two algorithms are given here to implement sqrt(x) + Two algorithms are given here to implement sqrt(x) (IEEE double precision arithmetic) in software. Both supply sqrt(x) correctly rounded. The first algorithm (in Section A) uses newton iterations and involves four divisions. The second one uses reciproot iterations to avoid division, but requires more multiplications. Both algorithms need the ability - to chop results of arithmetic operations instead of round them, + to chop results of arithmetic operations instead of round them, and the INEXACT flag to indicate when an arithmetic operation - is executed exactly with no roundoff error, all part of the + is executed exactly with no roundoff error, all part of the standard (IEEE 754-1985). The ability to perform shift, add, subtract and logical AND operations upon 32-bit words is needed too, though not part of the standard. @@ -218,7 +218,7 @@ A. sqrt(x) by Newton Iteration (1) Initial approximation Let x0 and x1 be the leading and the trailing 32-bit words of - a floating point number x (in IEEE double format) respectively + a floating point number x (in IEEE double format) respectively 1 11 52 ...widths ------------------------------------------------------ @@ -226,7 +226,7 @@ A. sqrt(x) by Newton Iteration ------------------------------------------------------ msb lsb msb lsb ...order - + ------------------------ ------------------------ x0: |s| e | f1 | x1: | f2 | ------------------------ ------------------------ @@ -251,7 +251,7 @@ A. sqrt(x) by Newton Iteration (2) Iterative refinement - Apply Heron's rule three times to y, we have y approximates + Apply Heron's rule three times to y, we have y approximates sqrt(x) to within 1 ulp (Unit in the Last Place): y := (y+x/y)/2 ... almost 17 sig. bits @@ -276,12 +276,12 @@ A. sqrt(x) by Newton Iteration it requires more multiplications and additions. Also x must be scaled in advance to avoid spurious overflow in evaluating the expression 3y*y+x. Hence it is not recommended uless division - is slow. If division is very slow, then one should use the + is slow. If division is very slow, then one should use the reciproot algorithm given in section B. (3) Final adjustment - By twiddling y's last bit it is possible to force y to be + By twiddling y's last bit it is possible to force y to be correctly rounded according to the prevailing rounding mode as follows. Let r and i be copies of the rounding mode and inexact flag before entering the square root program. Also we @@ -312,7 +312,7 @@ A. sqrt(x) by Newton Iteration I := i; ... restore inexact flag R := r; ... restore rounded mode return sqrt(x):=y. - + (4) Special cases Square root of +inf, +-0, or NaN is itself; @@ -331,7 +331,7 @@ B. sqrt(x) by Reciproot Iteration k := 0x5fe80000 - (x0>>1); y0:= k - T2[63&(k>>14)]. ... y ~ 1/sqrt(x) to 7.8 bits - Here k is a 32-bit integer and T2[] is an integer array + Here k is a 32-bit integer and T2[] is an integer array containing correction terms. Now magically the floating value of y (y's leading 32-bit word is y0, the value of its trailing word y1 is set to zero) approximates 1/sqrt(x) @@ -352,9 +352,9 @@ B. sqrt(x) by Reciproot Iteration Apply Reciproot iteration three times to y and multiply the result by x to get an approximation z that matches sqrt(x) - to about 1 ulp. To be exact, we will have + to about 1 ulp. To be exact, we will have -1ulp < sqrt(x)-z<1.0625ulp. - + ... set rounding mode to Round-to-nearest y := y*(1.5-0.5*x*y*y) ... almost 15 sig. bits to 1/sqrt(x) y := y*((1.5-2^-30)+0.5*x*y*y)... about 29 sig. bits to 1/sqrt(x) @@ -363,14 +363,14 @@ B. sqrt(x) by Reciproot Iteration z := z + 0.5*z*(1-z*y) ... about 1 ulp to sqrt(x) Remark 2. The constant 1.5-2^-30 is chosen to bias the error so that - (a) the term z*y in the final iteration is always less than 1; + (a) the term z*y in the final iteration is always less than 1; (b) the error in the final result is biased upward so that -1 ulp < sqrt(x) - z < 1.0625 ulp instead of |sqrt(x)-z|<1.03125ulp. (3) Final adjustment - By twiddling y's last bit it is possible to force y to be + By twiddling y's last bit it is possible to force y to be correctly rounded according to the prevailing rounding mode as follows. Let r and i be copies of the rounding mode and inexact flag before entering the square root program. Also we @@ -410,27 +410,27 @@ B. sqrt(x) by Reciproot Iteration I := 1; ... Raise Inexact flag: z is not exact else { j := 1 - [(x0>>20)&1] ... j = logb(x) mod 2 - k := z1 >> 26; ... get z's 25-th and 26-th + k := z1 >> 26; ... get z's 25-th and 26-th fraction bits I := i or (k&j) or ((k&(j+j+1))!=(x1&3)); } R:= r ... restore rounded mode return sqrt(x):=z. - If multiplication is cheaper then the foregoing red tape, the + If multiplication is cheaper then the foregoing red tape, the Inexact flag can be evaluated by I := i; I := (z*z!=x) or I. - Note that z*z can overwrite I; this value must be sensed if it is + Note that z*z can overwrite I; this value must be sensed if it is True. Remark 4. If z*z = x exactly, then bit 25 to bit 0 of z1 must be zero. -------------------- - z1: | f2 | + z1: | f2 | -------------------- bit 31 bit 0 @@ -447,7 +447,6 @@ B. sqrt(x) by Reciproot Iteration 11 01 even ------------------------------------------------- - (4) Special cases (see (4) of Section A). - + (4) Special cases (see (4) of Section A). + */ - diff --git a/src/libraries/runtime_math/src/k_cos.c b/src/libraries/runtime_math/src/k_cos.c index 7219a0bf96..56b1b77029 100644 --- a/src/libraries/runtime_math/src/k_cos.c +++ b/src/libraries/runtime_math/src/k_cos.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -18,7 +18,7 @@ static char rcsid[] = "$NetBSD: k_cos.c,v 1.8 1995/05/10 20:46:22 jtc Exp $"; * __kernel_cos( x, y ) * kernel cos function on [-pi/4, pi/4], pi/4 ~ 0.785398164 * Input x is assumed to be bounded by ~pi/4 in magnitude. - * Input y is the tail of x. + * Input y is the tail of x. * * Algorithm * 1. Since cos(-x) = cos(x), we need only to consider positive x. @@ -28,15 +28,15 @@ static char rcsid[] = "$NetBSD: k_cos.c,v 1.8 1995/05/10 20:46:22 jtc Exp $"; * 4 14 * cos(x) ~ 1 - x*x/2 + C1*x + ... + C6*x * where the remez error is - * + * * | 2 4 6 8 10 12 14 | -58 * |cos(x)-(1-.5*x +C1*x +C2*x +C3*x +C4*x +C5*x +C6*x )| <= 2 - * | | - * - * 4 6 8 10 12 14 + * | | + * + * 4 6 8 10 12 14 * 4. let r = C1*x +C2*x +C3*x +C4*x +C5*x +C6*x , then * cos(x) = 1 - x*x/2 + r - * since cos(x+y) ~ cos(x) - sin(x)*y + * since cos(x+y) ~ cos(x) - sin(x)*y * ~ cos(x) - x*y, * a correction term is necessary in cos(x) and hence * cos(x+y) = 1 - (x*x/2 - (r - x*y)) @@ -53,9 +53,9 @@ static char rcsid[] = "$NetBSD: k_cos.c,v 1.8 1995/05/10 20:46:22 jtc Exp $"; #include "mathP.h" #ifdef __STDC__ -static const double +static const double #else -static double +static double #endif one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */ C1 = 4.16666666666666019037e-02, /* 0x3FA55555, 0x5555554C */ @@ -81,7 +81,7 @@ C6 = -1.13596475577881948265e-11; /* 0xBDA8FAE9, 0xBE8838D4 */ } z = x*x; r = z*(C1+z*(C2+z*(C3+z*(C4+z*(C5+z*C6))))); - if(ix < 0x3FD33333) /* if |x| < 0.3 */ + if(ix < 0x3FD33333) /* if |x| < 0.3 */ return one - (0.5*z - (z*r - x*y)); else { if(ix > 0x3fe90000) { /* x > 0.78125 */ diff --git a/src/libraries/runtime_math/src/k_rem_pio2.c b/src/libraries/runtime_math/src/k_rem_pio2.c index a7a476f65a..249097018a 100644 --- a/src/libraries/runtime_math/src/k_rem_pio2.c +++ b/src/libraries/runtime_math/src/k_rem_pio2.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -17,12 +17,12 @@ static char rcsid[] = "$NetBSD: k_rem_pio2.c,v 1.7 1995/05/10 20:46:25 jtc Exp $ /* * __kernel_rem_pio2(x,y,e0,nx,prec,ipio2) * double x[],y[]; int e0,nx,prec; int ipio2[]; - * - * __kernel_rem_pio2 return the last three digits of N with + * + * __kernel_rem_pio2 return the last three digits of N with * y = x - N*pi/2 * so that |y| < pi/2. * - * The method is to compute the integer (mod 8) and fraction parts of + * The method is to compute the integer (mod 8) and fraction parts of * (2/pi)*x without doing the full multiplication. In general we * skip the part of the product that are known to be a huge integer ( * more accurately, = 0 mod 8 ). Thus the number of operations are @@ -31,10 +31,10 @@ static char rcsid[] = "$NetBSD: k_rem_pio2.c,v 1.7 1995/05/10 20:46:25 jtc Exp $ * (2/pi) is represented by an array of 24-bit integers in ipio2[]. * * Input parameters: - * x[] The input value (must be positive) is broken into nx + * x[] The input value (must be positive) is broken into nx * pieces of 24-bit integers in double precision format. - * x[i] will be the i-th 24 bit of x. The scaled exponent - * of x[0] is given in input parameter e0 (i.e., x[0]*2^e0 + * x[i] will be the i-th 24 bit of x. The scaled exponent + * of x[0] is given in input parameter e0 (i.e., x[0]*2^e0 * match x's up to 24 bits. * * Example of breaking a double positive z into x[0]+x[1]+x[2]: @@ -71,8 +71,8 @@ static char rcsid[] = "$NetBSD: k_rem_pio2.c,v 1.7 1995/05/10 20:46:25 jtc Exp $ * 3 113 bits (quad) * * ipio2[] - * integer array, contains the (24*i)-th to (24*i+23)-th - * bit of 2/pi after binary point. The corresponding + * integer array, contains the (24*i)-th to (24*i+23)-th + * bit of 2/pi after binary point. The corresponding * floating value is * * ipio2[i] * 2^(-24(i+1)). @@ -87,8 +87,8 @@ static char rcsid[] = "$NetBSD: k_rem_pio2.c,v 1.7 1995/05/10 20:46:25 jtc Exp $ * in the computation. The recommended value is 2,3,4, * 6 for single, double, extended,and quad. * - * jz local integer variable indicating the number of - * terms of ipio2[] used. + * jz local integer variable indicating the number of + * terms of ipio2[] used. * * jx nx - 1 * @@ -108,9 +108,9 @@ static char rcsid[] = "$NetBSD: k_rem_pio2.c,v 1.7 1995/05/10 20:46:25 jtc Exp $ * exponent for q[i] would be q0-24*i. * * PIo2[] double precision array, obtained by cutting pi/2 - * into 24 bits chunks. + * into 24 bits chunks. * - * f[] ipio2[] in floating point + * f[] ipio2[] in floating point * * iq[] integer array by breaking up q[] in 24-bits chunk. * @@ -124,9 +124,9 @@ static char rcsid[] = "$NetBSD: k_rem_pio2.c,v 1.7 1995/05/10 20:46:25 jtc Exp $ /* * Constants: - * The hexadecimal values are the intended ones for the following - * constants. The decimal values may be used, provided that the - * compiler will convert from decimal to binary accurately enough + * The hexadecimal values are the intended ones for the following + * constants. The decimal values may be used, provided that the + * compiler will convert from decimal to binary accurately enough * to produce the hexadecimal values shown. */ @@ -136,7 +136,7 @@ static char rcsid[] = "$NetBSD: k_rem_pio2.c,v 1.7 1995/05/10 20:46:25 jtc Exp $ #ifdef __STDC__ static const int init_jk[] = {2,3,4,6}; /* initial value for jk */ #else -static int init_jk[] = {2,3,4,6}; +static int init_jk[] = {2,3,4,6}; #endif #ifdef __STDC__ @@ -155,9 +155,9 @@ static double PIo2[] = { }; #ifdef __STDC__ -static const double +static const double #else -static double +static double #endif zero = 0.0, one = 1.0, @@ -165,9 +165,9 @@ two24 = 1.67772160000000000000e+07, /* 0x41700000, 0x00000000 */ twon24 = 5.96046447753906250000e-08; /* 0x3E700000, 0x00000000 */ #ifdef __STDC__ - int __kernel_rem_pio2(double *x, double *y, int e0, int nx, int prec, const int32_t *ipio2) + int __kernel_rem_pio2(double *x, double *y, int e0, int nx, int prec, const int32_t *ipio2) #else - int __kernel_rem_pio2(x,y,e0,nx,prec,ipio2) + int __kernel_rem_pio2(x,y,e0,nx,prec,ipio2) double x[], y[]; int e0,nx,prec; int32_t ipio2[]; #endif { @@ -190,7 +190,7 @@ twon24 = 5.96046447753906250000e-08; /* 0x3E700000, 0x00000000 */ /* compute q[0],q[1],...q[jk] */ for (i=0;i<=jk;i++) { for(j=0,fw=0.0;j<=jx;j++){ - fw += x[j]*f[jx+i-j]; + fw += x[j]*f[jx+i-j]; q[i] = fw; } } @@ -214,7 +214,7 @@ twon24 = 5.96046447753906250000e-08; /* 0x3E700000, 0x00000000 */ i = (iq[jz-1]>>(24-q0)); n += i; iq[jz-1] -= i<<(24-q0); ih = iq[jz-1]>>(23-q0); - } + } else if(q0==0) ih = iq[jz-1]>>23; else if(z>=0.5) ih=2; @@ -265,7 +265,7 @@ twon24 = 5.96046447753906250000e-08; /* 0x3E700000, 0x00000000 */ while(iq[jz]==0) { jz--; q0-=24;} } else { /* break z into 24-bit if necessary */ z = rtapi_scalbn(z,-q0); - if(z>=two24) { + if(z>=two24) { fw = (double)((int32_t)(twon24*z)); iq[jz] = (int32_t)(z-two24*fw); jz += 1; q0 += 24; @@ -290,29 +290,29 @@ twon24 = 5.96046447753906250000e-08; /* 0x3E700000, 0x00000000 */ case 0: fw = 0.0; for (i=jz;i>=0;i--) fw += fq[i]; - y[0] = (ih==0)? fw: -fw; + y[0] = (ih==0)? fw: -fw; break; case 1: case 2: fw = 0.0; - for (i=jz;i>=0;i--) fw += fq[i]; - y[0] = (ih==0)? fw: -fw; + for (i=jz;i>=0;i--) fw += fq[i]; + y[0] = (ih==0)? fw: -fw; fw = fq[0]-fw; for (i=1;i<=jz;i++) fw += fq[i]; - y[1] = (ih==0)? fw: -fw; + y[1] = (ih==0)? fw: -fw; break; case 3: /* painful */ for (i=jz;i>0;i--) { - fw = fq[i-1]+fq[i]; + fw = fq[i-1]+fq[i]; fq[i] += fq[i-1]-fw; fq[i-1] = fw; } for (i=jz;i>1;i--) { - fw = fq[i-1]+fq[i]; + fw = fq[i-1]+fq[i]; fq[i] += fq[i-1]-fw; fq[i-1] = fw; } - for (fw=0.0,i=jz;i>=2;i--) fw += fq[i]; + for (fw=0.0,i=jz;i>=2;i--) fw += fq[i]; if(ih==0) { y[0] = fq[0]; y[1] = fq[1]; y[2] = fw; } else { diff --git a/src/libraries/runtime_math/src/k_sin.c b/src/libraries/runtime_math/src/k_sin.c index 9472b444bb..ed131f6534 100644 --- a/src/libraries/runtime_math/src/k_sin.c +++ b/src/libraries/runtime_math/src/k_sin.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -18,24 +18,24 @@ static char rcsid[] = "$NetBSD: k_sin.c,v 1.8 1995/05/10 20:46:31 jtc Exp $"; * kernel sin function on [-pi/4, pi/4], pi/4 ~ 0.7854 * Input x is assumed to be bounded by ~pi/4 in magnitude. * Input y is the tail of x. - * Input iy indicates whether y is 0. (if iy=0, y assume to be 0). + * Input iy indicates whether y is 0. (if iy=0, y assume to be 0). * * Algorithm - * 1. Since sin(-x) = -sin(x), we need only to consider positive x. + * 1. Since sin(-x) = -sin(x), we need only to consider positive x. * 2. if x < 2^-27 (hx<0x3e400000 0), return x with inexact if x!=0. * 3. sin(x) is approximated by a polynomial of degree 13 on * [0,pi/4] * 3 13 * sin(x) ~ x + S1*x + ... + S6*x * where - * + * * |sin(x) 2 4 6 8 10 12 | -58 * |----- - (1+S1*x +S2*x +S3*x +S4*x +S5*x +S6*x )| <= 2 - * | x | - * + * | x | + * * 4. sin(x+y) = sin(x) + sin'(x')*y * ~ sin(x) + (1-x*x/2)*y - * For better accuracy, let + * For better accuracy, let * 3 2 2 2 2 * r = x *(S2+x *(S3+x *(S4+x *(S5+x *S6)))) * then 3 2 @@ -46,9 +46,9 @@ static char rcsid[] = "$NetBSD: k_sin.c,v 1.8 1995/05/10 20:46:31 jtc Exp $"; #include "mathP.h" #ifdef __STDC__ -static const double +static const double #else -static double +static double #endif half = 5.00000000000000000000e-01, /* 0x3FE00000, 0x00000000 */ S1 = -1.66666666666666324348e-01, /* 0xBFC55555, 0x55555549 */ diff --git a/src/libraries/runtime_math/src/k_tan.c b/src/libraries/runtime_math/src/k_tan.c index 0674f324ce..e87b48f28d 100644 --- a/src/libraries/runtime_math/src/k_tan.c +++ b/src/libraries/runtime_math/src/k_tan.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -18,25 +18,25 @@ static char rcsid[] = "$NetBSD: k_tan.c,v 1.8 1995/05/10 20:46:37 jtc Exp $"; * kernel tan function on [-pi/4, pi/4], pi/4 ~ 0.7854 * Input x is assumed to be bounded by ~pi/4 in magnitude. * Input y is the tail of x. - * Input k indicates whether tan (if k=1) or + * Input k indicates whether tan (if k=1) or * -1/tan (if k= -1) is returned. * * Algorithm - * 1. Since tan(-x) = -tan(x), we need only to consider positive x. + * 1. Since tan(-x) = -tan(x), we need only to consider positive x. * 2. if x < 2^-28 (hx<0x3e300000 0), return x with inexact if x!=0. * 3. tan(x) is approximated by a odd polynomial of degree 27 on * [0,0.67434] * 3 27 * tan(x) ~ x + T1*x + ... + T13*x * where - * + * * |tan(x) 2 4 26 | -59.2 * |----- - (1+T1*x +T2*x +.... +T13*x )| <= 2 - * | x | - * + * | x | + * * Note: tan(x+y) = tan(x) + tan'(x)*y * ~ tan(x) + (1+x*x)*y - * Therefore, for better accuracy in computing tan(x+y), let + * Therefore, for better accuracy in computing tan(x+y), let * 3 2 2 2 2 * r = x *(T2+x *(T3+x *(...+x *(T12+x *T13)))) * then @@ -51,9 +51,9 @@ static char rcsid[] = "$NetBSD: k_tan.c,v 1.8 1995/05/10 20:46:37 jtc Exp $"; #include "runtime/rtapi_math.h" #include "mathP.h" #ifdef __STDC__ -static const double +static const double #else -static double +static double #endif one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */ pio4 = 7.85398163397448278999e-01, /* 0x3FE921FB, 0x54442D18 */ @@ -116,7 +116,7 @@ T[] = { return (double)(1-((hx>>30)&2))*(v-2.0*(x-(w*w/(w+v)-r))); } if(iy==1) return w; - else { /* if allow error up to 2 ulp, + else { /* if allow error up to 2 ulp, simply return -1.0/(x+r) here */ /* compute -1.0/(x+r) accurately */ double a,t; diff --git a/src/libraries/runtime_math/src/s_asinh.c b/src/libraries/runtime_math/src/s_asinh.c index 3e76cd93ee..ad640ecaaa 100644 --- a/src/libraries/runtime_math/src/s_asinh.c +++ b/src/libraries/runtime_math/src/s_asinh.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -16,26 +16,26 @@ static char rcsid[] = "$NetBSD: s_asinh.c,v 1.9 1995/05/12 04:57:37 jtc Exp $"; /* asinh(x) * Method : - * Based on + * Based on * asinh(x) = sign(x) * log [ |x| + sqrt(x*x+1) ] * we have * asinh(x) := x if 1+x*x=1, * := sign(x)*(log(x)+ln2)) for large |x|, else * := sign(x)*log(2|x|+1/(|x|+sqrt(x*x+1))) if|x|>2, else - * := sign(x)*log1p(|x| + x^2/(1 + sqrt(1+x^2))) + * := sign(x)*log1p(|x| + x^2/(1 + sqrt(1+x^2))) */ #include "runtime/rtapi_math.h" #include "mathP.h" #ifdef __STDC__ -static const double +static const double #else -static double +static double #endif one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */ ln2 = 6.93147180559945286227e-01, /* 0x3FE62E42, 0xFEFA39EF */ -huge= 1.00000000000000000000e+300; +huge= 1.00000000000000000000e+300; #ifdef __STDC__ double rtapi_asinh(double x) @@ -43,7 +43,7 @@ huge= 1.00000000000000000000e+300; double rtapi_asinh(x) double x; #endif -{ +{ double t,w; int32_t hx,ix; GET_HIGH_WORD(hx,x); @@ -51,7 +51,7 @@ huge= 1.00000000000000000000e+300; if(ix>=0x7ff00000) return x+x; /* x is inf or NaN */ if(ix< 0x3e300000) { /* |x|<2**-28 */ if(huge+x>one) return x; /* return x inexact except 0 */ - } + } if(ix>0x41b00000) { /* |x| > 2**28 */ w = __ieee754_log(fabs(x))+ln2; } else if (ix>0x40000000) { /* 2**28 > |x| > 2.0 */ diff --git a/src/libraries/runtime_math/src/s_atan.c b/src/libraries/runtime_math/src/s_atan.c index ea44e559d7..9f2e2f015a 100644 --- a/src/libraries/runtime_math/src/s_atan.c +++ b/src/libraries/runtime_math/src/s_atan.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -28,9 +28,9 @@ static char rcsid[] = "$NetBSD: s_atan.c,v 1.8 1995/05/10 20:46:45 jtc Exp $"; * [39/16,INF] atan(x) = atan(INF) + atan( -1/t ) * * Constants: - * The hexadecimal values are the intended ones for the following - * constants. The decimal values may be used, provided that the - * compiler will convert from decimal to binary accurately enough + * The hexadecimal values are the intended ones for the following + * constants. The decimal values may be used, provided that the + * compiler will convert from decimal to binary accurately enough * to produce the hexadecimal values shown. */ @@ -78,9 +78,9 @@ static double aT[] = { }; #ifdef __STDC__ - static const double + static const double #else - static double + static double #endif one = 1.0, huge = 1.0e300; @@ -114,9 +114,9 @@ huge = 1.0e300; x = rtapi_fabs(x); if (ix < 0x3ff30000) { /* |x| < 1.1875 */ if (ix < 0x3fe60000) { /* 7/16 <=|x|<11/16 */ - id = 0; x = (2.0*x-one)/(2.0+x); + id = 0; x = (2.0*x-one)/(2.0+x); } else { /* 11/16<=|x|< 19/16 */ - id = 1; x = (x-one)/(x+one); + id = 1; x = (x-one)/(x+one); } } else { if (ix < 0x40038000) { /* |x| < 2.4375 */ diff --git a/src/libraries/runtime_math/src/s_cbrt.c b/src/libraries/runtime_math/src/s_cbrt.c index 1c3d5b3014..733f64b12b 100644 --- a/src/libraries/runtime_math/src/s_cbrt.c +++ b/src/libraries/runtime_math/src/s_cbrt.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -40,9 +40,9 @@ F = 1.60714285714285720630e+00, /* 45/28 = 0x3FF9B6DB, 0x6DB6DB6E */ G = 3.57142857142857150787e-01; /* 5/14 = 0x3FD6DB6D, 0xB6DB6DB7 */ #ifdef __STDC__ - double rtapi_cbrt(double x) + double rtapi_cbrt(double x) #else - double rtapi_cbrt(x) + double rtapi_cbrt(x) double x; #endif { @@ -56,7 +56,7 @@ G = 3.57142857142857150787e-01; /* 5/14 = 0x3FD6DB6D, 0xB6DB6DB7 */ hx ^=sign; if(hx>=0x7ff00000) return(x+x); /* cbrt(NaN,INF) is itself */ GET_LOW_WORD(low,x); - if((hx|low)==0) + if((hx|low)==0) return(x); /* cbrt(0) is itself */ SET_HIGH_WORD(x,hx); /* x <- |x| */ @@ -72,9 +72,9 @@ G = 3.57142857142857150787e-01; /* 5/14 = 0x3FD6DB6D, 0xB6DB6DB7 */ /* new cbrt to 23 bits, may be implemented in single precision */ r=t*t/x; s=C+r*t; - t*=G+F/(s+E+D/s); + t*=G+F/(s+E+D/s); - /* chopped to 20 bits and make it larger than cbrt(x) */ + /* chopped to 20 bits and make it larger than cbrt(x) */ GET_HIGH_WORD(high,t); INSERT_WORDS(t,high+0x00000001,0); diff --git a/src/libraries/runtime_math/src/s_ceil.c b/src/libraries/runtime_math/src/s_ceil.c index 0bc361b69c..7960c96ae6 100644 --- a/src/libraries/runtime_math/src/s_ceil.c +++ b/src/libraries/runtime_math/src/s_ceil.c @@ -6,7 +6,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -47,7 +47,7 @@ static double huge = 1.0e300; if(j0<20) { if(j0<0) { /* raise inexact if x != 0 */ if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */ - if(i0<0) {i0=0x80000000;i1=0;} + if(i0<0) {i0=0x80000000;i1=0;} else if((i0|i1)!=0) { i0=0x3ff00000;i1=0;} } } else { @@ -66,7 +66,7 @@ static double huge = 1.0e300; if((i1&i)==0) return x; /* x is integral */ if(huge+x>0.0) { /* raise inexact flag */ if(i0>0) { - if(j0==20) i0+=1; + if(j0==20) i0+=1; else { j = i1 + (1<<(52-j0)); if(j=0) return one-r/x; else return r/x-one; } #ifdef __STDC__ - double erfc(double x) + double erfc(double x) #else - double erfc(x) + double erfc(x) double x; #endif { @@ -283,7 +283,7 @@ sb7 = -2.24409524465858183362e+01; /* 0xC03670E2, 0x42712D62 */ P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*pa6))))); Q = one+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*qa6))))); if(hx>=0) { - z = one-erx; return z - P/Q; + z = one-erx; return z - P/Q; } else { z = erx+P/Q; return one+z; } diff --git a/src/libraries/runtime_math/src/s_expm1.c b/src/libraries/runtime_math/src/s_expm1.c index cd61b72311..8e2a9663c3 100644 --- a/src/libraries/runtime_math/src/s_expm1.c +++ b/src/libraries/runtime_math/src/s_expm1.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -21,9 +21,9 @@ static char rcsid[] = "$NetBSD: s_expm1.c,v 1.8 1995/05/10 20:47:09 jtc Exp $"; * 1. Argument reduction: * Given x, find r and integer k such that * - * x = k*ln2 + r, |r| <= 0.5*ln2 ~ 0.34658 + * x = k*ln2 + r, |r| <= 0.5*ln2 ~ 0.34658 * - * Here a correction term c will be computed to compensate + * Here a correction term c will be computed to compensate * the error in r when rounded to a floating-point number. * * 2. Approximating expm1(r) by a special rational function on @@ -36,9 +36,9 @@ static char rcsid[] = "$NetBSD: s_expm1.c,v 1.8 1995/05/10 20:47:09 jtc Exp $"; * R1(r**2) = 6/r *((exp(r)+1)/(exp(r)-1) - 2/r) * = 6/r * ( 1 + 2.0*(1/(exp(r)-1) - 1/r)) * = 1 - r^2/60 + r^4/2520 - r^6/100800 + ... - * We use a special Reme algorithm on [0,0.347] to generate - * a polynomial of degree 5 in r*r to approximate R1. The - * maximum error of this polynomial approximation is bounded + * We use a special Reme algorithm on [0,0.347] to generate + * a polynomial of degree 5 in r*r to approximate R1. The + * maximum error of this polynomial approximation is bounded * by 2**-61. In other words, * R1(z) ~ 1.0 + Q1*z + Q2*z**2 + Q3*z**3 + Q4*z**4 + Q5*z**5 * where Q1 = -1.6666666666666567384E-2, @@ -49,28 +49,28 @@ static char rcsid[] = "$NetBSD: s_expm1.c,v 1.8 1995/05/10 20:47:09 jtc Exp $"; * (where z=r*r, and the values of Q1 to Q5 are listed below) * with error bounded by * | 5 | -61 - * | 1.0+Q1*z+...+Q5*z - R1(z) | <= 2 + * | 1.0+Q1*z+...+Q5*z - R1(z) | <= 2 * | | - * - * expm1(r) = exp(r)-1 is then computed by the following - * specific way which minimize the accumulation rounding error: + * + * expm1(r) = exp(r)-1 is then computed by the following + * specific way which minimize the accumulation rounding error: * 2 3 * r r [ 3 - (R1 + R1*r/2) ] * expm1(r) = r + --- + --- * [--------------------] * 2 2 [ 6 - r*(3 - R1*r/2) ] - * + * * To compensate the error in the argument reduction, we use - * expm1(r+c) = expm1(r) + c + expm1(r)*c - * ~ expm1(r) + c + r*c + * expm1(r+c) = expm1(r) + c + expm1(r)*c + * ~ expm1(r) + c + r*c * Thus c+r*c will be added in as the correction terms for - * expm1(r+c). Now rearrange the term to avoid optimization + * expm1(r+c). Now rearrange the term to avoid optimization * screw up: * ( 2 2 ) * ({ ( r [ R1 - (3 - R1*r/2) ] ) } r ) * expm1(r+c)~r - ({r*(--- * [--------------------]-c)-c} - --- ) * ({ ( 2 [ 6 - r*(3 - R1*r/2) ] ) } 2 ) * ( ) - * + * * = r - E * 3. Scale back to obtain expm1(x): * From step 1, we have @@ -87,7 +87,7 @@ static char rcsid[] = "$NetBSD: s_expm1.c,v 1.8 1995/05/10 20:47:09 jtc Exp $"; * else return 1.0+2.0*(r-E); * (v) if (k<-2||k>56) return 2^k(1-(E-r)) - 1 (or exp(x)-1) * (vi) if k <= 20, return 2^k((1-2^-k)-(E-r)), else - * (vii) return 2^k(1-((E+2^-k)-r)) + * (vii) return 2^k(1-((E+2^-k)-r)) * * Special cases: * expm1(INF) is INF, expm1(NaN) is NaN; @@ -99,12 +99,12 @@ static char rcsid[] = "$NetBSD: s_expm1.c,v 1.8 1995/05/10 20:47:09 jtc Exp $"; * 1 ulp (unit in the last place). * * Misc. info. - * For IEEE double + * For IEEE double * if x > 7.09782712893383973096e+02 then expm1(x) overflow * * Constants: - * The hexadecimal values are the intended ones for the following - * constants. The decimal values may be used, provided that the + * The hexadecimal values are the intended ones for the following + * constants. The decimal values may be used, provided that the * compiler will convert from decimal to binary accurately enough * to produce the hexadecimal values shown. */ @@ -158,7 +158,7 @@ Q5 = -2.01099218183624371326e-07; /* BE8AFDB7 6E09C32D */ if(hx>=0x7ff00000) { u_int32_t low; GET_LOW_WORD(low,x); - if(((hx&0xfffff)|low)!=0) + if(((hx&0xfffff)|low)!=0) return x+x; /* NaN */ else return (xsb==0)? x:-1.0;/* exp(+-inf)={inf,-1} */ } @@ -171,7 +171,7 @@ Q5 = -2.01099218183624371326e-07; /* BE8AFDB7 6E09C32D */ } /* argument reduction */ - if(hx > 0x3fd62e42) { /* if |x| > 0.5 ln2 */ + if(hx > 0x3fd62e42) { /* if |x| > 0.5 ln2 */ if(hx < 0x3FF0A2B2) { /* and |x| < 1.5 ln2 */ if(xsb==0) {hi = x - ln2_hi; lo = ln2_lo; k = 1;} @@ -185,10 +185,10 @@ Q5 = -2.01099218183624371326e-07; /* BE8AFDB7 6E09C32D */ } x = hi - lo; c = (hi-x)-lo; - } + } else if(hx < 0x3c900000) { /* when |x|<2**-54, return x */ t = huge+x; /* return x with inexact flags when x!=0 */ - return x - (t-(huge+x)); + return x - (t-(huge+x)); } else k = 0; @@ -203,7 +203,7 @@ Q5 = -2.01099218183624371326e-07; /* BE8AFDB7 6E09C32D */ e = (x*(e-c)-c); e -= hxs; if(k== -1) return 0.5*(x-e)-0.5; - if(k==1) { + if(k==1) { if(x < -0.25) return -2.0*(e-(x+0.5)); else return one+2.0*(x-e); } diff --git a/src/libraries/runtime_math/src/s_fabs.c b/src/libraries/runtime_math/src/s_fabs.c index 587fa1dda6..638b5b239f 100644 --- a/src/libraries/runtime_math/src/s_fabs.c +++ b/src/libraries/runtime_math/src/s_fabs.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ diff --git a/src/libraries/runtime_math/src/s_floor.c b/src/libraries/runtime_math/src/s_floor.c index 7d7925b046..9d528ca385 100644 --- a/src/libraries/runtime_math/src/s_floor.c +++ b/src/libraries/runtime_math/src/s_floor.c @@ -6,7 +6,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -47,7 +47,7 @@ static double huge = 1.0e300; if(j0<20) { if(j0<0) { /* raise inexact if x != 0 */ if(huge+x>0.0) {/* return 0*sign(x) if |x|<1 */ - if(i0>=0) {i0=i1=0;} + if(i0>=0) {i0=i1=0;} else if(((i0&0x7fffffff)|i1)!=0) { i0=0xbff00000;i1=0;} } @@ -67,7 +67,7 @@ static double huge = 1.0e300; if((i1&i)==0) return x; /* x is integral */ if(huge+x>0.0) { /* raise inexact flag */ if(i0<0) { - if(j0==20) i0+=1; + if(j0==20) i0+=1; else { j = i1+(1<<(52-j0)); if(j0||hx<=((int32_t)0xbfd2bec3)) { k=0;f=x;hu=1;} /* -0.2929= 0x7ff00000) return x+x; if(k!=0) { if(hx<0x43400000) { - u = 1.0+x; + u = 1.0+x; GET_HIGH_WORD(hu,u); k = (hu>>20)-1023; c = (k>0)? 1.0-(u-x):x-(u-1.0);/* correction term */ @@ -151,7 +151,7 @@ static double zero = 0.0; if(hu<0x6a09e) { SET_HIGH_WORD(u,hu|0x3ff00000); /* normalize u */ } else { - k += 1; + k += 1; SET_HIGH_WORD(u,hu|0x3fe00000); /* normalize u/2 */ hu = (0x00100000-hu)>>2; } @@ -159,14 +159,14 @@ static double zero = 0.0; } hfsq=0.5*f*f; if(hu==0) { /* |f| < 2**-20 */ - if(f==zero) {if(k==0) return zero; + if(f==zero) {if(k==0) return zero; else {c += k*ln2_lo; return k*ln2_hi+c;} } R = hfsq*(1.0-0.66666666666666666*f); if(k==0) return f-R; else return k*ln2_hi-((R-(k*ln2_lo+c))-f); } - s = f/(2.0+f); + s = f/(2.0+f); z = s*s; R = z*(Lp1+z*(Lp2+z*(Lp3+z*(Lp4+z*(Lp5+z*(Lp6+z*Lp7)))))); if(k==0) return f-(hfsq-s*(hfsq+R)); else diff --git a/src/libraries/runtime_math/src/s_logb.c b/src/libraries/runtime_math/src/s_logb.c index 7ebbc15c6f..0b9e2a1ac3 100644 --- a/src/libraries/runtime_math/src/s_logb.c +++ b/src/libraries/runtime_math/src/s_logb.c @@ -6,7 +6,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -37,8 +37,8 @@ static char rcsid[] = "$NetBSD: s_logb.c,v 1.8 1995/05/10 20:47:50 jtc Exp $"; if((ix|lx)==0) return -1.0/fabs(x); if(ix>=0x7ff00000) return x*x; if((ix>>=20)==0) /* IEEE 754 logb */ - return -1022.0; + return -1022.0; else - return (double) (ix-1023); + return (double) (ix-1023); } #endif /* !__ppc__ */ diff --git a/src/libraries/runtime_math/src/s_matherr.c b/src/libraries/runtime_math/src/s_matherr.c index a8d4c3ad28..1cb214c8b4 100644 --- a/src/libraries/runtime_math/src/s_matherr.c +++ b/src/libraries/runtime_math/src/s_matherr.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ diff --git a/src/libraries/runtime_math/src/s_modf.c b/src/libraries/runtime_math/src/s_modf.c index 0c6ef9133e..a30700e10e 100644 --- a/src/libraries/runtime_math/src/s_modf.c +++ b/src/libraries/runtime_math/src/s_modf.c @@ -6,7 +6,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -16,7 +16,7 @@ static char rcsid[] = "$NetBSD: s_modf.c,v 1.8 1995/05/10 20:47:55 jtc Exp $"; #endif /* - * modf(double x, double *iptr) + * modf(double x, double *iptr) * return fraction part of x, and return x's integral part in *iptr. * Method: * Bit twiddling. diff --git a/src/libraries/runtime_math/src/s_nextafter.c b/src/libraries/runtime_math/src/s_nextafter.c index bad1d5a807..078a8fb81d 100644 --- a/src/libraries/runtime_math/src/s_nextafter.c +++ b/src/libraries/runtime_math/src/s_nextafter.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -39,15 +39,15 @@ static char rcsid[] = "$NetBSD: s_nextafter.c,v 1.8 1995/05/10 20:47:58 jtc Exp ix = hx&0x7fffffff; /* |x| */ iy = hy&0x7fffffff; /* |y| */ - if(((ix>=0x7ff00000)&&((ix-0x7ff00000)|lx)!=0) || /* x is nan */ - ((iy>=0x7ff00000)&&((iy-0x7ff00000)|ly)!=0)) /* y is nan */ - return x+y; + if(((ix>=0x7ff00000)&&((ix-0x7ff00000)|lx)!=0) || /* x is nan */ + ((iy>=0x7ff00000)&&((iy-0x7ff00000)|ly)!=0)) /* y is nan */ + return x+y; if(x==y) return x; /* x=y, return x */ if((ix|lx)==0) { /* x == 0 */ INSERT_WORDS(x,hy&0x80000000,1); /* return +-minsubnormal */ y = x*x; if(y==x) return y; else return x; /* raise underflow flag */ - } + } if(hx>=0) { /* x > 0 */ if(hx>hy||((hx==hy)&&(lx>ly))) { /* x > y, x -= ulp */ if(lx==0) hx -= 1; diff --git a/src/libraries/runtime_math/src/s_rint.c b/src/libraries/runtime_math/src/s_rint.c index 37147540c2..8e51539a9b 100644 --- a/src/libraries/runtime_math/src/s_rint.c +++ b/src/libraries/runtime_math/src/s_rint.c @@ -6,7 +6,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -31,7 +31,7 @@ static char rcsid[] = "$NetBSD: s_rint.c,v 1.8 1995/05/10 20:48:04 jtc Exp $"; #ifdef __STDC__ static const double #else -static double +static double #endif TWO52[2]={ 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */ @@ -52,7 +52,7 @@ TWO52[2]={ sx = (i0>>31)&1; j0 = ((i0>>20)&0x7ff)-0x3ff; if(j0<20) { - if(j0<0) { + if(j0<0) { if(((i0&0x7fffffff)|i1)==0) return x; i1 |= (i0&0x0fffff); i0 &= 0xfffe0000; diff --git a/src/libraries/runtime_math/src/s_scalbn.c b/src/libraries/runtime_math/src/s_scalbn.c index aae31f11da..128c60f651 100644 --- a/src/libraries/runtime_math/src/s_scalbn.c +++ b/src/libraries/runtime_math/src/s_scalbn.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -14,10 +14,10 @@ static char rcsid[] = "$NetBSD: s_scalbn.c,v 1.8 1995/05/10 20:48:08 jtc Exp $"; #endif -/* +/* * scalbn (double x, int n) - * scalbn(x,n) returns x* 2**n computed by exponent - * manipulation rather than by actually performing an + * scalbn(x,n) returns x* 2**n computed by exponent + * manipulation rather than by actually performing an * exponentiation or a multiplication. */ @@ -46,13 +46,13 @@ tiny = 1.0e-300; k = (hx&0x7ff00000)>>20; /* extract exponent */ if (k==0) { /* 0 or subnormal x */ if ((lx|(hx&0x7fffffff))==0) return x; /* +-0 */ - x *= two54; + x *= two54; GET_HIGH_WORD(hx,x); - k = ((hx&0x7ff00000)>>20) - 54; + k = ((hx&0x7ff00000)>>20) - 54; if (n< -50000) return tiny*x; /*underflow*/ } if (k==0x7ff) return x+x; /* NaN or Inf */ - k = k+n; + k = k+n; if (k > 0x7fe) return huge*rtapi_copysign(huge,x); /* overflow */ if (k > 0) /* normal result */ {SET_HIGH_WORD(x,(hx&0x800fffff)|(k<<20)); return x;} diff --git a/src/libraries/runtime_math/src/s_significand.c b/src/libraries/runtime_math/src/s_significand.c index 4e4de64df2..bac0990256 100644 --- a/src/libraries/runtime_math/src/s_significand.c +++ b/src/libraries/runtime_math/src/s_significand.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ diff --git a/src/libraries/runtime_math/src/s_sin.c b/src/libraries/runtime_math/src/s_sin.c index a54b804930..56699283a0 100644 --- a/src/libraries/runtime_math/src/s_sin.c +++ b/src/libraries/runtime_math/src/s_sin.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -23,8 +23,8 @@ static char rcsid[] = "$NetBSD: s_sin.c,v 1.7 1995/05/10 20:48:15 jtc Exp $"; * __ieee754_rem_pio2 ... argument reduction routine * * Method. - * Let S,C and T denote the sin, cos and tan respectively on - * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 + * Let S,C and T denote the sin, cos and tan respectively on + * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 * in [-pi/4 , +pi/4], and let n = k mod 4. * We have * @@ -42,7 +42,7 @@ static char rcsid[] = "$NetBSD: s_sin.c,v 1.7 1995/05/10 20:48:15 jtc Exp $"; * trig(NaN) is that NaN; * * Accuracy: - * TRIG(x) returns trig(x) nearly rounded + * TRIG(x) returns trig(x) nearly rounded */ #include "runtime/rtapi_math.h" diff --git a/src/libraries/runtime_math/src/s_tan.c b/src/libraries/runtime_math/src/s_tan.c index d6dcdf0a44..220536b4d0 100644 --- a/src/libraries/runtime_math/src/s_tan.c +++ b/src/libraries/runtime_math/src/s_tan.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -22,8 +22,8 @@ static char rcsid[] = "$NetBSD: s_tan.c,v 1.7 1995/05/10 20:48:18 jtc Exp $"; * __ieee754_rem_pio2 ... argument reduction routine * * Method. - * Let S,C and T denote the sin, cos and tan respectively on - * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 + * Let S,C and T denote the sin, cos and tan respectively on + * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 * in [-pi/4 , +pi/4], and let n = k mod 4. * We have * @@ -41,7 +41,7 @@ static char rcsid[] = "$NetBSD: s_tan.c,v 1.7 1995/05/10 20:48:18 jtc Exp $"; * trig(NaN) is that NaN; * * Accuracy: - * TRIG(x) returns trig(x) nearly rounded + * TRIG(x) returns trig(x) nearly rounded */ #include "runtime/rtapi_math.h" diff --git a/src/libraries/runtime_math/src/s_tanh.c b/src/libraries/runtime_math/src/s_tanh.c index 83183d3674..1a69aea6b5 100644 --- a/src/libraries/runtime_math/src/s_tanh.c +++ b/src/libraries/runtime_math/src/s_tanh.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -62,7 +62,7 @@ static double one=1.0, two=2.0, tiny = 1.0e-300; ix = jx&0x7fffffff; /* x is INF or NaN */ - if(ix>=0x7ff00000) { + if(ix>=0x7ff00000) { if (jx>=0) return one/x+one; /* tanh(+-inf)=+-1 */ else return one/x-one; /* tanh(NaN) = NaN */ } diff --git a/src/libraries/runtime_math/src/w_acos.c b/src/libraries/runtime_math/src/w_acos.c index 5a3be82f85..91847c9880 100644 --- a/src/libraries/runtime_math/src/w_acos.c +++ b/src/libraries/runtime_math/src/w_acos.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ diff --git a/src/libraries/runtime_math/src/w_acosh.c b/src/libraries/runtime_math/src/w_acosh.c index ca69f57969..b1420439b4 100644 --- a/src/libraries/runtime_math/src/w_acosh.c +++ b/src/libraries/runtime_math/src/w_acosh.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -14,7 +14,7 @@ static char rcsid[] = "$NetBSD: w_acosh.c,v 1.6 1995/05/10 20:48:31 jtc Exp $"; #endif -/* +/* * wrapper acosh(x) */ diff --git a/src/libraries/runtime_math/src/w_asin.c b/src/libraries/runtime_math/src/w_asin.c index b218f58644..50e6d831c1 100644 --- a/src/libraries/runtime_math/src/w_asin.c +++ b/src/libraries/runtime_math/src/w_asin.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -14,7 +14,7 @@ static char rcsid[] = "$NetBSD: w_asin.c,v 1.6 1995/05/10 20:48:35 jtc Exp $"; #endif -/* +/* * wrapper asin(x) */ diff --git a/src/libraries/runtime_math/src/w_atan2.c b/src/libraries/runtime_math/src/w_atan2.c index 6390a7fcba..718d1e2022 100644 --- a/src/libraries/runtime_math/src/w_atan2.c +++ b/src/libraries/runtime_math/src/w_atan2.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -14,7 +14,7 @@ static char rcsid[] = "$NetBSD: w_atan2.c,v 1.6 1995/05/10 20:48:39 jtc Exp $"; #endif -/* +/* * wrapper atan2(y,x) */ #include "runtime/rtapi_math.h" diff --git a/src/libraries/runtime_math/src/w_atanh.c b/src/libraries/runtime_math/src/w_atanh.c index b8206079b1..ca864642a2 100644 --- a/src/libraries/runtime_math/src/w_atanh.c +++ b/src/libraries/runtime_math/src/w_atanh.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -14,7 +14,7 @@ static char rcsid[] = "$NetBSD: w_atanh.c,v 1.6 1995/05/10 20:48:43 jtc Exp $"; #endif -/* +/* * wrapper atanh(x) */ @@ -39,7 +39,7 @@ static char rcsid[] = "$NetBSD: w_atanh.c,v 1.6 1995/05/10 20:48:43 jtc Exp $"; if(y>=1.0) { if(y>1.0) return __kernel_standard(x,x,30); /* atanh(|x|>1) */ - else + else return __kernel_standard(x,x,31); /* atanh(|x|==1) */ } else return z; diff --git a/src/libraries/runtime_math/src/w_cabs.c b/src/libraries/runtime_math/src/w_cabs.c index 77589445ab..08b83f998a 100644 --- a/src/libraries/runtime_math/src/w_cabs.c +++ b/src/libraries/runtime_math/src/w_cabs.c @@ -1,6 +1,6 @@ /* * cabs() wrapper for hypot(). - * + * * Written by J.T. Conklin, * Placed into the Public Domain, 1994. */ diff --git a/src/libraries/runtime_math/src/w_cosh.c b/src/libraries/runtime_math/src/w_cosh.c index 606807e769..2bdff2dd73 100644 --- a/src/libraries/runtime_math/src/w_cosh.c +++ b/src/libraries/runtime_math/src/w_cosh.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -14,7 +14,7 @@ static char rcsid[] = "$NetBSD: w_cosh.c,v 1.6 1995/05/10 20:48:47 jtc Exp $"; #endif -/* +/* * wrapper cosh(x) */ @@ -34,7 +34,7 @@ static char rcsid[] = "$NetBSD: w_cosh.c,v 1.6 1995/05/10 20:48:47 jtc Exp $"; double z; z = __ieee754_cosh(x); if(_LIB_VERSION == _IEEE_ || isnan(x)) return z; - if(fabs(x)>7.10475860073943863426e+02) { + if(fabs(x)>7.10475860073943863426e+02) { return __kernel_standard(x,x,5); /* cosh overflow */ } else return z; diff --git a/src/libraries/runtime_math/src/w_drem.c b/src/libraries/runtime_math/src/w_drem.c index 98cf931aae..1b717d8eeb 100644 --- a/src/libraries/runtime_math/src/w_drem.c +++ b/src/libraries/runtime_math/src/w_drem.c @@ -1,6 +1,6 @@ /* * drem() wrapper for remainder(). - * + * * Written by J.T. Conklin, * Placed into the Public Domain, 1994. */ diff --git a/src/libraries/runtime_math/src/w_exp.c b/src/libraries/runtime_math/src/w_exp.c index abe2542930..bd515b6b43 100644 --- a/src/libraries/runtime_math/src/w_exp.c +++ b/src/libraries/runtime_math/src/w_exp.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -14,7 +14,7 @@ static char rcsid[] = "$NetBSD: w_exp.c,v 1.6 1995/05/10 20:48:51 jtc Exp $"; #endif -/* +/* * wrapper exp(x) */ @@ -47,7 +47,7 @@ u_threshold= -7.45133219101941108420e+02; /* 0xc0874910, 0xD52D3051 */ return __kernel_standard(x,x,6); /* exp overflow */ else if(x1. - * + * */ #include "runtime/rtapi_math.h" diff --git a/src/libraries/runtime_math/src/w_lgamma.c b/src/libraries/runtime_math/src/w_lgamma.c index ea087c7aa7..44cbc5e36b 100644 --- a/src/libraries/runtime_math/src/w_lgamma.c +++ b/src/libraries/runtime_math/src/w_lgamma.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -46,4 +46,4 @@ extern int signgam; } else return y; #endif -} +} diff --git a/src/libraries/runtime_math/src/w_lgamma_r.c b/src/libraries/runtime_math/src/w_lgamma_r.c index 8371cc8e74..c6f98b47f7 100644 --- a/src/libraries/runtime_math/src/w_lgamma_r.c +++ b/src/libraries/runtime_math/src/w_lgamma_r.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -14,7 +14,7 @@ static char rcsid[] = "$NetBSD: w_lgamma_r.c,v 1.6 1995/05/10 20:49:27 jtc Exp $"; #endif -/* +/* * wrapper double lgamma_r(double x, int *signgamp) */ @@ -43,4 +43,4 @@ static char rcsid[] = "$NetBSD: w_lgamma_r.c,v 1.6 1995/05/10 20:49:27 jtc Exp $ } else return y; #endif -} +} diff --git a/src/libraries/runtime_math/src/w_log.c b/src/libraries/runtime_math/src/w_log.c index 645ec7aeb1..5866e7b905 100644 --- a/src/libraries/runtime_math/src/w_log.c +++ b/src/libraries/runtime_math/src/w_log.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -37,7 +37,7 @@ static char rcsid[] = "$NetBSD: w_log.c,v 1.6 1995/05/10 20:49:33 jtc Exp $"; if(_LIB_VERSION == _IEEE_ || isnan(x) || x > 0.0) return z; if(x==0.0) return __kernel_standard(x,x,16); /* log(0) */ - else + else return __kernel_standard(x,x,17); /* log(x<0) */ #endif } diff --git a/src/libraries/runtime_math/src/w_log10.c b/src/libraries/runtime_math/src/w_log10.c index 5dee99c3e1..6aecb79ca8 100644 --- a/src/libraries/runtime_math/src/w_log10.c +++ b/src/libraries/runtime_math/src/w_log10.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -14,7 +14,7 @@ static char rcsid[] = "$NetBSD: w_log10.c,v 1.6 1995/05/10 20:49:35 jtc Exp $"; #endif -/* +/* * wrapper log10(X) */ @@ -38,7 +38,7 @@ static char rcsid[] = "$NetBSD: w_log10.c,v 1.6 1995/05/10 20:49:35 jtc Exp $"; if(x<=0.0) { if(x==0.0) return __kernel_standard(x,x,18); /* log10(0) */ - else + else return __kernel_standard(x,x,19); /* log10(x<0) */ } else return z; diff --git a/src/libraries/runtime_math/src/w_pow.c b/src/libraries/runtime_math/src/w_pow.c index f12926fbb0..46c319fa43 100644 --- a/src/libraries/runtime_math/src/w_pow.c +++ b/src/libraries/runtime_math/src/w_pow.c @@ -7,12 +7,12 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ -/* +/* * wrapper pow(x,y) return x**y */ @@ -34,12 +34,12 @@ z=__ieee754_pow(x,y); if(_LIB_VERSION == _IEEE_|| isnan(y)) return z; if(isnan(x)) { - if(y==0.0) + if(y==0.0) return __kernel_standard(x,y,42); /* pow(NaN,0.0) */ - else + else return z; } - if(x==0.0){ + if(x==0.0){ if(y==0.0) return __kernel_standard(x,y,20); /* pow(0.0,0.0) */ if(finite(y)&&y<0.0) @@ -50,10 +50,10 @@ if(finite(x)&&finite(y)) { if(isnan(z)) return __kernel_standard(x,y,24); /* pow neg**non-int */ - else + else return __kernel_standard(x,y,21); /* pow overflow */ } - } + } if(z==0.0&&finite(x)&&finite(y)) return __kernel_standard(x,y,22); /* pow underflow */ return z; diff --git a/src/libraries/runtime_math/src/w_remainder.c b/src/libraries/runtime_math/src/w_remainder.c index a4a9cd6ef6..cf30faea54 100644 --- a/src/libraries/runtime_math/src/w_remainder.c +++ b/src/libraries/runtime_math/src/w_remainder.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -14,7 +14,7 @@ static char rcsid[] = "$NetBSD: w_remainder.c,v 1.6 1995/05/10 20:49:44 jtc Exp $"; #endif -/* +/* * wrapper remainder(x,p) */ @@ -34,7 +34,7 @@ static char rcsid[] = "$NetBSD: w_remainder.c,v 1.6 1995/05/10 20:49:44 jtc Exp double z; z = __ieee754_remainder(x,y); if(_LIB_VERSION == _IEEE_ || isnan(y)) return z; - if(y==0.0) + if(y==0.0) return __kernel_standard(x,y,28); /* remainder(x,0) */ else return z; diff --git a/src/libraries/runtime_math/src/w_scalb.c b/src/libraries/runtime_math/src/w_scalb.c index 19bfaed9b8..67e6e414ba 100644 --- a/src/libraries/runtime_math/src/w_scalb.c +++ b/src/libraries/runtime_math/src/w_scalb.c @@ -6,7 +6,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -17,7 +17,7 @@ static char rcsid[] = "$NetBSD: w_scalb.c,v 1.6 1995/05/10 20:49:48 jtc Exp $"; /* * wrapper scalb(double x, double fn) is provide for - * passing various standard test suite. One + * passing various standard test suite. One * should use scalbn() instead. */ @@ -54,11 +54,11 @@ extern int libm_errno; } if(z==0.0&&z!=x) { return __kernel_standard(x,(double)fn,33); /* scalb underflow */ - } + } #ifndef _SCALB_INT if(!finite(fn)) libm_errno = ERANGE; #endif return z; -#endif +#endif } #endif /* !__ppc__ */ diff --git a/src/libraries/runtime_math/src/w_sinh.c b/src/libraries/runtime_math/src/w_sinh.c index 0c1936ebb7..b896b74c9a 100644 --- a/src/libraries/runtime_math/src/w_sinh.c +++ b/src/libraries/runtime_math/src/w_sinh.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -14,7 +14,7 @@ static char rcsid[] = "$NetBSD: w_sinh.c,v 1.6 1995/05/10 20:49:51 jtc Exp $"; #endif -/* +/* * wrapper sinh(x) */ @@ -31,7 +31,7 @@ static char rcsid[] = "$NetBSD: w_sinh.c,v 1.6 1995/05/10 20:49:51 jtc Exp $"; #ifdef _IEEE_LIBM return __ieee754_sinh(x); #else - double z; + double z; z = __ieee754_sinh(x); if(_LIB_VERSION == _IEEE_) return z; if(!finite(z)&&finite(x)) { diff --git a/src/libraries/runtime_math/src/w_sqrt.c b/src/libraries/runtime_math/src/w_sqrt.c index 530996c019..58919269cc 100644 --- a/src/libraries/runtime_math/src/w_sqrt.c +++ b/src/libraries/runtime_math/src/w_sqrt.c @@ -5,7 +5,7 @@ * * Developed at SunPro, a Sun Microsystems, Inc. business. * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice + * software is freely granted, provided that this notice * is preserved. * ==================================================== */ @@ -14,7 +14,7 @@ static char rcsid[] = "$NetBSD: w_sqrt.c,v 1.6 1995/05/10 20:49:55 jtc Exp $"; #endif -/* +/* * wrapper sqrt(x) */ diff --git a/src/libraries/runtime_memory/README.asciidoc b/src/libraries/runtime_memory/README.asciidoc index a78f17ce11..3c58375324 100644 --- a/src/libraries/runtime_memory/README.asciidoc +++ b/src/libraries/runtime_memory/README.asciidoc @@ -1,7 +1,7 @@ = Runtime memory -:author: Jakub Fišer -:description: Runtime memory sourcetree README -:sectanchors: +:author: Jakub Fišer +:description: Runtime memory sourcetree README +:sectanchors: :url-repo: https://machinekit.io Shared memory driver implements HAL memory allocation and deallocation operations and affiliated functions. @@ -27,4 +27,4 @@ Objects created in `CMAKE` Machinekit-HAL's namespace used for building. * Standard shared library used for compile time linking into binaries * Transitively exports **PUBLIC** interface header files through transitive dependencies -**This is ungly and hopefully temporary solution. For long-term solution decision needs to be made on the Linux kernel module driver.** \ No newline at end of file +**This is ungly and hopefully temporary solution. For long-term solution decision needs to be made on the Linux kernel module driver.** diff --git a/src/libraries/runtime_memory/src/shmdrv.c b/src/libraries/runtime_memory/src/shmdrv.c old mode 100755 new mode 100644 index 96a56ec109..766ff29305 --- a/src/libraries/runtime_memory/src/shmdrv.c +++ b/src/libraries/runtime_memory/src/shmdrv.c @@ -58,7 +58,7 @@ #include #include #include -#include +#include #include #include #include @@ -160,7 +160,7 @@ static void shmdrv_vma_open(struct vm_area_struct *vma) struct shm_segment *seg = &shm_segments[segno]; dbg("VMA open, virt %lx, phys %lx length %ld segno=%d", - vma->vm_start, + vma->vm_start, vma->vm_pgoff << PAGE_SHIFT, vma->vm_end - vma->vm_start, segno); @@ -248,7 +248,7 @@ static int shm_mmap(struct file *file, struct vm_area_struct *vma) segno = (int) file->private_data; dbg("%s(%ld) , segno=%d", - __func__, + __func__, vma->vm_end - vma->vm_start, segno); @@ -292,7 +292,7 @@ static int shm_nonstandard_attach(struct shm_segment *segs) { dbg(""); - // ll_mutex already engaged + // ll_mutex already engaged if (segs->flags & OUTBOARD1_CREATE) { dbg("attach code for outboard type 1 missing"); return -EINVAL; @@ -326,9 +326,9 @@ static int shm_nonstandard_detach(struct shm_segment *segs) static int shm_open(struct inode* inode, struct file* filp) { // no valid segment associated yet - // this is set in a successful + // this is set in a successful // IOC_SHM_CREATE or IOC_SHM_ATTACH ioctl - filp->private_data = (void *) -1; + filp->private_data = (void *) -1; dbg(""); nopen++; @@ -424,7 +424,7 @@ void init_shmemdata(void) // the in-kernel exported API: -int shmdrv_status(struct shm_status *shmstat) +int shmdrv_status(struct shm_status *shmstat) { struct shm_segment *seg; int ret = 0, segno; @@ -462,13 +462,13 @@ int shmdrv_attach_pid(struct shm_status *shmstat, void **shm, int pid) ret = find_shm_by_key(shmstat->key); if (ret < 0) { - dbg("shm segment does not exist: key=0x%8.8x ret=%d", + dbg("shm segment does not exist: key=0x%8.8x ret=%d", shmstat->key, ret); goto done; } seg = &shm_segments[ret]; // dont increment n_uattach, this will be handled during mmap() - if (!pid) + if (!pid) seg->n_kattach++; shmstat->id = ret; @@ -502,7 +502,7 @@ static int shmdrv_create_pid(struct shm_status *shmstat, int pid) } segno = find_shm_by_key(shmstat->key); if (segno > -1) { - err("shm segment exists: key=0x%8.8x pos=%d pid %d", shmstat->key, segno, pid); + err("shm segment exists: key=0x%8.8x pos=%d pid %d", shmstat->key, segno, pid); ret = -EINVAL; goto done; } @@ -531,7 +531,7 @@ static int shmdrv_create_pid(struct shm_status *shmstat, int pid) ret = -ENOMEM; } if (ret) { - err("IOC_SHM_CREATE: shm_malloc fail size=%zu key=0x%8.8x pid %d", + err("IOC_SHM_CREATE: shm_malloc fail size=%zu key=0x%8.8x pid %d", seg->size, seg->key, pid); goto done; } @@ -607,7 +607,7 @@ EXPORT_SYMBOL(shmdrv_detach); static long shm_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { int ret = 0, segno; - struct shm_status sm; + struct shm_status sm; struct shm_segment *seg; if (down_interruptible(&shm_mutex)) @@ -641,7 +641,7 @@ static long shm_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned lon } segno = shmdrv_create_pid(&sm, current->pid); if (segno < 0) { - err("IOC_SHM_CREATE: shmdrv_create_pid fail key=0x%8.8x size=%zu", + err("IOC_SHM_CREATE: shmdrv_create_pid fail key=0x%8.8x size=%zu", sm.key,sm.size); goto done; } @@ -715,7 +715,7 @@ static struct miscdevice shm_misc_dev = { .mode = (S_IRUSR|S_IRGRP|S_IWUSR|S_IWGRP), }; -static ssize_t sys_status(struct device* dev, struct device_attribute* attr, +static ssize_t sys_status(struct device* dev, struct device_attribute* attr, char* buf, size_t count) { int i; @@ -742,9 +742,9 @@ static ssize_t sys_status(struct device* dev, struct device_attribute* attr, kattach += seg->n_kattach; } } - size = scnprintf(buf, left, - "%d segment(s), open=%d u=%d k=%d total=%d aligned=%d alloced=%zuK freed=%zuK balance=%zuK\n", - nsegments, nopen, uattach, kattach, total_alloc, total_alloc_aligned, + size = scnprintf(buf, left, + "%d segment(s), open=%d u=%d k=%d total=%d aligned=%d alloced=%zuK freed=%zuK balance=%zuK\n", + nsegments, nopen, uattach, kattach, total_alloc, total_alloc_aligned, allocated >> 10, freed >> 10, (allocated-freed) >> 10); left -= size; buf += size; @@ -760,7 +760,7 @@ static ssize_t sys_status(struct device* dev, struct device_attribute* attr, } size = scnprintf(buf, left, "%d: key=0x%8.8x size=%zu aligned=%zu ul=%d k=%d creator=%d mem=%p\n", - i, seg->key, seg->size, seg->act_size, + i, seg->key, seg->size, seg->act_size, seg->n_uattach, seg->n_kattach, seg->creator, seg->kmem); left -= size; @@ -815,7 +815,7 @@ static int shmdrv_init(void) { return 0; } -static void shmdrv_exit(void) +static void shmdrv_exit(void) { int ret; diff --git a/src/libraries/runtime_memory/src/shmdrvapi.c b/src/libraries/runtime_memory/src/shmdrvapi.c index 442e1ba9ff..fbf554cc8b 100644 --- a/src/libraries/runtime_memory/src/shmdrvapi.c +++ b/src/libraries/runtime_memory/src/shmdrvapi.c @@ -119,8 +119,8 @@ int shmdrv_attach(struct shm_status *shmstat, void **shm) if (retval) return retval; - *shm = mmap(NULL, shmstat->size, - PROT_READ | PROT_WRITE, MAP_SHARED | MAP_LOCKED, + *shm = mmap(NULL, shmstat->size, + PROT_READ | PROT_WRITE, MAP_SHARED | MAP_LOCKED, shmstat->driver_fd, 0); if (*shm == (void *)MAP_FAILED) { return -errno; @@ -178,7 +178,7 @@ int shm_common_new(int key, int *size, int instance, void **shmptr, int create) return -ENOENT; } if (retval) { // didnt exist, so create - retval = shmdrv_create(&sm); + retval = shmdrv_create(&sm); if (retval < 0) { return retval; } @@ -191,7 +191,7 @@ int shm_common_new(int key, int *size, int instance, void **shmptr, int create) return retval; } // if size was passed in as 0 (attach), fill in actual size - if (size && (*size == 0)) + if (size && (*size == 0)) *size = sm.size; close(sm.driver_fd); return is_new; @@ -208,7 +208,7 @@ int shm_common_new(int key, int *size, int instance, void **shmptr, int create) mmap_size = *size; sprintf(segment_name, SHM_FMT, instance, key); old_umask = umask(0); //S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); - if (create && ((shmfd = shm_open(segment_name, + if (create && ((shmfd = shm_open(segment_name, (O_CREAT | O_EXCL | O_RDWR), (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP))) > 0)) { // initial creation diff --git a/src/libraries/samstr_memdefs/include/samstr_memdefs/samstr_memdefs.h b/src/libraries/samstr_memdefs/include/samstr_memdefs/samstr_memdefs.h index 6b0563a963..32229d06a3 100644 --- a/src/libraries/samstr_memdefs/include/samstr_memdefs/samstr_memdefs.h +++ b/src/libraries/samstr_memdefs/include/samstr_memdefs/samstr_memdefs.h @@ -5,7 +5,7 @@ * * Author: John Kasunich * License: GPL Version 2 -* +* * Copyright (c) 2006 All rights reserved. * ********************************************************************/ @@ -48,4 +48,3 @@ typedef union { hal_u32_t *hu32; hal_s32_t *hs32; } pin_data_t; - diff --git a/src/libraries/service/src/pyproject.toml.in b/src/libraries/service/src/pyproject.toml.in index e70dfb7a62..4161a01564 100644 --- a/src/libraries/service/src/pyproject.toml.in +++ b/src/libraries/service/src/pyproject.toml.in @@ -52,4 +52,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/libraries/service/src/service.py b/src/libraries/service/src/service.py index 88f9ed7538..41e358994a 100644 --- a/src/libraries/service/src/service.py +++ b/src/libraries/service/src/service.py @@ -1,4 +1,3 @@ -# coding=utf-8 import avahi import dbus import os diff --git a/src/libraries/service_discovery/src/pyproject.toml.in b/src/libraries/service_discovery/src/pyproject.toml.in index e3a3e192e6..99489cebac 100644 --- a/src/libraries/service_discovery/src/pyproject.toml.in +++ b/src/libraries/service_discovery/src/pyproject.toml.in @@ -52,4 +52,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/libraries/service_discovery/src/service_discovery.py b/src/libraries/service_discovery/src/service_discovery.py index e99afc13cb..76973f3041 100644 --- a/src/libraries/service_discovery/src/service_discovery.py +++ b/src/libraries/service_discovery/src/service_discovery.py @@ -1,4 +1,3 @@ -# coding=utf-8 from __future__ import print_function from __future__ import print_function diff --git a/src/libraries/symbol_visibility/README.asciidoc b/src/libraries/symbol_visibility/README.asciidoc index 780acd0e91..3b4c8b7aa9 100644 --- a/src/libraries/symbol_visibility/README.asciidoc +++ b/src/libraries/symbol_visibility/README.asciidoc @@ -1,7 +1,7 @@ = Symbol Visibility :author: Jakub Fišer -:description: Symbol Visibility sourcetree README -:sectanchors: +:description: Symbol Visibility sourcetree README +:sectanchors: :url-repo: https://machinekit.io Symbol Visibility provides a Machinekit-HAL specific CMake module used to limit symbol visibility diff --git a/src/libraries/syslog_async/README.asciidoc b/src/libraries/syslog_async/README.asciidoc index c9ea7afc57..d06d814079 100644 --- a/src/libraries/syslog_async/README.asciidoc +++ b/src/libraries/syslog_async/README.asciidoc @@ -1,7 +1,7 @@ = Syslog async :author: Jakub Fišer -:description: Syslog_async sourcetree README -:sectanchors: +:description: Syslog_async sourcetree README +:sectanchors: :url-repo: https://machinekit.io Syslog_async is a library from Simon Kelley used for block-less processing of `syslog()` function calls. @@ -20,4 +20,4 @@ Objects created in `CMAKE` Machinekit-HAL's namespace used for building. === syslog_async (`libsyslog_async.so`) * Standard shared library used for compile time linking into binaries -* Transitively exports **PUBLIC** interface header files through transitive dependencies \ No newline at end of file +* Transitively exports **PUBLIC** interface header files through transitive dependencies diff --git a/src/libraries/upci/include/upci/bitfile.h b/src/libraries/upci/include/upci/bitfile.h index d0e682c716..e8b88f6562 100644 --- a/src/libraries/upci/include/upci/bitfile.h +++ b/src/libraries/upci/include/upci/bitfile.h @@ -111,7 +111,7 @@ struct bitfile *bitfile_read(char *fname); success, or -1 on failure. It will write the standard xilinx 'a' through 'e' chunks first, and in order, even if they are not that way in the structure, followed by any extra chunks in the order in which - they are encounterd. (This is to ensure compatibility with other + they are encounterd. (This is to ensure compatibility with other programs that read bitfiles - this library doesn't care about chunk ordering, but other programs might.) */ diff --git a/src/libraries/upci/src/bitfile.c b/src/libraries/upci/src/bitfile.c index e0a54951ea..98206bcc77 100644 --- a/src/libraries/upci/src/bitfile.c +++ b/src/libraries/upci/src/bitfile.c @@ -393,4 +393,3 @@ void bitfile_print_xilinx_info(struct bitfile *bf) printf ( "Bitstream size: %d\n", ch->len ); } } - diff --git a/src/libraries/upci/src/upci.c b/src/libraries/upci/src/upci.c index cf1a57e44b..a189880402 100644 --- a/src/libraries/upci/src/upci.c +++ b/src/libraries/upci/src/upci.c @@ -534,7 +534,7 @@ __u8 upci_read_u8(int rd, __u32 offset) volatile __u8 *ptr, data; /* test for out of range, not mapped, or offset beyond end of region */ - if ((rd < 0 ) || ( rd >= MAX_REGIONS ) || + if ((rd < 0 ) || ( rd >= MAX_REGIONS ) || ( (reg = regions[rd]) == NULL ) || ( offset > reg->size )) return 0; /* get the data */ if ( reg->type == UPCI_REG_IO ) { @@ -656,7 +656,7 @@ void upci_write_u8(int rd, __u32 offset, __u8 data) volatile __u8 *ptr; /* test for out of range, not mapped, or offset beyond end of region */ - if ((rd < 0 ) || ( rd >= MAX_REGIONS ) || + if ((rd < 0 ) || ( rd >= MAX_REGIONS ) || ( (reg = regions[rd]) == NULL ) || ( offset > reg->size )) return; /* write the data */ if ( reg->type == UPCI_REG_IO ) { diff --git a/src/libraries/user_pci/include/user_pci/device.h b/src/libraries/user_pci/include/user_pci/device.h old mode 100755 new mode 100644 index ed87c65c6e..fe848bc0ef --- a/src/libraries/user_pci/include/user_pci/device.h +++ b/src/libraries/user_pci/include/user_pci/device.h @@ -7,7 +7,7 @@ * Author(s): Charles Steinkuehler * License: GNU LGPL Version 2.1 or (at your option) any later version. * - * Last change: + * Last change: * 2012-Dec-17 Charles Steinkuehler * Initial version ********************************************************************/ diff --git a/src/libraries/user_pci/include/user_pci/firmware.h b/src/libraries/user_pci/include/user_pci/firmware.h index a7df51c856..eb22e766fb 100644 --- a/src/libraries/user_pci/include/user_pci/firmware.h +++ b/src/libraries/user_pci/include/user_pci/firmware.h @@ -1,13 +1,13 @@ /******************************************************************** * Description: firmware.h - * Provides functions for loading firmware when running kernel + * Provides functions for loading firmware when running kernel * modules in user space, emulating part of * #include * * Author(s): Charles Steinkuehler * License: GNU LGPL Version 2.1 or (at your option) any later version. * - * Last change: + * Last change: * 2012-Dec-17 Charles Steinkuehler * Initial version ********************************************************************/ diff --git a/src/libraries/user_pci/include/user_pci/gfp.h b/src/libraries/user_pci/include/user_pci/gfp.h old mode 100755 new mode 100644 index 60c47b76b3..068c1af4c2 --- a/src/libraries/user_pci/include/user_pci/gfp.h +++ b/src/libraries/user_pci/include/user_pci/gfp.h @@ -7,7 +7,7 @@ * Author(s): Charles Steinkuehler * License: GNU LGPL Version 2.1 or (at your option) any later version. * - * Last change: + * Last change: * 2012-Dec-17 Charles Steinkuehler * Initial version ********************************************************************/ diff --git a/src/libraries/user_pci/include/user_pci/list.h b/src/libraries/user_pci/include/user_pci/list.h index 804c2f67f7..49d66c63a0 100644 --- a/src/libraries/user_pci/include/user_pci/list.h +++ b/src/libraries/user_pci/include/user_pci/list.h @@ -1,7 +1,7 @@ /******************************************************************** * Description: list.h - * Linux kernel list implementation, converted to work in user space - * by Kulesh Shanmugasundaram (see comments, below). Downloaded by + * Linux kernel list implementation, converted to work in user space + * by Kulesh Shanmugasundaram (see comments, below). Downloaded by * Charles Steinkuehler from: * http://isis.poly.edu/kulesh/stuff/src/klist/ * @@ -10,7 +10,7 @@ * eventually be required): * http://www.mcs.anl.gov/~kazutomo/list/index.html * - * Last change: + * Last change: * 2012-Dec-17 Charles Steinkuehler * Imported initial version * License: GPL (Linux kernel code) @@ -22,8 +22,8 @@ #ifndef __LIST_H #define __LIST_H -/* This file is from Linux Kernel (include/linux/list.h) - * and modified by simply removing hardware prefetching of list items. +/* This file is from Linux Kernel (include/linux/list.h) + * and modified by simply removing hardware prefetching of list items. * Here by copyright, credits attributed to wherever they belong. * Kulesh Shanmugasundaram (kulesh [squiggly] isis.poly.edu) */ @@ -52,7 +52,7 @@ struct list_head { } while (0) /* - * Insert a new entry between two known consecutive entries. + * Insert a new entry between two known consecutive entries. * * This is only for internal list manipulation where we know * the prev/next entries already! @@ -125,7 +125,7 @@ static inline void list_del(struct list_head *entry) static inline void list_del_init(struct list_head *entry) { __list_del(entry->prev, entry->next); - INIT_LIST_HEAD(entry); + INIT_LIST_HEAD(entry); } /** @@ -226,7 +226,7 @@ static inline void list_splice_init(struct list_head *list, #define list_for_each_prev(pos, head) \ for (pos = (head)->prev; pos != (head); \ pos = pos->prev) - + /** * list_for_each_safe - iterate over a list safe against removal of list entry * @pos: the &struct list_head to use as a loop counter. diff --git a/src/libraries/user_pci/include/user_pci/module.h b/src/libraries/user_pci/include/user_pci/module.h old mode 100755 new mode 100644 index 4c08a42aae..aad1248938 --- a/src/libraries/user_pci/include/user_pci/module.h +++ b/src/libraries/user_pci/include/user_pci/module.h @@ -2,12 +2,12 @@ * Description: module.h * * Provides functions for running linux kernel modules in user space, - * emulating part of #include + * emulating part of #include * * Copyright (C) 2012 Charles Steinkuehler * * - * Last change: + * Last change: * 2012-Dec-17 Charles Steinkuehler * Initial version * diff --git a/src/libraries/user_pci/include/user_pci/slab.h b/src/libraries/user_pci/include/user_pci/slab.h old mode 100755 new mode 100644 index 46b1465b03..bcfe88b7f9 --- a/src/libraries/user_pci/include/user_pci/slab.h +++ b/src/libraries/user_pci/include/user_pci/slab.h @@ -7,7 +7,7 @@ * Author(s): Charles Steinkuehler * License: GNU LGPL Version 2.1 or (at your option) any later version. * - * Last change: + * Last change: * 2012-Dec-17 Charles Steinkuehler * Initial version ********************************************************************/ diff --git a/src/libraries/user_pci/include/user_pci/string.h b/src/libraries/user_pci/include/user_pci/string.h old mode 100755 new mode 100644 index f8c1f17ade..792cc13cdf --- a/src/libraries/user_pci/include/user_pci/string.h +++ b/src/libraries/user_pci/include/user_pci/string.h @@ -1,13 +1,13 @@ /******************************************************************** * Description: string.h - * Provides functions for running linux kernel modules in user space, + * Provides functions for running linux kernel modules in user space, * emulating part of * #include * * Author(s): Charles Steinkuehler * License: GNU LGPL Version 2.1 or (at your option) any later version. * - * Last change: + * Last change: * 2012-Dec-17 Charles Steinkuehler * Initial version ********************************************************************/ @@ -67,4 +67,3 @@ static inline void *kzalloc(size_t sz, gfp_t gfp) { } #endif /* _LINUX_STRING_H_ */ - diff --git a/src/libraries/user_pci/src/device.c b/src/libraries/user_pci/src/device.c old mode 100755 new mode 100644 index 48c2187e2d..dc81b90a8a --- a/src/libraries/user_pci/src/device.c +++ b/src/libraries/user_pci/src/device.c @@ -7,7 +7,7 @@ * Author(s): Charles Steinkuehler * License: GNU LGPL Version 2.1 or (at your option) any later version. * - * Last change: + * Last change: * 2012-Dec-17 Charles Steinkuehler * Initial version ********************************************************************/ diff --git a/src/libraries/user_pci/src/firmware.c b/src/libraries/user_pci/src/firmware.c old mode 100755 new mode 100644 index 50fa41c25e..5bf2d18aa1 --- a/src/libraries/user_pci/src/firmware.c +++ b/src/libraries/user_pci/src/firmware.c @@ -1,13 +1,13 @@ /******************************************************************** * Description: firmware.c - * Provides functions for loading firmware when running kernel + * Provides functions for loading firmware when running kernel * modules in user space, emulating part of * #include * * Author(s): Charles Steinkuehler * License: GNU LGPL Version 2.1 or (at your option) any later version. * - * Last change: + * Last change: * 2012-Dec-17 Charles Steinkuehler * Initial version ********************************************************************/ @@ -127,6 +127,3 @@ void release_firmware(const struct firmware *fw) { close(fw->fd); free((void*)fw); } - - - diff --git a/src/libraries/user_pci/src/string.c b/src/libraries/user_pci/src/string.c old mode 100755 new mode 100644 index 5fe7f6ffb2..39ab0e6389 --- a/src/libraries/user_pci/src/string.c +++ b/src/libraries/user_pci/src/string.c @@ -1,13 +1,13 @@ /******************************************************************** * Description: string.c - * Provides functions for running linux kernel modules in user space, + * Provides functions for running linux kernel modules in user space, * emulating part of * #include * * Author(s): Charles Steinkuehler * License: GNU LGPL Version 2.1 or (at your option) any later version. * - * Last change: + * Last change: * 2012-Dec-17 Charles Steinkuehler * Initial version ********************************************************************/ @@ -50,10 +50,10 @@ #include // wordexp (substitute for argv_split) /* We need to save the wordexp_t returned by wordexp so we can free it later. - For now, cheat and use a static global, which means we can only process + For now, cheat and use a static global, which means we can only process one set of argv at a time. If this causes problems, we can create a list of dynamically allocated wordexp_t values and match up the one to free by - looking at the we_wordv pointer. Or a code change to the driver could + looking at the we_wordv pointer. Or a code change to the driver could let the calling code track the wordexp_t for us. */ static wordexp_t result; @@ -67,17 +67,17 @@ char **argv_split(gfp_t gfp, const char *str, int *argcp) *argcp = result.we_wordc; return result.we_wordv; break; - + // If the error was WRDE_NOSPACE, // then perhaps part of the result was allocated. case WRDE_NOSPACE: wordfree (&result); /* Fall-through */ - + /* Some other error. */ - default: + default: return NULL; - + } } diff --git a/src/modules/managed/components/abs_s32v2/src/abs_s32v2.icomp b/src/modules/managed/components/abs_s32v2/src/abs_s32v2.icomp index 414807812e..7e0ca9bc90 100644 --- a/src/modules/managed/components/abs_s32v2/src/abs_s32v2.icomp +++ b/src/modules/managed/components/abs_s32v2/src/abs_s32v2.icomp @@ -26,7 +26,7 @@ license "GPL"; ;; FUNCTION(_) { hal_s32_t tmp = gs(in); - if ( tmp >= 0 ) + if ( tmp >= 0 ) { sb(sign, false); ss(out, tmp); @@ -35,14 +35,14 @@ FUNCTION(_) { ss(out, -tmp); } - if (tmp > 0) + if (tmp > 0) sb(is_positive, true); - else + else sb(is_positive, false); - if (tmp < 0) + if (tmp < 0) sb(is_negative, true); - else + else sb(is_negative, false); return 0; diff --git a/src/modules/managed/components/absv2/src/absv2.icomp b/src/modules/managed/components/absv2/src/absv2.icomp index c5086b404b..491629fc5c 100644 --- a/src/modules/managed/components/absv2/src/absv2.icomp +++ b/src/modules/managed/components/absv2/src/absv2.icomp @@ -34,14 +34,14 @@ FUNCTION(_) { sf(out, -tmp); } - if (tmp > 0.000001) + if (tmp > 0.000001) sb(is_positive, true); - else + else sb(is_positive, false); - if (tmp < -0.000001) + if (tmp < -0.000001) sb(is_negative, true); - else + else sb(is_negative, false); return 0; diff --git a/src/modules/managed/components/at_pid/src/at_pid.icomp b/src/modules/managed/components/at_pid/src/at_pid.icomp index a3c37ed7cc..9052a26d30 100644 --- a/src/modules/managed/components/at_pid/src/at_pid.icomp +++ b/src/modules/managed/components/at_pid/src/at_pid.icomp @@ -453,4 +453,3 @@ hal_float_t prevCmdD, lerror, loutput; output = loutput; return 0; } - diff --git a/src/modules/managed/components/at_pidv2/src/at_pidv2.icomp b/src/modules/managed/components/at_pidv2/src/at_pidv2.icomp index 70864029eb..de8427f280 100644 --- a/src/modules/managed/components/at_pidv2/src/at_pidv2.icomp +++ b/src/modules/managed/components/at_pidv2/src/at_pidv2.icomp @@ -453,4 +453,3 @@ hal_float_t prevCmdD, lerror, loutput; sf(output, loutput); return 0; } - diff --git a/src/modules/managed/components/biquad/src/biquad.icomp b/src/modules/managed/components/biquad/src/biquad.icomp index 3904be3409..2d03822cf7 100644 --- a/src/modules/managed/components/biquad/src/biquad.icomp +++ b/src/modules/managed/components/biquad/src/biquad.icomp @@ -129,7 +129,7 @@ struct inst_data *ip = arg; if(type_ != TYPE_DIRECT){ valid = false; - sampleRate = (1.0 / ((hal_float_t)period * 1e-9)); + sampleRate = (1.0 / ((hal_float_t)period * 1e-9)); if((f0 > sampleRate / 2.0) || (Q > 2.0) || (Q < 0.5)) return; diff --git a/src/modules/managed/components/biquadv2/src/biquadv2.icomp b/src/modules/managed/components/biquadv2/src/biquadv2.icomp index 6077243b7a..01b40ef9ba 100644 --- a/src/modules/managed/components/biquadv2/src/biquadv2.icomp +++ b/src/modules/managed/components/biquadv2/src/biquadv2.icomp @@ -131,7 +131,7 @@ struct inst_data *ip = arg; if(gu(type_) != TYPE_DIRECT){ sb(valid, false); - sampleRate = (1.0 / ((hal_float_t)period * 1e-9)); + sampleRate = (1.0 / ((hal_float_t)period * 1e-9)); if((gf(f0) > sampleRate / 2.0) || (gf(Q) > 2.0) || (gf(Q) < 0.5)) return; diff --git a/src/modules/managed/components/bldc/src/bldc.comp b/src/modules/managed/components/bldc/src/bldc.comp index 22295fc265..d9355f89b7 100644 --- a/src/modules/managed/components/bldc/src/bldc.comp +++ b/src/modules/managed/components/bldc/src/bldc.comp @@ -4,7 +4,7 @@ component bldc "BLDC and AC-servo control component "; pin in bit hall1 if personality & 0x01 "Hall sensor signal 1"; pin in bit hall2 if personality & 0x01 "Hall sensor signal 2"; pin in bit hall3 if personality & 0x01 "Hall sensor signal 3"; -pin out bit hall_error if personality & 0x01 +pin out bit hall_error if personality & 0x01 """ Indicates that the selected hall pattern gives inconsistent rotor position data. This can be due to the pattern @@ -32,13 +32,13 @@ reverse the motor and there will generally be a Hall pattern that runs the motor in each direction too. """; -pin in float frequency if (personality & 0x0F)==0 +pin in float frequency if (personality & 0x0F)==0 """ Frequency input for motors with no feedback at all, or those with only an index (which is ignored) """; -pin in float initvalue = 0.2 if personality & 0x04 +pin in float initvalue = 0.2 if personality & 0x04 """ The current to be used for the homing sequence in applications where an incremental encoder is used with no @@ -51,7 +51,7 @@ Encoder counts input. This must be linked to the encoder rawcounts pin or encoder index resets will cause the motor commutation to fail """; -pin io bit index-enable if personality & 0x08 +pin io bit index-enable if personality & 0x08 """ This pin should be connected to the associated encoder index-enable pin to zero the encoder when it passes index @@ -67,9 +67,9 @@ encoder monitoring has been interrupted. Typically this will only be at machine power-off. The alignment process involves powering the motor phases in such a way as to -put the motor in a known position. +put the motor in a known position. -The encoder counts are then stored in the*offset* parameter. +The encoder counts are then stored in the*offset* parameter. The alignment process will tend to cause a following error if it is triggered while the axis is enabled, so should be set before the matching axis.N.enable pin. The complementary *init-done* pin can be used @@ -155,16 +155,16 @@ param r signed offset_measured = 0 if personality & 0x04 """ The encoder offset measured by the homing sequence (in certain modes) """; -param rw float drive-offset = 0 +param rw float drive-offset = 0 """ -The angle, in degrees, applied to the commanded angle by the drive in degrees. +The angle, in degrees, applied to the commanded angle by the drive in degrees. This value is only used during the homing sequence of drives with incremental encoder feedback. It is used to back-calculate from commanded angle to actual phase angle. It is only relevant to drives which expect rotor-angle input rather than phase-angle -demand. +demand. -Should be 0 for most drives. +Should be 0 for most drives. """; param rw unsigned output-pattern=25 if personality & 0x400 @@ -176,7 +176,7 @@ description of /fBpattern/fR for details param rw unsigned pattern=25 if personality & 0x01 """ Commutation pattern to use, from 0 to 47. Default is type 25. -Every plausible combination is included. +Every plausible combination is included. The table shows the excitation pattern along the top, and the pattern code on the left hand side. The table entries @@ -516,7 +516,7 @@ FUNCTION(_) { return; } - i = (pattern << 3) + ((hall1 != 0) << 2) + i = (pattern << 3) + ((hall1 != 0) << 2) + ((hall2 != 0) << 1) + (hall3 != 0); ph = P[i]; @@ -533,7 +533,7 @@ FUNCTION(_) { if (out_dir) phase_angle = rotor_angle + 0.25; else phase_angle = rotor_angle - 0.25; phase_angle -= rtapi_floor(phase_angle); - + if (! (ph & old_ph)){ hall_error = 1;} if (pattern != old_pattern){hall_error = 0;} @@ -567,7 +567,7 @@ FUNCTION(_) { case 0x10: // Fanuc-style Gray-code input case 0x14: // incremental encoder homing to gray-code transition case 0x1C: // incremental encoder homing to index. - ph = (C1 != 0) | ((C2 != 0) << 1) + ph = (C1 != 0) | ((C2 != 0) << 1) | ((C4 != 0) << 2) | ((C8 != 0) << 3); for (i = 0 ; gray_b[i] != ph && i<16 ; i++) {} @@ -663,7 +663,7 @@ FUNCTION(_) { lead = lead_angle / 360.0; } lagcomped_counts = long_rawcounts + ((long_rawcounts - old_long_rawcounts)/2); - rotor_angle = (double)((lagcomped_counts - offset_measured + rotor_angle = (double)((lagcomped_counts - offset_measured - encoder_offset)* poles/2)/scale; rotor_angle -= rtapi_floor(rotor_angle); phase_angle = rotor_angle + lead; diff --git a/src/modules/managed/components/bldc_hall3v2/src/bldc_hall3v2.icomp b/src/modules/managed/components/bldc_hall3v2/src/bldc_hall3v2.icomp index 17926aa483..be90285ba6 100644 --- a/src/modules/managed/components/bldc_hall3v2/src/bldc_hall3v2.icomp +++ b/src/modules/managed/components/bldc_hall3v2/src/bldc_hall3v2.icomp @@ -243,30 +243,30 @@ hal_float_t V; i = (gu(pattern) << 3) + (gb(hall1) << 2) + (gb(hall2) << 1) + gb(hall3); - if (gb(dir)) + if (gb(dir)) V = -gf(value); - else + else V = gf(value); - if (P[i] & 040) + if (P[i] & 040) sf(A_value,V); - else if (P[i] & 004) + else if (P[i] & 004) sf(A_value, -V); - else + else sf(A_value, 0); - if (P[i] & 020) + if (P[i] & 020) sf(B_value, V); - else if (P[i] & 002) + else if (P[i] & 002) sf(B_value, -V); - else + else sf(B_value, 0); - if (P[i] & 010) + if (P[i] & 010) sf(C_value, V); - else if (P[i] & 001) + else if (P[i] & 001) sf(C_value, -V); - else + else sf(C_value, 0); return 0; diff --git a/src/modules/managed/components/charge_pump/src/charge_pump.icomp b/src/modules/managed/components/charge_pump/src/charge_pump.icomp index f0059c9e2e..0bb9e071d4 100644 --- a/src/modules/managed/components/charge_pump/src/charge_pump.icomp +++ b/src/modules/managed/components/charge_pump/src/charge_pump.icomp @@ -21,7 +21,7 @@ a factor of 2 and 4 slower for hardware that requires a lower frequency."""; license "GPL"; ;; -FUNCTION(_) +FUNCTION(_) { static hal_u32_t acc; diff --git a/src/modules/managed/components/charge_pumpv2/src/charge_pumpv2.icomp b/src/modules/managed/components/charge_pumpv2/src/charge_pumpv2.icomp index 140f94cd52..f35a8eb6f8 100644 --- a/src/modules/managed/components/charge_pumpv2/src/charge_pumpv2.icomp +++ b/src/modules/managed/components/charge_pumpv2/src/charge_pumpv2.icomp @@ -21,18 +21,18 @@ a factor of 2 and 4 slower for hardware that requires a lower frequency."""; license "GPL"; ;; -FUNCTION(_) +FUNCTION(_) { static hal_u32_t acc; - if ( gb(enable) ) + if ( gb(enable) ) { acc++; sb(out, (acc & 0x1)); sb(out_2, (acc & 0x2)); sb(out_4, (acc & 0x4)); - } - else + } + else { sb(out, 0); sb(out_2, 0); diff --git a/src/modules/managed/components/compv2/src/compv2.icomp b/src/modules/managed/components/compv2/src/compv2.icomp index f70534b291..d866378133 100644 --- a/src/modules/managed/components/compv2/src/compv2.icomp +++ b/src/modules/managed/components/compv2/src/compv2.icomp @@ -31,6 +31,6 @@ hal_float_t halfhyst = 0.5 * gf(hyst); } else sb(equal,true); - + return 0; } diff --git a/src/modules/managed/components/const_rt/src/const-rt.cc b/src/modules/managed/components/const_rt/src/const-rt.cc index b08e28a5a8..03f0db516d 100644 --- a/src/modules/managed/components/const_rt/src/const-rt.cc +++ b/src/modules/managed/components/const_rt/src/const-rt.cc @@ -1,6 +1,6 @@ /************************************************************************ * Demo of standard instantiated component in C++ class component - * + * * ArcEye 2015 ************************************************************************/ #define _CORRECT_ISO_CPP_STRING_H_PROTO diff --git a/src/modules/managed/components/const_rtv2/src/const-rtv2.cc b/src/modules/managed/components/const_rtv2/src/const-rtv2.cc index 718701e36a..5be2dee9ab 100644 --- a/src/modules/managed/components/const_rtv2/src/const-rtv2.cc +++ b/src/modules/managed/components/const_rtv2/src/const-rtv2.cc @@ -1,8 +1,8 @@ /************************************************************************ * Demo of SMP_SAFE instantiated component in C++ class - * + * * ArcEye 2015 -************************************************************************/ +************************************************************************/ #define _CORRECT_ISO_CPP_STRING_H_PROTO @@ -57,13 +57,13 @@ class ConstRt public: ConstRt(); ~ConstRt(); - - // these members must be static to work as and in callbacks from + + // these members must be static to work as and in callbacks from // the rtapi C functions and that is the root of all the problems static int export_halobjs(struct inst_data *ip, int owner_id, const char *name, const int argc, const char **argv); static int instantiate(const char *name, const int argc, const char**argv); static int constant_(void *arg, const hal_funct_args_t *fa); - + struct inst_data *inst; }; @@ -119,10 +119,10 @@ int ConstRt::export_halobjs(struct inst_data *ip, int owner_id, const char *name if (float_pin_null(ip->value)) return _halerrno; - + ip->local_argv = argv; ip->local_argc = argc; - + // exporting an extended thread function: hal_export_xfunct_args_t __xf; diff --git a/src/modules/managed/components/counter/src/counter.c b/src/modules/managed/components/counter/src/counter.c index 0c24ede345..bbb95b1360 100644 --- a/src/modules/managed/components/counter/src/counter.c +++ b/src/modules/managed/components/counter/src/counter.c @@ -1,12 +1,12 @@ /******************************************************************** * Description: counter.c -* This file, 'counter.c', is a HAL component that +* This file, 'counter.c', is a HAL component that * provides software-based counting of pulse streams * with an optional reset input. * * Author: Chris Radek * License: GPL Version 2 -* +* * Copyright (c) 2006 All rights reserved. * ********************************************************************/ @@ -33,7 +33,7 @@ The driver exports variables for each counter's inputs and outputs. It also exports two functions: "counter.update-counters" must be called in a high speed thread, at least twice the maximum desired - count rate. "counter.capture-position" can be called at a much + count rate. "counter.capture-position" can be called at a much slower rate, and updates the output variables. */ diff --git a/src/modules/managed/components/cpp_test/src/cpptest.cc b/src/modules/managed/components/cpp_test/src/cpptest.cc index b3b382fc80..3c5d4a82de 100644 --- a/src/modules/managed/components/cpp_test/src/cpptest.cc +++ b/src/modules/managed/components/cpp_test/src/cpptest.cc @@ -165,7 +165,7 @@ extern "C" int rtapi_app_main(void) { string s(compname); - + comp_id = hal_xinit(TYPE_RT, 0, 0, instantiate_lutn, NULL, compname); if (comp_id < 0) return comp_id; diff --git a/src/modules/managed/components/deadzonev2/src/deadzonev2.icomp b/src/modules/managed/components/deadzonev2/src/deadzonev2.icomp index 55c5a145e6..3980ebefb3 100644 --- a/src/modules/managed/components/deadzonev2/src/deadzonev2.icomp +++ b/src/modules/managed/components/deadzonev2/src/deadzonev2.icomp @@ -15,11 +15,11 @@ FUNCTION(_) hal_float_t hi = gf(center) + th2; hal_float_t in_ = gf(in); - if(in_ < lo) + if(in_ < lo) sf(out, in_ + th2); - else if(in_ > hi) + else if(in_ > hi) sf(out, in_ - th2); - else + else sf(out, gf(center)); return 0; diff --git a/src/modules/managed/components/die/README.RT-debugging b/src/modules/managed/components/die/README.RT-debugging index 85fde0ff37..a49012fbed 100644 --- a/src/modules/managed/components/die/README.RT-debugging +++ b/src/modules/managed/components/die/README.RT-debugging @@ -24,4 +24,3 @@ function must execute: or just do a halcmd -f segfault-rt-thread.hal - diff --git a/src/modules/managed/components/die/segfault-rt-thread.hal b/src/modules/managed/components/die/segfault-rt-thread.hal index 6dce617034..1abea23f2a 100644 --- a/src/modules/managed/components/die/segfault-rt-thread.hal +++ b/src/modules/managed/components/die/segfault-rt-thread.hal @@ -4,4 +4,3 @@ addf die thread1 # starting the thread should create a segfault of rtapi_app: start - diff --git a/src/modules/managed/components/edgev2/src/edgev2.icomp b/src/modules/managed/components/edgev2/src/edgev2.icomp index b63983a74e..fc53b51fd4 100644 --- a/src/modules/managed/components/edgev2/src/edgev2.icomp +++ b/src/modules/managed/components/edgev2/src/edgev2.icomp @@ -46,7 +46,7 @@ hal_bit_t rise, fall, desired_edge; { rise = new_in && !gb(last_in); fall = !new_in && gb(last_in); - desired_edge = + desired_edge = gb(both) ? rise || fall : gb(in_edge) ? fall : rise; if(desired_edge) diff --git a/src/modules/managed/components/encoder/src/encoder.c b/src/modules/managed/components/encoder/src/encoder.c index 27e4a81cb4..84d18ecb88 100644 --- a/src/modules/managed/components/encoder/src/encoder.c +++ b/src/modules/managed/components/encoder/src/encoder.c @@ -1,15 +1,15 @@ /******************************************************************** * Description: encoder.c -* This file, 'encoder.c', is a HAL component that -* provides software based counting of quadrature +* This file, 'encoder.c', is a HAL component that +* provides software based counting of quadrature * encoder signals. * * Author: John Kasunich * License: GPL Version 2 -* +* * Copyright (c) 2003 All rights reserved. * -* Last change: +* Last change: ********************************************************************/ /** This file, 'encoder.c', is a HAL component that provides software based counting of quadrature encoder signals. The maximum count diff --git a/src/modules/managed/components/encoder_ratio/src/encoder_ratio.c b/src/modules/managed/components/encoder_ratio/src/encoder_ratio.c index a7933d378d..cf9b2ab7cf 100644 --- a/src/modules/managed/components/encoder_ratio/src/encoder_ratio.c +++ b/src/modules/managed/components/encoder_ratio/src/encoder_ratio.c @@ -5,10 +5,10 @@ * * Author: John Kasunich * License: GPL Version 2 -* +* * Copyright (c) 2004 All rights reserved. * -* Last change: +* Last change: ********************************************************************/ /** This file, 'encoder_ratio.c', is a HAL component that can be used to synchronize two axes (like an "electronic gear"). It counts diff --git a/src/modules/managed/components/encoder_ratiov2/src/encoder_ratiov2.c b/src/modules/managed/components/encoder_ratiov2/src/encoder_ratiov2.c index 8fc508703f..8f2726f5bf 100644 --- a/src/modules/managed/components/encoder_ratiov2/src/encoder_ratiov2.c +++ b/src/modules/managed/components/encoder_ratiov2/src/encoder_ratiov2.c @@ -256,12 +256,12 @@ static int instantiate_encoder_pair(const int argc, char* const *argv) int retval; int msg; const char* name; - + if(argc >= 2) name = argv[1]; else HALFAIL_RC(EINVAL, "ERROR: insufficient args in argv"); - + /* This function exports a lot of stuff, which results in a lot of logging if msg_level is at INFO or ALL. So we save the current value of msg_level and restore it later. */ diff --git a/src/modules/managed/components/estop_latchv2/src/estop_latchv2.icomp b/src/modules/managed/components/estop_latchv2/src/estop_latchv2.icomp index 9682df3795..215a96c311 100644 --- a/src/modules/managed/components/estop_latchv2/src/estop_latchv2.icomp +++ b/src/modules/managed/components/estop_latchv2/src/estop_latchv2.icomp @@ -1,6 +1,6 @@ component estop_latchv2 """ -ESTOP latch which sets ok-out true and fault-out false only if ok-in is true, -fault-in is false, and a rising edge is seen on reset. +ESTOP latch which sets ok-out true and fault-out false only if ok-in is true, +fault-in is false, and a rising edge is seen on reset. While ok-out is true, watchdog toggles, and can be used for chargepumps or similar needs. """; pin_ptr in bit ok_in; @@ -17,29 +17,29 @@ license "GPL"; FUNCTION(_) { - // check inputs + // check inputs if ( gb(ok_in) && !gb(fault_in)) { - // no fault conditions, check for reset edge + // no fault conditions, check for reset edge if ( gb(reset) && !old_reset ) { - // got a rising edge, indicate "OK" on outputs + // got a rising edge, indicate "OK" on outputs sb(ok_out, true); sb(fault_out, false); } if( gb(ok_out) ) { - // toggle watchdog + // toggle watchdog sb(watchdog, !gb(watchdog)); } } else { - // fault condition exists, trip + // fault condition exists, trip sb(ok_out, false); sb(fault_out, true); } - // store state of reset input for next pass (for edge detect) + // store state of reset input for next pass (for edge detect) old_reset = gb(reset); return 0; diff --git a/src/modules/managed/components/gearchangev2/src/gearchangev2.icomp b/src/modules/managed/components/gearchangev2/src/gearchangev2.icomp index a5245894da..0b7067b563 100644 --- a/src/modules/managed/components/gearchangev2/src/gearchangev2.icomp +++ b/src/modules/managed/components/gearchangev2/src/gearchangev2.icomp @@ -30,24 +30,24 @@ hal_float_t sign=1.0; /* Assume that the output device is scaled so that gear 1 is "Pass-through" */ /* the other gear(s) need to be scaled by the relative scale for that gear */ - if (gf(scale2) < 1.0) + if (gf(scale2) < 1.0) sf(scale2, 1.0); if (temp_in < 0.0) { sign = -1.0; temp_in = -temp_in; } if(gb(sel)) { /* gear 2 */ - if (temp_in < gf(min2)) + if (temp_in < gf(min2)) temp_in = gf(min2); - else if (temp_in > gf(max2)) + else if (temp_in > gf(max2)) temp_in = gf(max2); temp_in /= gf(scale2); /* scale up to second gear output range */ sb(dir_out, gb(dir_in) ^ gb(reverse)); - } + } else { - if (temp_in < gf(min1)) + if (temp_in < gf(min1)) temp_in = gf(min1); - else if (temp_in > gf(max1)) + else if (temp_in > gf(max1)) temp_in = gf(max1); sb(dir_out, gb(dir_in)); } diff --git a/src/modules/managed/components/hbridgev2/src/hbridgev2.icomp b/src/modules/managed/components/hbridgev2/src/hbridgev2.icomp index d197c43722..886d626af1 100644 --- a/src/modules/managed/components/hbridgev2/src/hbridgev2.icomp +++ b/src/modules/managed/components/hbridgev2/src/hbridgev2.icomp @@ -28,27 +28,27 @@ FUNCTION(_) hal_float_t negcmd; if (gb(enable)) { - if (gb(brake)) + if (gb(brake)) { // motor DC brake sf(up, 0.0); sf(down, 0.0); sb(enable_out, true); - } + } else { // normal forward/reverse operation negcmd = gf(command) * - 1.0; if (gf(command) < 0.0) { sf(up, 0.0); sf(down, (hal_float_t)MINIMUM(negcmd, gf(maxout))); - } + } else { sf(up, (hal_float_t)MINIMUM(gf(command), (double)gf(maxout))); sf(down, 0.0); } sb(enable_out, true); } - } + } else { // let motor run freely sf(up, 0.0); diff --git a/src/modules/managed/components/icomp/src/icomp.c b/src/modules/managed/components/icomp/src/icomp.c index f312671ef5..89ed255be5 100644 --- a/src/modules/managed/components/icomp/src/icomp.c +++ b/src/modules/managed/components/icomp/src/icomp.c @@ -143,7 +143,7 @@ static int instantiate(const int argc, char* const *argv) break; case 0: // getopt_long() set a variable, just keep going break; - case ':': // missing option argument + case ':': // missing option argument HALERR("%s: option `-%c' requires an argument\n", argv[1], optopt); break; diff --git a/src/modules/managed/components/indextablev2/src/indextablev2.icomp b/src/modules/managed/components/indextablev2/src/indextablev2.icomp index 2383c7319f..0d4aead063 100644 --- a/src/modules/managed/components/indextablev2/src/indextablev2.icomp +++ b/src/modules/managed/components/indextablev2/src/indextablev2.icomp @@ -33,8 +33,8 @@ When there is a combination of `pulse=inc`, `pulse-dec`, `home` and 4 : pulse-inc """; pin_ptr in s32 index_cmd = 0 "Desired position of the indexing device"; -pin_ptr in bit index_switch = false "Switch rising edge counts up/down"; -pin_ptr in bit start = false "Start movement of indextable on rising edge"; +pin_ptr in bit index_switch = false "Switch rising edge counts up/down"; +pin_ptr in bit start = false "Start movement of indextable on rising edge"; pin_ptr in bit enable = false "Enabling output drive-run, when disabled then drive-run is off and drive-brake is on"; pin_ptr in bit set_home = false "From inactive state one can set the current index to the value of index-cmd"; pin_ptr out s32 index_fb = false "Current index of the table"; @@ -44,7 +44,7 @@ pin_ptr out bit drive_on = false "Needs to be connected to a drive"; pin_ptr out bit drive_dir = false "Needs to be connected to a drive"; pin_ptr out bit drive_brake = false "Needs to be connected to a drive"; pin_ptr out bit active = false "When the component is active (driving) then this pin is high"; -pin_ptr out u32 component_state "Mirror of internal state machine."; +pin_ptr out u32 component_state "Mirror of internal state machine."; variable hal_s32_t index_curr = 0; variable hal_s32_t index_target = 0; variable hal_bit_t indextable_active = false; @@ -149,7 +149,7 @@ FUNCTION(_) index_curr = gs(index_cmd); state = 1; break; - default: + default: break; } } diff --git a/src/modules/managed/components/integv2/src/integv2.icomp b/src/modules/managed/components/integv2/src/integv2.icomp index ef275f6483..9277151bc7 100644 --- a/src/modules/managed/components/integv2/src/integv2.icomp +++ b/src/modules/managed/components/integv2/src/integv2.icomp @@ -11,13 +11,13 @@ license "GPL"; ;; FUNCTION(_) { - if(gb(reset)) + if(gb(reset)) sf(out, 0.0); - else + else sf(out, gf(out) + gf(gain) * gf(in) * fperiod); - if (gf(out) > gf(max_)) + if (gf(out) > gf(max_)) sf(out, gf(max_)); - if (gf(out) < gf(min_)) + if (gf(out) < gf(min_)) sf(out, gf(min_)); return 0; diff --git a/src/modules/managed/components/interpolator/README b/src/modules/managed/components/interpolator/README index 280070796b..8fa1e5836e 100644 --- a/src/modules/managed/components/interpolator/README +++ b/src/modules/managed/components/interpolator/README @@ -21,5 +21,3 @@ demo: halrun -I interpolate.hal python feed-interpolator.py - - diff --git a/src/modules/managed/components/interpolator/interpolate.hal b/src/modules/managed/components/interpolator/interpolate.hal index 3de8347ae8..c26e0ea447 100644 --- a/src/modules/managed/components/interpolator/interpolate.hal +++ b/src/modules/managed/components/interpolator/interpolate.hal @@ -16,6 +16,3 @@ addf ip.update servo loadusr halscope start - - - diff --git a/src/modules/managed/components/invertv2/src/invertv2.icomp b/src/modules/managed/components/invertv2/src/invertv2.icomp index 9a4cfa25ea..ec3ac8532e 100644 --- a/src/modules/managed/components/invertv2/src/invertv2.icomp +++ b/src/modules/managed/components/invertv2/src/invertv2.icomp @@ -31,7 +31,7 @@ license "GPL"; FUNCTION(_) { hal_float_t tmp = gf(in); - if (gf(deadband) < 1e-12) + if (gf(deadband) < 1e-12) sf(deadband, 1e-12); if ( tmp > -gf(deadband) && tmp < 0.0) sf(out, -1.0/gf(deadband)); diff --git a/src/modules/managed/components/iring_demo/iring-demo.hal b/src/modules/managed/components/iring_demo/iring-demo.hal index 63eaccbf66..8403222327 100644 --- a/src/modules/managed/components/iring_demo/iring-demo.hal +++ b/src/modules/managed/components/iring_demo/iring-demo.hal @@ -21,4 +21,3 @@ start # show # setp ir.toggle 1 show pin - diff --git a/src/modules/managed/components/joyhandlev2/src/joyhandlev2.icomp b/src/modules/managed/components/joyhandlev2/src/joyhandlev2.icomp index 5862814cad..dd8f28d879 100644 --- a/src/modules/managed/components/joyhandlev2/src/joyhandlev2.icomp +++ b/src/modules/managed/components/joyhandlev2/src/joyhandlev2.icomp @@ -52,12 +52,12 @@ FUNCTION(_) { hal_float_t p, a, b, alin, clin, xm, ym, xinv, yinv; - if (gf(power) < 1.0) + if (gf(power) < 1.0) sf(power, 1.0); - if (gf(deadband) >= 0.99) + if (gf(deadband) >= 0.99) sf(deadband, 0.99); - else if (gf(deadband) <= 0.0) + else if (gf(deadband) <= 0.0) sf(deadband, 0.0); p = gf(power) - 1.0; @@ -66,21 +66,21 @@ hal_float_t p, a, b, alin, clin, xm, ym, xinv, yinv; alin = -gf(scale)/(gf(deadband)-1.0); clin = 1.0 *(gf(scale)+gf(offset)-alin); - if (gf(in) >= 1.0) + if (gf(in) >= 1.0) sf(out, gf(scale) + gf(offset)); - else if ((gf(in) <= gf(deadband)) && (gf(in) >= (-1.0 *gf(deadband)))) + else if ((gf(in) <= gf(deadband)) && (gf(in) >= (-1.0 *gf(deadband)))) sf(out, 0.0); - else if (gf(in) <= -1.0) + else if (gf(in) <= -1.0) sf(out, -gf(scale) - gf(offset)); else if ((gf(in) > gf(deadband)) && (gf(in) < 1.0)) { - if (gf(power) == 1.0) + if (gf(power) == 1.0) sf(out, alin * gf(in) + clin); - else + else { - if (gb(inverse) == 0) + if (gb(inverse) == 0) sf(out, gf(scale) * (a * rtapi_pow(gf(in),gf(power)) + b * gf(in)) + gf(offset)); - else + else { xm = (gf(deadband)+1.0) / 2.0; ym = alin*xm + clin; @@ -92,13 +92,13 @@ hal_float_t p, a, b, alin, clin, xm, ym, xinv, yinv; } else if ((gf(in) < (-1.0 *gf(deadband))) && (gf(in) > -1.0)) { - if (gf(power) == 1.0) + if (gf(power) == 1.0) sf(out, -1.0 * (alin*-1.0 * gf(in) + clin)); - else + else { - if (gb(inverse) == 0) + if (gb(inverse) == 0) sf(out, -1.0 *(gf(scale) * (a * rtapi_pow((-1.0 * gf(in)),gf(power)) - b * gf(in)) + gf(offset))); - else + else { xm = (gf(deadband)+1.0)/2.0; ym = alin*xm + clin; @@ -108,7 +108,7 @@ hal_float_t p, a, b, alin, clin, xm, ym, xinv, yinv; } } } - else + else sf(out, 0.0); return 0; diff --git a/src/modules/managed/components/jplanner/README b/src/modules/managed/components/jplanner/README index be54baf2c8..407586f41b 100644 --- a/src/modules/managed/components/jplanner/README +++ b/src/modules/managed/components/jplanner/README @@ -7,4 +7,3 @@ the pos-cmd pin will be OUT, as it is driven from the queue the max-vel and max-acc pins are IO and can be overridden otherwise it will create and honor the pos-cmd pin as IO since it is updated by the tp as well. - diff --git a/src/modules/managed/components/jplanner/jplan-pin-driven.hal b/src/modules/managed/components/jplanner/jplan-pin-driven.hal index 37037be4d7..86e0cf84b0 100644 --- a/src/modules/managed/components/jplanner/jplan-pin-driven.hal +++ b/src/modules/managed/components/jplanner/jplan-pin-driven.hal @@ -36,6 +36,3 @@ addf jerk servo loadusr halscope start - - - diff --git a/src/modules/managed/components/jplanner/jplan-queued.hal b/src/modules/managed/components/jplanner/jplan-queued.hal index 48fad21b6e..9fe3228bf2 100644 --- a/src/modules/managed/components/jplanner/jplan-queued.hal +++ b/src/modules/managed/components/jplanner/jplan-queued.hal @@ -39,5 +39,3 @@ setp tp.0.pos-cmd 1 # now run jplan-run.py in separate window # to see injection of queued moves - - diff --git a/src/modules/managed/components/knob2floatv2/src/knob2floatv2.icomp b/src/modules/managed/components/knob2floatv2/src/knob2floatv2.icomp index 70d9fe6828..1bffc616f6 100644 --- a/src/modules/managed/components/knob2floatv2/src/knob2floatv2.icomp +++ b/src/modules/managed/components/knob2floatv2/src/knob2floatv2.icomp @@ -37,17 +37,17 @@ FUNCTION(_) hal_float_t delta_counts; hal_float_t tmp_out; - if ( gf(min_out) > gf(max_out) ) + if ( gf(min_out) > gf(max_out) ) sf(min_out, gf(max_out)); - + delta_counts = ( (hal_float_t) gs(counts) - old_counts); if ( gb(enable) ) { tmp_out = old_out + (hal_float_t)delta_counts * gf(scale); - if ( tmp_out > gf(max_out) ) + if ( tmp_out > gf(max_out) ) old_out = gf(max_out); - else if ( tmp_out < gf(min_out) ) + else if ( tmp_out < gf(min_out) ) old_out = gf(min_out); - else + else old_out = tmp_out; } sf(out, old_out); diff --git a/src/modules/managed/components/latencybinsv2/src/latencybinsv2.icomp b/src/modules/managed/components/latencybinsv2/src/latencybinsv2.icomp index 8d8b0b890a..4d2b439338 100644 --- a/src/modules/managed/components/latencybinsv2/src/latencybinsv2.icomp +++ b/src/modules/managed/components/latencybinsv2/src/latencybinsv2.icomp @@ -65,11 +65,11 @@ hal_s32_t i; last_timer = now; binmax = gs(maxbinnumber); - if (binmax > gs(availablebins)) + if (binmax > gs(availablebins)) binmax = gs(availablebins); last_binmax = binmax; - if (gb(reset)) + if (gb(reset)) first = 1; if (first || binmax != last_binmax || gs(nsbinsize) == 0 ) @@ -77,48 +77,48 @@ hal_s32_t i; { first = 0; ss(latency, 0); - ss(pextra, 0); + ss(pextra, 0); ss(nextra, 0); - for (i = 0; i <= binmax; i++) + for (i = 0; i <= binmax; i++) { - pbins(i) = 0; + pbins(i) = 0; nbins(i) = 0; } - } - else + } + else { ss(latency, lat32); i = lat32 / gs(nsbinsize); - if (i >= 0) + if (i >= 0) { - if (i > binmax) + if (i > binmax) incs(pextra); - else + else pbins(i)++; - } - else + } + else { i = -i; - if (i > binmax) + if (i > binmax) incs(nextra); - else + else nbins(i)++; } } ss(check, gs(index)); // user should verify check==index for reading values // -1 value indicates illegal index - if (gs(index) < 0) + if (gs(index) < 0) { ss(pbinvalue, -1); ss(nbinvalue, -1); - } - else if (gs(index) <= binmax) + } + else if (gs(index) <= binmax) { ss(pbinvalue, pbins(gs(index))); ss(nbinvalue, nbins(gs(index))); - } - else + } + else { ss(pbinvalue, -1); ss(nbinvalue, -1); diff --git a/src/modules/managed/components/lcd/src/lcd.c b/src/modules/managed/components/lcd/src/lcd.c index 041b1cb3f7..50e491b967 100644 --- a/src/modules/managed/components/lcd/src/lcd.c +++ b/src/modules/managed/components/lcd/src/lcd.c @@ -93,7 +93,7 @@ RTAPI_MP_ARRAY_STRING(fmt_strings, MAX_CHAN, "screen formatting scancodes") int rtapi_app_main(void){ int i, f, f1, k, p; int retval; - + if (!fmt_strings[0]){ rtapi_print_msg(RTAPI_MSG_ERR, "The LCD component requires at least one valid format string"); return -EINVAL; @@ -104,7 +104,7 @@ int rtapi_app_main(void){ rtapi_print_msg(RTAPI_MSG_ERR, "LCD: ERROR: hal_init() failed\n"); return -1; } - + // allocate shared memory for data lcd = hal_malloc(sizeof(lcd_t)); if (lcd == 0) { @@ -113,21 +113,21 @@ int rtapi_app_main(void){ hal_exit(comp_id); return -1; } - + // Count the instances. Very unlikely to be more than one, but... for (lcd->num_insts = 0; fmt_strings[lcd->num_insts];lcd->num_insts++){} lcd->insts = hal_malloc(lcd->num_insts * sizeof(lcd_inst_t)); - + for (i = 0; i < lcd->num_insts; i++){ lcd_inst_t *inst = &lcd->insts[i]; inst->num_pages = 1; - + // count the pages demarked by | chars. for (f = 0; fmt_strings[i][f]; f++){ if (fmt_strings[i][f] =='|') inst->num_pages++; } inst->pages = hal_malloc(inst->num_pages * sizeof(lcd_page_t)); - + //second pass f1 = k = p = 0; for (f = 0; fmt_strings[i][f]; f++){ @@ -137,7 +137,7 @@ int rtapi_app_main(void){ inst->pages[p].num_args++; } } - + if (fmt_strings[i][f + 1] =='|' || fmt_strings[i][f + 1] == 0) { inst->pages[p].fmt = hal_malloc(f - f1 + 2); retval = rtapi_snprintf(inst->pages[p].fmt, @@ -150,9 +150,9 @@ int rtapi_app_main(void){ { int a = -1, s = -1; lcd_page_t page = inst->pages[p]; - + while (page.fmt[++s]){ - + if (page.fmt[s] == '%'){ int type = parse_fmt(page.fmt, &s, NULL, NULL, 0); a++; @@ -175,7 +175,7 @@ int rtapi_app_main(void){ if (retval != 0) { return retval; } - + break; case 's': retval = hal_pin_s32_newf(HAL_IN, @@ -208,7 +208,7 @@ int rtapi_app_main(void){ rtapi_print_msg(RTAPI_MSG_ERR, "LCD: ERROR: function export failed\n"); return -1; } - + for (i = 0; i < lcd->num_insts; i++){ retval = hal_pin_u32_newf(HAL_IN, &(lcd->insts[i].page_num), comp_id, "lcd.%02i.page_num", i); @@ -260,10 +260,10 @@ int rtapi_app_main(void){ void write(void *arg, long period){ lcd_t *lcd; int i; - + lcd = arg; - for (i = 0; i < lcd->num_insts; i++){ + for (i = 0; i < lcd->num_insts; i++){ lcd_inst_t *inst = &lcd->insts[i]; write_one(inst); } @@ -273,7 +273,7 @@ static void write_one(lcd_inst_t *inst){ static int counter = 100; //100 cycle delay before start int retval; char c1, c2; - + if (counter > 0){ --counter; return;} @@ -282,12 +282,12 @@ static void write_one(lcd_inst_t *inst){ *inst->out = inst->buff[inst->c_ptr++]; return; } - + inst->c_ptr = 0; inst->buff[0] = 0; if (*inst->page_num >= inst->num_pages) return; // should this error? - + if (*inst->page_num != inst->last_page){ inst->last_page = *inst->page_num; *inst->out = 0x11; //cursor off @@ -311,7 +311,7 @@ static void write_one(lcd_inst_t *inst){ inst->a_ptr = 0; return; } - + if (*inst->contrast != inst->last_contrast){ int c = *inst->contrast * 159.0 + 0x20; if (c > 0xBF) c = 0xBF; @@ -324,7 +324,7 @@ static void write_one(lcd_inst_t *inst){ inst->c_ptr = 0; return; } - + switch (inst->pages[*inst->page_num].fmt[inst->f_ptr]){ case '\\': //escape chars c1 = inst->pages[*inst->page_num].fmt[++inst->f_ptr]; @@ -350,14 +350,14 @@ static void write_one(lcd_inst_t *inst){ inst->f_ptr++; inst->buff[0] = '\\'; inst->buff[1] = 0; - + default: //check for hex c2 = inst->pages[*inst->page_num].fmt[++inst->f_ptr]; inst->f_ptr++; if (c1 > '9') c1 &= 0xDF; //upper case if (c2 > '9') c2 &= 0xDF; if (strchr(digits, c1) && strchr(digits, c2)){ - inst->buff[0] = (16 * (strchr(digits, c1) - digits) + inst->buff[0] = (16 * (strchr(digits, c1) - digits) + (strchr(digits, c2) - digits)); inst->buff[1] = 0; } else { @@ -398,10 +398,10 @@ static int parse_fmt(char *in, int *ptr, char *out, void *val, char dp){ if out is null, then simply return the type of the format as u, s or f. a return value of -1 indicates an invalid pointer on exit ptr will point after the end of the format*/ - + const double pow10[] = {1,10,1e2,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11, 1e12,1e13,1e14,1e15,1e16,1e17,1e18,1e19,1e20}; - + char fill = ' '; int d = 0; // dot found @@ -458,11 +458,11 @@ static int parse_fmt(char *in, int *ptr, char *out, void *val, char dp){ c = (in[*ptr] - '0'); } } - + if (c > MAX_ENTRY) c = MAX_ENTRY; - + break; - + case 'x': case 'X': base = 16; @@ -502,12 +502,12 @@ static int parse_fmt(char *in, int *ptr, char *out, void *val, char dp){ int tmp, s = 0; int i; int v = *((hal_s32_t*)val); - + if (sgn == '+') s = 1; if (v < 0) {s = 1; sgn = '-'; v = -v;} - + if (c < 1) c = num_digits_baseN(v, base) + s; - + tmp = abs(v); for (i = c - 1; i >= s; i--){ if (tmp != 0 || i == c - 1){ @@ -530,9 +530,9 @@ static int parse_fmt(char *in, int *ptr, char *out, void *val, char dp){ for (i = 0; i < c; i++){out[i] = '*';} } if (s) out[0] = sgn; - + out[c] = 0; - + return 's'; } case 'f': @@ -543,25 +543,25 @@ static int parse_fmt(char *in, int *ptr, char *out, void *val, char dp){ double v = *((hal_float_t*)val); __u64 tmp = 0; //enough bits for 9 decimal digits. int s = 0; - + if (sgn != ' ') s = 1; if (v < 0) {s = 1; sgn = '-'; v = -v;} - + if (m < 0) m = 4; - + if (c < 1) c = num_digits_baseN(v, base) + m + 1 + s; - + if (c > MAX_ENTRY){ // then it won't fit tmp = 2; goto overflow; } - + tmp = v * pow10[m] + 0.5; - + for (i = c - 1; i > c - m - 1 ; i--){ out[i] = digits[do_div(tmp, 10)]; } - + if (m > 0) { out[i] = dp; } @@ -569,7 +569,7 @@ static int parse_fmt(char *in, int *ptr, char *out, void *val, char dp){ { m = -1; // shuffle down into decimal point } - + for (i = c - m - 2; i >= s ; i--){ if (tmp > 0 || i == c - m - 2){ out[i] = digits[do_div(tmp, 10)]; @@ -587,18 +587,18 @@ static int parse_fmt(char *in, int *ptr, char *out, void *val, char dp){ } } } - + if (s){ out[0] = sgn; } - + overflow: if (tmp > 0){ // it didn't fit for (i = 1; i < c; i++){out[i] = '*';} } - + out[c] = 0; //terminate the string - + return 'f'; } case 'c': @@ -606,7 +606,7 @@ static int parse_fmt(char *in, int *ptr, char *out, void *val, char dp){ { int i; unsigned char v = *((hal_u32_t*)val); - + if (c == 0) c = 1; for (i = 0; i < c; i++){ out[i] = (v > ' ')? v : ' '; @@ -626,10 +626,10 @@ static int parse_fmt(char *in, int *ptr, char *out, void *val, char dp){ c2 = in[++(*ptr)]; if (c2 > '9') c2 &= 0xDF; if (strchr(digits, c1) && strchr(digits, c2)){ - bt = (16 * (strchr(digits, c1) - digits) + bt = (16 * (strchr(digits, c1) - digits) + (strchr(digits, c2) - digits)); } - } + } else { bt = in[*ptr]; @@ -638,10 +638,10 @@ static int parse_fmt(char *in, int *ptr, char *out, void *val, char dp){ c1 = in[++(*ptr)] & 0xDF; c2 = in[++(*ptr)] & 0xDF; if (strchr(digits, c1) && strchr(digits, c2)){ - bf = (16 * (strchr(digits, c1) - digits) + bf = (16 * (strchr(digits, c1) - digits) + (strchr(digits, c2) - digits)); } - } + } else { bf = in[*ptr]; diff --git a/src/modules/managed/components/limit1v2/src/limit1v2.icomp b/src/modules/managed/components/limit1v2/src/limit1v2.icomp index 4878e69d9f..cb621fa105 100644 --- a/src/modules/managed/components/limit1v2/src/limit1v2.icomp +++ b/src/modules/managed/components/limit1v2/src/limit1v2.icomp @@ -10,9 +10,9 @@ FUNCTION(_) { hal_float_t tmp = gf(in); - if(tmp < gf(min_)) + if(tmp < gf(min_)) tmp = gf(min_); - if(tmp > gf(max_)) + if(tmp > gf(max_)) tmp = gf(max_); sf(out, tmp); diff --git a/src/modules/managed/components/limit2v2/src/limit2v2.icomp b/src/modules/managed/components/limit2v2/src/limit2v2.icomp index 37d52878be..b65d0e80bd 100644 --- a/src/modules/managed/components/limit2v2/src/limit2v2.icomp +++ b/src/modules/managed/components/limit2v2/src/limit2v2.icomp @@ -1,5 +1,5 @@ component limit2v2 """ -Limit the output signal to fall between min and max and limit its slew rate to less than maxv per second. +Limit the output signal to fall between min and max and limit its slew rate to less than maxv per second. When the signal is a position, this means that position and velocity are limited."""; pin_ptr in float in; @@ -25,12 +25,12 @@ FUNCTION(_) { hal_float_t tmp = gf(in); hal_float_t maxdelta = gf(maxv) * fperiod; - + tmp = clamp(tmp, gf(min_), gf(max_)); - if(gb(load)) - { + if(gb(load)) + { sf(out, old_out = tmp); - return 0; + return 0; } tmp = clamp(tmp, old_out - maxdelta, old_out + maxdelta); old_out = tmp; diff --git a/src/modules/managed/components/lincurvev2/src/lincurvev2.icomp b/src/modules/managed/components/lincurvev2/src/lincurvev2.icomp index 58a3ee154d..eb4d702af7 100644 --- a/src/modules/managed/components/lincurvev2/src/lincurvev2.icomp +++ b/src/modules/managed/components/lincurvev2/src/lincurvev2.icomp @@ -50,7 +50,7 @@ FUNCTION(_) } if (x <= gf(x_val(0))) { sf(out_, gf(y_val(0))); - sf(out_io, gf(out_)); + sf(out_io, gf(out_)); return 0; } while (x > gf(x_val(i+1))) { i++;} @@ -58,8 +58,8 @@ FUNCTION(_) f = (x - gf(x_val(i))) / ( gf(x_val(i+1)) - gf(x_val(i)) ) ; sf(out_, ( gf(y_val(i)) + f * (gf(y_val(i+1)) - gf(y_val(i)) ))) ; - sf(out_io, gf(out_)); - + sf(out_io, gf(out_)); + return 0; } diff --git a/src/modules/managed/components/logic/src/logic.comp b/src/modules/managed/components/logic/src/logic.comp index b2b1a1d0f5..75dddbc47e 100644 --- a/src/modules/managed/components/logic/src/logic.comp +++ b/src/modules/managed/components/logic/src/logic.comp @@ -5,7 +5,7 @@ pin out bit or if personality & 0x200; pin out bit xor if personality & 0x400; function _ nofp; -description +description """ General logic function' component. Can perform AND, OR and XOR of up to 16 inputs. @@ -20,7 +20,7 @@ by adding the inputs and outputs then convert to hex: 1024 (0x400) if the `xor' (exclusive or) output is desired -Outputs can be combined, for example: +Outputs can be combined, for example: 2 + 256 + 1024 = 1282 converted to hex would be 0x502 and would have two inputs and have both XOR and AND outputs. diff --git a/src/modules/managed/components/lutn/lut5.py b/src/modules/managed/components/lutn/lut5.py old mode 100644 new mode 100755 diff --git a/src/modules/managed/components/lutn_demo/lutn-demo.py b/src/modules/managed/components/lutn_demo/lutn-demo.py index ccf31cd9ff..9362670a92 100644 --- a/src/modules/managed/components/lutn_demo/lutn-demo.py +++ b/src/modules/managed/components/lutn_demo/lutn-demo.py @@ -66,4 +66,4 @@ #assert o.get() == 1 # ##teardown_module() -# \ No newline at end of file +# diff --git a/src/modules/managed/components/lutn_demo/output.txt b/src/modules/managed/components/lutn_demo/output.txt index e6ab2681a0..e316a6fc9a 100644 --- a/src/modules/managed/components/lutn_demo/output.txt +++ b/src/modules/managed/components/lutn_demo/output.txt @@ -10,10 +10,10 @@ lutn-demo.hal:17: Function 'and2.0.funct' added to thread 'servo', rmb=0 wmb=0 lutn-demo.hal:18: Realtime threads started Signals: Type Value MB Name linked to: -bit FALSE r- in0 +bit FALSE r- in0 ==> and2.0.in0 ==> or2.0.in0 -bit FALSE -w in1 +bit FALSE -w in1 ==> and2.0.in1 ==> or2.0.in1 @@ -25,10 +25,10 @@ Component Pins: lutn-demo.hal:23: Signal 'in0' set to 1 Signals: Type Value MB Name linked to: -bit TRUE r- in0 +bit TRUE r- in0 ==> and2.0.in0 ==> or2.0.in0 -bit FALSE -w in1 +bit FALSE -w in1 ==> and2.0.in1 ==> or2.0.in1 @@ -40,10 +40,10 @@ Component Pins: lutn-demo.hal:27: Signal 'in1' set to 1 Signals: Type Value MB Name linked to: -bit TRUE r- in0 +bit TRUE r- in0 ==> and2.0.in0 ==> or2.0.in0 -bit TRUE -w in1 +bit TRUE -w in1 ==> and2.0.in1 ==> or2.0.in1 @@ -55,10 +55,10 @@ Component Pins: lutn-demo.hal:31: Signal 'in0' set to 0 Signals: Type Value MB Name linked to: -bit FALSE r- in0 +bit FALSE r- in0 ==> and2.0.in0 ==> or2.0.in0 -bit TRUE -w in1 +bit TRUE -w in1 ==> and2.0.in1 ==> or2.0.in1 @@ -70,10 +70,10 @@ Component Pins: lutn-demo.hal:35: Signal 'in1' set to 0 Signals: Type Value MB Name linked to: -bit FALSE r- in0 +bit FALSE r- in0 ==> and2.0.in0 ==> or2.0.in0 -bit FALSE -w in1 +bit FALSE -w in1 ==> and2.0.in1 ==> or2.0.in1 @@ -96,13 +96,13 @@ barrier-propagation-demo.hal:32: Unknown 'show' type 'piń' mick@INTEL-i7:/usr/src/machinekit-arceye/src/hal/icomp-example$ halcmd -f barrier-propagation-demo.hal Signals: Type Value MB Name linked to: -bit FALSE -- s1 -bit FALSE -- s2 +bit FALSE -- s1 +bit FALSE -- s2 Signals: Type Value MB Name linked to: -bit FALSE rw s1 -bit FALSE rw s2 +bit FALSE rw s1 +bit FALSE rw s2 barrier-propagation-demo.hal:30: Realtime module 'lutnv2' loaded Component Pins: @@ -131,5 +131,3 @@ FUNCT test.funct id=86 owner=82 valid=1 refcnt=0 legacy=0 rmb=0 wmb=0 PARAM test.funct.tmax id=88 owner=82 valid=1 refcnt=0 legacy=0 rmb=0 wmb=0 PARAM test.funct.tmax-inc id=89 owner=82 valid=1 refcnt=0 legacy=0 rmb=0 wmb=0 THREAD foo id=90 owner=0 valid=1 refcnt=0 legacy=0 rmb=1 wmb=1 - - diff --git a/src/modules/managed/components/lutnv2/barr-propagation-demo-icomp.hal b/src/modules/managed/components/lutnv2/barr-propagation-demo-icomp.hal index 0a03686dcb..76d210dd80 100644 --- a/src/modules/managed/components/lutnv2/barr-propagation-demo-icomp.hal +++ b/src/modules/managed/components/lutnv2/barr-propagation-demo-icomp.hal @@ -104,4 +104,4 @@ show objects # PARAM test.funct.tmax id=88 owner=82 valid=1 refcnt=0 legacy=0 rmb=0 wmb=0 # PARAM test.funct.tmax-inc id=89 owner=82 valid=1 refcnt=0 legacy=0 rmb=0 wmb=0 # THREAD foo id=90 owner=0 valid=1 refcnt=0 legacy=0 rmb=1 wmb=1 -# ------------------------------------------------^^^^^^^^^^^ \ No newline at end of file +# ------------------------------------------------^^^^^^^^^^^ diff --git a/src/modules/managed/components/lutnv2/barrier-propagation-demo.hal b/src/modules/managed/components/lutnv2/barrier-propagation-demo.hal index 549976d2b9..f0018202fc 100644 --- a/src/modules/managed/components/lutnv2/barrier-propagation-demo.hal +++ b/src/modules/managed/components/lutnv2/barrier-propagation-demo.hal @@ -104,4 +104,4 @@ show objects # PARAM test.funct.tmax id=88 owner=82 valid=1 refcnt=0 legacy=0 rmb=0 wmb=0 # PARAM test.funct.tmax-inc id=89 owner=82 valid=1 refcnt=0 legacy=0 rmb=0 wmb=0 # THREAD foo id=90 owner=0 valid=1 refcnt=0 legacy=0 rmb=1 wmb=1 -# ------------------------------------------------^^^^^^^^^^^ \ No newline at end of file +# ------------------------------------------------^^^^^^^^^^^ diff --git a/src/modules/managed/components/lutnv2/lutnv2-assembly.sh b/src/modules/managed/components/lutnv2/lutnv2-assembly.sh old mode 100755 new mode 100644 diff --git a/src/modules/managed/components/lutnv2/output-icomp.txt b/src/modules/managed/components/lutnv2/output-icomp.txt index ff838a6660..784e7581f3 100644 --- a/src/modules/managed/components/lutnv2/output-icomp.txt +++ b/src/modules/managed/components/lutnv2/output-icomp.txt @@ -9,10 +9,10 @@ lutn-demo.hal:17: Function 'and2.0.funct' added to thread 'servo', rmb=0 wmb=0 lutn-demo.hal:18: Realtime threads started Signals: Type Value MB Name linked to: -bit FALSE r- in0 +bit FALSE r- in0 ==> and2.0.in0 ==> or2.0.in0 -bit FALSE -w in1 +bit FALSE -w in1 ==> and2.0.in1 ==> or2.0.in1 @@ -24,10 +24,10 @@ Component Pins: lutn-demo.hal:23: Signal 'in0' set to 1 Signals: Type Value MB Name linked to: -bit TRUE r- in0 +bit TRUE r- in0 ==> and2.0.in0 ==> or2.0.in0 -bit FALSE -w in1 +bit FALSE -w in1 ==> and2.0.in1 ==> or2.0.in1 @@ -39,10 +39,10 @@ Component Pins: lutn-demo.hal:27: Signal 'in1' set to 1 Signals: Type Value MB Name linked to: -bit TRUE r- in0 +bit TRUE r- in0 ==> and2.0.in0 ==> or2.0.in0 -bit TRUE -w in1 +bit TRUE -w in1 ==> and2.0.in1 ==> or2.0.in1 @@ -54,10 +54,10 @@ Component Pins: lutn-demo.hal:31: Signal 'in0' set to 0 Signals: Type Value MB Name linked to: -bit FALSE r- in0 +bit FALSE r- in0 ==> and2.0.in0 ==> or2.0.in0 -bit TRUE -w in1 +bit TRUE -w in1 ==> and2.0.in1 ==> or2.0.in1 @@ -69,10 +69,10 @@ Component Pins: lutn-demo.hal:35: Signal 'in1' set to 0 Signals: Type Value MB Name linked to: -bit FALSE r- in0 +bit FALSE r- in0 ==> and2.0.in0 ==> or2.0.in0 -bit FALSE -w in1 +bit FALSE -w in1 ==> and2.0.in1 ==> or2.0.in1 @@ -90,13 +90,13 @@ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ mick@INTEL-i7:/usr/src/machinekit-arceye/src/hal/icomp-example$ halcmd -f barrier-propagation-demo.hal Signals: Type Value MB Name linked to: -bit FALSE -- s1 -bit FALSE -- s2 +bit FALSE -- s1 +bit FALSE -- s2 Signals: Type Value MB Name linked to: -bit FALSE rw s1 -bit FALSE rw s2 +bit FALSE rw s1 +bit FALSE rw s2 barrier-propagation-demo.hal:30: Realtime module 'lutnv2' loaded Component Pins: @@ -125,7 +125,3 @@ FUNCT test.funct id=86 owner=82 valid=1 refcnt=0 legacy=0 rmb=0 wmb=0 PARAM test.funct.tmax id=88 owner=82 valid=1 refcnt=0 legacy=0 rmb=0 wmb=0 PARAM test.funct.tmax-inc id=89 owner=82 valid=1 refcnt=0 legacy=0 rmb=0 wmb=0 THREAD foo id=90 owner=0 valid=1 refcnt=0 legacy=0 rmb=1 wmb=1 - - - - diff --git a/src/modules/managed/components/match8v2/src/match8v2.icomp b/src/modules/managed/components/match8v2/src/match8v2.icomp index 6d003fe413..d605ba0ac8 100644 --- a/src/modules/managed/components/match8v2/src/match8v2.icomp +++ b/src/modules/managed/components/match8v2/src/match8v2.icomp @@ -27,7 +27,7 @@ hal_bit_t tmp = false; if ( !gb(in) ) goto nomatch; if (( gb(a0) && !gb(b0) ) || ( gb(b0) && !gb(a0) )) goto nomatch; if (( gb(a1) && !gb(b1) ) || ( gb(b1) && !gb(a1) )) goto nomatch; - if (( gb(a2) && !gb(b2) ) || ( gb(b2) && !gb(a2) )) goto nomatch; + if (( gb(a2) && !gb(b2) ) || ( gb(b2) && !gb(a2) )) goto nomatch; if (( gb(a3) && !gb(b3) ) || ( gb(b3) && !gb(a3) )) goto nomatch; if (( gb(a4) && !gb(b4) ) || ( gb(b4) && !gb(a4) )) goto nomatch; if (( gb(a5) && !gb(b5) ) || ( gb(b5) && !gb(a5) )) goto nomatch; diff --git a/src/modules/managed/components/matrix_kb/src/matrix_kb.c b/src/modules/managed/components/matrix_kb/src/matrix_kb.c index c969678023..d5bf08d759 100644 --- a/src/modules/managed/components/matrix_kb/src/matrix_kb.c +++ b/src/modules/managed/components/matrix_kb/src/matrix_kb.c @@ -74,37 +74,37 @@ void keyup(kb_inst_t *inst){ r = keycode >> inst->rowshift; c = keycode & ~(0xFFFFFFFF << inst->rowshift); - - if (r < 0 + + if (r < 0 || c < 0 - || r >= inst->nrows + || r >= inst->nrows || c >= inst->ncols || inst->hal.key[r * inst->ncols + c] == NULL){ return; } - + if (inst->num_keys > 0) inst->num_keys--; - + *inst->hal.key[r * inst->ncols + c] = 0; } void keydown(kb_inst_t *inst){ int r, c; int keycode = *inst->hal.keycode & ~(inst->keydown | inst->keyup); - + r = keycode >> inst->rowshift; c = keycode & ~(0xFFFFFFFF << inst->rowshift); - - if (r < 0 + + if (r < 0 || c < 0 - || r >= inst->nrows + || r >= inst->nrows || c >= inst->ncols || inst->hal.key[r * inst->ncols + c] == NULL){ return; } - + if (inst->num_keys >= inst->param.rollover) return; inst->num_keys++; - + *inst->hal.key[r * inst->ncols + c] = 1; } @@ -112,7 +112,7 @@ void keydown(kb_inst_t *inst){ int c; hal_u32_t scan = 0; kb_inst_t *inst = arg; - + if (inst->scan){ //scanning request for (c = 0; c < inst->ncols; c++){ scan += ((*inst->hal.cols[c] != inst->param.invert) << c); @@ -122,24 +122,24 @@ void keydown(kb_inst_t *inst){ for (c = 0; c < inst->ncols; c++){ int mask = 1 << c; if ((inst->then[inst->row] & mask) && !(scan & mask)){ //keyup - *inst->hal.keycode = inst->keyup - + (inst->row << inst->rowshift) + *inst->hal.keycode = inst->keyup + + (inst->row << inst->rowshift) + c; keyup(inst); } else if (!(inst->then[inst->row] & mask) && (scan & mask)){//keydown - *inst->hal.keycode = inst->keydown - + (inst->row << inst->rowshift) + *inst->hal.keycode = inst->keydown + + (inst->row << inst->rowshift) + c; - + keydown(inst); } } } - + inst->then[inst->row] = inst->now[inst->row]; inst->now[inst->row] = scan; - + *inst->hal.rows[inst->row] = inst->param.invert; inst->row++; if (inst->row >= inst->nrows) inst->row = 0; @@ -167,7 +167,7 @@ int rtapi_app_main(void){ rtapi_print_msg(RTAPI_MSG_ERR, "matrix_kb: ERROR: hal_init() failed\n"); return -1; } - + // allocate shared memory for data kb = hal_malloc(sizeof(kb_t)); if (kb == 0) { @@ -176,21 +176,21 @@ int rtapi_app_main(void){ hal_exit(comp_id); return -1; } - + // Count the instances. for (kb->num_insts = 0; config[kb->num_insts];kb->num_insts++); // Count the names. for (n = 0; names[n];n++); - + if (n && n != kb->num_insts){ rtapi_print_msg(RTAPI_MSG_ERR, "matrix_kb: Number of sizes and number" " of names must match\n"); hal_exit(comp_id); return -1; } - + kb->insts = hal_malloc(kb->num_insts * sizeof(kb_inst_t)); - + for (i = 0; i < kb->num_insts; i++){ int a = 0; int c, r; @@ -202,7 +202,7 @@ int rtapi_app_main(void){ inst->scan = 0; inst->keystroke = 0; inst->param.invert = 1; - + for(j = 0; config[i][j] !=0; j++){ int n = (config[i][j] | 0x20); //lower case if (n == 'x'){ @@ -217,33 +217,33 @@ int rtapi_app_main(void){ } } inst->ncols = a; - + if (inst->ncols == 0 || inst->nrows == 0){ rtapi_print_msg(RTAPI_MSG_ERR, "matrix_kb: Invalid size format. should be NxN\n"); hal_exit(comp_id); return -1; } - + if (inst->ncols > 32){ rtapi_print_msg(RTAPI_MSG_ERR, "matrix_kb: maximum number of columns is 32. Sorry\n"); hal_exit(comp_id); return -1; } - + for (inst->rowshift = 1; inst->ncols > (1 << inst->rowshift); inst->rowshift++); for (inst->keydown = 0xC0, inst->keyup = 0x80 ; (inst->nrows << inst->rowshift) > inst->keydown ; inst->keydown <<= 1, inst->keyup <<= 1); - + inst->hal.key = (hal_bit_t **)hal_malloc(inst->nrows * inst->ncols * sizeof(hal_bit_t*)); inst->now = hal_malloc(inst->nrows * sizeof(hal_u32_t)); inst->then = hal_malloc(inst->nrows * sizeof(hal_u32_t)); inst->row = 0; inst->param.rollover = 2; - - + + if (names[i]){ rtapi_snprintf(inst->name, sizeof(inst->name), "%s", names[i]); } @@ -251,13 +251,13 @@ int rtapi_app_main(void){ { rtapi_snprintf(inst->name, sizeof(inst->name), "matrix_kb.%i", i); } - + for (c = 0; c < inst->ncols; c++){ - for (r = 0; r < inst->nrows; r++){ + for (r = 0; r < inst->nrows; r++){ retval = hal_pin_bit_newf(HAL_OUT, - &(inst->hal.key[r * inst->ncols + c]), + &(inst->hal.key[r * inst->ncols + c]), comp_id, - "%s.key.r%xc%x", + "%s.key.r%xc%x", inst->name, r, c); if (retval != 0) { rtapi_print_msg(RTAPI_MSG_ERR, @@ -267,11 +267,11 @@ int rtapi_app_main(void){ } } } - + if (inst->scan){ //internally generated scanning inst->hal.rows = (hal_bit_t **)hal_malloc(inst->nrows * sizeof(hal_bit_t*)); inst->hal.cols = (hal_bit_t **)hal_malloc(inst->ncols * sizeof(hal_bit_t*)); - + for (r = 0; r < inst->nrows; r++){ retval = hal_pin_bit_newf(HAL_OUT, &(inst->hal.rows[r]), comp_id, @@ -294,7 +294,7 @@ int rtapi_app_main(void){ return -1; } } - + retval = hal_pin_u32_newf(HAL_OUT, &(inst->hal.keycode), comp_id, "%s.keycode",inst->name); @@ -304,7 +304,7 @@ int rtapi_app_main(void){ hal_exit(comp_id); return -1; } - + retval = hal_param_bit_newf(HAL_RW, &(inst->param.invert), comp_id, "%s.negative-logic",inst->name); @@ -314,8 +314,8 @@ int rtapi_app_main(void){ hal_exit(comp_id); return -1; } - - + + retval = hal_param_u32_newf(HAL_RW, &(inst->param.rollover), comp_id, "%s.key_rollover",inst->name); @@ -325,7 +325,7 @@ int rtapi_app_main(void){ hal_exit(comp_id); return -1; } - + } else // scanning by 7i73 or similar { @@ -339,7 +339,7 @@ int rtapi_app_main(void){ return -1; } } - + retval = hal_export_funct(inst->name, loop, inst, 1, 0, comp_id); //needs fp? if (retval < 0) { rtapi_print_msg(RTAPI_MSG_ERR, "matrix_kb: ERROR: function export failed\n"); @@ -347,7 +347,7 @@ int rtapi_app_main(void){ } } hal_ready(comp_id); - + return 0; } diff --git a/src/modules/managed/components/mesa_pktgyro_test/src/mesa_pktgyro_test.comp b/src/modules/managed/components/mesa_pktgyro_test/src/mesa_pktgyro_test.comp index 7619453dc4..f5c885d9d6 100644 --- a/src/modules/managed/components/mesa_pktgyro_test/src/mesa_pktgyro_test.comp +++ b/src/modules/managed/components/mesa_pktgyro_test/src/mesa_pktgyro_test.comp @@ -1,6 +1,6 @@ component mesa_pktgyro_test "PktUART simple test with Microstrain 3DM-GX3-15 gyro"; -description +description """ This component is written in order to test the PktUART driver for Mesa. It resembles partly Andy Pugh's mesa_uart.comp . diff --git a/src/modules/managed/components/message/src/message.icomp b/src/modules/managed/components/message/src/message.icomp index a775a3f2c8..2881cd776b 100644 --- a/src/modules/managed/components/message/src/message.icomp +++ b/src/modules/managed/components/message/src/message.icomp @@ -5,7 +5,7 @@ * Author: Les Newell * Copyright (c) 2011 All rights reserved. * License: GPL Version 2 or later -* +* * Adapted and altered for instantiated component * by ArcEye 2015 * @@ -13,11 +13,11 @@ * setp low_warn.message-num 0 (default message anyway) * setp low_warn.message-num 1 * setp low_warn.message-num 2 -* +* *************************************************************************/ - + component message "Display a message"; - + description "Allows HAL pins to trigger a message."; pin in bit trigger = false "signal that triggers the message"; @@ -35,25 +35,25 @@ function _ nofp "Display a message when triggered"; license "GPL v2"; ;; - - + + FUNCTION(_) { hal_bit_t show = false; - - if(prev_edge != edge) // edge type has changed + + if(prev_edge != edge) // edge type has changed { prev_edge = edge; prev_trigger = !edge; } - if(force != prev_force) // force type has changed + if(force != prev_force) // force type has changed { prev_force = force; if(force && (trigger == edge)) show = true; } - - if(trigger != prev_trigger) // trigger has changed + + if(trigger != prev_trigger) // trigger has changed { prev_trigger = trigger; if(trigger == edge) @@ -63,19 +63,19 @@ hal_bit_t show = false; { rtapi_print_msg(RTAPI_MSG_ERR, "%s", local_argv(message_num)); } - + return 0; } EXTRA_INST_SETUP() { hal_s32_t i; - + // demonstrate that both argv and local_argv hold same - + for(i = 0; i < local_argc; i++) rtapi_print_msg(RTAPI_MSG_ERR, "%s", argv[i]); - + for(i = 0; i < local_argc; i++) rtapi_print_msg(RTAPI_MSG_ERR, "%s", local_argv(i)); diff --git a/src/modules/managed/components/messagev2/src/messagev2.icomp b/src/modules/managed/components/messagev2/src/messagev2.icomp index 5ae87695b0..f018f7e961 100644 --- a/src/modules/managed/components/messagev2/src/messagev2.icomp +++ b/src/modules/managed/components/messagev2/src/messagev2.icomp @@ -5,7 +5,7 @@ * Author: Les Newell * Copyright (c) 2011 All rights reserved. * License: GPL Version 2 or later -* +* * Adapted and altered for instantiated component * by ArcEye 2015 * @@ -13,11 +13,11 @@ * setp low_warn.message-num 0 (default message anyway) * setp low_warn.message-num 1 * setp low_warn.message-num 2 -* +* *************************************************************************/ - + component messagev2 "Display a message"; - + description "Allows HAL pins to trigger a message."; pin_ptr in bit trigger = false "signal that triggers the message"; @@ -30,30 +30,30 @@ variable hal_bit_t prev_force = true; variable hal_bit_t prev_edge = true; option extra_inst_setup yes; - + function _ nofp "Display a message when triggered"; license "GPL v2"; ;; - - + + FUNCTION(_) { hal_bit_t show = false; - - if(prev_edge != gb(edge)) // edge type has changed + + if(prev_edge != gb(edge)) // edge type has changed { prev_edge = gb(edge); prev_trigger = !gb(edge); } - if(gb(force) != prev_force) // force type has changed + if(gb(force) != prev_force) // force type has changed { prev_force = gb(force); if(gb(force) && (gb(trigger) == gb(edge))) show = true; } - - if(gb(trigger) != prev_trigger) // trigger has changed + + if(gb(trigger) != prev_trigger) // trigger has changed { prev_trigger = gb(trigger); if(gb(trigger) == gb(edge)) @@ -62,19 +62,19 @@ hal_bit_t show = false; // once in the component function, print our local copy of the messages if(show && (gs(message_num) < local_argc)) rtapi_print_msg(RTAPI_MSG_ERR, "%s\n", local_argv(gs(message_num))); - + return 0; } - + EXTRA_INST_SETUP() { hal_s32_t i = 0; // demonstrate that both argv and local_argv hold same - + for(i = 0; i < local_argc; i++) rtapi_print_msg(RTAPI_MSG_ERR, "%s", argv[i]); - + for(i = 0; i < local_argc; i++) rtapi_print_msg(RTAPI_MSG_ERR, "%s", local_argv(i)); diff --git a/src/modules/managed/components/minmaxv2/src/minmaxv2.icomp b/src/modules/managed/components/minmaxv2/src/minmaxv2.icomp index f178a5a542..fb651efc55 100644 --- a/src/modules/managed/components/minmaxv2/src/minmaxv2.icomp +++ b/src/modules/managed/components/minmaxv2/src/minmaxv2.icomp @@ -8,16 +8,16 @@ license "GPL"; ;; FUNCTION(_) { - if(gb(reset)) + if(gb(reset)) { sf(max_, gf(in)); - sf(min_, gf(in)); + sf(min_, gf(in)); } - else + else { - if(gf(in) > gf(max_)) + if(gf(in) > gf(max_)) sf(max_, gf(in)); - if(gf(in) < gf(min_)) + if(gf(in) < gf(min_)) sf(min_, gf(in)); } diff --git a/src/modules/managed/components/multiswitchv2/src/multiswitchv2.icomp b/src/modules/managed/components/multiswitchv2/src/multiswitchv2.icomp index 1406852c62..a438827c09 100644 --- a/src/modules/managed/components/multiswitchv2/src/multiswitchv2.icomp +++ b/src/modules/managed/components/multiswitchv2/src/multiswitchv2.icomp @@ -51,16 +51,16 @@ FUNCTION(_) hal_s32_t i; // debounce - if (gb(up) && !old_up) - incs(position); - if (gb(down) && !old_down) + if (gb(up) && !old_up) + incs(position); + if (gb(down) && !old_down) decs(position); old_up = gb(up); old_down = gb(down); - if (gs(position) < 0) + if (gs(position) < 0) ss(position, gu(top_position)); - if (gs(position) > gu(top_position)) + if (gs(position) > gu(top_position)) ss(position, 0); for (i = 0 ; i < local_pincount; i++) diff --git a/src/modules/managed/components/mux16v2/src/mux16v2.icomp b/src/modules/managed/components/mux16v2/src/mux16v2.icomp index eda329c7de..c7f2543ce4 100644 --- a/src/modules/managed/components/mux16v2/src/mux16v2.icomp +++ b/src/modules/managed/components/mux16v2/src/mux16v2.icomp @@ -59,37 +59,37 @@ FUNCTION(_) hal_s32_t i,num = 0; hal_bit_t internal[4]; - if(gb(suppress_no_input)) + if(gb(suppress_no_input)) { - if (gb(sel(0)) + gb(sel(1)) + gb(sel(2)) + gb(sel(3)) == false) + if (gb(sel(0)) + gb(sel(1)) + gb(sel(2)) + gb(sel(3)) == false) return 0; } - - if (gb(use_graycode)) + + if (gb(use_graycode)) { internal[0] = gb(sel(3)); internal[1] = gb(sel(2)); internal[2] = gb(sel(1)); internal[3] = gb(sel(0)); - + for(i = 1; i < 4; i++) internal[i] = internal[i] ^ internal[i - 1]; - + ss(selected, num = internal[3]+(internal[2]*2) + (internal[1]*4) + (internal[0]*8)); } else ss(selected, num = (gb(sel(0)))+(gb(sel(1))*2) + (gb(sel(2))*4) + (gb(sel(3))*8)); - - if(gf(debounce_time)) + + if(gf(debounce_time)) { - if (num != lastnum) + if (num != lastnum) { - if (!running) + if (!running) { running = true; delaytime = 0.0; } - if (delaytime < gf(debounce_time)) + if (delaytime < gf(debounce_time)) { delaytime += fperiod; sf(elapsed, delaytime); diff --git a/src/modules/managed/components/mux2v2/src/mux2v2.icomp b/src/modules/managed/components/mux2v2/src/mux2v2.icomp index 4925d4b46e..687c41d54f 100644 --- a/src/modules/managed/components/mux2v2/src/mux2v2.icomp +++ b/src/modules/managed/components/mux2v2/src/mux2v2.icomp @@ -8,9 +8,9 @@ license "GPL"; ;; FUNCTION(_) { - if(gb(sel)) + if(gb(sel)) sf(out, gf(in1)); - else + else sf(out, gf(in0)); return 0; diff --git a/src/modules/managed/components/mux4v2/src/mux4v2.icomp b/src/modules/managed/components/mux4v2/src/mux4v2.icomp index ef5621c2ba..e95efe2dcd 100644 --- a/src/modules/managed/components/mux4v2/src/mux4v2.icomp +++ b/src/modules/managed/components/mux4v2/src/mux4v2.icomp @@ -29,17 +29,17 @@ license "GPL"; ;; FUNCTION(_) { - if(gb(sel1)) + if(gb(sel1)) { - if(gb(sel0)) + if(gb(sel0)) sf(out, gf(in3)); else sf(out, gf(in2)); } else { - if(gb(sel0)) + if(gb(sel0)) sf(out, gf(in1)); - else + else sf(out, gf(in0)); } diff --git a/src/modules/managed/components/nearv2/src/nearv2.icomp b/src/modules/managed/components/nearv2/src/nearv2.icomp index 9d26909fea..a313ea9717 100644 --- a/src/modules/managed/components/nearv2/src/nearv2.icomp +++ b/src/modules/managed/components/nearv2/src/nearv2.icomp @@ -19,7 +19,7 @@ FUNCTION(_) in1 = -in1; in2 = -in2; } - if((gf(scale) > 1 && in1 / gf(scale) <= in2 && in2 <= in1 * gf(scale)) || + if((gf(scale) > 1 && in1 / gf(scale) <= in2 && in2 <= in1 * gf(scale)) || rtapi_fabs(in1-in2) <= gf(difference)) sb(out, true); else diff --git a/src/modules/managed/components/offsetn/src/offsetn.icomp b/src/modules/managed/components/offsetn/src/offsetn.icomp index d7b32e51a9..efcc5e7c67 100644 --- a/src/modules/managed/components/offsetn/src/offsetn.icomp +++ b/src/modules/managed/components/offsetn/src/offsetn.icomp @@ -31,10 +31,10 @@ pin in float #.fb_in[pincount] "The feedback input value"; pin out float #.fb_out[pincount] "The feedback output value"; -instanceparam int pincount = 1; +instanceparam int pincount = 1; //Default to single, same as legacy component -option MAXCOUNT 9; +option MAXCOUNT 9; //Max of 9 to match current number of supported axes in most *kins function update_output "Updated the output value by adding the offset to the input"; diff --git a/src/modules/managed/components/pbmsgs/include/pbmsgs.h b/src/modules/managed/components/pbmsgs/include/pbmsgs.h index a64b546a70..3a0e92241e 100644 --- a/src/modules/managed/components/pbmsgs/include/pbmsgs.h +++ b/src/modules/managed/components/pbmsgs/include/pbmsgs.h @@ -33,6 +33,6 @@ typedef struct { #include #include #include - + #endif // _PBMSGS_H diff --git a/src/modules/managed/components/pbmsgs/src/pbmsgs.c b/src/modules/managed/components/pbmsgs/src/pbmsgs.c index 191b2720d1..a62711dbb1 100644 --- a/src/modules/managed/components/pbmsgs/src/pbmsgs.c +++ b/src/modules/managed/components/pbmsgs/src/pbmsgs.c @@ -112,4 +112,3 @@ msginfo_t msginfo[] = { }; EXPORT_SYMBOL(msginfo); - diff --git a/src/modules/managed/components/pbring/README b/src/modules/managed/components/pbring/README index dbcf87b2c4..626cdc71a1 100644 --- a/src/modules/managed/components/pbring/README +++ b/src/modules/managed/components/pbring/README @@ -1,3 +1,3 @@ pbring - protobuf ring -Not working, feel free to fix \ No newline at end of file +Not working, feel free to fix diff --git a/src/modules/managed/components/pbring/pbring-demo.hal b/src/modules/managed/components/pbring/pbring-demo.hal index 9449f6c795..a77f3832bd 100644 --- a/src/modules/managed/components/pbring/pbring-demo.hal +++ b/src/modules/managed/components/pbring/pbring-demo.hal @@ -31,4 +31,3 @@ addf second.update servo # now try to bring it back with: # newinst pbring second # and have a look at 'halcmd show' to see what happened - diff --git a/src/modules/managed/components/pbring/pbring-demo.hal.v2 b/src/modules/managed/components/pbring/pbring-demo.hal.v2 index ec51a7065d..e14bd01d6c 100644 --- a/src/modules/managed/components/pbring/pbring-demo.hal.v2 +++ b/src/modules/managed/components/pbring/pbring-demo.hal.v2 @@ -31,4 +31,3 @@ addf second.update servo # now try to bring it back with: # newinst pbring second # and have a look at 'halcmd show' to see what happened - diff --git a/src/modules/managed/components/pid/src/pid.icomp b/src/modules/managed/components/pid/src/pid.icomp index 1472b6e1bb..c003bec23a 100644 --- a/src/modules/managed/components/pid/src/pid.icomp +++ b/src/modules/managed/components/pid/src/pid.icomp @@ -300,4 +300,3 @@ FUNCTION(do_pid_calcs) { /* done */ return 0; } - diff --git a/src/modules/managed/components/pidv2/src/pidv2.icomp b/src/modules/managed/components/pidv2/src/pidv2.icomp index fba307f347..569371255e 100644 --- a/src/modules/managed/components/pidv2/src/pidv2.icomp +++ b/src/modules/managed/components/pidv2/src/pidv2.icomp @@ -297,4 +297,3 @@ FUNCTION(do_pid_calcs) { /* done */ return 0; } - diff --git a/src/modules/managed/components/pll_correction/src/pll_correction.comp b/src/modules/managed/components/pll_correction/src/pll_correction.comp index 17d03ff098..40257a8de4 100644 --- a/src/modules/managed/components/pll_correction/src/pll_correction.comp +++ b/src/modules/managed/components/pll_correction/src/pll_correction.comp @@ -62,7 +62,7 @@ FUNCTION(_) { } else // increment time base by period time_set(time_base, time(time_base) + period); - + // Difference between expected and actual period start period_actual = time(now) - time(prev); @@ -77,7 +77,7 @@ FUNCTION(_) { // Get reference (unused) time_set(ref, rtapi_task_pll_get_reference()); - + // Average samps[(samp_last++)%numsamps] = pll_err; samp_avg = 0; diff --git a/src/modules/managed/components/pwmgenv2/src/pwmgenv2.c b/src/modules/managed/components/pwmgenv2/src/pwmgenv2.c index d8bc49dfee..ca8a5bba9d 100644 --- a/src/modules/managed/components/pwmgenv2/src/pwmgenv2.c +++ b/src/modules/managed/components/pwmgenv2/src/pwmgenv2.c @@ -178,7 +178,7 @@ static int comp_id; /* component ID */ static long periodns = -1; /* makepulses function period in nanosec */ static const char *compname = "pwmgenv2"; -static const char *prefix = "pwmgenv2"; +static const char *prefix = "pwmgenv2"; /*********************************************************************** * LOCAL FUNCTION DECLARATIONS * @@ -241,12 +241,12 @@ static int instantiate_pwmgen(const int argc, char* const *argv) pwmgen_t *p; int retval; const char* name; - + if(argc >= 2) name = argv[1]; else HALFAIL_RC(EINVAL, "ERROR: insufficient args in argv"); - + if ((retval = hal_inst_create(name, comp_id, sizeof(pwmgen_t), (void **)&p)) < 0) return retval; diff --git a/src/modules/managed/components/random/src/random.c b/src/modules/managed/components/random/src/random.c index 1833c5af73..b8fd6b8752 100644 --- a/src/modules/managed/components/random/src/random.c +++ b/src/modules/managed/components/random/src/random.c @@ -164,4 +164,3 @@ lran2(struct lran2_st* d) d->v[j] = d->x; return d->y; } - diff --git a/src/modules/managed/components/ringread/src/ringread.comp b/src/modules/managed/components/ringread/src/ringread.comp index e60739a6c1..4b498c2f2d 100644 --- a/src/modules/managed/components/ringread/src/ringread.comp +++ b/src/modules/managed/components/ringread/src/ringread.comp @@ -5,11 +5,11 @@ description Demonstartion of ringread operations Will output - + Number of underruns Number of successful reads Number of times writer outstripped the reader -"""; +"""; pin out u32 underrun "number of failed read attempts"; pin out u32 received "number of successful read attempts"; diff --git a/src/modules/managed/components/rtapi-malloc-free/README b/src/modules/managed/components/rtapi-malloc-free/README index 1a250c5a9e..c3e4c9d08a 100644 --- a/src/modules/managed/components/rtapi-malloc-free/README +++ b/src/modules/managed/components/rtapi-malloc-free/README @@ -1 +1 @@ -demo component exercising the rtapi_heap api (malloc/free in RT), using the heap in the global segment \ No newline at end of file +demo component exercising the rtapi_heap api (malloc/free in RT), using the heap in the global segment diff --git a/src/modules/managed/components/rtmon/src/rtmon.comp b/src/modules/managed/components/rtmon/src/rtmon.comp index 62d930db91..2eb4714fd8 100644 --- a/src/modules/managed/components/rtmon/src/rtmon.comp +++ b/src/modules/managed/components/rtmon/src/rtmon.comp @@ -1,6 +1,6 @@ component rtmon "monitor RT faults and generate estop signal based on a parameterized function"; -description +description """ This component is an example how realtime faults (e.g. timing violations) can be dealt with. The realtime API (RTAPI) only collects relevant events but does not act upon them; every RT fault causes a call to the RTAPI @@ -130,4 +130,3 @@ FUNCTION(_){ } } } - diff --git a/src/modules/managed/components/safety_latchv2/src/safety_latchv2.icomp b/src/modules/managed/components/safety_latchv2/src/safety_latchv2.icomp index 15af0405d7..96842b3b1c 100644 --- a/src/modules/managed/components/safety_latchv2/src/safety_latchv2.icomp +++ b/src/modules/managed/components/safety_latchv2/src/safety_latchv2.icomp @@ -108,7 +108,7 @@ FUNCTION(_) else if (!gb(latching)) { sb(error_out, false); - sb(ok_out, true); + sb(ok_out, true); } } diff --git a/src/modules/managed/components/sample_channel/src/sample_channel_pb.c b/src/modules/managed/components/sample_channel/src/sample_channel_pb.c index 017cabd5d2..ec7f2f2dcc 100644 --- a/src/modules/managed/components/sample_channel/src/sample_channel_pb.c +++ b/src/modules/managed/components/sample_channel/src/sample_channel_pb.c @@ -1,18 +1,18 @@ /***************************************************************************** Instantiatiable recorder with configurable pins - + This recorder puts pin values with a timestamp in a protobuf encoded message in a HAL ringbuffer. - + See also: * sample_channel.hal * show_sample.py * sample.proto - + Usage: newinst sample_channel_pb sampler --- samples=bbfusUS cycles=10 - + This will create an instance "sampler" with pins and a ring. The ring can contain at least 10 cycles of the record_sample.funct Pins: @@ -28,7 +28,7 @@ Optionally: * you can name the pins at instantiation time like so: newinst sample_channel_pb sampler --- samples=bff pinnames=foo,bar,baz cycles=10 - + this will than create the following pins of types: sampler.foo -> bit sampler.bar -> float @@ -38,7 +38,7 @@ License: GPL Version 2 Copyright (c) 2019 All rights reserved. - + This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. @@ -46,7 +46,7 @@ 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA @@ -94,7 +94,7 @@ struct inst_data{ hal_u32_t *send_fail; // error counter on the send side hal_u32_t *dropped; // dropped sampled due to full ring; char pinnames[MAX_PINS][HAL_NAME_LEN]; //contains names - + // the ringbuffer ringbuffer_t sample_ring; size_t sample_size; @@ -220,7 +220,7 @@ static int record_sample(void *arg, const hal_funct_args_t *fa) rtapi_print_msg(RTAPI_MSG_ERR, "%s: sending of message failed = %d", compname, retval); *(ip->send_fail) +=1; - } + } } } return 0; @@ -343,7 +343,7 @@ static int export_pins(struct inst_data *ip, const char *name) comp_id, "%s", ip->pinnames[i])) < 0) { return retval; } - + } // create misc pins if (((retval = hal_pin_bit_newf(HAL_IN, &(ip->record), comp_id, @@ -385,7 +385,7 @@ static int create_ring(struct inst_data *ip, const char *name) flags & RINGTYPE_MASK); return -EINVAL; } - } + } else { HALERR("ring %s.ring does not exist", name); diff --git a/src/modules/managed/components/sampler/src/sampler.c b/src/modules/managed/components/sampler/src/sampler.c index 90e2c9257e..b0893ee094 100644 --- a/src/modules/managed/components/sampler/src/sampler.c +++ b/src/modules/managed/components/sampler/src/sampler.c @@ -6,15 +6,15 @@ * * Author: John Kasunich * License: GPL Version 2 -* +* * Copyright (c) 2006 All rights reserved. * ********************************************************************/ /** This file, 'sampler.c', is the realtime part of a HAL component that allows data from HAL pins to be sampled at a uniform realtime sample rate and then be transferred to a file. When this realtime - module is loaded, it creates a fifo in shared memory and begins - capturing data from HAL pins to the fifo. Then, the user space + module is loaded, it creates a fifo in shared memory and begins + capturing data from HAL pins to the fifo. Then, the user space program 'halsampler' is invoked, which reads the fifo and writes the data to stdout. @@ -432,4 +432,3 @@ static int init_sampler(int num, fifo_t *tmp_fifo) fifo->magic = FIFO_MAGIC_NUM; return 0; } - diff --git a/src/modules/managed/components/scope_rt/src/scope_rt.c b/src/modules/managed/components/scope_rt/src/scope_rt.c index 674f9883f7..e38baf850a 100644 --- a/src/modules/managed/components/scope_rt/src/scope_rt.c +++ b/src/modules/managed/components/scope_rt/src/scope_rt.c @@ -367,7 +367,7 @@ static int check_trigger(void) break; case HAL_U64: compare_result = (value->d_u64 > level->d_u64); - break; + break; default: compare_result = 0; break; diff --git a/src/modules/managed/components/siggen/src/siggen.c b/src/modules/managed/components/siggen/src/siggen.c index 753e96068b..d8ad615eb5 100644 --- a/src/modules/managed/components/siggen/src/siggen.c +++ b/src/modules/managed/components/siggen/src/siggen.c @@ -1,18 +1,18 @@ /******************************************************************** * Description: siggen.c -* This file, 'siggen.c', is a HAL component that -* generates square, triangle, sine, cosine, and +* This file, 'siggen.c', is a HAL component that +* generates square, triangle, sine, cosine, and * sawtooth waves plus a clock signal. * * Author: John Kasunich * License: GPL Version 2 -* +* * Copyright (c) 2003 All rights reserved. * * Last change: 17Nov2010 - Matt Shaver added the "clock" output pin. ********************************************************************/ /** This file, 'siggen.c', is a HAL component that generates square, - triangle, sine, cosine, and sawtooth waves. I expect that it + triangle, sine, cosine, and sawtooth waves. I expect that it will mostly be used for testing. It is a realtime component. It supports any number of signal generators, as set by the diff --git a/src/modules/managed/components/sim_encoder/src/sim_encoder.c b/src/modules/managed/components/sim_encoder/src/sim_encoder.c index b71a27bff0..10ff082e18 100644 --- a/src/modules/managed/components/sim_encoder/src/sim_encoder.c +++ b/src/modules/managed/components/sim_encoder/src/sim_encoder.c @@ -1,16 +1,16 @@ /******************************************************************** * Description: sim_encoder.c -* A HAL component that generates A, B, and index +* A HAL component that generates A, B, and index * signals as an encoder would. * * Author: John Kasunich * License: GPL Version 2 -* +* * Copyright (c) 2006 All rights reserved. * -* Last change: +* Last change: ********************************************************************/ -/** This file, 'sim_encoder.c', is a HAL component that simulates +/** This file, 'sim_encoder.c', is a HAL component that simulates a quadrature encoder with an index pulse. It "rotates" at a speed controlled by a HAL pin, and produces A, B, and Z outputs on other HAL pins. A parameter sets the counts/revolution. @@ -22,7 +22,7 @@ The module exports two functions. 'sim-encoder.make-pulses', is responsible for actually generating the A, B, and Z signals. It - must be executed in a fast thread to reduce pulse jitter. The + must be executed in a fast thread to reduce pulse jitter. The other function, 'sim-encoder.update-speed', is is normally called from a much slower thread, and sets internal variables used by 'make-pulses', based on the 'speed' input pin, and the 'ppr' @@ -151,9 +151,9 @@ int rtapi_app_main(void) "SIM_ENCODER: ERROR: invalid number of channels %d\n", howmany); return -1; } - /* periodns will be set to the proper value when 'make_pulses()' + /* periodns will be set to the proper value when 'make_pulses()' runs for the first time. We load a default value here to avoid - glitches at startup, but all these 'constants' are recomputed + glitches at startup, but all these 'constants' are recomputed inside 'update_speed()' using the real period. */ periodns = 50000; /* precompute some constants */ diff --git a/src/modules/managed/components/sim_spindle/src/sim_spindle.icomp b/src/modules/managed/components/sim_spindle/src/sim_spindle.icomp index 77a28513d1..453d0019c2 100644 --- a/src/modules/managed/components/sim_spindle/src/sim_spindle.icomp +++ b/src/modules/managed/components/sim_spindle/src/sim_spindle.icomp @@ -29,4 +29,3 @@ hal_float_t new_position = position_fb + velocity_cmd * fperiod * scale; return 0; } - diff --git a/src/modules/managed/components/sim_spindlev2/src/sim_spindlev2.icomp b/src/modules/managed/components/sim_spindlev2/src/sim_spindlev2.icomp index 2576c216cc..0f3b2bfba8 100644 --- a/src/modules/managed/components/sim_spindlev2/src/sim_spindlev2.icomp +++ b/src/modules/managed/components/sim_spindlev2/src/sim_spindlev2.icomp @@ -29,4 +29,3 @@ hal_float_t new_position = (gf(position_fb) + gf(velocity_cmd )* fperiod * gf(sc return 0; } - diff --git a/src/modules/managed/components/statsv2/src/statsv2.icomp b/src/modules/managed/components/statsv2/src/statsv2.icomp index 41ad2a7046..54df504e2e 100644 --- a/src/modules/managed/components/statsv2/src/statsv2.icomp +++ b/src/modules/managed/components/statsv2/src/statsv2.icomp @@ -14,16 +14,16 @@ license "GPL"; ;; FUNCTION(_) { - if (gb(enable) ^ prev_enable) + if (gb(enable) ^ prev_enable) { // edge - if (gb(enable)) + if (gb(enable)) { // positive edge sf(mean, 0.0); su(n, 0); m2 = 0.0; } } - if (gb(enable)) + if (gb(enable)) { incu(n); delta = gf(in) - gf(mean); diff --git a/src/modules/managed/components/stepgen/src/stepgen.c b/src/modules/managed/components/stepgen/src/stepgen.c index 95e795a2ea..702ded2c95 100644 --- a/src/modules/managed/components/stepgen/src/stepgen.c +++ b/src/modules/managed/components/stepgen/src/stepgen.c @@ -1,14 +1,14 @@ /******************************************************************** * Description: stepgen.c -* This file, 'stepgen.c', is a HAL component that +* This file, 'stepgen.c', is a HAL component that * provides software based step pulse generation. * * Author: John Kasunich * License: GPL Version 2 -* +* * Copyright (c) 2003-2007 All rights reserved. * -* Last change: +* Last change: ********************************************************************/ /** This file, 'stepgen.c', is a HAL component that provides software based step pulse generation. The maximum step rate will depend @@ -37,7 +37,7 @@ insmod stepgen step_type=0,0,1,2 ctrl_type=p,p,v,p will install four step generators, two using stepping type 0, - one using type 1, and one using type 2. The first two and + one using type 1, and one using type 2. The first two and the last one will be running in position mode, and the third one will be running in velocity mode. @@ -471,7 +471,7 @@ int rtapi_app_main(void) "STEPGEN: ERROR: no channels configured\n"); return -1; } - /* periodns will be set to the proper value when 'make_pulses()' runs for + /* periodns will be set to the proper value when 'make_pulses()' runs for the first time. We load a default value here to avoid glitches at startup, but all these 'constants' are recomputed inside 'update_freq()' using the real period. */ diff --git a/src/modules/managed/components/stepgenv2/src/stepgenv2.c b/src/modules/managed/components/stepgenv2/src/stepgenv2.c index e00d908696..76502f5fda 100644 --- a/src/modules/managed/components/stepgenv2/src/stepgenv2.c +++ b/src/modules/managed/components/stepgenv2/src/stepgenv2.c @@ -583,7 +583,7 @@ static int instantiate_stepgen(const int argc, char* const *argv) { int retval; const char* name; - + if(argc >= 2) name = argv[1]; else diff --git a/src/modules/managed/components/streamer/src/streamer.c b/src/modules/managed/components/streamer/src/streamer.c index 1d720b2497..678cb34dbb 100644 --- a/src/modules/managed/components/streamer/src/streamer.c +++ b/src/modules/managed/components/streamer/src/streamer.c @@ -6,7 +6,7 @@ * * Author: John Kasunich * License: GPL Version 2 -* +* * Copyright (c) 2006 All rights reserved. * ********************************************************************/ @@ -14,8 +14,8 @@ that allows numbers stored in a file to be "streamed" onto HAL pins at a uniform realtime sample rate. When the realtime module is loaded, it creates a fifo in shared memory. Then, the user - space program 'hal_streamer' is invoked. 'hal_streamer' takes - input from stdin and writes it to the fifo, and this component + space program 'hal_streamer' is invoked. 'hal_streamer' takes + input from stdin and writes it to the fifo, and this component transfers the data from the fifo to HAL pins. Loading: @@ -416,4 +416,3 @@ static int init_streamer(int num, fifo_t *tmp_fifo) fifo->magic = FIFO_MAGIC_NUM; return 0; } - diff --git a/src/modules/managed/components/symbols_use_out/src/symbols_use_out.comp b/src/modules/managed/components/symbols_use_out/src/symbols_use_out.comp index 8d9b10ad39..203324bd3f 100644 --- a/src/modules/managed/components/symbols_use_out/src/symbols_use_out.comp +++ b/src/modules/managed/components/symbols_use_out/src/symbols_use_out.comp @@ -7,4 +7,3 @@ license "GPL"; int testdefine; FUNCTION(_) { out = testdefine; } - diff --git a/src/modules/managed/components/thc/src/thc.comp b/src/modules/managed/components/thc/src/thc.comp index 454141b3a3..2f8864c44b 100644 --- a/src/modules/managed/components/thc/src/thc.comp +++ b/src/modules/managed/components/thc/src/thc.comp @@ -1,6 +1,6 @@ component thc "Torch Height Control"; -description +description """ Torch Height Control Mesa THC > encoder > Machinekit THC component @@ -46,7 +46,7 @@ thc.requested-vel <= motion.requested-vel thc.current-vel <= motion.current-vel """; - + author "John Thornton"; license "GPLv2 or greater"; @@ -98,14 +98,14 @@ FUNCTION(_) { float min_velocity = requested_vel -(requested_vel*(velocity_tol*0.01)); if(current_vel > 0 && current_vel >= min_velocity){vel_status = 1;} else {vel_status =0;} - + if(torch_on && arc_ok && vel_status){ // allow correction if((volts + voltage_tol) > volts_requested){ offset -= correction_vel; } if((volts - voltage_tol) < volts_requested){ offset += correction_vel; - } + } last_z_in = 0; } if(!torch_on){ // remove any offset @@ -135,4 +135,3 @@ FUNCTION(_) { z_fb_out = z_pos_in; // keep axis motor position fb from being confused } } - diff --git a/src/modules/managed/components/thcud/src/thcud.comp b/src/modules/managed/components/thcud/src/thcud.comp index 14dde5ed94..30d93a598f 100644 --- a/src/modules/managed/components/thcud/src/thcud.comp +++ b/src/modules/managed/components/thcud/src/thcud.comp @@ -1,6 +1,6 @@ component thcud "Torch Height Control Up/Down Input"; -description +description """ Torch Height Control This THC takes either an up or a down input from a THC @@ -11,7 +11,7 @@ allow the THC to offset the Z axis as needed to maintain voltage. If enabled and torch is off and the Z axis is moving up remove any correction at a rate not to exceed the rate of movement of the Z axis. -If enabled and torch is off and there is no correction +If enabled and torch is off and there is no correction pass the Z position and feed back untouched. If not enabled pass the Z position and feed back untouched. @@ -56,7 +56,7 @@ Connect the Pyvcp pins in the postgui.hal file like this: net thc-enable thcud.enable <= pyvcp.thc-enable """; - + author "John Thornton"; license "GPLv2 or greater"; @@ -98,14 +98,14 @@ FUNCTION(_) { float min_velocity = requested_vel -(requested_vel*(velocity_tol*0.01)); if(current_vel > 0 && current_vel >= min_velocity){vel_status = 1;} else {vel_status =0;} - + if(torch_on && arc_ok && vel_status){ // allow correction if(torch_down){ offset -= correction_vel; } if(torch_up){ offset += correction_vel; - } + } last_z_in = 0; } if(!torch_on){ // remove any offset @@ -137,4 +137,3 @@ FUNCTION(_) { z_fb_out = z_pos_in; // keep axis motor position fb from being confused } } - diff --git a/src/modules/managed/components/threads/src/threads.c b/src/modules/managed/components/threads/src/threads.c index 487c8e52ca..1f631c3a43 100644 --- a/src/modules/managed/components/threads/src/threads.c +++ b/src/modules/managed/components/threads/src/threads.c @@ -1,21 +1,21 @@ /******************************************************************** * Description: threads.c -* This file, 'threads.c', is a HAL component that -* provides a way to create realtime threads but +* This file, 'threads.c', is a HAL component that +* provides a way to create realtime threads but * contains no other functionality. * * Author: John Kasunich * License: GPL Version 2 -* +* * Copyright (c) 2003 All rights reserved. * -* Last change: +* Last change: ********************************************************************/ -/** This file, 'threads.c', is a HAL component that provides a way to +/** This file, 'threads.c', is a HAL component that provides a way to create realtime threads but contains no other functionality. It will mostly be used for testing - when EMC is run normally, the motion module creates all the neccessary threads. - + The module has three pairs of parameters, "name1, period1", etc. */ diff --git a/src/modules/managed/components/time/src/time.icomp b/src/modules/managed/components/time/src/time.icomp index de79ba8a8b..ec052b708d 100644 --- a/src/modules/managed/components/time/src/time.icomp +++ b/src/modules/managed/components/time/src/time.icomp @@ -98,7 +98,7 @@ hal_u32_t totalsecs; seconds = minutes = hours = 0; } - if(start && !old_start) + if(start && !old_start) totalsecs = 0; if(start){ @@ -112,4 +112,4 @@ hal_u32_t totalsecs; return 0; -} \ No newline at end of file +} diff --git a/src/modules/managed/components/timedelayv2/src/timedelayv2.icomp b/src/modules/managed/components/timedelayv2/src/timedelayv2.icomp index b4446f9607..d0620e83c3 100644 --- a/src/modules/managed/components/timedelayv2/src/timedelayv2.icomp +++ b/src/modules/managed/components/timedelayv2/src/timedelayv2.icomp @@ -1,15 +1,15 @@ component timedelayv2 "The equivalent of a time-delay relay"; pin_ptr in bit in; -pin_ptr out bit out +pin_ptr out bit out """Follows the value of \\fBin\\fR after applying the delays \\fBon-delay\\fR and \\fBoff-delay\\fR."""; -pin_ptr in float on-delay = 0.5 +pin_ptr in float on-delay = 0.5 """The time, in seconds, for which \\fBin\\fR must be \\fBtrue\\fR before \\fBout\\fR becomes \\fBtrue\\fR"""; -pin_ptr in float off-delay = 0.5 +pin_ptr in float off-delay = 0.5 """The time, in seconds, for which \\fBin\\fR must be \\fBfalse\\fR before \\fBout\\fR becomes \\fBfalse\\fR"""; diff --git a/src/modules/managed/components/timev2/src/timev2.icomp b/src/modules/managed/components/timev2/src/timev2.icomp index 98189922e0..e7f88b7480 100644 --- a/src/modules/managed/components/timev2/src/timev2.icomp +++ b/src/modules/managed/components/timev2/src/timev2.icomp @@ -92,14 +92,14 @@ long lperiod = fa_current_period(fa); hal_u32_t totalsecs; if(gb(zero)){ - // cater for restart - totalnsecs = totalsecs = 0; + // cater for restart + totalnsecs = totalsecs = 0; su(seconds, 0); su(minutes, 0); su(hours, 0); } - if(gb(start) && !old_start) + if(gb(start) && !old_start) totalsecs = 0; if(gb(start)){ diff --git a/src/modules/managed/components/updownv2/src/updownv2.icomp b/src/modules/managed/components/updownv2/src/updownv2.icomp index d67ce4a3b0..5d6c945c5f 100644 --- a/src/modules/managed/components/updownv2/src/updownv2.icomp +++ b/src/modules/managed/components/updownv2/src/updownv2.icomp @@ -6,7 +6,7 @@ pin_ptr in bit reset "Reset count when this pin goes from 0 to 1"; pin_ptr out s32 count "The current count"; pin_ptr io bit clamp "If true, then clamp the output to the min and max parameters."; pin_ptr io bit wrap """ -If true, then wrap around when the count goes above or below the min and max parameters. +If true, then wrap around when the count goes above or below the min and max parameters. Note that wrap implies (and overrides) clamp."""; pin_ptr io s32 max = 0x7FFFFFFF "If clamp or wrap is set, count will never exceed this number"; pin_ptr io s32 min "If clamp or wrap is set, count will never be less than this number"; diff --git a/src/modules/managed/components/vari_bit_adc/src/vari_bit_adc.comp b/src/modules/managed/components/vari_bit_adc/src/vari_bit_adc.comp index 89e7cde768..118a4a9489 100644 --- a/src/modules/managed/components/vari_bit_adc/src/vari_bit_adc.comp +++ b/src/modules/managed/components/vari_bit_adc/src/vari_bit_adc.comp @@ -3,7 +3,7 @@ component vari_bit_adc; /** - * Input pins + * Input pins */ pin in u32 in; pin in u32 bit-depth; @@ -12,8 +12,8 @@ pin in bit filter_enable; pin in float filter_gain; /* TAU */ -/** - * Output pins +/** + * Output pins */ pin out float out; diff --git a/src/modules/managed/components/watch/src/watch.c b/src/modules/managed/components/watch/src/watch.c index c7fc0266ea..b688849bad 100644 --- a/src/modules/managed/components/watch/src/watch.c +++ b/src/modules/managed/components/watch/src/watch.c @@ -2,7 +2,7 @@ * Description: watch.c * * This file, 'watch.c', is a HAL instantiated component that, -* reads the value of a pin and waits until it reaches a +* reads the value of a pin and waits until it reaches a * specified value and sets a flag. * It then either ceases to track the pin value or continues to do so. * @@ -10,8 +10,8 @@ * built into instantiated components. * * Passing strings via module params to instantiated components is -* inherently risky, because the kernel module param is only created once, and all -* the instantiations of the component reuse it, irrespective of whether they +* inherently risky, because the kernel module param is only created once, and all +* the instantiations of the component reuse it, irrespective of whether they * have longer strings and thus overrun the allocated buffer. * * Example: @@ -20,17 +20,17 @@ * * Where: * pin_name = Name of the pin value to watch (string) -* preset_name = Name of pin to preset with target value (string) +* preset_name = Name of pin to preset with target value (string) * (could be panel pin or heater temp etc) * preset_type = Is it a pin or a signal (0 pin, 1 sig) * target value = Value required (float) * forever = Keep watching pin after target value reached (bit) -* iterations = Watch for XX iterations only (s32) +* iterations = Watch for XX iterations only (s32) * - remember this is thread polls, so may go very quickly * * Pins: * trigger (bit in) - starts the component watching 'pin_name' -* reset (bit in) - stops the component watching 'pin_name' +* reset (bit in) - stops the component watching 'pin_name' * (& zeros started, stopped, triggered.) * value-out (float out) - value of the pin at that poll * target-reached (bit out) - target value has been reached @@ -52,7 +52,7 @@ * * Last change:. ********************************************************************/ - + /** This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. @@ -60,7 +60,7 @@ 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 library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA @@ -215,7 +215,7 @@ int r = 0; hal_print_msg(RTAPI_MSG_DBG,"export_halobjs() ip->local_pincount set to %d", ip->local_pincount); - hal_export_xfunct_args_t __xf = + hal_export_xfunct_args_t __xf = { .type = FS_XTHREADFUNC, .funct.x = watch_, @@ -241,7 +241,7 @@ struct inst_data *ip; const char *name = argv[1]; int r, k; int inst_id; - + inst_id = hal_inst_create(name, comp_id, sizeof(struct inst_data), (void **)&ip); if (inst_id < 0) return -1; @@ -413,7 +413,7 @@ hal_sig_t *sig; ///////////////////////////////////////////////////////////////////////////////////////// int set_common(hal_type_t type, void *d_ptr, char *value) -{ +{ // This function assumes that the mutex is held int retval = 0; double fval; @@ -437,7 +437,7 @@ char *cp = value; fval = strtod ( value, &cp ); if ((*cp != '\0') && (!isspace(*cp))) { - // invalid character(s) in string + // invalid character(s) in string hal_print_msg(RTAPI_MSG_DBG,"value '%s' invalid for float\n", value); retval = -EINVAL; } @@ -448,7 +448,7 @@ char *cp = value; lval = strtol(value, &cp, 0); if ((*cp != '\0') && (!isspace(*cp))) { - // invalid chars in string + // invalid chars in string hal_print_msg(RTAPI_MSG_DBG,"value '%s' invalid for S32\n", value); retval = -EINVAL; } @@ -459,7 +459,7 @@ char *cp = value; ulval = strtoul(value, &cp, 0); if ((*cp != '\0') && (!isspace(*cp))) { - // invalid chars in string + // invalid chars in string hal_print_msg(RTAPI_MSG_DBG,"value '%s' invalid for U32\n", value); retval = -EINVAL; } @@ -467,7 +467,7 @@ char *cp = value; *((hal_u32_t *) (d_ptr)) = ulval; break; default: - // Shouldn't get here, but just in case... + // Shouldn't get here, but just in case... hal_print_msg(RTAPI_MSG_DBG,"bad type %d\n", type); retval = -EINVAL; } @@ -483,33 +483,33 @@ hal_type_t type; void *d_ptr; rtapi_print_msg(RTAPI_MSG_DBG, "setting signal '%s'\n", name); - // get mutex before accessing shared data + // get mutex before accessing shared data rtapi_mutex_get(&(hal_data->mutex)); - // search signal list for name + // search signal list for name sig = halpr_find_sig_by_name(name); - if (sig == 0) + if (sig == 0) { rtapi_mutex_give(&(hal_data->mutex)); hal_print_msg(RTAPI_MSG_DBG,"signal '%s' not found\n", name); return -EINVAL; } - // found it - does it have a writer? - if (sig->writers > 0) + // found it - does it have a writer? + if (sig->writers > 0) { rtapi_mutex_give(&(hal_data->mutex)); hal_print_msg(RTAPI_MSG_DBG,"signal '%s' already has writer(s)\n", name); return -EINVAL; } - // no writer, so we can safely set it + // no writer, so we can safely set it type = sig->type; d_ptr = sig_value(sig); retval = set_common(type, d_ptr, value); rtapi_mutex_give(&(hal_data->mutex)); - if (retval == 0) + if (retval == 0) hal_print_msg(RTAPI_MSG_DBG,"Signal '%s' set to %s\n", name, value); - else + else hal_print_msg(RTAPI_MSG_DBG,"sets failed\n"); - + return retval; } @@ -592,7 +592,7 @@ static hal_bit_t latched = 0; *(ip->_triggered) = latched = 1; *(ip->_trigger) = 0; } - + if( latched ) // we are running { if(! *(ip->_target_reached)) // OK to continue running @@ -629,7 +629,7 @@ static hal_bit_t latched = 0; } } // carry on showing pin value after target reached, but not until triggered if not latched - else if(*(ip->_forever) && *(ip->_triggered)) + else if(*(ip->_forever) && *(ip->_triggered)) { get_pin_value(target_pin_name, value); *(ip->_value_out) = atof(value); @@ -673,7 +673,7 @@ int x; preset_type = atoi(&c[12]); } - hal_print_msg(RTAPI_MSG_DBG,"pin_name = %s, preset_pin_name = %s, preset_type = %d, target_value = %f, forever = %d, iterations = %d", + hal_print_msg(RTAPI_MSG_DBG,"pin_name = %s, preset_pin_name = %s, preset_type = %d, target_value = %f, forever = %d, iterations = %d", target_pin_name, preset_name, preset_type, *(ip->_target_value), *(ip->_forever), *(ip->_iterations) ); char buff[16]; @@ -684,13 +684,13 @@ int x; // Uses for this include setting the heater component to the temperature required or // setting a panel widget to the value required to initialise it. // Wherever possible this should be a pin, the signal option arises from horrible FDM configs - // where signals are created with "meaningful names" and net'd to the pin, instead of just using + // where signals are created with "meaningful names" and net'd to the pin, instead of just using // the actual pin name to do stuff. if(strlen(preset_name)) { if(preset_type == 0) // pin - ret = get_pin_type(preset_name, &type); + ret = get_pin_type(preset_name, &type); else ret = get_sig_type(preset_name, &type); @@ -710,5 +710,3 @@ int x; return ret; } - - diff --git a/src/modules/managed/components/weighted_sum/src/weighted_sum.icomp b/src/modules/managed/components/weighted_sum/src/weighted_sum.icomp index ba7fdd851a..4d037c95dd 100644 --- a/src/modules/managed/components/weighted_sum/src/weighted_sum.icomp +++ b/src/modules/managed/components/weighted_sum/src/weighted_sum.icomp @@ -60,11 +60,11 @@ function process_wsums fp; FUNCTION(process_wsums) { hal_s32_t b; - - if (!hold) + + if (!hold) { running_total = offset; - for (b=0 ; b < local_pincount ; b++) + for (b=0 ; b < local_pincount ; b++) { if (in(b)) running_total += weight(b); @@ -74,6 +74,3 @@ hal_s32_t b; return 0; } - - - diff --git a/src/modules/managed/components/weighted_sumv2/src/weighted_sumv2.icomp b/src/modules/managed/components/weighted_sumv2/src/weighted_sumv2.icomp index dd79801e0d..eeb6b7a74d 100644 --- a/src/modules/managed/components/weighted_sumv2/src/weighted_sumv2.icomp +++ b/src/modules/managed/components/weighted_sumv2/src/weighted_sumv2.icomp @@ -59,21 +59,18 @@ function process_wsums fp; FUNCTION(process_wsums) { -hal_s32_t b; - - if (!gb(hold)) +hal_s32_t b; + + if (!gb(hold)) { running_total = gs(offset); - for (b=0 ; b < local_pincount ; b++) + for (b=0 ; b < local_pincount ; b++) { - if (gb(in(b))) + if (gb(in(b))) running_total += gs(weight(b)); } } ss(sum, running_total); - + return 0; } - - - diff --git a/src/modules/managed/drivers/chip/src/mmap_gpio.c b/src/modules/managed/drivers/chip/src/mmap_gpio.c index 79abdebfd1..4cc3267b61 100644 --- a/src/modules/managed/drivers/chip/src/mmap_gpio.c +++ b/src/modules/managed/drivers/chip/src/mmap_gpio.c @@ -134,7 +134,7 @@ static void pio_set_level(mmap_gpio *pio) { val |= (0x01 << pio->pin); } - else + else { val &= ~(0x01 << pio->pin); } @@ -155,14 +155,14 @@ int libsoc_mmap_gpio_init() int offset = 0x01c20800 & (pagesize - 1); int fd = open("/dev/mem", O_RDWR); - if (fd == -1) + if (fd == -1) { printf("Failed to open /dev/mem"); goto clean; } gpio_mem = mmap(NULL, (0x800 + pagesize - 1) & ~(pagesize - 1), PROT_WRITE | PROT_READ, MAP_SHARED, fd, addr); - if (gpio_mem == MAP_FAILED) + if (gpio_mem == MAP_FAILED) { printf("Failed to map GPIO"); goto clean; diff --git a/src/modules/managed/drivers/hal_arm335xQEP/src/hal_arm335xQEP.h b/src/modules/managed/drivers/hal_arm335xQEP/src/hal_arm335xQEP.h index ff514b86eb..2119d25e83 100644 --- a/src/modules/managed/drivers/hal_arm335xQEP/src/hal_arm335xQEP.h +++ b/src/modules/managed/drivers/hal_arm335xQEP/src/hal_arm335xQEP.h @@ -228,4 +228,3 @@ typedef struct { #define EQEPCLK_EN (0x0001 << 4) #endif - diff --git a/src/modules/managed/drivers/hal_bb_gpio/src/beaglebone_gpio.h b/src/modules/managed/drivers/hal_bb_gpio/src/beaglebone_gpio.h index 108196a8e0..7f188bf57f 100644 --- a/src/modules/managed/drivers/hal_bb_gpio/src/beaglebone_gpio.h +++ b/src/modules/managed/drivers/hal_bb_gpio/src/beaglebone_gpio.h @@ -26,13 +26,13 @@ #define PIN_MODE0 0 -#define PIN_MODE1 1 -#define PIN_MODE2 2 -#define PIN_MODE3 3 -#define PIN_MODE4 4 -#define PIN_MODE5 5 -#define PIN_MODE6 6 -#define PIN_MODE7 7 +#define PIN_MODE1 1 +#define PIN_MODE2 2 +#define PIN_MODE3 3 +#define PIN_MODE4 4 +#define PIN_MODE5 5 +#define PIN_MODE6 6 +#define PIN_MODE7 7 #define CONF_GPIO1_28 0x878 @@ -112,8 +112,8 @@ extern int board_id; bb_gpio_pin BEAGLEBONE_HLO_PINS[BEAGLEBONE_PINS_PER_HEADER+1] = { { NULL, -1, -1, -1, 1 }, // 0 unused - { NULL, -1, -1, -1, 1 }, // 1 GND - { NULL, -1, -1, -1, 1 }, // 2 GND + { NULL, -1, -1, -1, 1 }, // 1 GND + { NULL, -1, -1, -1, 1 }, // 2 GND { NULL, 1, 6, 0x818, 0 }, // pin 3, gpmc_ad6 { NULL, 1, 7, 0x81C, 0 }, // pin 4, gpmc_ad7 { NULL, 1, 2, 0x808, 0 }, // pin 5, gpmc_ad2 @@ -162,8 +162,8 @@ bb_gpio_pin BEAGLEBONE_HLO_PINS[BEAGLEBONE_PINS_PER_HEADER+1] = { bb_gpio_pin BEAGLEBONE_HHI_PINS[BEAGLEBONE_PINS_PER_HEADER+1] = { { NULL, -1, -1, -1, 1 }, // 0 unused - { NULL, -1, -1, -1, 1 }, // 1 GND - { NULL, -1, -1, -1, 1 }, // 2 GND + { NULL, -1, -1, -1, 1 }, // 1 GND + { NULL, -1, -1, -1, 1 }, // 2 GND { NULL, -1, -1, -1, 1 }, // 3 3.3v { NULL, -1, -1, -1, 1 }, // 4 3.v { NULL, -1, -1, -1, 1 }, // 5 Vdd 5v @@ -207,10 +207,10 @@ bb_gpio_pin BEAGLEBONE_HHI_PINS[BEAGLEBONE_PINS_PER_HEADER+1] = { { NULL, 0, 20, 0x9B4, 0 }, // pin 41, xdma_event_intr1 { NULL, 0, 7, 0x964, 0 }, // pin 42, ecap0_in_pwm0_out // { NULL, 3, 18, 0x9A0, 0 }, // pin 42, mcasp0_aclkr - { NULL, -1, -1, -1, 1 }, // 43 GND - { NULL, -1, -1, -1, 1 }, // 44 GND - { NULL, -1, -1, -1, 1 }, // 45 GND - { NULL, -1, -1, -1, 1 }, // 46 GND + { NULL, -1, -1, -1, 1 }, // 43 GND + { NULL, -1, -1, -1, 1 }, // 44 GND + { NULL, -1, -1, -1, 1 }, // 45 GND + { NULL, -1, -1, -1, 1 }, // 46 GND }; // PocketBeagle definitions diff --git a/src/modules/managed/drivers/hal_bb_gpio/src/hal_bb_gpio.c b/src/modules/managed/drivers/hal_bb_gpio/src/hal_bb_gpio.c index c8926c5980..9d3c2c854a 100644 --- a/src/modules/managed/drivers/hal_bb_gpio/src/hal_bb_gpio.c +++ b/src/modules/managed/drivers/hal_bb_gpio/src/hal_bb_gpio.c @@ -9,10 +9,10 @@ ********************************************************************/ -#include "runtime/rtapi.h" -#include "runtime/rtapi_app.h" +#include "runtime/rtapi.h" +#include "runtime/rtapi_app.h" -#include "hal/hal.h" +#include "hal/hal.h" #include #include @@ -50,7 +50,7 @@ static void read_port(void *arg, long period); static off_t start_addr_for_port(int port); static void configure_pin(bb_gpio_pin *pin, char mode); -static int comp_id; +static int comp_id; static int num_ports; static char *user_leds; @@ -67,7 +67,7 @@ RTAPI_MP_STRING( "output pins, comma separated. P8 pins add 800, P9 900, P1 100, etc."); // Board-specific configuration variables -// +// // Boards have two headers; call the lower-numbered 'lo' and the // higher-numbered 'hi' // @@ -338,7 +338,7 @@ int rtapi_app_main(void) { *(port_data->input_inv[pin + header*PINS_PER_HEADER]) = 0; int gpio_num = bbpin->port_num; - + // configure gpio port if necessary if (gpio_ports[gpio_num] == NULL) { configure_gpio_port(gpio_num); @@ -434,7 +434,7 @@ int rtapi_app_main(void) { *(port_data->output_inv[pin + header*PINS_PER_HEADER]) = 0; int gpio_num = bbpin->port_num; - + // configure gpio port if necessary if (gpio_ports[gpio_num] == NULL) { configure_gpio_port(gpio_num); @@ -457,7 +457,7 @@ int rtapi_app_main(void) { hal_exit(comp_id); return -1; } - + rtapi_snprintf(name, sizeof(name), "bb_gpio.read"); retval = hal_export_funct(name, read_port, port_data, 0, 0, comp_id); if (retval < 0) { @@ -510,7 +510,7 @@ static void write_port(void *arg, long period) { if (i John Kasunich - + */ /** This program is free software; you can redistribute it and/or @@ -135,7 +135,7 @@ int rtapi_app_main(void) #define ISA_BASE 0xC9000 #define ISA_MAX 0x100000 /* allgemeiner Speicherzugriff */ - + /* STEP 1: initialise the driver */ comp_id = hal_init("hal_evoreg"); if (comp_id < 0) { @@ -168,7 +168,7 @@ int rtapi_app_main(void) writew(0, port_data_array->io_base + 0x02); /* ENCODER 1 */ writew(0, port_data_array->io_base + 0x0a); /* ENCODER 2 */ writew(0, port_data_array->io_base + 0x12); /* ENCODER 3 */ - + /* STEP 3: export the pin(s) */ /* Export DAC pin's */ diff --git a/src/modules/managed/drivers/hal_gm/src/gm.h b/src/modules/managed/drivers/hal_gm/src/gm.h index cff267c906..b6d2419865 100644 --- a/src/modules/managed/drivers/hal_gm/src/gm.h +++ b/src/modules/managed/drivers/hal_gm/src/gm.h @@ -32,9 +32,9 @@ typedef struct { hal_u32_t serialModulesDataOut[16][8]; // 0000 0000 hal_u32_t serialModulesDataIn[16][8]; // 1000 0000 - - hal_u32_t moduleId[8]; //addr 0 0000 000 - + + hal_u32_t moduleId[8]; //addr 0 0000 000 + hal_u32_t card_status_reg; //addr 1 0001 000 // ... Estop_2 | Estop_1 | Pwr_fault | Bus_err | Wdt_err //Card status read resets wdt hal_u32_t cardID; // 0001 001 hal_u32_t card_control_reg; // 0001 010 // Wdt_period(16 bit)[us] | ... | EstopEn_2 | EstopEn_1 | power_enable | card_enable @@ -43,7 +43,7 @@ typedef struct { hal_u32_t gpioDir; // 0001 101 hal_u32_t StepGen_status; // 0001 110 hal_u32_t PCI_clk_counter; // 0001 111 - + hal_u32_t ENC_control_reg; //addr 2 0010 000 hal_u32_t CAN_status_reg; hal_u32_t CAN_control_reg; @@ -51,17 +51,17 @@ typedef struct { hal_u32_t DAC_1; //DAC AXIS 3-2 hal_u32_t DAC_2; //DAC AXIS 5-4 hal_u32_t reserved_1[2]; - + hal_u32_t CAN_RX_buffer[4]; //addr 3 0011 000 - hal_u32_t CAN_TX_buffer[4]; + hal_u32_t CAN_TX_buffer[4]; hal_u32_t reserved_2[8]; //addr 4 0100 000 - + hal_u32_t reserved_3[8]; //addr 5 0101 000 - + hal_u32_t reserved_4[8]; //addr 6 0110 000 - + hal_u32_t reserved_5[8]; //addr 7 0111 000 - + hal_s32_t ENC_counter[6]; //addr 8 1000 000 hal_u32_t reserved_6[2]; hal_s32_t ENC_period[6]; //addr 9 1001 000 @@ -73,9 +73,9 @@ typedef struct { hal_s32_t StepGen_steprate[6]; //addr 12 1100 000 hal_u32_t reserved_10[2]; hal_u32_t StepGen_fb[6]; //addr 13 1101 000 - hal_u32_t reserved_11[2]; + hal_u32_t reserved_11[2]; hal_u32_t StepGen_time_params[6]; //addr 14 1110 000 - hal_u32_t reserved_12[2]; + hal_u32_t reserved_12[2]; hal_u32_t reserved_16[8]; //addr 15 1111 000 } volatile card; diff --git a/src/modules/managed/drivers/hal_gm/src/hal_gm.c b/src/modules/managed/drivers/hal_gm/src/hal_gm.c index 971e06c22b..ccd92b03d5 100644 --- a/src/modules/managed/drivers/hal_gm/src/hal_gm.c +++ b/src/modules/managed/drivers/hal_gm/src/hal_gm.c @@ -19,7 +19,7 @@ typedef struct { //encoder_t hal_float_t *velocity; hal_s32_t *rawcounts; hal_bit_t *index_enable; - + // Parameters hal_bit_t counter_mode; hal_bit_t index_mode; @@ -44,13 +44,13 @@ typedef struct { //switches_t hal_bit_t *posLimSwIn; hal_bit_t *posLimSwInNot; hal_bit_t *negLimSwIn; - hal_bit_t *negLimSwInNot; + hal_bit_t *negLimSwInNot; } switches_t; typedef struct { //estop_t // Pins. hal_bit_t *in; - hal_bit_t *inNot; + hal_bit_t *inNot; } estop_t; typedef struct { //gpio_t @@ -129,17 +129,17 @@ typedef struct { //RS485_DacAdc_t hal_float_t DAC_1_offset; hal_float_t DAC_2_offset; hal_float_t DAC_3_offset; - + hal_float_t DAC_0_min; hal_float_t DAC_1_min; hal_float_t DAC_2_min; hal_float_t DAC_3_min; - + hal_float_t DAC_0_max; hal_float_t DAC_1_max; hal_float_t DAC_2_max; hal_float_t DAC_3_max; - + hal_float_t ADC_0_offset; hal_float_t ADC_1_offset; hal_float_t ADC_2_offset; @@ -148,7 +148,7 @@ typedef struct { //RS485_DacAdc_t hal_float_t ADC_5_offset; hal_float_t ADC_6_offset; hal_float_t ADC_7_offset; - + hal_float_t ADC_0_scale; hal_float_t ADC_1_scale; hal_float_t ADC_2_scale; @@ -184,7 +184,7 @@ typedef struct { //RS485_TeachPad_t hal_bit_t *in_6; hal_bit_t *inNot_6; hal_bit_t *in_7; - hal_bit_t *inNot_7; + hal_bit_t *inNot_7; //encoder hal_bit_t *enc_reset; hal_s32_t *enc_counts; @@ -207,7 +207,7 @@ typedef struct { //RS485_TeachPad_t hal_float_t ADC_5_scale; //encoder hal_float_t enc_position_scale; - + // Private data //encoder hal_s32_t enc_raw_offset; @@ -224,12 +224,12 @@ typedef struct { //axisdac_t // Pins. hal_float_t *value; hal_bit_t *enable; - + // Parameters. hal_float_t min; hal_float_t max; hal_float_t offset; - + hal_bit_t invert_serial; } axisdac_t; @@ -238,29 +238,29 @@ typedef struct { //stepgen_t hal_float_t *position_cmd; hal_float_t *velocity_cmd; hal_float_t *position_fb; - hal_s32_t *count_fb; + hal_s32_t *count_fb; hal_bit_t *enable; - + // Parameters hal_u32_t step_type; //0: StepDir, 1: UpDown, 2: Quadrature - hal_bit_t control_type; //0: position, 1: velocity + hal_bit_t control_type; //0: position, 1: velocity hal_u32_t steplen; hal_u32_t stepspace; hal_u32_t dirdelay; hal_float_t maxaccel; hal_float_t maxvel; hal_bit_t polarity_A; - hal_bit_t polarity_B; + hal_bit_t polarity_B; hal_float_t position_scale; - + //Saved Parameters hal_u32_t curr_steplen; hal_u32_t curr_stepspace; hal_u32_t curr_dirdelay; hal_float_t curr_maxaccel; - hal_float_t curr_maxvel; + hal_float_t curr_maxvel; hal_float_t curr_position_scale; - + // Private data hal_u32_t stepgen_fb_offset; hal_float_t old_pos_cmd; @@ -275,11 +275,11 @@ typedef struct { //CardMgr_t hal_bit_t *power_enable; hal_bit_t *power_fault; hal_bit_t *watchdog_expired; - - // Parameters + + // Parameters hal_bit_t watchdog_enable; hal_u32_t watchdog_timeout_ns; - + // Private data hal_u32_t card_control_reg; hal_bit_t disable; @@ -292,7 +292,7 @@ typedef struct { //CAN_GM_t hal_bit_t *enable; hal_float_t *position_cmd; hal_float_t *position_fb; - + //Parameters hal_float_t position_scale; @@ -316,27 +316,27 @@ typedef struct { //gm_device_t switches_t switches[6]; gpio_t gpio[32]; estop_t estop[2]; - + RS485_mgr_t RS485_mgr; RS485_8input_t RS485_8input[16]; RS485_8output_t RS485_8output[16]; RS485_DacAdc_t RS485_DacAdc[16]; RS485_TeachPad_t RS485_TeachPad[16]; - + CAN_GM_t CAN_GM[6]; - + stepgen_t stepgen[6]; hal_u32_t stepgen_status; axisdac_t axisdac[6]; encoder_t encoder[6]; - + cardMgr_t cardMgr; - + hal_u32_t period_ns; hal_float_t period_s; hal_float_t rec_period_s; } gm_device_t; - + typedef struct { //gm_driver_t int comp_id; gm_device_t *device[MAX_GM_DEVICES]; @@ -373,7 +373,7 @@ static gm_driver_t driver; static void RS485_OrderDataRead(hal_u32_t* dataIn32, hal_u32_t* dataOut8, hal_u32_t length); static void RS485_OrderDataWrite(hal_u32_t* dataIn8, hal_u32_t* dataOut32, hal_u32_t length); //Encoders - static void encoder(void *arg, long period); + static void encoder(void *arg, long period); //CAN static void GM_CAN_SERVO(void *arg); static void CAN_SendDataFrame(void *arg, CANmsg_t *Msg); @@ -443,14 +443,14 @@ rtapi_app_main(void) // Initialize device. pDevice->pCard = pCard; - + // Give board id for the card, increasing from 0 pDevice->boardID = device_ctr++; - + //Check card ID pDevice->cardID = pCard->cardID; rtapi_print_msg(RTAPI_MSG_INFO, "General Mechatronics: Card ID: 0x%X.\n", pDevice->cardID); - + if ( (pDevice->cardID & IDmask_card) != cardVersion1 ) { rtapi_print_msg(RTAPI_MSG_ERR, "General Mechatronics: ERROR, unknown card detected.\nPlease, download the latest driver.\n"); hal_exit(driver.comp_id); @@ -460,8 +460,8 @@ rtapi_app_main(void) // Export and init pins, parameters, and functions rtapi_set_msg_level(RTAPI_MSG_WARN); pDevice->cardMgr.disable = 0; //Enable pointers of not presented modules will be referenced to this variable - pDevice->period_ns = 0; - + pDevice->period_ns = 0; + error = ExportEncoder(pDevice, driver.comp_id, pDevice->cardID & IDmask_encoder); if(error != 0) break; error = ExportStepgen(pDevice, driver.comp_id, pDevice->cardID & IDmask_stepgen); if(error != 0) break; error = ExportDAC(pDevice, driver.comp_id, pDevice->cardID & IDmask_dac); if(error != 0) break; @@ -469,12 +469,12 @@ rtapi_app_main(void) error = ExportCAN(pDevice, driver.comp_id, pDevice->cardID & IDmask_can); if(error != 0) break; error = ExportMixed(pDevice, driver.comp_id); if(error != 0) break; error = ExportFunctions(pDevice, driver.comp_id, pDevice->boardID); if(error != 0) break; - + pDevice->cardMgr.card_control_reg = 0; - + rtapi_set_msg_level(RTAPI_MSG_ALL); } - + if(error){ rtapi_print_msg(RTAPI_MSG_ERR, "General Mechatronics: Error exporting pins and parameters.\n"); hal_exit(driver.comp_id); @@ -503,12 +503,12 @@ rtapi_app_exit(void) hal_exit(driver.comp_id); for(i = 0; i < MAX_GM_DEVICES; i++){ - + if((pDevice = driver.device[i]) != NULL) { // turn off all pDevice->pCard->card_control_reg = (hal_s32_t) 0; - + // Unmap card iounmap((void *)(pDevice->pCard)); } @@ -523,11 +523,11 @@ static int ExportEncoder(void *arg, int comp_id, int version) { int i, error=0, boardId; - gm_device_t *device = (gm_device_t *)arg; + gm_device_t *device = (gm_device_t *)arg; card *pCard = device->pCard; boardId = device->boardID; - - + + //Export pins and parameters for encoder switch (version) { @@ -535,7 +535,7 @@ ExportEncoder(void *arg, int comp_id, int version) for(i=0;i<6;i++) { device->encoder[i].module_exist = 0; - } + } rtapi_print_msg(RTAPI_MSG_INFO, "General Mechatronics: No encoder module available in this version of the Card.\n"); break; case encoderVersion1: @@ -548,7 +548,7 @@ ExportEncoder(void *arg, int comp_id, int version) if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->encoder[i].velocity), comp_id, "gm.%1d.encoder.%1d.velocity", boardId, i); if(error == 0) error = hal_pin_s32_newf(HAL_OUT, &(device->encoder[i].rawcounts), comp_id, "gm.%1d.encoder.%1d.rawcounts", boardId, i); if(error == 0) error = hal_pin_bit_newf(HAL_IO, &(device->encoder[i].index_enable), comp_id, "gm.%1d.encoder.%1d.index-enable", boardId, i); - + //Export Parameters if(error == 0) error = hal_param_bit_newf(HAL_RW, &(device->encoder[i].counter_mode), comp_id, "gm.%1d.encoder.%1d.counter-mode", boardId, i); if(error == 0) error = hal_param_bit_newf(HAL_RW, &(device->encoder[i].index_mode), comp_id, "gm.%1d.encoder.%1d.index-mode", boardId, i); @@ -556,7 +556,7 @@ ExportEncoder(void *arg, int comp_id, int version) if(error == 0) error = hal_param_u32_newf(HAL_RW, &(device->encoder[i].counts_per_rev), comp_id, "gm.%1d.encoder.%1d.counts-per-rev", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->encoder[i].position_scale), comp_id, "gm.%1d.encoder.%1d.position-scale", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->encoder[i].min_speed_estimate), comp_id, "gm.%1d.encoder.%1d.min-speed-estimate", boardId, i); - + //Init parameters device->encoder[i].raw_offset = pCard->ENC_counter[i]; device->encoder[i].index_offset = 0; @@ -578,7 +578,7 @@ ExportStepgen(void *arg, int comp_id, int version) gm_device_t *device = (gm_device_t *)arg; card *pCard = device->pCard; boardId = device->boardID; - + //Export pins and parameters for step generator switch (version) { @@ -595,20 +595,20 @@ ExportStepgen(void *arg, int comp_id, int version) pCard->StepGen_status = 0; //Export pins and parameters for(i = 0; i < 6; i++) - { + { //Export Pins if(error == 0) error = hal_pin_float_newf(HAL_IN, &(device->stepgen[i].position_cmd), comp_id, "gm.%1d.stepgen.%1d.position-cmd", boardId, i); if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->stepgen[i].position_fb), comp_id, "gm.%1d.stepgen.%1d.position-fb", boardId, i); if(error == 0) error = hal_pin_float_newf(HAL_IN, &(device->stepgen[i].velocity_cmd), comp_id, "gm.%1d.stepgen.%1d.velocity-cmd", boardId, i); - if(error == 0) error = hal_pin_s32_newf(HAL_OUT, &(device->stepgen[i].count_fb), comp_id, "gm.%1d.stepgen.%1d.count-fb", boardId, i); + if(error == 0) error = hal_pin_s32_newf(HAL_OUT, &(device->stepgen[i].count_fb), comp_id, "gm.%1d.stepgen.%1d.count-fb", boardId, i); if(error == 0) error = hal_pin_bit_newf(HAL_IN, &(device->stepgen[i].enable), comp_id, "gm.%1d.stepgen.%1d.enable", boardId, i); //Export Parameters. if(error == 0) error = hal_param_bit_newf(HAL_RW, &(device->stepgen[i].control_type), comp_id, "gm.%1d.stepgen.%1d.control-type", boardId, i); //0: StepDir, 1: UpDown, 2: Quadrature - if(error == 0) error = hal_param_u32_newf(HAL_RW, &(device->stepgen[i].step_type), comp_id, "gm.%1d.stepgen.%1d.step-type", boardId, i); //0: position, 1: velocity + if(error == 0) error = hal_param_u32_newf(HAL_RW, &(device->stepgen[i].step_type), comp_id, "gm.%1d.stepgen.%1d.step-type", boardId, i); //0: position, 1: velocity if(error == 0) error = hal_param_u32_newf(HAL_RW, &(device->stepgen[i].steplen), comp_id, "gm.%1d.stepgen.%1d.steplen", boardId, i); if(error == 0) error = hal_param_u32_newf(HAL_RW, &(device->stepgen[i].stepspace), comp_id, "gm.%1d.stepgen.%1d.stepspace", boardId, i); - if(error == 0) error = hal_param_u32_newf(HAL_RW, &(device->stepgen[i].dirdelay), comp_id, "gm.%1d.stepgen.%1d.dirdelay", boardId, i); + if(error == 0) error = hal_param_u32_newf(HAL_RW, &(device->stepgen[i].dirdelay), comp_id, "gm.%1d.stepgen.%1d.dirdelay", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->stepgen[i].maxaccel), comp_id, "gm.%1d.stepgen.%1d.maxaccel", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->stepgen[i].maxvel), comp_id, "gm.%1d.stepgen.%1d.maxvel", boardId, i); if(error == 0) error = hal_param_bit_newf(HAL_RW, &(device->stepgen[i].polarity_A), comp_id, "gm.%1d.stepgen.%1d.invert-step1", boardId, i); @@ -620,11 +620,11 @@ ExportStepgen(void *arg, int comp_id, int version) device->stepgen[i].curr_stepspace = 0; device->stepgen[i].curr_dirdelay = 0; device->stepgen[i].curr_maxaccel = 0.0; - device->stepgen[i].curr_maxvel = 0.0; + device->stepgen[i].curr_maxvel = 0.0; device->stepgen[i].curr_position_scale = 1.0; device->stepgen[i].steprate_scale = 30 / 1000000000.0 * 4294967296.0; device->stepgen[i].stepgen_fb_offset = pCard->StepGen_fb[i]; - + //Init FPGA registers pCard->StepGen_time_params[i] = 0; pCard->StepGen_steprate[i] = 0; @@ -644,7 +644,7 @@ ExportDAC(void *arg, int comp_id, int version) gm_device_t *device = (gm_device_t *)arg; card *pCard = device->pCard; boardId = device->boardID; - + //Export pins and parameters for DAC switch (version) { @@ -670,13 +670,13 @@ ExportDAC(void *arg, int comp_id, int version) if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->axisdac[i].max), comp_id, "gm.%1d.dac.%1d.high-limit", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->axisdac[i].offset), comp_id, "gm.%1d.dac.%1d.offset", boardId, i); if(error == 0) error = hal_param_bit_newf(HAL_RW, &(device->axisdac[i].invert_serial), comp_id, "gm.%1d.dac.%1d.invert-serial", boardId, i); - + //Init Parameters device->axisdac[i].max = 10; device->axisdac[i].min = -10; device->axisdac[i].offset = 0; device->axisdac[i].invert_serial = 0; - + //Init FPGA regs pCard->DAC_0 = 0x1FFF1FFF; pCard->DAC_1 = 0x1FFF1FFF; @@ -693,12 +693,12 @@ ExportDAC(void *arg, int comp_id, int version) static int ExportRS485(void *arg, int comp_id, int version) { - + int i, error=0, boardId, temp; gm_device_t *device = (gm_device_t *)arg; card *pCard = device->pCard; boardId = device->boardID; - + //Export pins and parameters for connected RS485 modules switch (version) { @@ -710,30 +710,30 @@ ExportRS485(void *arg, int comp_id, int version) for(i=0; i<8; i++) { temp=(hal_u32_t)pCard->moduleId[i]; - - if(((temp & 0xff)^0xaa) == ((temp & 0xff00)>>8)) + + if(((temp & 0xff)^0xaa) == ((temp & 0xff00)>>8)) { device-> RS485_mgr.ID[2*i]=(temp >> 8) & 0xff; } else device-> RS485_mgr.ID[2*i] = 0; - + if(((temp & 0xff0000)^0xaa0000) == ((temp & 0xff000000)>>8)) { device-> RS485_mgr.ID[2*i+1]=(temp & 0xff000000)>>24; } else device-> RS485_mgr.ID[2*i+1]=0; } - - for(i = 0; i < 16; i++) - { + + for(i = 0; i < 16; i++) + { switch (device-> RS485_mgr.ID[i]) { case 0: - break; - case RS485MODUL_ID_8INPUT: + break; + case RS485MODUL_ID_8INPUT: device-> RS485_mgr.BYTES_TO_WRITE[i]=0; device-> RS485_mgr.BYTES_TO_READ[i]=2; //1 data byte + 1 Checksum - + if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->RS485_8input[i].in_0), comp_id, "gm.%1d.rs485.%02d.in-0", boardId, i); if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->RS485_8input[i].inNot_0), comp_id, "gm.%1d.rs485.%02d.in-not-0", boardId, i); if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->RS485_8input[i].in_1), comp_id, "gm.%1d.rs485.%02d.in-1", boardId, i); @@ -749,12 +749,12 @@ ExportRS485(void *arg, int comp_id, int version) if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->RS485_8input[i].in_6), comp_id, "gm.%1d.rs485.%02d.in-6", boardId, i); if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->RS485_8input[i].inNot_6), comp_id, "gm.%1d.rs485.%02d.in-not-6", boardId, i); if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->RS485_8input[i].in_7), comp_id, "gm.%1d.rs485.%02d.in-7", boardId, i); - if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->RS485_8input[i].inNot_7), comp_id, "gm.%1d.rs485.%02d.in-not-7", boardId, i); - break; + if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->RS485_8input[i].inNot_7), comp_id, "gm.%1d.rs485.%02d.in-not-7", boardId, i); + break; case RS485MODUL_ID_8OUTPUT: device-> RS485_mgr.BYTES_TO_WRITE[i]=2; // 1 data byte + 1 Checksum device-> RS485_mgr.BYTES_TO_READ[i]=0; - + if(error == 0) error = hal_pin_bit_newf(HAL_IN, &(device->RS485_8output[i].out_0), comp_id, "gm.%1d.rs485.%02d.relay-0", boardId, i); if(error == 0) error = hal_pin_bit_newf(HAL_IN, &(device->RS485_8output[i].out_1), comp_id, "gm.%1d.rs485.%02d.relay-1", boardId, i); if(error == 0) error = hal_pin_bit_newf(HAL_IN, &(device->RS485_8output[i].out_2), comp_id, "gm.%1d.rs485.%02d.relay-2", boardId, i); @@ -763,7 +763,7 @@ ExportRS485(void *arg, int comp_id, int version) if(error == 0) error = hal_pin_bit_newf(HAL_IN, &(device->RS485_8output[i].out_5), comp_id, "gm.%1d.rs485.%02d.relay-5", boardId, i); if(error == 0) error = hal_pin_bit_newf(HAL_IN, &(device->RS485_8output[i].out_6), comp_id, "gm.%1d.rs485.%02d.relay-6", boardId, i); if(error == 0) error = hal_pin_bit_newf(HAL_IN, &(device->RS485_8output[i].out_7), comp_id, "gm.%1d.rs485.%02d.relay-7", boardId, i); - + if(error == 0) error = hal_param_bit_newf(HAL_RW, &(device->RS485_8output[i].invertOut_0), comp_id, "gm.%1d.rs485.%02d.invert-relay-0", boardId, i); if(error == 0) error = hal_param_bit_newf(HAL_RW, &(device->RS485_8output[i].invertOut_1), comp_id, "gm.%1d.rs485.%02d.invert-relay-1", boardId, i); if(error == 0) error = hal_param_bit_newf(HAL_RW, &(device->RS485_8output[i].invertOut_2), comp_id, "gm.%1d.rs485.%02d.invert-relay-2", boardId, i); @@ -776,8 +776,8 @@ ExportRS485(void *arg, int comp_id, int version) break; case RS485MODUL_ID_DACADC: device-> RS485_mgr.BYTES_TO_WRITE[i]=5; // 8 data byte + 1 Checksum - device-> RS485_mgr.BYTES_TO_READ[i]=9; - + device-> RS485_mgr.BYTES_TO_READ[i]=9; + if(error == 0) error = hal_pin_float_newf(HAL_IN, &(device->RS485_DacAdc[i].DAC_0), comp_id, "gm.%1d.rs485.%02d.dac-0", boardId, i); if(error == 0) error = hal_pin_float_newf(HAL_IN, &(device->RS485_DacAdc[i].DAC_1), comp_id, "gm.%1d.rs485.%02d.dac-1", boardId, i); if(error == 0) error = hal_pin_float_newf(HAL_IN, &(device->RS485_DacAdc[i].DAC_2), comp_id, "gm.%1d.rs485.%02d.dac-2", boardId, i); @@ -787,17 +787,17 @@ ExportRS485(void *arg, int comp_id, int version) if(error == 0) error = hal_pin_bit_newf(HAL_IN, &(device->RS485_DacAdc[i].dac_2_enable), comp_id, "gm.%1d.rs485.%02d.dac-enable-2", boardId, i); if(error == 0) error = hal_pin_bit_newf(HAL_IN, &(device->RS485_DacAdc[i].dac_3_enable), comp_id, "gm.%1d.rs485.%02d.dac-enable-3", boardId, i); if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_DacAdc[i].ADC_0), comp_id, "gm.%1d.rs485.%02d.adc-0", boardId, i); - if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_DacAdc[i].ADC_1), comp_id, "gm.%1d.rs485.%02d.adc-1", boardId, i); - if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_DacAdc[i].ADC_2), comp_id, "gm.%1d.rs485.%02d.adc-2", boardId, i); - if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_DacAdc[i].ADC_3), comp_id, "gm.%1d.rs485.%02d.adc-3", boardId, i); + if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_DacAdc[i].ADC_1), comp_id, "gm.%1d.rs485.%02d.adc-1", boardId, i); + if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_DacAdc[i].ADC_2), comp_id, "gm.%1d.rs485.%02d.adc-2", boardId, i); + if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_DacAdc[i].ADC_3), comp_id, "gm.%1d.rs485.%02d.adc-3", boardId, i); if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_DacAdc[i].ADC_4), comp_id, "gm.%1d.rs485.%02d.adc-4", boardId, i); - if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_DacAdc[i].ADC_5), comp_id, "gm.%1d.rs485.%02d.adc-5", boardId, i); - if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_DacAdc[i].ADC_6), comp_id, "gm.%1d.rs485.%02d.adc-6", boardId, i); - if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_DacAdc[i].ADC_7), comp_id, "gm.%1d.rs485.%02d.adc-7", boardId, i); + if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_DacAdc[i].ADC_5), comp_id, "gm.%1d.rs485.%02d.adc-5", boardId, i); + if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_DacAdc[i].ADC_6), comp_id, "gm.%1d.rs485.%02d.adc-6", boardId, i); + if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_DacAdc[i].ADC_7), comp_id, "gm.%1d.rs485.%02d.adc-7", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_DacAdc[i].DAC_0_offset), comp_id, "gm.%1d.rs485.%02d.dac-offset-0", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_DacAdc[i].DAC_1_offset), comp_id, "gm.%1d.rs485.%02d.dac-offset-1", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_DacAdc[i].DAC_2_offset), comp_id, "gm.%1d.rs485.%02d.dac-offset-2", boardId, i); - if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_DacAdc[i].DAC_3_offset), comp_id, "gm.%1d.rs485.%02d.dac-offset-3", boardId, i); + if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_DacAdc[i].DAC_3_offset), comp_id, "gm.%1d.rs485.%02d.dac-offset-3", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_DacAdc[i].DAC_0_max), comp_id, "gm.%1d.rs485.%02d.dac-high-limit-0", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_DacAdc[i].DAC_1_max), comp_id, "gm.%1d.rs485.%02d.dac-high-limit-1", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_DacAdc[i].DAC_2_max), comp_id, "gm.%1d.rs485.%02d.dac-high-limit-2", boardId, i); @@ -821,8 +821,8 @@ ExportRS485(void *arg, int comp_id, int version) if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_DacAdc[i].ADC_4_scale), comp_id, "gm.%1d.rs485.%02d.adc-scale-4", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_DacAdc[i].ADC_5_scale), comp_id, "gm.%1d.rs485.%02d.adc-scale-5", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_DacAdc[i].ADC_6_scale), comp_id, "gm.%1d.rs485.%02d.adc-scale-6", boardId, i); - if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_DacAdc[i].ADC_7_scale), comp_id, "gm.%1d.rs485.%02d.adc-scale-7", boardId, i); - + if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_DacAdc[i].ADC_7_scale), comp_id, "gm.%1d.rs485.%02d.adc-scale-7", boardId, i); + device->RS485_DacAdc[i].DAC_0_max = 10; device->RS485_DacAdc[i].DAC_0_min = -10; device->RS485_DacAdc[i].DAC_1_max = 10; @@ -839,11 +839,11 @@ ExportRS485(void *arg, int comp_id, int version) device->RS485_DacAdc[i].ADC_5_scale = 1; device->RS485_DacAdc[i].ADC_6_scale = 1; device->RS485_DacAdc[i].ADC_7_scale = 1; - break; + break; case RS485MODUL_ID_TEACHPAD: device-> RS485_mgr.BYTES_TO_WRITE[i]=0; - device-> RS485_mgr.BYTES_TO_READ[i]=12; //1 for 8 digit input, 6 for adc, 4 for encoder + 1 Checksum - + device-> RS485_mgr.BYTES_TO_READ[i]=12; //1 for 8 digit input, 6 for adc, 4 for encoder + 1 Checksum + if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->RS485_TeachPad[i].in_0), comp_id, "gm.%1d.rs485.%02d.in-0", boardId, i); if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->RS485_TeachPad[i].inNot_0), comp_id, "gm.%1d.rs485.%02d.in-not-0", boardId, i); if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->RS485_TeachPad[i].in_1), comp_id, "gm.%1d.rs485.%02d.in-1", boardId, i); @@ -859,56 +859,56 @@ ExportRS485(void *arg, int comp_id, int version) if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->RS485_TeachPad[i].in_6), comp_id, "gm.%1d.rs485.%02d.in-6", boardId, i); if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->RS485_TeachPad[i].inNot_6), comp_id, "gm.%1d.rs485.%02d.in-not-6", boardId, i); if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->RS485_TeachPad[i].in_7), comp_id, "gm.%1d.rs485.%02d.in-7", boardId, i); - if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->RS485_TeachPad[i].inNot_7), comp_id, "gm.%1d.rs485.%02d.in-not-7", boardId, i); + if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->RS485_TeachPad[i].inNot_7), comp_id, "gm.%1d.rs485.%02d.in-not-7", boardId, i); if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_TeachPad[i].ADC_0), comp_id, "gm.%1d.rs485.%02d.adc-0", boardId, i); - if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_TeachPad[i].ADC_1), comp_id, "gm.%1d.rs485.%02d.adc-1", boardId, i); - if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_TeachPad[i].ADC_2), comp_id, "gm.%1d.rs485.%02d.adc-2", boardId, i); - if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_TeachPad[i].ADC_3), comp_id, "gm.%1d.rs485.%02d.adc-3", boardId, i); + if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_TeachPad[i].ADC_1), comp_id, "gm.%1d.rs485.%02d.adc-1", boardId, i); + if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_TeachPad[i].ADC_2), comp_id, "gm.%1d.rs485.%02d.adc-2", boardId, i); + if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_TeachPad[i].ADC_3), comp_id, "gm.%1d.rs485.%02d.adc-3", boardId, i); if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_TeachPad[i].ADC_4), comp_id, "gm.%1d.rs485.%02d.adc-4", boardId, i); - if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_TeachPad[i].ADC_5), comp_id, "gm.%1d.rs485.%02d.adc-5", boardId, i); - + if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_TeachPad[i].ADC_5), comp_id, "gm.%1d.rs485.%02d.adc-5", boardId, i); + if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_TeachPad[i].ADC_0_offset), comp_id, "gm.%1d.rs485.%02d.adc-offset-0", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_TeachPad[i].ADC_1_offset), comp_id, "gm.%1d.rs485.%02d.adc-offset-1", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_TeachPad[i].ADC_2_offset), comp_id, "gm.%1d.rs485.%02d.adc-offset-2", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_TeachPad[i].ADC_3_offset), comp_id, "gm.%1d.rs485.%02d.adc-offset-3", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_TeachPad[i].ADC_4_offset), comp_id, "gm.%1d.rs485.%02d.adc-offset-4", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_TeachPad[i].ADC_5_offset), comp_id, "gm.%1d.rs485.%02d.adc-offset-5", boardId, i); - + if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_TeachPad[i].ADC_0_scale), comp_id, "gm.%1d.rs485.%02d.adc-scale-0", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_TeachPad[i].ADC_1_scale), comp_id, "gm.%1d.rs485.%02d.adc-scale-1", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_TeachPad[i].ADC_2_scale), comp_id, "gm.%1d.rs485.%02d.adc-scale-2", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_TeachPad[i].ADC_3_scale), comp_id, "gm.%1d.rs485.%02d.adc-scale-3", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_TeachPad[i].ADC_4_scale), comp_id, "gm.%1d.rs485.%02d.adc-scale-4", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_TeachPad[i].ADC_5_scale), comp_id, "gm.%1d.rs485.%02d.adc-scale-5", boardId, i); - + if(error == 0) error = hal_pin_bit_newf(HAL_IN, &(device->RS485_TeachPad[i].enc_reset), comp_id, "gm.%1d.rs485.%02d.enc-reset", boardId, i); if(error == 0) error = hal_pin_s32_newf(HAL_OUT, &(device->RS485_TeachPad[i].enc_counts), comp_id, "gm.%1d.rs485.%02d.enc-counts", boardId, i); if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->RS485_TeachPad[i].enc_position), comp_id, "gm.%1d.rs485.%02d.enc-position", boardId, i); if(error == 0) error = hal_pin_s32_newf(HAL_OUT, &(device->RS485_TeachPad[i].enc_rawcounts), comp_id, "gm.%1d.rs485.%02d.enc-rawcounts", boardId, i); if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->RS485_TeachPad[i].enc_position_scale), comp_id, "gm.%1d.rs485.%02d.enc-position-scale", boardId, i); - + device->RS485_TeachPad[i].ADC_0_scale = 1; device->RS485_TeachPad[i].ADC_1_scale = 1; device->RS485_TeachPad[i].ADC_2_scale = 1; device->RS485_TeachPad[i].ADC_3_scale = 1; device->RS485_TeachPad[i].ADC_4_scale = 1; device->RS485_TeachPad[i].ADC_5_scale = 1; - + device->RS485_TeachPad[i].ADC_0_offset = 0; device->RS485_TeachPad[i].ADC_1_offset = 0; device->RS485_TeachPad[i].ADC_2_offset = 0; device->RS485_TeachPad[i].ADC_3_offset = 0; device->RS485_TeachPad[i].ADC_4_offset = 0; device->RS485_TeachPad[i].ADC_5_offset = 0; - + device->RS485_TeachPad[i].enc_raw_offset = 0; device->RS485_TeachPad[i].enc_position_scale=1; break; default: rtapi_print_msg(RTAPI_MSG_ERR, "General Mechatronics: ERROR, unknown rs485 module type.\nPlease, download the latest driver.\n"); } - } + } break; default: rtapi_print_msg(RTAPI_MSG_ERR, "General Mechatronics: ERROR, unknown rs485 version.\nPlease, download the latest driver.\n"); @@ -922,7 +922,7 @@ ExportCAN(void *arg, int comp_id, int version) int i, error=0, boardId; gm_device_t *device = (gm_device_t *)arg; boardId = device->boardID; - + //Export pins and parameters for encoder switch (version) { @@ -930,11 +930,11 @@ ExportCAN(void *arg, int comp_id, int version) for(i=0;i<6;i++) { device->CAN_GM[i].enable = &(device->cardMgr.disable); //Set enable pointers to a 0 value variable - } + } rtapi_print_msg(RTAPI_MSG_INFO, "General Mechatronics: No CAN module available in this version of the Card.\n"); break; case canVersion1: - + //Export Pins and Parameters for CAN GM Servo Controllers for(i=0;i<6;i++) { @@ -942,11 +942,11 @@ ExportCAN(void *arg, int comp_id, int version) if(error == 0) error = hal_pin_bit_newf(HAL_IN, &(device->CAN_GM[i].enable), comp_id, "gm.%1d.can-gm.%1d.enable", boardId, i); if(error == 0) error = hal_pin_float_newf(HAL_IN, &(device->CAN_GM[i].position_cmd), comp_id, "gm.%1d.can-gm.%1d.position-cmd", boardId, i); if(error == 0) error = hal_pin_float_newf(HAL_OUT, &(device->CAN_GM[i].position_fb), comp_id, "gm.%1d.can-gm.%1d.position-fb", boardId, i); - + //Export Parameters if(error == 0) error = hal_param_float_newf(HAL_RW, &(device->CAN_GM[i].position_scale), comp_id, "gm.%1d.can-gm.%1d.position-scale", boardId, i); } - + //Export Pins and Parameters for CANopen Servo Controllers //In development... @@ -966,7 +966,7 @@ ExportMixed(void *arg, int comp_id) //Homing and End switches pins and parameters for(i = 0; i < 6; i++) - { + { // Pins if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->switches[i].home), comp_id, "gm.%1d.axis.%1d.home-sw-in", boardId, i); if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->switches[i].homeNot), comp_id, "gm.%1d.axis.%1d.home-sw-in-not", boardId, i); @@ -979,19 +979,19 @@ ExportMixed(void *arg, int comp_id) //Power bridge Fault and Error pins if(error == 0) error = hal_pin_bit_newf(HAL_IN, &(device->cardMgr.power_enable), comp_id, "gm.%1d.power-enable", boardId); if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->cardMgr.power_fault), comp_id, "gm.%1d.power-fault", boardId); - + //Watchdog pins and parameters if(error == 0) error = hal_param_bit_newf(HAL_RW, &(device->cardMgr.watchdog_enable), comp_id, "gm.%1d.watchdog-enable", boardId); if(error == 0) error = hal_param_u32_newf(HAL_RW, &(device->cardMgr.watchdog_timeout_ns), comp_id, "gm.%1d.watchdog-timeout-ns", boardId); if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->cardMgr.watchdog_expired), comp_id, "gm.%1d.watchdog-expired", boardId); - + //Export pins and parameters for parallel IOs for(i=0;i<4;i++) { for(j=0;j<8;j++) { - if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->gpio[i*8+j].in), comp_id, "gm.%1d.gpio.%1d.in-%1d", boardId, i, j); - if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->gpio[i*8+j].inNot), comp_id, "gm.%1d.gpio.%1d.in-not-%1d", boardId, i, j); + if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->gpio[i*8+j].in), comp_id, "gm.%1d.gpio.%1d.in-%1d", boardId, i, j); + if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->gpio[i*8+j].inNot), comp_id, "gm.%1d.gpio.%1d.in-not-%1d", boardId, i, j); if(error == 0) error = hal_pin_bit_newf(HAL_IN, &(device->gpio[i*8+j].out), comp_id, "gm.%1d.gpio.%1d.out-%1d", boardId, i, j); if(error == 0) error = hal_param_bit_newf(HAL_RW, &(device->gpio[i*8+j].isOut), comp_id, "gm.%1d.gpio.%1d.is-out-%1d", boardId, i, j); if(error == 0) error = hal_param_bit_newf(HAL_RW, &(device->gpio[i*8+j].invertOut), comp_id, "gm.%1d.gpio.%1d.invert-out-%1d", boardId, i, j); @@ -1001,10 +1001,10 @@ ExportMixed(void *arg, int comp_id) //Export pins and parameters for estops for(i=0;i<2;i++) { - if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->estop[i].in), comp_id, "gm.%1d.estop.%1d.in", boardId, i); + if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->estop[i].in), comp_id, "gm.%1d.estop.%1d.in", boardId, i); if(error == 0) error = hal_pin_bit_newf(HAL_OUT, &(device->estop[i].inNot), comp_id, "gm.%1d.estop.%1d.in-not", boardId, i); } - + device->cardMgr.cntr = 0; //Counter of executing card_mgr() function return error; @@ -1025,7 +1025,7 @@ ExportFunctions(void *arg, int comp_id, int boardId) rtapi_snprintf(str, sizeof(str), "gm.%d.read", boardId); error = hal_export_funct(str, read, device, 1, 0, comp_id); } - + if(error == 0) { rtapi_snprintf(str, sizeof(str), "gm.%d.RS485", boardId); @@ -1046,7 +1046,7 @@ read(void *arg, long period) card *pCard = device->pCard; int i; hal_u32_t temp; - + //basic card functionality: watchdog, switches, estop card_mgr(arg, period); @@ -1094,25 +1094,25 @@ write(void *arg, long period) { DAC[i] = 0; } - + DAC[i] = (DAC[i] * 819.15) + 8191.5; if(DAC[i] < 0) DAC[i] = 0; else if (DAC[i] > 16383) DAC[i] = 16383; DAC_INTEGER[i] = (hal_u32_t)(DAC[i]); - + if(device->axisdac[i].invert_serial) DAC_INTEGER[i] |= 0x8000; } pCard->DAC_0 = ((DAC_INTEGER[1] & 0xFFFF) << 16) | (DAC_INTEGER[0] & 0xFFFF); pCard->DAC_1 = ((DAC_INTEGER[3] & 0xFFFF) << 16) | (DAC_INTEGER[2] & 0xFFFF); pCard->DAC_2 = ((DAC_INTEGER[5] & 0xFFFF) << 16) | (DAC_INTEGER[4] & 0xFFFF); - + //Run step generators stepgen(arg, period); - + //Handle GM CAN Servo Controllers GM_CAN_SERVO(arg); - + //Write parallel IOs temp1 = 0; for(i = 0; i < 32; i++) @@ -1122,7 +1122,7 @@ write(void *arg, long period) } pCard->gpioDir=temp1; pCard->gpio=temp2; - + } @@ -1156,7 +1156,7 @@ GM_CAN_SERVO(void *arg) for(i=0;i= 0x20) && (CAN_msg.ID <= 0x25)) { if((device->CAN_GM[CAN_msg.ID - 0x20].position_scale<10e-6) && (device->CAN_GM[CAN_msg.ID - 0x20].position_scale>-10e-6)) @@ -1194,20 +1194,20 @@ GM_CAN_SERVO(void *arg) CAN_SendDataFrame(arg, &CAN_msg); } - } + } } static int CAN_ReadStatus(void *arg, hal_u32_t *RxCnt, hal_u32_t *TxCnt) { gm_device_t *device = (gm_device_t *)arg; card *pCard = device->pCard; - - hal_u32_t temp; - + + hal_u32_t temp; + temp = pCard->CAN_status_reg; *TxCnt = temp & 0x3FF; *RxCnt = (temp >> 10) & 0x3FF; - + return (temp >> 20) & 0xFF; //return with MCP2515 IT reg } @@ -1216,9 +1216,9 @@ CAN_ReceiveDataFrame(void *arg, CANmsg_t *Msg) { gm_device_t *device = (gm_device_t *)arg; card *pCard = device->pCard; - + hal_u32_t temp; - + temp = pCard->CAN_RX_buffer[0]; if(temp & 0x80000000) { @@ -1230,7 +1230,7 @@ CAN_ReceiveDataFrame(void *arg, CANmsg_t *Msg) Msg->Ext = 0; Msg->ID = temp; } - + temp=pCard->CAN_RX_buffer[2]; Msg->data[0] = (temp>>24) & 0xFF; Msg->data[1] = (temp>>16) & 0xFF; @@ -1242,11 +1242,11 @@ CAN_ReceiveDataFrame(void *arg, CANmsg_t *Msg) Msg->data[5] = (temp>>16) & 0xFF; Msg->data[6] = (temp>>8) & 0xFF; Msg->data[7] = (temp) & 0xFF; - + temp = pCard->CAN_RX_buffer[3]; Msg->DLC = temp & 0xF; if(temp & 0x10) Msg->RTR = 1; - else Msg->RTR = 0; + else Msg->RTR = 0; } static void @@ -1254,18 +1254,18 @@ CAN_SendDataFrame(void *arg, CANmsg_t *Msg) { gm_device_t *device = (gm_device_t *)arg; card *pCard = device->pCard; - + hal_u32_t ID; - + ID = Msg->ID;//MsgID; if(Msg->Ext) ID |= 0x80000000; pCard->CAN_TX_buffer[0]=ID; - + pCard->CAN_TX_buffer[2] = ((Msg->data[0] & 0xFF) << 24) |((Msg->data[1] & 0xFF) << 16) |((Msg->data[2] & 0xFF) << 8) |((Msg->data[3] & 0xFF) << 0); - + if(Msg->DLC > 4) pCard->CAN_TX_buffer[1] = ((Msg->data[4] & 0xFF) << 24) |((Msg->data[5] & 0xFF) << 16) |((Msg->data[6] & 0xFF) << 8) |((Msg->data[7] & 0xFF) << 0); - - pCard->CAN_TX_buffer[3] = Msg->DLC; + + pCard->CAN_TX_buffer[3] = Msg->DLC; } #ifdef CANOPEN @@ -1275,7 +1275,7 @@ CAN_Reset(void *arg) { gm_device_t *device = (gm_device_t *)arg; card *pCard = device->pCard; - + pCard->CAN_TX_buffer[3] = 0x81; } @@ -1284,31 +1284,31 @@ CAN_SetBaud(void *arg, hal_u32_t Baud) { gm_device_t *device = (gm_device_t *)arg; card *pCard = device->pCard; - + switch(Baud) { case 125: pCard->CAN_TX_buffer[2] = 0x01880700; pCard->CAN_TX_buffer[3] = 0x82; break; - + case 250: pCard->CAN_TX_buffer[2] = 0x01880300; pCard->CAN_TX_buffer[3] = 0x82; break; - + case 500: pCard->CAN_TX_buffer[2] = 0x01880100; pCard->CAN_TX_buffer[3] = 0x82; break; - + case 1000: pCard->CAN_TX_buffer[2] = 0x01880000; pCard->CAN_TX_buffer[3] = 0x82; break; - + default: - rtapi_print_msg(RTAPI_MSG_ERR, "General Mechatronics:Not valid CAN Baud Rate. Supported: 125,250,500 and 1000 kBit/s.\n"); + rtapi_print_msg(RTAPI_MSG_ERR, "General Mechatronics:Not valid CAN Baud Rate. Supported: 125,250,500 and 1000 kBit/s.\n"); } } #endif @@ -1321,19 +1321,19 @@ card_mgr(void *arg, long period) { gm_device_t *device = (gm_device_t *)arg; card *pCard = device->pCard; - + hal_u32_t temp=0, i, j; - + //Read card status reg and process data temp = pCard->card_status_reg; //This resets watch dog timer - + *(device->cardMgr.watchdog_expired) = (hal_bit_t)((temp & (0x0001 << 0)) == 0 ? 0 : 1); *(device->cardMgr.power_fault) = (hal_bit_t)((temp & (0x0001 << 2)) == 0 ? 0 : 1); *(device->estop[0].in) = (hal_bit_t)((temp & (0x0001 << 3)) == 0 ? 0 : 1); *(device->estop[0].inNot) = (hal_bit_t)((temp & (0x0001 << 3)) == 0 ? 1 : 0); *(device->estop[1].in) = (hal_bit_t)((temp & (0x0001 << 4)) == 0 ? 0 : 1); *(device->estop[1].inNot) = (hal_bit_t)((temp & (0x0001 << 4)) == 0 ? 1 : 0); - + for(i=5, j=0; i<11; i++,j++) { *(device->switches[j].home) = (hal_bit_t)((temp & (0x0001 << i)) == 0 ? 0 : 1); @@ -1347,25 +1347,25 @@ card_mgr(void *arg, long period) *(device->switches[j].negLimSwIn) = (hal_bit_t)((temp & (0x0001 << i)) == 0 ? 0 : 1); *(device->switches[j].negLimSwInNot) = (hal_bit_t)((temp & (0x0001 << i)) == 0 ? 1 : 0); } - - + + //Chack if change happened in control reg and write control reg if well // ... Estop_1 | Estop_0 | Pwr_fault | Bus_err | Wdt_err //Card status read resets wdt temp = 1; //EMC run if(*(device->cardMgr.power_enable)) temp |= (0x0001 << 1); //power enable - + if(device->cardMgr.watchdog_enable) //watchdog timeout in ns*256 unit. 0 if watchdog is disabled { if(device->cardMgr.watchdog_timeout_ns < 256) temp |= 0x100; else temp |= (device->cardMgr.watchdog_timeout_ns & 0xFFFFFF00); } - + if(temp != device->cardMgr.card_control_reg) { device->cardMgr.card_control_reg = temp; pCard->card_control_reg = temp; } - + //First 16 execution of this function measure PCI clk frequency. Result is printed to dmesg. if(device->cardMgr.cntr < 17) { @@ -1379,7 +1379,7 @@ card_mgr(void *arg, long period) rtapi_set_msg_level(temp); } device->cardMgr.cntr++; - } + } } ////////////////////////////////////////////////////////////////////////////// @@ -1402,15 +1402,15 @@ encoder(void *arg, long period) if(device->encoder[i].counter_mode == 1) temp1 |= (0x1 << (i+6)); } pCard->ENC_control_reg = temp1; - - + + //Read encoders for(i = 0; i < 6; i++) if(device->encoder[i].module_exist) { temp1 = pCard->ENC_counter[i]; temp2 = pCard->ENC_index_latch[i]; - + if(*(device->encoder[i].reset) == 1) //If encoder in reset state { device->encoder[i].index_offset = temp1; @@ -1421,7 +1421,7 @@ encoder(void *arg, long period) { if(device->encoder[i].index_mode == 0) //reset counter at index { - device->encoder[i].index_offset = temp2; + device->encoder[i].index_offset = temp2; *(device->encoder[i].index_enable) = 0; //disable index } else //round counter at index @@ -1449,17 +1449,17 @@ encoder(void *arg, long period) } } device->encoder[i].last_index_latch = temp2; - + *(device->encoder[i].rawcounts) = temp1 - device->encoder[i].raw_offset; *(device->encoder[i].counts) = *(device->encoder[i].rawcounts) - device->encoder[i].index_offset; - + if((device->encoder[i].position_scale < 0.000001) && (device->encoder[i].position_scale > -0.000001)) device->encoder[i].position_scale = 1; //Dont like to devide by 0 *(device->encoder[i].position) = (hal_float_t) *(device->encoder[i].counts) / device->encoder[i].position_scale; - + vel = (hal_float_t) pCard->ENC_period[i]; if(vel == 0) vel = 1; vel = 33333333 / ( vel * device->encoder[i].position_scale); //velocity in position units / s - + if(rtapi_fabs(vel) > device->encoder[i].min_speed_estimate) { *(device->encoder[i].velocity) = vel; @@ -1481,7 +1481,7 @@ stepgen(void *arg, long period) card *pCard = device->pCard; int i; - + //Update stepgen status with enable bits for(i=0;i<6;i++) { @@ -1500,11 +1500,11 @@ stepgen(void *arg, long period) { stepgenCheckParameters(arg, period, i); } - + } //Update fpga with status register (enable and parameter bits) pCard->StepGen_status = device->stepgen_status; - + //Run steppers, if enabled for(i=0;i<6;i++) { @@ -1526,31 +1526,31 @@ stepgenCheckParameters(void *arg, long period, unsigned int channel) { gm_device_t *device = (gm_device_t *)arg; card *pCard = device->pCard; - + hal_u32_t temp1, temp2; hal_float_t min_period, max_vel; - + //If period changed : recalc period related parameters if(device->period_ns != period) { device->period_s = period * 0.000000001; - device->rec_period_s = 1.0/device->period_s; + device->rec_period_s = 1.0/device->period_s; } - + //If position scale changed : update steprate_scale if(device->stepgen[channel].curr_position_scale != device->stepgen[channel].position_scale) - { + { //30 ns is circley time of CLK, 1/10e9 is ns -sec conversion, 42.. is 2^32 because steprate is 32 bit device->stepgen[channel].steprate_scale = device->stepgen[channel].position_scale * 30.0 / 1000000000.0 * 4294967296.0; } - + //If steplen, stepspace, position_scale or max_vel changed : update max_vel - if((device->stepgen[channel].steplen != device->stepgen[channel].curr_steplen) || (device->stepgen[channel].stepspace != device->stepgen[channel].curr_stepspace) || + if((device->stepgen[channel].steplen != device->stepgen[channel].curr_steplen) || (device->stepgen[channel].stepspace != device->stepgen[channel].curr_stepspace) || (device->stepgen[channel].maxvel != device->stepgen[channel].curr_maxvel) || (device->stepgen[channel].curr_position_scale != device->stepgen[channel].position_scale)) { min_period = (device->stepgen[channel].steplen + device->stepgen[channel].stepspace) * 0.000000001; max_vel = 1/((hal_float_t)min_period * rtapi_fabs(device->stepgen[channel].position_scale)); - + if(device->stepgen[channel].maxvel <= 0) { device->stepgen[channel].maxvel = max_vel; @@ -1564,35 +1564,35 @@ stepgenCheckParameters(void *arg, long period, unsigned int channel) } } } - + //If steplen or dirdelay changed : update FPGA time parameter regs if((device->stepgen[channel].steplen != device->stepgen[channel].curr_steplen) || (device->stepgen[channel].dirdelay != device->stepgen[channel].curr_dirdelay)) - { - //Init time constants, send them to PCI + { + //Init time constants, send them to PCI temp1= (device->stepgen[channel].steplen <= 1900000) ? (device->stepgen[channel].steplen/30) : 63333; temp2= (device->stepgen[channel].dirdelay <= 1900000) ? (device->stepgen[channel].dirdelay/30) : 63333; - + if((device->stepgen[channel].steplen > 1900000) || (device->stepgen[channel].dirdelay > 1900000)) { rtapi_print_msg(RTAPI_MSG_ERR, "GM: stepgen: 'steplen' and 'dirdelay' must be lower than 1 900 000 ns.\n"); } pCard->StepGen_time_params[channel] = (temp1 << 16) | (temp2 & 0xFFFF); } - + //If enable, step_type or polarity bits changed : update fpga status reg if (*(device->stepgen[channel].enable) == 1) device->stepgen_status |= (0x1 << channel); //Bit 0-5 is the enable bit else device->stepgen_status &= ~(0x1 << channel); if (device->stepgen[channel].step_type == 1) device->stepgen_status |= (0x1 << (channel + 6)); //Bits 6-17 are the step_mode bits else device->stepgen_status &= ~(0x1 << (channel + 6)); - if (device->stepgen[channel].step_type == 2) device->stepgen_status |= (0x1 << (channel + 12)); + if (device->stepgen[channel].step_type == 2) device->stepgen_status |= (0x1 << (channel + 12)); else device->stepgen_status &= ~(0x1 << (channel + 12)); if (device->stepgen[channel].polarity_A == 1) device->stepgen_status |= (0x1 << (channel + 18)); //18-23. bit is polarity of channel A else device->stepgen_status &= ~(0x1 << (channel + 18)); if (device->stepgen[channel].polarity_B == 1) device->stepgen_status |= (0x1 << (channel + 24)); //24-29. bit is polarity of channel B else device->stepgen_status &= ~(0x1 << (channel + 24)); - + pCard->StepGen_status = device->stepgen_status; - + //If max_vel, max_accel or period changed : calc max_dv if((device->stepgen[channel].maxvel != device->stepgen[channel].curr_maxvel) || (device->stepgen[channel].maxaccel != device->stepgen[channel].curr_maxaccel) || (device->period_ns != period)) { @@ -1608,7 +1608,7 @@ stepgenCheckParameters(void *arg, long period, unsigned int channel) //vel = freq/pos_scale //pos=counts/pos_scale } - + //Update current values device->period_ns = period; device->stepgen[channel].curr_position_scale = device->stepgen[channel].position_scale; @@ -1617,7 +1617,7 @@ stepgenCheckParameters(void *arg, long period, unsigned int channel) device->stepgen[channel].curr_maxaccel = device->stepgen[channel].maxaccel; device->stepgen[channel].curr_steplen = device->stepgen[channel].steplen; device->stepgen[channel].curr_dirdelay= device->stepgen[channel].dirdelay; - + } static void @@ -1625,21 +1625,21 @@ stepgenControl(void *arg, long period, unsigned int channel) { gm_device_t *device = (gm_device_t *)arg; card *pCard = device->pCard; - - hal_s32_t stepgen_fb, stepgen_fb_int, last_count_fb_LS16_bits, last_count_fb_MS16_bits, last_count_fb; + + hal_s32_t stepgen_fb, stepgen_fb_int, last_count_fb_LS16_bits, last_count_fb_MS16_bits, last_count_fb; hal_float_t ref_vel, match_acc, match_time, avg_v, est_out, est_cmd, est_err, dp; - + //read and count feedbacks stepgen_fb = pCard->StepGen_fb[channel]; //pCard->StepGen_Fb[channel] is 16.16 bit fixed point feedback in [step] unit stepgen_fb -= device->stepgen[channel].stepgen_fb_offset; stepgen_fb_int= stepgen_fb >> 16; //get integer part of step feedback - + last_count_fb = *(device->stepgen[channel].count_fb); last_count_fb_LS16_bits = last_count_fb & 0xFFFF; last_count_fb_MS16_bits = last_count_fb & 0xFFFF0000; - + //Check for 16 bit overflow of stepgen_fb - if(stepgen_fb_int > last_count_fb_LS16_bits + 32768) //16 bit step counter down overflow + if(stepgen_fb_int > last_count_fb_LS16_bits + 32768) //16 bit step counter down overflow { *(device->stepgen[channel].count_fb) = (last_count_fb_MS16_bits + stepgen_fb_int - 65536); } @@ -1654,20 +1654,20 @@ stepgenControl(void *arg, long period, unsigned int channel) //save old position and get new one *(device->stepgen[channel].position_fb) = (*(device->stepgen[channel].count_fb) + ((hal_float_t)(stepgen_fb & 0xFFFF))/65536)/device->stepgen[channel].position_scale; //[pos_unit] - + //velocity control is easy if(device->stepgen[channel].control_type == 1) { - ref_vel = *(device->stepgen[channel].velocity_cmd); + ref_vel = *(device->stepgen[channel].velocity_cmd); } - + //Position control is more difficult /*Position control based on John Kasunich's stepgen hal component.*/ else if(device->stepgen[channel].control_type == 0) { //Reference velocity: ref_vel = (*(device->stepgen[channel].position_cmd) - device->stepgen[channel].old_pos_cmd) * device->rec_period_s; - + if(ref_vel > device->stepgen[channel].old_vel) { match_acc = device->stepgen[channel].maxaccel; @@ -1676,17 +1676,17 @@ stepgenControl(void *arg, long period, unsigned int channel) { match_acc = -device->stepgen[channel].maxaccel; } - + match_time = (ref_vel - device->stepgen[channel].old_vel) / match_acc; - + avg_v = (ref_vel + device->stepgen[channel].old_vel) * 0.5; - + est_out = *(device->stepgen[channel].position_fb) + avg_v * match_time;; - est_cmd = *(device->stepgen[channel].position_cmd) + ref_vel * (match_time - 1.5 * device->period_s); - + est_cmd = *(device->stepgen[channel].position_cmd) + ref_vel * (match_time - 1.5 * device->period_s); + est_err = est_out - est_cmd; - - //If we can match velocity in one period + + //If we can match velocity in one period if(match_time < device->period_s) { if(rtapi_fabs(est_err) > 0.0001) //position correction @@ -1694,7 +1694,7 @@ stepgenControl(void *arg, long period, unsigned int channel) ref_vel -= 0.5 * est_err * device->rec_period_s; } } - + //If we need more periods to reach, then ramp else { @@ -1708,16 +1708,16 @@ stepgenControl(void *arg, long period, unsigned int channel) } ref_vel = device->stepgen[channel].old_vel + match_acc * device->period_s; } - + } //Check max velocity, max acceleration and output baudrate - + //Check max velocity if(ref_vel > device->stepgen[channel].maxvel) ref_vel = device->stepgen[channel].maxvel; else if(ref_vel < -device->stepgen[channel].maxvel) ref_vel = -device->stepgen[channel].maxvel; - + //Check max acceleration - if((device->stepgen[channel].old_vel-ref_vel) > device->stepgen[channel].max_dv) + if((device->stepgen[channel].old_vel-ref_vel) > device->stepgen[channel].max_dv) { ref_vel=device->stepgen[channel].old_vel-device->stepgen[channel].max_dv; } @@ -1726,10 +1726,10 @@ stepgenControl(void *arg, long period, unsigned int channel) ref_vel=device->stepgen[channel].old_vel+device->stepgen[channel].max_dv; } //Save old velocity - device->stepgen[channel].old_vel=ref_vel; + device->stepgen[channel].old_vel=ref_vel; //Set steprate pCard->StepGen_steprate[channel] = (hal_s32_t)(ref_vel * device->stepgen[channel].steprate_scale); - + } ////////////////////////////////////////////////////////////////////////////// @@ -1740,13 +1740,13 @@ RS485(void *arg, long period) { gm_device_t *device = (gm_device_t *)arg; card *pCard = device->pCard; - + unsigned int i, j; hal_float_t temp; hal_u32_t temp_u32; bool data_wr = 0; static hal_bit_t failed=0; - + //for write function hal_u32_t RS485DataIn8[32], RS485DataOut32[8]; //for read function @@ -1757,10 +1757,10 @@ RS485(void *arg, long period) for(i=0; i<8; i++) { temp_u32=(hal_u32_t)pCard->moduleId[i]; - - if(((temp_u32 & 0xff)^0xaa) == ((temp_u32 & 0xff00)>>8)) + + if(((temp_u32 & 0xff)^0xaa) == ((temp_u32 & 0xff00)>>8)) { - if((device-> RS485_mgr.ID[2*i]) != ((temp_u32 >> 8) & 0xff)) + if((device-> RS485_mgr.ID[2*i]) != ((temp_u32 >> 8) & 0xff)) { //RS485 module falled off, error if(failed == 0) //Msg only first time, do not put 100 error msg @@ -1771,7 +1771,7 @@ RS485(void *arg, long period) *(device->cardMgr.power_fault) = 1; } } - + if(((temp_u32 & 0xff0000)^0xaa0000) == ((temp_u32 & 0xff000000)>>8)) { if((device-> RS485_mgr.ID[2*i+1]) != ((temp_u32 & 0xff000000)>>24)) @@ -1779,23 +1779,23 @@ RS485(void *arg, long period) //RS485 module falled off, error if(failed == 0) //Msg only first time, do not put 100 error msg { - failed=1; + failed=1; rtapi_print_msg(RTAPI_MSG_ERR, "GM: ERROR: RS485 module ID:%2d failed.\n", 2*i+1); } *(device->cardMgr.power_fault) = 1; } } } - + //read RS485-s for(i=0;i<16;i++) if((device-> RS485_mgr.ID[i] != 0) && (device-> RS485_mgr.BYTES_TO_READ[i] != 0)) //If the modul is presented and not write only { //Block ram address lookahead support - if(i != 0) *(&(pCard->serialModulesDataIn[i-1][7])); + if(i != 0) *(&(pCard->serialModulesDataIn[i-1][7])); else *(&(pCard->serialModulesDataOut[15][7])); //Read bytes to RS485DataIn32 array for(j=0; j<8; j++) RS485DataIn32[j]= (hal_u32_t)pCard->serialModulesDataIn[i][j]; - + //Order data to RS485DataOut8 buffer RS485_OrderDataRead(RS485DataIn32, RS485DataOut8, device-> RS485_mgr.BYTES_TO_READ[i]); //Process data if Checksum is OK @@ -1821,7 +1821,7 @@ RS485(void *arg, long period) *(device->RS485_8input[i].in_7) = (hal_bit_t)((RS485DataOut8[0] >> 7) & 0x1) ? 1 : 0; *(device->RS485_8input[i].inNot_7) = (hal_bit_t)((RS485DataOut8[0] >> 7) & 0x1) ? 0 : 1; break; - + case RS485MODUL_ID_DACADC: *(device->RS485_DacAdc[i].ADC_0) = (((hal_float_t)RS485DataOut8[0])/25.5-5) * device->RS485_DacAdc[i].ADC_0_scale - device->RS485_DacAdc[i].ADC_0_offset; *(device->RS485_DacAdc[i].ADC_1) = (((hal_float_t)RS485DataOut8[1])/25.5-5) * device->RS485_DacAdc[i].ADC_1_scale - device->RS485_DacAdc[i].ADC_1_offset; @@ -1831,9 +1831,9 @@ RS485(void *arg, long period) *(device->RS485_DacAdc[i].ADC_5) = (((hal_float_t)RS485DataOut8[5])/25.5-5) * device->RS485_DacAdc[i].ADC_5_scale - device->RS485_DacAdc[i].ADC_5_offset; *(device->RS485_DacAdc[i].ADC_6) = (((hal_float_t)RS485DataOut8[6])/25.5-5) * device->RS485_DacAdc[i].ADC_6_scale - device->RS485_DacAdc[i].ADC_6_offset; *(device->RS485_DacAdc[i].ADC_7) = (((hal_float_t)RS485DataOut8[7])/25.5-5) * device->RS485_DacAdc[i].ADC_7_scale - device->RS485_DacAdc[i].ADC_7_offset; - + break; - + case RS485MODUL_ID_TEACHPAD: *(device->RS485_TeachPad[i].in_0) = ((hal_bit_t)(RS485DataOut8[0] & 0x1) ? 1 : 0); @@ -1859,55 +1859,55 @@ RS485(void *arg, long period) *(device->RS485_TeachPad[i].ADC_3) = (hal_float_t)RS485DataOut8[4]/51.2 * device->RS485_TeachPad[i].ADC_3_scale - device->RS485_TeachPad[i].ADC_3_offset; *(device->RS485_TeachPad[i].ADC_4) = (hal_float_t)RS485DataOut8[5]/51.2 * device->RS485_TeachPad[i].ADC_4_scale - device->RS485_TeachPad[i].ADC_4_offset; *(device->RS485_TeachPad[i].ADC_5) = (hal_float_t)RS485DataOut8[6]/51.2 * device->RS485_TeachPad[i].ADC_5_scale - device->RS485_TeachPad[i].ADC_5_offset; - + *(device->RS485_TeachPad[i].enc_rawcounts)= (RS485DataOut8[7] & 0xff) | ((RS485DataOut8[8] & 0xff) << 8) | ((RS485DataOut8[9] & 0xff) << 16) | (RS485DataOut8[10] << 24); if(*(device->RS485_TeachPad[i].enc_reset)) { device->RS485_TeachPad[i].enc_raw_offset = *(device->RS485_TeachPad[i].enc_rawcounts); } *(device->RS485_TeachPad[i].enc_counts) = *(device->RS485_TeachPad[i].enc_rawcounts) - device->RS485_TeachPad[i].enc_raw_offset; - + if((device->RS485_TeachPad[i].enc_position_scale < 0.000001) && (device->RS485_TeachPad[i].enc_position_scale > -0.000001)) device->RS485_TeachPad[i].enc_position_scale=1; //dont devide by 0 - + *(device->RS485_TeachPad[i].enc_position) = *(device->RS485_TeachPad[i].enc_counts) / device->RS485_TeachPad[i].enc_position_scale; - + default: - break; + break; } - + } } //Write serial IOs for(i=0;i<16;i++) if((device-> RS485_mgr.ID[i] != 0) && (device-> RS485_mgr.BYTES_TO_WRITE[i] != 0)) //If the modul is presented and not read only { - + switch (device-> RS485_mgr.ID[i]) { - case RS485MODUL_ID_8OUTPUT: - RS485DataIn8[0]=((*(device->RS485_8output[i].out_7) ^ (device->RS485_8output[i].invertOut_7)) << 7) | + case RS485MODUL_ID_8OUTPUT: + RS485DataIn8[0]=((*(device->RS485_8output[i].out_7) ^ (device->RS485_8output[i].invertOut_7)) << 7) | ((*(device->RS485_8output[i].out_6) ^ (device->RS485_8output[i].invertOut_6)) << 6) | ((*(device->RS485_8output[i].out_5) ^ (device->RS485_8output[i].invertOut_5)) << 5) | ((*(device->RS485_8output[i].out_4) ^ (device->RS485_8output[i].invertOut_4)) << 4) | ((*(device->RS485_8output[i].out_3) ^ (device->RS485_8output[i].invertOut_3)) << 3) | ((*(device->RS485_8output[i].out_2) ^ (device->RS485_8output[i].invertOut_2)) << 2) | ((*(device->RS485_8output[i].out_1) ^ (device->RS485_8output[i].invertOut_1)) << 1) | - ((*(device->RS485_8output[i].out_0) ^ (device->RS485_8output[i].invertOut_0)) << 0); + ((*(device->RS485_8output[i].out_0) ^ (device->RS485_8output[i].invertOut_0)) << 0); break; case RS485MODUL_ID_DACADC: - //DAC 0 + //DAC 0 if(*(device->RS485_DacAdc[i].DAC_0)) { temp = *(device->RS485_DacAdc[i].DAC_0)+ device->RS485_DacAdc[i].DAC_0_offset; - + if(temp > device->RS485_DacAdc[i].DAC_0_max) { temp = device->RS485_DacAdc[i].DAC_0_max; } else if(temp < device->RS485_DacAdc[i].DAC_0_min) { temp = device->RS485_DacAdc[i].DAC_0_min; } - + temp = (temp + 10)*12.8 + 0.5; } else temp=128; - + if(temp>255) temp=255; else if(temp <0) temp=0; RS485DataIn8[0]= (hal_u32_t)temp; @@ -1915,55 +1915,55 @@ RS485(void *arg, long period) if(*(device->RS485_DacAdc[i].DAC_1)) { temp = *(device->RS485_DacAdc[i].DAC_1)+ device->RS485_DacAdc[i].DAC_1_offset; - + if(temp > device->RS485_DacAdc[i].DAC_1_max) { temp = device->RS485_DacAdc[i].DAC_1_max; } else if(temp < device->RS485_DacAdc[i].DAC_1_min) { temp = device->RS485_DacAdc[i].DAC_1_min; } - + temp = (temp + 10)*12.8 + 0.5; } if(temp>255) temp=255; else if(temp <0) temp=0; RS485DataIn8[1]= (hal_u32_t)temp; - + //DAC 2 if(*(device->RS485_DacAdc[i].DAC_2)) { temp = *(device->RS485_DacAdc[i].DAC_2)+ device->RS485_DacAdc[i].DAC_2_offset; - + if(temp > device->RS485_DacAdc[i].DAC_2_max) { temp = device->RS485_DacAdc[i].DAC_2_max; } else if(temp < device->RS485_DacAdc[i].DAC_2_min) { temp = device->RS485_DacAdc[i].DAC_2_min; } - + temp = (temp + 10)*12.8 + 0.5; } if(temp>255) temp=255; else if(temp <0) temp=0; RS485DataIn8[2]= (hal_u32_t)temp; - + //DAC 3 if(*(device->RS485_DacAdc[i].DAC_3)) { temp = *(device->RS485_DacAdc[i].DAC_3)+ device->RS485_DacAdc[i].DAC_3_offset; - + if(temp > device->RS485_DacAdc[i].DAC_3_max) { temp = device->RS485_DacAdc[i].DAC_3_max; } else if(temp < device->RS485_DacAdc[i].DAC_3_min) { temp = device->RS485_DacAdc[i].DAC_3_min; } - + temp = (temp + 10)*12.8 + 0.5; } if(temp>255) temp=255; else if(temp <0) temp=0; RS485DataIn8[3]= (hal_u32_t)temp; - break; - + break; + default: - break; + break; } - + //Calc Checksum RS485DataIn8[device-> RS485_mgr.BYTES_TO_WRITE[i]-1]=RS485_CalcChecksum(RS485DataIn8, device-> RS485_mgr.BYTES_TO_WRITE[i] - 1); //Order 8 bit data to send to 32 bit PCI RS485_OrderDataWrite(RS485DataIn8, RS485DataOut32, device-> RS485_mgr.BYTES_TO_WRITE[i]); //order 8 bit bytes to 32 bit words - //Send data + //Send data for(j=7;(7-j) < ((unsigned int)(device-> RS485_mgr.BYTES_TO_WRITE[i]-1)/4) + 1;j--) { *(&(pCard->serialModulesDataOut[i][j])) = RS485DataOut32[j]; @@ -1983,38 +1983,38 @@ RS485_OrderDataRead(hal_u32_t* dataIn32, hal_u32_t* dataOut8, hal_u32_t length) for(i=length-1; i>=0; i--) { j = length-1-i; - dataOut8[i]= (dataIn32[(unsigned int)(j/4)] >> ((j%4)*8)) & 0xff; + dataOut8[i]= (dataIn32[(unsigned int)(j/4)] >> ((j%4)*8)) & 0xff; } } - + static void RS485_OrderDataWrite(hal_u32_t* dataIn8, hal_u32_t* dataOut32, hal_u32_t length) { int i, j; - /* Byte order: + /* Byte order: RS485DataOut32[0]=0x28293031; RS485DataOut32[1]=0x24252627; RS485DataOut32[2]=0x20212223; RS485DataOut32[3]=0x16171819; - + RS485DataOut32[4]=0x12131415; RS485DataOut32[5]=0x08091011; RS485DataOut32[6]=0x04050607; RS485DataOut32[7]=0x00010203; */ - + for(i=0;i> 2); //To which word to write dataOut32[j]=(dataIn8[i+3] & 0xff) | ((dataIn8[i+2] & 0xff) << 8) | ((dataIn8[i+1] & 0xff) << 16) | (dataIn8[i] << 24); } } - + static unsigned int RS485_CheckChecksum(hal_u32_t* data, hal_u32_t length) { unsigned int i=0, tempChecksum=0; - + if(length > 0 && length < 32) for(i=0; i < length-1; i++) { @@ -2023,19 +2023,19 @@ RS485_CheckChecksum(hal_u32_t* data, hal_u32_t length) if((data[i] ^ 0xaa) == (tempChecksum & 0xff)) return 0; return -1; - + } static unsigned int RS485_CalcChecksum(hal_u32_t* data, hal_u32_t length) { unsigned int i, tempChecksum=0; - + if(length > 0 && length < 32) for(i=0; i < length; i++) { tempChecksum += data[i]; } return (tempChecksum & 0xff) ^ 0xaa; - + } diff --git a/src/modules/managed/drivers/hal_h3_gpio/hal_gpio_h3-README b/src/modules/managed/drivers/hal_h3_gpio/hal_gpio_h3-README index 4dfa47a958..8265dbc900 100644 --- a/src/modules/managed/drivers/hal_h3_gpio/hal_gpio_h3-README +++ b/src/modules/managed/drivers/hal_h3_gpio/hal_gpio_h3-README @@ -1,8 +1,8 @@ (From the original PR text by @MX-Master) -I have some files for those people who wants to make a quick test of GPIO driver with Orange Pi One board. +I have some files for those people who wants to make a quick test of GPIO driver with Orange Pi One board. -I made two MicroSD images (8Gb, 16Gb) with a couple of HOWTO files. MicroSD image - it's Debian Jessie (built by Armbian) with real-time kernel (4.13, RT-PREEMPT), +I made two MicroSD images (8Gb, 16Gb) with a couple of HOWTO files. MicroSD image - it's Debian Jessie (built by Armbian) with real-time kernel (4.13, RT-PREEMPT), with Machinekit and some tweaks installed: 8GB image @@ -29,4 +29,4 @@ Machinekit, LinuxCNC and GPIO.pdf http://topcnc.ru/opi1_cnc/5%20-%20Machinekit,%20LinuxCNC%20and%20GPIO.pdf Wiring.pdf -http://topcnc.ru/opi1_cnc/6%20-%20Wiring.pdf \ No newline at end of file +http://topcnc.ru/opi1_cnc/6%20-%20Wiring.pdf diff --git a/src/modules/managed/drivers/hal_h3_gpio/hal_gpio_h3_demo.hal b/src/modules/managed/drivers/hal_h3_gpio/hal_gpio_h3_demo.hal index 9aa4a98480..2e67176ab2 100644 --- a/src/modules/managed/drivers/hal_h3_gpio/hal_gpio_h3_demo.hal +++ b/src/modules/managed/drivers/hal_h3_gpio/hal_gpio_h3_demo.hal @@ -4,7 +4,7 @@ loadrt hal_gpio_h3 output_pins=3,5,7,8 newthread fast 100000 newthread slow 1000000 -loadrt stepgen step_type=5 ctrl_type=v +loadrt stepgen step_type=5 ctrl_type=v net a stepgen.0.phase-A => hal_gpio_h3.pin-03-out net b stepgen.0.phase-B => hal_gpio_h3.pin-05-out @@ -20,5 +20,3 @@ addf hal_gpio_h3.write fast setp stepgen.0.enable 1 sets speed 5000 start - - diff --git a/src/modules/managed/drivers/hal_ppmc/src/hal_ppmc.c b/src/modules/managed/drivers/hal_ppmc/src/hal_ppmc.c index 182a288d8e..c8f9f2e81d 100644 --- a/src/modules/managed/drivers/hal_ppmc/src/hal_ppmc.c +++ b/src/modules/managed/drivers/hal_ppmc/src/hal_ppmc.c @@ -2,7 +2,7 @@ * Description: hal_ppmc.c * HAL driver for the the Pico Systems family of * parallel port motion control boards, including -* the PPMC board set, the USC, and the UPC. +* the PPMC board set, the USC, and the UPC. * * Usage: halcmd loadrt hal_ppmc port_addr=[,addr2[,addr3]] * [extradac=,[]] @@ -29,7 +29,7 @@ * Author: John Kasunich, Jon Elson, Stephen Wille Padnos * License: GPL Version 2 -* +* * Copyright (c) 2005 All rights reserved. * ********************************************************************/ @@ -37,7 +37,7 @@ /** The driver searches the entire address space of the enhanced parallel port (EPP) at 'port_addr', looking for any board(s) in the PPMC family. It then exports HAL pins for whatever it - finds, as well as a pair of functions, one that reads all + finds, as well as a pair of functions, one that reads all inputs, and one that writes all outputs. */ @@ -187,7 +187,7 @@ RTAPI_MP_ARRAY_INT(enc_clock, MAX_BUS*8, "bus/slot locations of encoder clock se /* The physical output associated with the "estop" output will not come on unless the physical "estop" input is also on. All physical outputs will not come on unless the physical "estop" output is on. */ - + /* The ESTOP function is completely implementd in FPGA hardware. To get out of ESTOP, the safety chain must be a closed circuit (Green LED lit on board), you then must satisfy the watchdog (if watchdog jumper is in ON @@ -301,9 +301,9 @@ typedef struct { } encoder_t; /* this structure contains the runtime data for a single EPP bus slot */ -/* A single slot can contain a wide variety of "stuff", ranging +/* A single slot can contain a wide variety of "stuff", ranging from PWM or stepper or DAC outputs, to encoder inputs, to digital - I/O. at runtime, the proper function(s) need to be invoked to + I/O. at runtime, the proper function(s) need to be invoked to handle it. We do that by having an array of functions that are called in order. The entries are filled in when the init code scans the bus and determines what is in each slot */ @@ -475,7 +475,7 @@ int rtapi_app_main(void) n++; } if ( n == 0 ) { - rtapi_print_msg(RTAPI_MSG_ERR, + rtapi_print_msg(RTAPI_MSG_ERR, "PPMC: ERROR: no ports specified\n"); hal_exit(comp_id); return -1; @@ -545,7 +545,7 @@ int rtapi_app_main(void) slot->encoder = NULL; slot->extra_mode = EXTRA_UNUSED; slot->extra = NULL; - } + } /* scan the bus */ for ( slotnum = 0 ; slotnum < NUM_SLOTS ; slotnum ++ ) { /* point to slot struct */ @@ -553,7 +553,7 @@ int rtapi_app_main(void) /* rv1 is used to flag errors that fail one bus */ rv1 = 0; rtapi_print_msg(RTAPI_MSG_INFO, "PPMC: slot %d: ", slotnum); - + /* check slot */ idcode = SelRead(slot->slot_base+SLOT_ID_OFFSET, slot->port_addr); if ((idcode == 0)||(idcode == 0xFF)||((idcode&0x0f) == 0x0f)) { @@ -574,7 +574,7 @@ int rtapi_app_main(void) slot->enc_freq = 0; /* default is 1 MHz */ /* mark slot as occupied */ bus->slot_valid[slotnum] = 1; - + /* do board specific init and configuration */ switch ( id ) { case 0x10: @@ -591,12 +591,12 @@ int rtapi_app_main(void) } if ( need_timestamp ) { rv1 += export_timestamp(slot, bus); - } + } for ( n = 0; n < MAX_BUS*8 ; n++ ) { if ( (enc_clock[n] & 0xff) == bus_slot_code) { // rtapi_print_msg(RTAPI_MSG_ERR,"PPMC detected enc_clock parameter%x\n",enc_clock[n]); if (slot->ver < 4) { - rtapi_print_msg(RTAPI_MSG_ERR, + rtapi_print_msg(RTAPI_MSG_ERR, "PPMC encoder does not support adjustable encoder clock, ignoring\n"); } slot->enc_freq = (enc_clock[n]) >> 8; // the clock selection is in bits 12-8 @@ -647,7 +647,7 @@ int rtapi_app_main(void) rv1 += export_extra_dac(slot, bus); } else if ( need_extra_dout ) { rv1 += export_extra_dout(slot, bus); - } + } /* the USC occupies two slots, so skip the second one */ slotnum++; break; @@ -685,7 +685,7 @@ int rtapi_app_main(void) } if ( need_timestamp ) { rv1 += export_timestamp(slot, bus); - } + } // can't export encoders until we know if they use timestamp feature rv1 += export_encoders(slot, bus); /* the UPC occupies two slots, so skip the second one */ @@ -762,7 +762,7 @@ int rtapi_app_main(void) /* something went wrong, cleanup and exit */ rtapi_app_exit(); return rv; - } + } rtapi_print_msg(RTAPI_MSG_INFO, "PPMC: driver installed\n"); hal_ready(comp_id); return 0; @@ -1078,7 +1078,7 @@ static void read_encoders(slot_data_t *slot) unsigned short delta_time; // hal_u32_t timestamp; // hal_u32_t timebase; - + // sample timebase only on boards so equipped if (slot->use_timestamp) { byteindex = ENCTB; @@ -1165,7 +1165,7 @@ static void read_encoders(slot_data_t *slot) } else { // no counts this sample if (slot->encoder[i].counts_since_timeout) { - delta_time = timebase.s - timestamp.s; + delta_time = timebase.s - timestamp.s; delta_time = delta_time & 0xffff; // if (delta_time < slot->encoder[i].scale * slot->encoder[i].min_speed) { if (delta_time < 65500) { @@ -1417,9 +1417,9 @@ static void write_pwmgens(slot_data_t *slot) /* calculate desired duty cycle */ dc = *(pg->value) / pg->scale; /* Special code to deal with the requirements of the Pico PWM - amps. They need at least one PWM pulse in each direction + amps. They need at least one PWM pulse in each direction every time you enable the amps. So we override the commanded - duty cycle with +5%, then -5%, for one thread execution time + duty cycle with +5%, then -5%, for one thread execution time each, when we see a rising edge on enable. */ if ( pg->bootstrap != 0 ) { @@ -1457,10 +1457,10 @@ static void write_pwmgens(slot_data_t *slot) /* reset any illegal duty cycle limits */ if (( pg->min_dc > 1.0 ) || ( pg->min_dc < 0.0 )) { pg->min_dc = 0.0; - } + } if (( pg->max_dc > 1.0 ) || ( pg->max_dc < 0.0 )) { pg->max_dc = 1.0; - } + } if ( pg->min_dc >= pg->max_dc ) { pg->min_dc = 0.0; pg->max_dc = 1.0; @@ -1638,9 +1638,9 @@ static __u32 block(int min, int max) /* these functions are used to register a runtime function to be called by either read_all or write_all. 'cache_bitmap' defines the EPP - addresses that the function needs. All addresses needed by all + addresses that the function needs. All addresses needed by all functions associated with the slot will be sequentially read into - the rd_buf cache (or written from the wr_buf cache) by read_all + the rd_buf cache (or written from the wr_buf cache) by read_all or write_all respectively, to minimize the number of slow inb and outb operations needed. */ @@ -1649,7 +1649,7 @@ static int add_rd_funct(slot_funct_t *funct, slot_data_t *slot, __u32 cache_bitmap ) { if ( slot->num_rd_functs >= MAX_FUNCT ) { - rtapi_print_msg(RTAPI_MSG_ERR, + rtapi_print_msg(RTAPI_MSG_ERR, "PPMC: ERROR: too many read functions\n"); return -1; } @@ -1662,7 +1662,7 @@ static int add_wr_funct(slot_funct_t *funct, slot_data_t *slot, __u32 cache_bitmap ) { if ( slot->num_wr_functs >= MAX_FUNCT ) { - rtapi_print_msg(RTAPI_MSG_ERR, + rtapi_print_msg(RTAPI_MSG_ERR, "PPMC: ERROR: too many write functions\n"); return -1; } @@ -2088,16 +2088,16 @@ static int export_PPMC_DAC(slot_data_t *slot, bus_data_t *bus) ppmc.n.encoder.m.position float ppmc.n.encoder.m.counts s32 ppmc.n.encoder.m.index bit - + the output value is position=counts / scale - Additionally, the encoder registers are zeroed, and the mode is set to latch + Additionally, the encoder registers are zeroed, and the mode is set to latch */ static int export_encoders(slot_data_t *slot, bus_data_t *bus) { int retval, n, m; - + rtapi_print_msg(RTAPI_MSG_INFO, "PPMC: exporting encoder pins / params\n"); /* do hardware init */ @@ -2361,7 +2361,7 @@ static int ClrTimeout(unsigned int port_addr) unsigned char r; r = rtapi_inb(STATUSPORT(port_addr)); - + if (!(r & 0x01)) { return 0; } @@ -2380,7 +2380,7 @@ static int ClrTimeout(unsigned int port_addr) static unsigned short SelRead(unsigned char epp_addr, unsigned int port_addr) { unsigned char b; - + ClrTimeout(port_addr); /* set port direction to output */ rtapi_outb(0x04,CONTROLPORT(port_addr)); @@ -2394,7 +2394,7 @@ static unsigned short SelRead(unsigned char epp_addr, unsigned int port_addr) } -/* reads one byte from EPP, use only after SelRead, and only +/* reads one byte from EPP, use only after SelRead, and only when hardware has auto-increment address cntr */ static unsigned short ReadMore(unsigned int port_addr) { @@ -2417,11 +2417,10 @@ static void SelWrt(unsigned char byte, unsigned char epp_addr, unsigned int port return; } -/* writes one byte to EPP, use only after SelWrt, and only +/* writes one byte to EPP, use only after SelWrt, and only when hardware has auto-increment address cntr */ static void WrtMore(unsigned char byte, unsigned int port_addr) { rtapi_outb(byte,DATAPORT(port_addr)); return; } - diff --git a/src/modules/managed/drivers/hal_pru_generic/firmware/src/generate_empty_resource_table.c b/src/modules/managed/drivers/hal_pru_generic/firmware/src/generate_empty_resource_table.c index 4eade0404d..4e3030c614 100644 --- a/src/modules/managed/drivers/hal_pru_generic/firmware/src/generate_empty_resource_table.c +++ b/src/modules/managed/drivers/hal_pru_generic/firmware/src/generate_empty_resource_table.c @@ -4,7 +4,7 @@ /* See resource_table definition in: -https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/labs/Getting_Started_Labs/c_code/solution/am572x/resource_table_empty.h +https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/labs/Getting_Started_Labs/c_code/solution/am572x/resource_table_empty.h https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/include/rsc_types.h */ @@ -23,7 +23,7 @@ int main(int argc, char** argv) { } char* filename = argv[1]; - FILE *f; + FILE *f; f = fopen(filename, "wb"); diff --git a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_decamux.p b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_decamux.p index d2c2a81e31..fc68ca74cd 100644 --- a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_decamux.p +++ b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_decamux.p @@ -47,4 +47,3 @@ #define DECAMUX T #include "pru_generic.p" - diff --git a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_deltasigma.p b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_deltasigma.p index 79ff668dcb..555214c8f1 100644 --- a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_deltasigma.p +++ b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_deltasigma.p @@ -67,7 +67,7 @@ DELTA_OUT_LOOP: // Update integrator state SUB r1, Output.Value, Output.Quantize ADD Output.Integrate, Output.Integrate, r1.w0 - + // Calculate Output State and store quantized value for next loop QBBC DELTA_OUT_Zero, Output.Integrate, 15 LDI Output.Quantize, 0xC000 diff --git a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_encoder.p b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_encoder.p index 88473d5b3a..0f14ca3cdd 100644 --- a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_encoder.p +++ b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_encoder.p @@ -126,7 +126,7 @@ Z_DONE: // Save state data for this encoder SBBO Encoder_First_Wr, Index.wraddr, Index.Offset, SIZE(Encoder) - OFFSET(Encoder_First_Wr) - + // Point to the next Encoder struct and carry on... ADD Index.Offset, Index.Offset, SIZE(Encoder) SUB GTask.len, GTask.len, 1 diff --git a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_generic.p b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_generic.p index 41491b2193..c797b1f518 100644 --- a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_generic.p +++ b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_generic.p @@ -141,22 +141,22 @@ .entrypoint START // PRU GPIO Write Timing Details -// The actual write instruction to a GPIO pin using SBBO takes two -// PRU cycles (10 nS). However, the GPIO logic can only update every -// 40 nS (8 PRU cycles). This meas back-to-back writes to GPIO pins -// will eventually stall the PRU, or you can execute 6 PRU instructions +// The actual write instruction to a GPIO pin using SBBO takes two +// PRU cycles (10 nS). However, the GPIO logic can only update every +// 40 nS (8 PRU cycles). This meas back-to-back writes to GPIO pins +// will eventually stall the PRU, or you can execute 6 PRU instructions // for 'free' when burst writing to the GPIO. // // Latency from the PRU write to the actual I/O pin changing state // (normalized to PRU direct output pins = zero latency) when the -// PRU is writing to GPIO1 and L4_PERPort1 is idle measures +// PRU is writing to GPIO1 and L4_PERPort1 is idle measures // 95 nS or 105 nS (apparently depending on clock synchronization) // // PRU GPIO Posted Writes // When L4_PERPort1 is idle, it is possible to burst-write multiple -// values to the GPIO pins without stalling the PRU, as the writes -// are posted. With an unrolled loop (SBBO to GPIO followed by a -// single SET/CLR to R30), the first 20 write cycles (both +// values to the GPIO pins without stalling the PRU, as the writes +// are posted. With an unrolled loop (SBBO to GPIO followed by a +// single SET/CLR to R30), the first 20 write cycles (both // instructions) took 15 nS each, at which point the PRU began // to stall and the write cycle settled in to the 40 nS maximum // update frequency. @@ -188,7 +188,7 @@ INITIALIZELOOP: QBBC INITIALIZELOOP, r0, 0 // keep looping while bit 0 is clear LBBO r2, GState.Task_Addr, OFFSET(pru_statics.period), SIZE(pru_statics.period) // what is the period to use in the timers - + // Setup registers // Zero all output registers @@ -251,7 +251,7 @@ SET_CLR_BIT: LSL r3.b2, r3.b0, 7 LSR r3.b3, r3.b1, 5 LSR r3.b0, r3.w2, 6 - + ADD r3.w2, GState.PinTable, r3.b0 JMP r3.w2 @@ -363,13 +363,13 @@ TASKTABLEEND: // 6 pru0.r31.12 // G18 mmc0_cmd 5 pru0.r30.13 - // 6 pru0.r31.13 -// T12 gpmc_ad12 6 pru0.r30.14 P8.12 GPIO1_12 +// T12 gpmc_ad12 6 pru0.r30.14 P8.12 GPIO1_12 // V13 gpmc_ad14 6 pru0.r31.14 P8.16 GPIO1_14 -// R12 gpmc_ad13 6 pru0.r30.15 P8.11 GPIO1_13 +// R12 gpmc_ad13 6 pru0.r30.15 P8.11 GPIO1_13 // U13 gpmc_ad15 6 pru0.r31.15 P8.15 GPIO1_15 // D14 xdma_event_intr1 5 pru0.r31.16 P9.41 CLKOUT2 // D15 uart1_txd 6 pru0.r31.16 P9.24 UART1_TXD -// +// // R1 lcd_data0 5 pru1.r30.0 P8.45 GPIO2_6 J3 // 6 pru1.r31.0 // R2 lcd_data1 5 pru1.r30.1 P8.46 GPIO2_7 J2 @@ -378,7 +378,7 @@ TASKTABLEEND: // 6 pru1.r31.2 // R4 lcd_data3 5 pru1.r30.3 P8.44 GPIO2_9 X Dir // 6 pru1.r31.3 -// T1 lcd_data4 5 pru1.r30.4 P8.41 GPIO2_10 X Enable +// T1 lcd_data4 5 pru1.r30.4 P8.41 GPIO2_10 X Enable // 6 pru1.r31.4 // T2 lcd_data5 5 pru1.r30.5 P8.42 GPIO2_11 Y Step // 6 pru1.r31.5 @@ -408,15 +408,15 @@ TASKTABLEEND: // U3 lcd_data10 - - P8.36 UART3_CTSN J4 // // ecap0_in_pwm0_out 3 ecap0_ecap_capin_apwm_o -// +// -// BeagleBone AM3359ZCZ Mux +// BeagleBone AM3359ZCZ Mux // Replicape BeBoPr Pin Name Pin Name Value PRU I/O Pin // ---------------------------------------------------------------------------------- -// +// // P8.1 GND // P8.2 GND // E2_Step Enable P8.3 GPIO1_6 R9 gpmc_ad6 @@ -427,12 +427,12 @@ TASKTABLEEND: // E2_Fault P8.8 TIMER7 T7 gpmc_oen_ren // P8.9 TIMER5 T6 gpmc_be0n_cle // X_Fault P8.10 TIMER6 U6 gpmc_wen -// X_Dir P8.11 GPIO1_13 R12 gpmc_ad13 6 pru0.r30.15 +// X_Dir P8.11 GPIO1_13 R12 gpmc_ad13 6 pru0.r30.15 // X_Step P8.12 GPIO1_12 T12 gpmc_ad12 6 pru0.r30.14 // E1_Heat P8.13 EHRPWM2B T10 gpmc_ad9 // Y_Stop_1 P8.14 GPIO0_26 T11 gpmc_ad10 -// Y_Fault P8.15 GPIO1_15 U13 gpmc_ad15 6 pru0.r31.15 -// E2_Step P8.16 GPIO1_14 V13 gpmc_ad14 6 pru0.r31.14 +// Y_Fault P8.15 GPIO1_15 U13 gpmc_ad15 6 pru0.r31.15 +// E2_Step P8.16 GPIO1_14 V13 gpmc_ad14 6 pru0.r31.14 // Z_Fault P8.17 GPIO0_27 U12 gpmc_ad11 // E1_Fault P8.18 GPIO2_1 V12 gpmc_clk_mux0 // E2_Heat P8.19 EHRPWM2A U10 gpmc_ad8 @@ -443,9 +443,9 @@ TASKTABLEEND: // Z_Step P8.24 GPIO1_1 V7 gpmc_ad1 // P8.25 GPIO1_0 U7 gpmc_ad0 // Z_Stop_1 P8.26 GPIO1_29 V6 gpmc_csn0 -// Z_Step P8.27 GPIO2_22 U5 lcd_vsync 5 pru1.r30.8 +// Z_Step P8.27 GPIO2_22 U5 lcd_vsync 5 pru1.r30.8 // Z_Ena P8.28 GPIO2_24 V5 lcd_pclk 5 pru1.r30.10 -// Z_Dir P8.29 GPIO2_23 R5 lcd_hsync 5 pru1.r30.9 +// Z_Dir P8.29 GPIO2_23 R5 lcd_hsync 5 pru1.r30.9 // E_Step P8.30 GPIO2_25 R6 lcd_ac_bias_en 5 pru1.r30.11 // P8.31 UART5_CTSN V4 lcd_data14 // P8.32 UART5_RTSN T5 lcd_data15 @@ -455,15 +455,15 @@ TASKTABLEEND: // J4 P8.36 UART3_CTSN U3 lcd_data10 // P8.37 UART5_TXD U1 lcd_data8 // P8.38 UART5_RXD U2 lcd_data9 -// Y_Dir P8.39 GPIO2_12 T3 lcd_data6 5 pru1.r30.6 -// Y_Ena P8.40 GPIO2_13 T4 lcd_data7 5 pru1.r30.7 -// X_Ena P8.41 GPIO2_10 T1 lcd_data4 5 pru1.r30.4 -// Y_Step P8.42 GPIO2_11 T2 lcd_data5 5 pru1.r30.5 -// X_Step P8.43 GPIO2_8 R3 lcd_data2 5 pru1.r30.2 -// X_Dir P8.44 GPIO2_9 R4 lcd_data3 5 pru1.r30.3 -// J3 P8.45 GPIO2_6 R1 lcd_data0 5 pru1.r30.0 -// J2 P8.46 GPIO2_7 R2 lcd_data1 5 pru1.r30.1 -// +// Y_Dir P8.39 GPIO2_12 T3 lcd_data6 5 pru1.r30.6 +// Y_Ena P8.40 GPIO2_13 T4 lcd_data7 5 pru1.r30.7 +// X_Ena P8.41 GPIO2_10 T1 lcd_data4 5 pru1.r30.4 +// Y_Step P8.42 GPIO2_11 T2 lcd_data5 5 pru1.r30.5 +// X_Step P8.43 GPIO2_8 R3 lcd_data2 5 pru1.r30.2 +// X_Dir P8.44 GPIO2_9 R4 lcd_data3 5 pru1.r30.3 +// J3 P8.45 GPIO2_6 R1 lcd_data0 5 pru1.r30.0 +// J2 P8.46 GPIO2_7 R2 lcd_data1 5 pru1.r30.1 +// // P9.1 GND // P9.2 GND // P9.3 VDD_3V3EXP @@ -508,9 +508,9 @@ TASKTABLEEND: // bbb* GPIO3_20 D13 mcasp0_axr1 // P9.42 GPIO0_7 C18 eCAP0_in_PWM0_out // bbb* GPIO3_18 B12 Mcasp0_aclkrp -// P9.43 GND -// P9.44 GND +// P9.43 GND +// P9.44 GND // P9.45 GND -// P9.46 GND +// P9.46 GND // // bbb* = Only present on BeagleBone Black diff --git a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_generic_bbai.p b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_generic_bbai.p index f21b3c4208..70a0727228 100644 --- a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_generic_bbai.p +++ b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_generic_bbai.p @@ -47,4 +47,3 @@ #define BBAI T #include "pru_generic.p" - diff --git a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_generic_bbai_direct_io_only.p b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_generic_bbai_direct_io_only.p index e24e926636..7d06ceef85 100644 --- a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_generic_bbai_direct_io_only.p +++ b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_generic_bbai_direct_io_only.p @@ -48,4 +48,3 @@ #define DIRECT_IO_ONLY T #include "pru_generic.p" - diff --git a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_generic_direct_io_only.p b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_generic_direct_io_only.p index f0c382f9d9..6149d6b8f1 100644 --- a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_generic_direct_io_only.p +++ b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_generic_direct_io_only.p @@ -47,4 +47,3 @@ #define DIRECT_IO_ONLY T #include "pru_generic.p" - diff --git a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_init_ecap.p b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_init_ecap.p index fe38bb5528..03d76dd634 100644 --- a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_init_ecap.p +++ b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_init_ecap.p @@ -54,7 +54,7 @@ MODE_INIT_ECAP: SBCO r2, CONST_ECAP, 0x10, 4 // set ecap period (shadow) LDI r0, 0x40 SBCO r0, CONST_ECAP, 0x2C, 2 // set trigger when count = period mode - LDI r0, ((1 << 9) | (1 << 4)) + LDI r0, ((1 << 9) | (1 << 4)) SBCO r0, CONST_ECAP, 0x2A, 2 // turn on APWM mode (reset count after period), free counting mode JMP NEXT_TASK diff --git a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_pwmread.p b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_pwmread.p index f3b052ca6c..21e81d1ad0 100644 --- a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_pwmread.p +++ b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_pwmread.p @@ -89,7 +89,7 @@ ZERO_HI: MOV State.CurTime, State.MaxTime PWM_READ_DONE: - + SBBO State, GTask.addr, SIZE(task_header), SIZE(State) JMP NEXT_TASK .leave PWM_READ_SCOPE diff --git a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_stepdir.p b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_stepdir.p index 175c48877f..a3912828af 100644 --- a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_stepdir.p +++ b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_stepdir.p @@ -184,4 +184,3 @@ STEP_DONE: JMP NEXT_TASK .leave STEP_DIR_SCOPE - diff --git a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_wait.p b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_wait.p index 87e6c116aa..21e52d4b73 100644 --- a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_wait.p +++ b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_wait.p @@ -57,7 +57,7 @@ MODE_WAIT: .u32 GPIO1_Clr_Addr .u32 GPIO2_Clr_Addr .u32 GPIO3_Clr_Addr -#ifdef DECAMUX +#ifdef DECAMUX // GPIO0 values align to b0, GPIO1 to b1 ! .u16 PEPPER1_GPIO0 .u16 PEPPER1_GPIO1 @@ -101,7 +101,7 @@ MODE_WAIT: XOR r1.b3, r0, r0 // clear leading byte for SBBO AND r3, State.PEPPER2_GPIO1, State.GPIO1_Mask // determine bits to be set - XOR r2, r3, State.GPIO1_Mask // determine bits to be cleared + XOR r2, r3, State.GPIO1_Mask // determine bits to be cleared SBBO r1.b3, State.GPIO1_CLR_ADDR, 0, 8 // Write both CLR & SET registers // Negate DECAMUX clock (GPIO1.28) after having set PEPPER #2 data. @@ -132,15 +132,15 @@ MODE_WAIT: XOR r2, State_PEPPER1.GPIO01, State_GPIO01.Masks // find bits to clear OR GState.GPIO0_CLR.w0, GState.GPIO0_CLR.w0, r2.w0 // merge bits to be cleared OR GState.GPIO1_CLR.w1, GState.GPIO1_CLR.w1, r2.w2 // - + XOUT 10, State_PEPPER1.GPIO01, SIZE( State_PEPPER1) // update GPIO0 & GPIO1 state on scratchpad #endif - + // Debugging: // Task_DataY indicates we had a real-time error, or the timer tick // occurred before we began waiting for it! - + #ifdef BBAI LBCO r2, CONST_IEP, 0x74, 4 // Load CMP_STATUS register #else @@ -179,14 +179,14 @@ WAITLOOP: // ...write out the pre-computed output bits: MOV r30, GState.PRU_Out -#ifdef DECAMUX +#ifdef DECAMUX SBBO GState.GPIO0_CLR, State.GPIO0_CLR_ADDR, 0, 8 // Writes both CLR and SET registers SBBO GState.GPIO1_CLR, State.GPIO1_CLR_ADDR, 0, 8 // Writes both CLR and SET registers // SBBO GState.GPIO2_CLR, State.GPIO2_CLR_ADDR, 0, 8 // Writes both CLR and SET registers // SBBO GState.GPIO3_CLR, State.GPIO3_CLR_ADDR, 0, 8 // Writes both CLR and SET registers - + // Assert DECAMUX clock (GPIO1.28) after having set PEPPER #1 data // This generates a rising edge on the DM_CLK signal that in its // turn creates the enable for the latch on the DECAMUX that stores diff --git a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_wait_ecap.p b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_wait_ecap.p index 26b844e17b..3e14c11bcf 100644 --- a/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_wait_ecap.p +++ b/src/modules/managed/drivers/hal_pru_generic/firmware/src/pru_wait_ecap.p @@ -59,7 +59,7 @@ MODE_WAIT_ECAP: .u32 GPIO1_Clr_Addr .u32 GPIO2_Clr_Addr .u32 GPIO3_Clr_Addr -#ifdef DECAMUX +#ifdef DECAMUX // GPIO0 values align to b0, GPIO1 to b1 ! .u16 PEPPER1_GPIO0 .u16 PEPPER1_GPIO1 @@ -103,7 +103,7 @@ MODE_WAIT_ECAP: XOR r1.b3, r0, r0 // clear leading byte for SBBO AND r3, State.PEPPER2_GPIO1, State.GPIO1_Mask // determine bits to be set - XOR r2, r3, State.GPIO1_Mask // determine bits to be cleared + XOR r2, r3, State.GPIO1_Mask // determine bits to be cleared SBBO r1.b3, State.GPIO1_CLR_ADDR, 0, 8 // Write both CLR & SET registers // Negate DECAMUX clock (GPIO1.28) after having set PEPPER #2 data. @@ -134,15 +134,15 @@ MODE_WAIT_ECAP: XOR r2, State_PEPPER1.GPIO01, State_GPIO01.Masks // find bits to clear OR GState.GPIO0_CLR.w0, GState.GPIO0_CLR.w0, r2.w0 // merge bits to be cleared OR GState.GPIO1_CLR.w1, GState.GPIO1_CLR.w1, r2.w2 // - + XOUT 10, State_PEPPER1.GPIO01, SIZE( State_PEPPER1) // update GPIO0 & GPIO1 state on scratchpad #endif - + // Debugging: // Task_DataY indicates we had a real-time error, or the timer tick // occurred before we began waiting for it! - + LBCO r2, CONST_ECAP, 0x2E, 2 // Load CMP_STATUS register QBBC BUSY_CHECK_ECAP, r2, 6 // Check to see if timer has expired already SET GTask.dataY,7 // Set MSB if error @@ -171,14 +171,14 @@ WAITLOOP_ECAP: // ...write out the pre-computed output bits: MOV r30, GState.PRU_Out -#ifdef DECAMUX +#ifdef DECAMUX SBBO GState.GPIO0_CLR, State.GPIO0_CLR_ADDR, 0, 8 // Writes both CLR and SET registers SBBO GState.GPIO1_CLR, State.GPIO1_CLR_ADDR, 0, 8 // Writes both CLR and SET registers // SBBO GState.GPIO2_CLR, State.GPIO2_CLR_ADDR, 0, 8 // Writes both CLR and SET registers // SBBO GState.GPIO3_CLR, State.GPIO3_CLR_ADDR, 0, 8 // Writes both CLR and SET registers - + // Assert DECAMUX clock (GPIO1.28) after having set PEPPER #1 data // This generates a rising edge on the DM_CLK signal that in its // turn creates the enable for the latch on the DECAMUX that stores diff --git a/src/modules/managed/drivers/hal_pru_generic/include/hal_pru_generic/pru_tasks.h b/src/modules/managed/drivers/hal_pru_generic/include/hal_pru_generic/pru_tasks.h index 2f40551f4e..3d62b6ccf8 100644 --- a/src/modules/managed/drivers/hal_pru_generic/include/hal_pru_generic/pru_tasks.h +++ b/src/modules/managed/drivers/hal_pru_generic/include/hal_pru_generic/pru_tasks.h @@ -53,7 +53,7 @@ // C style typedefs to exist in the same file, since it is critical that // the data structures for both sides match exactly. // -// The _hal_pru_generic_H_ define (from hal_pru_generic.h) is used to +// The _hal_pru_generic_H_ define (from hal_pru_generic.h) is used to // deteremine if we are assembling pru code or compiling C code. // @@ -64,14 +64,14 @@ #ifndef _hal_pru_generic_H_ // pru_addr_t - + // pru_task_mode_t #else typedef u32 pru_addr_t; // Insure these values match the JUMPTABLE in the pru assembly code! - typedef enum { + typedef enum { eMODE_INVALID = -1, eMODE_NONE = 0, eMODE_WAIT = 1, diff --git a/src/modules/managed/drivers/hal_pru_generic/instructions.txt b/src/modules/managed/drivers/hal_pru_generic/instructions.txt index 058b45d3b5..f977d9fafe 100644 --- a/src/modules/managed/drivers/hal_pru_generic/instructions.txt +++ b/src/modules/managed/drivers/hal_pru_generic/instructions.txt @@ -143,4 +143,4 @@ Format: ccccxxxt yyyyyyyy xxxbbbbb xaaaaaaa x: Length of copied data - 1 (IMM3 - 1). x = 124,125,126,127 means b0,b1,b2,b3 y: R2, if t = 0. IMM2, if t = 1. b: C1 (constant table index) - a: Byte address of R0 in register file (eg. r1.b1 would be 5) \ No newline at end of file + a: Byte address of R0 in register file (eg. r1.b1 would be 5) diff --git a/src/modules/managed/drivers/hal_pru_generic/src/beaglebone_pinmap.h b/src/modules/managed/drivers/hal_pru_generic/src/beaglebone_pinmap.h index db0c2904bc..bf137decea 100644 --- a/src/modules/managed/drivers/hal_pru_generic/src/beaglebone_pinmap.h +++ b/src/modules/managed/drivers/hal_pru_generic/src/beaglebone_pinmap.h @@ -32,8 +32,8 @@ typedef struct { const bone_pinmap p8bbb_pins[47] = { // GPIO PRU-In PRU-Out Pin Pad Name { -1, -1, -1, -1, -1 }, // 0 - { -1, -1, -1, -1, -1 }, // 1 GND - { -1, -1, -1, -1, -1 }, // 2 GND + { -1, -1, -1, -1, -1 }, // 1 GND + { -1, -1, -1, -1, -1 }, // 2 GND { 70, -1, -1, -1, -1 }, // 3 R9 GPMC_AD6 { 71, -1, -1, -1, -1 }, // 4 T9 GPMC_AD7 { 66, -1, -1, -1, -1 }, // 5 R8 GPMC_AD2 @@ -83,15 +83,15 @@ const bone_pinmap p8bbb_pins[47] = { const bone_pinmap p9bbb_pins[49] = { // GPIO PRU-In PRU-Out Pin Pad Name { -1, -1, -1, -1, -1 }, // 0 - { -1, -1, -1, -1, -1 }, // 1 GND - { -1, -1, -1, -1, -1 }, // 2 GND - { -1, -1, -1, -1, -1 }, // 3 3.3V - { -1, -1, -1, -1, -1 }, // 4 3.3V - { -1, -1, -1, -1, -1 }, // 5 VDD_5V - { -1, -1, -1, -1, -1 }, // 6 VDD_5V - { -1, -1, -1, -1, -1 }, // 7 SYS_5V - { -1, -1, -1, -1, -1 }, // 8 SYS_5V - { -1, -1, -1, -1, -1 }, // 9 PWR_BUT + { -1, -1, -1, -1, -1 }, // 1 GND + { -1, -1, -1, -1, -1 }, // 2 GND + { -1, -1, -1, -1, -1 }, // 3 3.3V + { -1, -1, -1, -1, -1 }, // 4 3.3V + { -1, -1, -1, -1, -1 }, // 5 VDD_5V + { -1, -1, -1, -1, -1 }, // 6 VDD_5V + { -1, -1, -1, -1, -1 }, // 7 SYS_5V + { -1, -1, -1, -1, -1 }, // 8 SYS_5V + { -1, -1, -1, -1, -1 }, // 9 PWR_BUT { -1, -1, -1, -1, -1 }, // 10 A10 WARMRSTn { 62, -1, -1, -1, -1 }, // 11 T17 GPMC_WAIT0 { 92, -1, -1, -1, -1 }, // 12 U18 GPMC_BEn1 @@ -114,9 +114,9 @@ const bone_pinmap p9bbb_pins[49] = { { 143, 161, 0, 161, 0 }, // 29 B13 MCASP0_FSX { 144, 162, 0, 162, 0 }, // 30 D12 MCASP0_AXR0 { 142, 160, 0, 160, 0 }, // 31 A13 MCASP0_ACLKX - { -1, -1, -1, -1, -1 }, // 32 VADC + { -1, -1, -1, -1, -1 }, // 32 VADC { -1, -1, -1, -1, -1 }, // 33 C8 AIN4 - { -1, -1, -1, -1, -1 }, // 34 AGND + { -1, -1, -1, -1, -1 }, // 34 AGND { -1, -1, -1, -1, -1 }, // 35 A8 AIN6 { -1, -1, -1, -1, -1 }, // 36 B8 AIN5 { -1, -1, -1, -1, -1 }, // 37 B7 AIN2 @@ -125,16 +125,16 @@ const bone_pinmap p9bbb_pins[49] = { { -1, -1, -1, -1, -1 }, // 40 C7 AIN1 { 52, 176, 0, -1, -1 }, // 41 D14 XDMA_EVENT_INTR1 { 39, -1, -1, -1, -1 }, // 42 C18 ECAP0_IN_PWM0_OUT - { -1, -1, -1, -1, -1 }, // 43 GND - { -1, -1, -1, -1, -1 }, // 44 GND - { -1, -1, -1, -1, -1 }, // 45 GND - { -1, -1, -1, -1, -1 }, // 46 GND + { -1, -1, -1, -1, -1 }, // 43 GND + { -1, -1, -1, -1, -1 }, // 44 GND + { -1, -1, -1, -1, -1 }, // 45 GND + { -1, -1, -1, -1, -1 }, // 46 GND { 148, 166, 0, 166, 0 }, // 41.1 D13 MCASP0_AXR1 { 146, 164, 0, 164, 0 } // 42.1 B12 MCASP0_ACLKR }; -// The 4 GPIO chips that we need for the Pocket NC +// The 4 GPIO chips that we need for the Pocket NC // GPIO chip 2 for p9.15, p8.11, and p8.12 // GPIO chip 3 for p8.15, p8.16, p9.27, p9.28 // GPIO chip 4 for p9.29, p9.30 @@ -149,104 +149,104 @@ const bone_pinmap p9bbb_pins[49] = { /* const bone_pinmap p8ai_pins[47] = { // GPIO PRU-In PRU-Out Pin - { -1, -1, -1, -1, -1 }, // 0 - { -1, -1, -1, -1, -1 }, // 1 - { -1, -1, -1, -1, -1 }, // 2 - { -1, 170, 2, 170, 2 }, // 3 - { -1, 171, 2, 171, 2 }, // 4 - { 129, 166, 2, 166, 2 }, // 5 - { 130, 167, 2, 167, 2 }, // 6 - { -1, 176, 3, 176, 3 }, // 7 - { -1, 180, 2, 180, 2 }, // 8 - { -1, 166, 3, 166, 3 }, // 9 - { -1, 175, 3, 175, 3 }, // 10 - { 43, 164, 0, 164, 0 }, // 11 - { 42, 163, 0, 163, 0 }, // 12 - { 75, 167, 1, 167, 1 }, // 13 - { 77, 169, 1, 169, 1 }, // 14 - { 67, 176, 1, 176, 1 }, // 15 - { 93, 178, 1, 178, 1 }, // 16 - { -1, 175, 2, 175, 2 }, // 17 - { 73, 165, 1, 165, 1 }, // 18 - { 74, 166, 1, 166, 1 }, // 19 - { -1, 163, 2, 163, 2 }, // 20 - { -1, 162, 2, 162, 2 }, // 21 - { -1, 169, 2, 169, 2 }, // 22 - { -1, 168, 2, 168, 2 }, // 23 - { 128, 165, 2, 165, 2 }, // 24 - { -1, 164, 2, 164, 2 }, // 25 - { 92, 167, 1, 167, 1 }, // 26 - { -1, 177, 1, 177, 1 }, // 27 - { -1, 177, 2, 177, 2 }, // 28 - { -1, 178, 2, 178, 2 }, // 29 + { -1, -1, -1, -1, -1 }, // 0 + { -1, -1, -1, -1, -1 }, // 1 + { -1, -1, -1, -1, -1 }, // 2 + { -1, 170, 2, 170, 2 }, // 3 + { -1, 171, 2, 171, 2 }, // 4 + { 129, 166, 2, 166, 2 }, // 5 + { 130, 167, 2, 167, 2 }, // 6 + { -1, 176, 3, 176, 3 }, // 7 + { -1, 180, 2, 180, 2 }, // 8 + { -1, 166, 3, 166, 3 }, // 9 + { -1, 175, 3, 175, 3 }, // 10 + { 43, 164, 0, 164, 0 }, // 11 + { 42, 163, 0, 163, 0 }, // 12 + { 75, 167, 1, 167, 1 }, // 13 + { 77, 169, 1, 169, 1 }, // 14 + { 67, 176, 1, 176, 1 }, // 15 + { 93, 178, 1, 178, 1 }, // 16 + { -1, 175, 2, 175, 2 }, // 17 + { 73, 165, 1, 165, 1 }, // 18 + { 74, 166, 1, 166, 1 }, // 19 + { -1, 163, 2, 163, 2 }, // 20 + { -1, 162, 2, 162, 2 }, // 21 + { -1, 169, 2, 169, 2 }, // 22 + { -1, 168, 2, 168, 2 }, // 23 + { 128, 165, 2, 165, 2 }, // 24 + { -1, 164, 2, 164, 2 }, // 25 + { 92, 167, 1, 167, 1 }, // 26 + { -1, 177, 1, 177, 1 }, // 27 + { -1, 177, 2, 177, 2 }, // 28 + { -1, 178, 2, 178, 2 }, // 29 { 84, 179, 2, 179, 2 }, // 30 - { -1, 161, 2, 161, 2 }, // 31 - { -1, 172, 2, 172, 2 }, // 32 - { -1, 170, 2, 170, 2 }, // 33 - { -1, 168, 2, 168, 2 }, // 34 - { -1, 169, 2, 169, 2 }, // 35 - { -1, 167, 2, 167, 2 }, // 36 - { -1, 165, 2, 165, 2 }, // 37 - { -1, 166, 2, 166, 2 }, // 38 - { -1, 163, 2, 163, 2 }, // 39 - { -1, 164, 2, 164, 2 }, // 40 - { -1, 161, 2, 161, 2 }, // 41 - { -1, 162, 2, 162, 2 }, // 42 - { -1, 180, 3, 180, 3 }, // 43 - { -1, 160, 2, 160, 2 }, // 44 - { -1, 178, 3, 178, 3 }, // 45 - { -1, 179, 3, 179, 3 } // 46 + { -1, 161, 2, 161, 2 }, // 31 + { -1, 172, 2, 172, 2 }, // 32 + { -1, 170, 2, 170, 2 }, // 33 + { -1, 168, 2, 168, 2 }, // 34 + { -1, 169, 2, 169, 2 }, // 35 + { -1, 167, 2, 167, 2 }, // 36 + { -1, 165, 2, 165, 2 }, // 37 + { -1, 166, 2, 166, 2 }, // 38 + { -1, 163, 2, 163, 2 }, // 39 + { -1, 164, 2, 164, 2 }, // 40 + { -1, 161, 2, 161, 2 }, // 41 + { -1, 162, 2, 162, 2 }, // 42 + { -1, 180, 3, 180, 3 }, // 43 + { -1, 160, 2, 160, 2 }, // 44 + { -1, 178, 3, 178, 3 }, // 45 + { -1, 179, 3, 179, 3 } // 46 }; const bone_pinmap p9ai_pins[49] = { // GPIO PRU-In PRU-Out Pin Pad Name { -1, -1, -1, -1, -1 }, // 0 - { -1, -1, -1, -1, -1 }, // 1 GND - { -1, -1, -1, -1, -1 }, // 2 GND - { -1, -1, -1, -1, -1 }, // 3 3.3V - { -1, -1, -1, -1, -1 }, // 4 3.3V - { -1, -1, -1, -1, -1 }, // 5 VDD_5V - { -1, -1, -1, -1, -1 }, // 6 VDD_5V - { -1, -1, -1, -1, -1 }, // 7 SYS_5V - { -1, -1, -1, -1, -1 }, // 8 SYS_5V - { -1, -1, -1, -1, -1 }, // 9 PWR_BUT - { -1, -1, -1, -1, -1 }, // 10 - { -1, 174, 2, 174, 2 }, // 11 - { 96, -1, -1, -1, -1 }, // 12 - { -1, 175, 2, 175, 2 }, // 13 - { 89, 174, 1, 174, 1 }, // 14 - { 44, 165, 0, 165, 0 }, // 15 - { 90, 175, 1, 175, 1 }, // 16 - { 145, 169, 3, 169, 3 }, // 17 - { 144, 168, 3, 168, 3 }, // 18 - { 131, 162, 1, 162, 1 }, // 19 - { 132, 161, 1, 161, 1 }, // 20 - { 35, -1, -1, -1, -1 }, // 21 - { -1, -1, -1, -1, -1 }, // 22 - { 139, -1, -1, -1, -1 }, // 23 - { -1, -1, -1, -1, -1 }, // 24 - { -1, 165, 3, 165, 3 }, // 25 - { -1, 177, 1, 177, 1 }, // 26 - { 79, 171, 1, 171, 1 }, // 27 - { 81, 173, 3, 173, 3 }, // 28 - { 107, 171, 3, 171, 3 }, // 29 - { 108, 172, 3, 172, 3 }, // 30 - { 106, 170, 3, 170, 3 }, // 31 - { -1, -1, -1, -1, -1 }, // 32 - { -1, -1, -1, -1, -1 }, // 33 - { -1, -1, -1, -1, -1 }, // 34 - { -1, -1, -1, -1, -1 }, // 35 - { -1, -1, -1, -1, -1 }, // 36 - { -1, -1, -1, -1, -1 }, // 37 - { -1, -1, -1, -1, -1 }, // 38 - { -1, -1, -1, -1, -1 }, // 39 - { -1, -1, -1, -1, -1 }, // 40 - { -1, 163, 1, 163, 1 }, // 41 - { 82, 174, 3, 174, 3 }, // 42 - { -1, -1, -1, -1, -1 }, // 43 - { -1, -1, -1, -1, -1 }, // 44 - { -1, -1, -1, -1, -1 }, // 45 - { -1, -1, -1, -1, -1 }, // 46 + { -1, -1, -1, -1, -1 }, // 1 GND + { -1, -1, -1, -1, -1 }, // 2 GND + { -1, -1, -1, -1, -1 }, // 3 3.3V + { -1, -1, -1, -1, -1 }, // 4 3.3V + { -1, -1, -1, -1, -1 }, // 5 VDD_5V + { -1, -1, -1, -1, -1 }, // 6 VDD_5V + { -1, -1, -1, -1, -1 }, // 7 SYS_5V + { -1, -1, -1, -1, -1 }, // 8 SYS_5V + { -1, -1, -1, -1, -1 }, // 9 PWR_BUT + { -1, -1, -1, -1, -1 }, // 10 + { -1, 174, 2, 174, 2 }, // 11 + { 96, -1, -1, -1, -1 }, // 12 + { -1, 175, 2, 175, 2 }, // 13 + { 89, 174, 1, 174, 1 }, // 14 + { 44, 165, 0, 165, 0 }, // 15 + { 90, 175, 1, 175, 1 }, // 16 + { 145, 169, 3, 169, 3 }, // 17 + { 144, 168, 3, 168, 3 }, // 18 + { 131, 162, 1, 162, 1 }, // 19 + { 132, 161, 1, 161, 1 }, // 20 + { 35, -1, -1, -1, -1 }, // 21 + { -1, -1, -1, -1, -1 }, // 22 + { 139, -1, -1, -1, -1 }, // 23 + { -1, -1, -1, -1, -1 }, // 24 + { -1, 165, 3, 165, 3 }, // 25 + { -1, 177, 1, 177, 1 }, // 26 + { 79, 171, 1, 171, 1 }, // 27 + { 81, 173, 3, 173, 3 }, // 28 + { 107, 171, 3, 171, 3 }, // 29 + { 108, 172, 3, 172, 3 }, // 30 + { 106, 170, 3, 170, 3 }, // 31 + { -1, -1, -1, -1, -1 }, // 32 + { -1, -1, -1, -1, -1 }, // 33 + { -1, -1, -1, -1, -1 }, // 34 + { -1, -1, -1, -1, -1 }, // 35 + { -1, -1, -1, -1, -1 }, // 36 + { -1, -1, -1, -1, -1 }, // 37 + { -1, -1, -1, -1, -1 }, // 38 + { -1, -1, -1, -1, -1 }, // 39 + { -1, -1, -1, -1, -1 }, // 40 + { -1, 163, 1, 163, 1 }, // 41 + { 82, 174, 3, 174, 3 }, // 42 + { -1, -1, -1, -1, -1 }, // 43 + { -1, -1, -1, -1, -1 }, // 44 + { -1, -1, -1, -1, -1 }, // 45 + { -1, -1, -1, -1, -1 }, // 46 { -1, -1, -1, -1, -1 }, // 41.1 ??? { -1, -1, -1, -1, -1 } // 42.1 ??? }; @@ -265,104 +265,104 @@ const bone_pinmap p9ai_pins[49] = { // 128 - 159 = GPIO chip 7 const bone_pinmap p8ai_pins[47] = { // GPIO PRU-In PRU-Out Pin - { -1, -1, -1, -1, -1 }, // 0 - { -1, -1, -1, -1, -1 }, // 1 - { -1, -1, -1, -1, -1 }, // 2 - { -1, 170, 2, 170, 2 }, // 3 - { -1, 171, 2, 171, 2 }, // 4 - { 97, 166, 2, 166, 2 }, // 5 - { 98, 167, 2, 167, 2 }, // 6 - { 69, 176, 3, 176, 3 }, // 7 - { 70, 180, 2, 180, 2 }, // 8 - { 82, 166, 3, 166, 3 }, // 9 - { 68, 175, 3, 175, 3 }, // 10 - { -1, 164, 0, 164, 0 }, // 11 - { -1, 163, 0, 163, 0 }, // 12 - { 43, 167, 1, 167, 1 }, // 13 - { 45, 169, 1, 169, 1 }, // 14 - { 35, 176, 1, 176, 1 }, // 15 - { 61, 178, 1, 178, 1 }, // 16 - { 146, 175, 2, 175, 2 }, // 17 - { 41, 165, 1, 165, 1 }, // 18 - { 42, 166, 1, 166, 1 }, // 19 - { 94, 163, 2, 163, 2 }, // 20 - { 93, 162, 2, 162, 2 }, // 21 - { -1, 169, 2, 169, 2 }, // 22 - { -1, 168, 2, 168, 2 }, // 23 - { 96, 165, 2, 165, 2 }, // 24 - { 95, 164, 2, 164, 2 }, // 25 - { 60, 167, 1, 167, 1 }, // 26 - { 147, 177, 1, 177, 1 }, // 27 - { 148, 177, 2, 177, 2 }, // 28 - { 149, 178, 2, 178, 2 }, // 29 + { -1, -1, -1, -1, -1 }, // 0 + { -1, -1, -1, -1, -1 }, // 1 + { -1, -1, -1, -1, -1 }, // 2 + { -1, 170, 2, 170, 2 }, // 3 + { -1, 171, 2, 171, 2 }, // 4 + { 97, 166, 2, 166, 2 }, // 5 + { 98, 167, 2, 167, 2 }, // 6 + { 69, 176, 3, 176, 3 }, // 7 + { 70, 180, 2, 180, 2 }, // 8 + { 82, 166, 3, 166, 3 }, // 9 + { 68, 175, 3, 175, 3 }, // 10 + { -1, 164, 0, 164, 0 }, // 11 + { -1, 163, 0, 163, 0 }, // 12 + { 43, 167, 1, 167, 1 }, // 13 + { 45, 169, 1, 169, 1 }, // 14 + { 35, 176, 1, 176, 1 }, // 15 + { 61, 178, 1, 178, 1 }, // 16 + { 146, 175, 2, 175, 2 }, // 17 + { 41, 165, 1, 165, 1 }, // 18 + { 42, 166, 1, 166, 1 }, // 19 + { 94, 163, 2, 163, 2 }, // 20 + { 93, 162, 2, 162, 2 }, // 21 + { -1, 169, 2, 169, 2 }, // 22 + { -1, 168, 2, 168, 2 }, // 23 + { 96, 165, 2, 165, 2 }, // 24 + { 95, 164, 2, 164, 2 }, // 25 + { 60, 167, 1, 167, 1 }, // 26 + { 147, 177, 1, 177, 1 }, // 27 + { 148, 177, 2, 177, 2 }, // 28 + { 149, 178, 2, 178, 2 }, // 29 { 52, 179, 2, 179, 2 }, // 30 - { 142, 161, 2, 161, 2 }, // 31 - { 143, 172, 2, 172, 2 }, // 32 - { 141, 170, 2, 170, 2 }, // 33 - { 139, 168, 2, 168, 2 }, // 34 - { 140, 169, 2, 169, 2 }, // 35 - { 138, 167, 2, 167, 2 }, // 36 - { 136, 165, 2, 165, 2 }, // 37 - { 137, 166, 2, 166, 2 }, // 38 - { 134, 163, 2, 163, 2 }, // 39 - { 135, 164, 2, 164, 2 }, // 40 - { 132, 161, 2, 161, 2 }, // 41 - { 133, 162, 2, 162, 2 }, // 42 - { 130, 180, 3, 180, 3 }, // 43 - { 131, 160, 2, 160, 2 }, // 44 - { 128, 178, 3, 178, 3 }, // 45 - { 129, 179, 3, 179, 3 } // 46 + { 142, 161, 2, 161, 2 }, // 31 + { 143, 172, 2, 172, 2 }, // 32 + { 141, 170, 2, 170, 2 }, // 33 + { 139, 168, 2, 168, 2 }, // 34 + { 140, 169, 2, 169, 2 }, // 35 + { 138, 167, 2, 167, 2 }, // 36 + { 136, 165, 2, 165, 2 }, // 37 + { 137, 166, 2, 166, 2 }, // 38 + { 134, 163, 2, 163, 2 }, // 39 + { 135, 164, 2, 164, 2 }, // 40 + { 132, 161, 2, 161, 2 }, // 41 + { 133, 162, 2, 162, 2 }, // 42 + { 130, 180, 3, 180, 3 }, // 43 + { 131, 160, 2, 160, 2 }, // 44 + { 128, 178, 3, 178, 3 }, // 45 + { 129, 179, 3, 179, 3 } // 46 }; const bone_pinmap p9ai_pins[49] = { // GPIO PRU-In PRU-Out Pin Pad Name { -1, -1, -1, -1, -1 }, // 0 - { -1, -1, -1, -1, -1 }, // 1 GND - { -1, -1, -1, -1, -1 }, // 2 GND - { -1, -1, -1, -1, -1 }, // 3 3.3V - { -1, -1, -1, -1, -1 }, // 4 3.3V - { -1, -1, -1, -1, -1 }, // 5 VDD_5V - { -1, -1, -1, -1, -1 }, // 6 VDD_5V - { -1, -1, -1, -1, -1 }, // 7 SYS_5V - { -1, -1, -1, -1, -1 }, // 8 SYS_5V - { -1, -1, -1, -1, -1 }, // 9 PWR_BUT - { -1, -1, -1, -1, -1 }, // 10 - { -1, 174, 2, 174, 2 }, // 11 - { -1, -1, -1, -1, -1 }, // 12 - { -1, 175, 2, 175, 2 }, // 13 - { 57, 174, 1, 174, 1 }, // 14 - { -1, 165, 0, 165, 0 }, // 15 - { 58, 175, 1, 175, 1 }, // 16 - { 113, 169, 3, 169, 3 }, // 17 - { 112, 168, 3, 168, 3 }, // 18 - { 99, 162, 1, 162, 1 }, // 19 - { 100, 161, 1, 161, 1 }, // 20 - { -1, -1, -1, -1, -1 }, // 21 - { 83, -1, -1, -1, -1 }, // 22 - { 107, -1, -1, -1, -1 }, // 23 - { 79, -1, -1, -1, -1 }, // 24 - { 81, 165, 3, 165, 3 }, // 25 - { 78, 177, 0, 177, 0 }, // 26 - { 47, 171, 1, 171, 1 }, // 27 - { 49, 173, 3, 173, 3 }, // 28 - { -1, 171, 3, 171, 3 }, // 29 - { -1, 172, 3, 172, 3 }, // 30 - { -1, 170, 3, 170, 3 }, // 31 - { -1, -1, -1, -1, -1 }, // 32 - { -1, -1, -1, -1, -1 }, // 33 - { -1, -1, -1, -1, -1 }, // 34 - { -1, -1, -1, -1, -1 }, // 35 - { -1, -1, -1, -1, -1 }, // 36 - { -1, -1, -1, -1, -1 }, // 37 - { -1, -1, -1, -1, -1 }, // 38 - { -1, -1, -1, -1, -1 }, // 39 - { -1, -1, -1, -1, -1 }, // 40 - { 84, 163, 1, 163, 1 }, // 41 - { 50, 174, 3, 174, 3 }, // 42 - { -1, -1, -1, -1, -1 }, // 43 - { -1, -1, -1, -1, -1 }, // 44 - { -1, -1, -1, -1, -1 }, // 45 - { -1, -1, -1, -1, -1 }, // 46 + { -1, -1, -1, -1, -1 }, // 1 GND + { -1, -1, -1, -1, -1 }, // 2 GND + { -1, -1, -1, -1, -1 }, // 3 3.3V + { -1, -1, -1, -1, -1 }, // 4 3.3V + { -1, -1, -1, -1, -1 }, // 5 VDD_5V + { -1, -1, -1, -1, -1 }, // 6 VDD_5V + { -1, -1, -1, -1, -1 }, // 7 SYS_5V + { -1, -1, -1, -1, -1 }, // 8 SYS_5V + { -1, -1, -1, -1, -1 }, // 9 PWR_BUT + { -1, -1, -1, -1, -1 }, // 10 + { -1, 174, 2, 174, 2 }, // 11 + { -1, -1, -1, -1, -1 }, // 12 + { -1, 175, 2, 175, 2 }, // 13 + { 57, 174, 1, 174, 1 }, // 14 + { -1, 165, 0, 165, 0 }, // 15 + { 58, 175, 1, 175, 1 }, // 16 + { 113, 169, 3, 169, 3 }, // 17 + { 112, 168, 3, 168, 3 }, // 18 + { 99, 162, 1, 162, 1 }, // 19 + { 100, 161, 1, 161, 1 }, // 20 + { -1, -1, -1, -1, -1 }, // 21 + { 83, -1, -1, -1, -1 }, // 22 + { 107, -1, -1, -1, -1 }, // 23 + { 79, -1, -1, -1, -1 }, // 24 + { 81, 165, 3, 165, 3 }, // 25 + { 78, 177, 0, 177, 0 }, // 26 + { 47, 171, 1, 171, 1 }, // 27 + { 49, 173, 3, 173, 3 }, // 28 + { -1, 171, 3, 171, 3 }, // 29 + { -1, 172, 3, 172, 3 }, // 30 + { -1, 170, 3, 170, 3 }, // 31 + { -1, -1, -1, -1, -1 }, // 32 + { -1, -1, -1, -1, -1 }, // 33 + { -1, -1, -1, -1, -1 }, // 34 + { -1, -1, -1, -1, -1 }, // 35 + { -1, -1, -1, -1, -1 }, // 36 + { -1, -1, -1, -1, -1 }, // 37 + { -1, -1, -1, -1, -1 }, // 38 + { -1, -1, -1, -1, -1 }, // 39 + { -1, -1, -1, -1, -1 }, // 40 + { 84, 163, 1, 163, 1 }, // 41 + { 50, 174, 3, 174, 3 }, // 42 + { -1, -1, -1, -1, -1 }, // 43 + { -1, -1, -1, -1, -1 }, // 44 + { -1, -1, -1, -1, -1 }, // 45 + { -1, -1, -1, -1, -1 }, // 46 { -1, -1, -1, -1, -1 }, // 41.1 ??? { -1, -1, -1, -1, -1 } // 42.1 ??? }; diff --git a/src/modules/managed/drivers/hal_pru_generic/src/hal_pru_generic.h b/src/modules/managed/drivers/hal_pru_generic/src/hal_pru_generic.h index 6aad2b4525..69a935d180 100644 --- a/src/modules/managed/drivers/hal_pru_generic/src/hal_pru_generic.h +++ b/src/modules/managed/drivers/hal_pru_generic/src/hal_pru_generic.h @@ -228,7 +228,7 @@ typedef struct { typedef struct { PRU_encoder_chan_t pru; - + struct { struct { diff --git a/src/modules/managed/drivers/hal_raspi_gpio/hal_gpio_demo.hal b/src/modules/managed/drivers/hal_raspi_gpio/hal_gpio_demo.hal index 2b516f279f..57744e7208 100644 --- a/src/modules/managed/drivers/hal_raspi_gpio/hal_gpio_demo.hal +++ b/src/modules/managed/drivers/hal_raspi_gpio/hal_gpio_demo.hal @@ -4,7 +4,7 @@ loadrt hal_gpio newthread fast 100000 newthread slow 1000000 fp -loadrt stepgen step_type=5 ctrl_type=v +loadrt stepgen step_type=5 ctrl_type=v net a stepgen.0.phase-A => hal_gpio.pin-03-out net b stepgen.0.phase-B => hal_gpio.pin-05-out @@ -20,5 +20,3 @@ addf hal_gpio.write fast setp stepgen.0.enable 1 sets speed 5000 start - - diff --git a/src/modules/managed/drivers/hal_raspi_spi/src/hal_spi.c b/src/modules/managed/drivers/hal_raspi_spi/src/hal_spi.c index 2a85994a6c..c08d58fd0f 100644 --- a/src/modules/managed/drivers/hal_raspi_spi/src/hal_spi.c +++ b/src/modules/managed/drivers/hal_raspi_spi/src/hal_spi.c @@ -90,7 +90,7 @@ static void setup_gpio(); static void restore_gpio(); static int number_of_cores(); -int rtapi_app_main(void) +int rtapi_app_main(void) { char name[HAL_NAME_LEN + 1]; int n, retval, ncores, rev; @@ -98,18 +98,18 @@ int n, retval, ncores, rev; // check what the board is // RPi v3 > have different base address ncores = number_of_cores(); - if ((rev = get_rpi_revision()) < 0) + if ((rev = get_rpi_revision()) < 0) { rtapi_print_msg(RTAPI_MSG_ERR, "unrecognized Raspberry revision, see /proc/cpuinfo\n"); return -1; } - + if (rev <= 2 || ncores <= 2) BCM2835_PERI_BASE = 0x2000000; else BCM2835_PERI_BASE = 0x3F000000; - + /* initialise driver */ comp_id = hal_init(modname); @@ -621,13 +621,13 @@ int number_of_cores() char str[256]; int procCount = 0; FILE *fp; - - if( (fp = fopen("/proc/cpuinfo", "r")) ) + + if( (fp = fopen("/proc/cpuinfo", "r")) ) { while(fgets(str, sizeof str, fp)) if( !memcmp(str, "processor", 9) ) procCount++; } - if ( !procCount ) + if ( !procCount ) { rtapi_print_msg(RTAPI_MSG_ERR,"HAL_GPIO: Unable to get proc count. Defaulting to 2"); procCount = 2; diff --git a/src/modules/managed/drivers/hal_skeleton/src/hal_skeleton.c b/src/modules/managed/drivers/hal_skeleton/src/hal_skeleton.c index 76942248be..b5dd99ed39 100644 --- a/src/modules/managed/drivers/hal_skeleton/src/hal_skeleton.c +++ b/src/modules/managed/drivers/hal_skeleton/src/hal_skeleton.c @@ -1,21 +1,21 @@ /******************************************************************** * Description: hal_skeleton.c -* This file, 'hal_skeleton.c', is a example that shows -* how drivers for HAL components will work and serve as +* This file, 'hal_skeleton.c', is a example that shows +* how drivers for HAL components will work and serve as * a skeleton for new hardware drivers. * * Author: John Kasunich * License: GPL Version 2 -* +* * Copyright (c) 2003 All rights reserved. * -* Last change: +* Last change: ********************************************************************/ /** This file, 'hal_skeleton.c', is a example that shows how drivers for HAL components will work and serve as a skeleton for new hardware drivers. - + Most of this code is taken from the hal_parport driver from John Kasunich, which is also a good starting point for new drivers. diff --git a/src/modules/managed/drivers/hal_speaker/src/hal_speaker.c b/src/modules/managed/drivers/hal_speaker/src/hal_speaker.c index a1f2808ace..8f1412042f 100644 --- a/src/modules/managed/drivers/hal_speaker/src/hal_speaker.c +++ b/src/modules/managed/drivers/hal_speaker/src/hal_speaker.c @@ -4,16 +4,16 @@ * This file, 'hal_speaker.c', drives the PC speaker based * on up to 8 bit outputs. When the new outputs differ * from the old outputs, a click is output on the speaker. -* +* * Author: John Kasunich and Jeff Epler * License: GPL Version 2 -* +* * Copyright (c) 2003, 2006 All rights reserved. * -* Last change: +* Last change: ********************************************************************/ -/* +/* Most of this code is taken from hal_skeleton by John Kasunich, which is also a good starting point for new drivers. @@ -104,7 +104,7 @@ static void write_port(void *arg, long period) int i; speaker_t *port; port = arg; - + for(i=0; i<8; i++) { if(*(port->signals[i])) v = v | (1< and for some values .velocity from encoder was NAN version from emc2.3 beta but encoder.c didn't change since then @@ -40,16 +40,16 @@ next steps: Theres also a race condition that I cant easily fix (Ive known about this for awhile but didnt think it was likely to run into) So it should probably go in the manual: - The servo thread period - jitter cannot be less than the sum of dirsetup and dirhold times + The servo thread period - jitter cannot be less than the sum of dirsetup and dirhold times for modern step drives this this would be hard to violate, for old parker drives with 300 usec times - it may be an issue + it may be an issue (with servo rate > ~1.6KHz) BBL PCW, wait a sec dog needs to be fed, nibbling on my ankles... do you mean the jitter of the servo period cannot be less than (dirsetup+dirhold)? or (ServoPeriod-jitter) cannot be less? servo-jitter - (the setpgen doesn't expect its direction (rate MSB) to change when its doing a wait-for dir hold/setup cycle + (the setpgen doesn't expect its direction (rate MSB) to change when its doing a wait-for dir hold/setup cycle so the minimum time between updates is dirsetup+dirhold ok thanks @@ -271,7 +271,7 @@ watchdog: LAVA MOKO S1 - + totally failed to read even the CPLD @@ -406,4 +406,3 @@ wishlist: abstract the encoder code into an HAL library - diff --git a/src/modules/managed/drivers/hostmot2/doc/README b/src/modules/managed/drivers/hostmot2/doc/README index d3558b9b46..930b87a6fc 100644 --- a/src/modules/managed/drivers/hostmot2/doc/README +++ b/src/modules/managed/drivers/hostmot2/doc/README @@ -11,4 +11,3 @@ Reasonable documentation of EPP parallel port programming is available in the moschip 9805 docs here: - diff --git a/src/modules/managed/drivers/hostmot2/doc/README.regmap b/src/modules/managed/drivers/hostmot2/doc/README.regmap index 585ed3a7e7..f4957525f3 100644 --- a/src/modules/managed/drivers/hostmot2/doc/README.regmap +++ b/src/modules/managed/drivers/hostmot2/doc/README.regmap @@ -2,4 +2,3 @@ The latest version of the Hostmot2 firmware register map is available here: http://git.linuxcnc.org/gitweb?p=hostmot2-firmware.git;a=blob;f=regmap - diff --git a/src/modules/managed/drivers/hostmot2/doc/encoder/index.html b/src/modules/managed/drivers/hostmot2/doc/encoder/index.html index da77e7532b..c91c9ce0f9 100644 --- a/src/modules/managed/drivers/hostmot2/doc/encoder/index.html +++ b/src/modules/managed/drivers/hostmot2/doc/encoder/index.html @@ -173,7 +173,7 @@ new datapoint comes in: Nothing to do, return.
  • - +

    If the Motion Mode is Stopped and a new datapoint comes in:

      diff --git a/src/modules/managed/drivers/hostmot2/firmware/7i43/CPLD/SOURCE/I43CPLD.UCF b/src/modules/managed/drivers/hostmot2/firmware/7i43/CPLD/SOURCE/I43CPLD.UCF index 50d4f5c652..620fcf07a5 100644 --- a/src/modules/managed/drivers/hostmot2/firmware/7i43/CPLD/SOURCE/I43CPLD.UCF +++ b/src/modules/managed/drivers/hostmot2/firmware/7i43/CPLD/SOURCE/I43CPLD.UCF @@ -1,39 +1,39 @@ # NET "fpganreconfig" LOC = "p41" ; -# NET "select" LOC = "p14" ; +# NET "select" LOC = "p14" ; #PACE: Start of Constraints generated by PACE #PACE: Start of PACE I/O Pin Assignments -NET "autofd_dstrobe" LOC = "p16" ; -NET "busd0" LOC = "p36" ; -NET "busy_wait" LOC = "p12" ; -NET "clk" LOC = "p1" ; -NET "cmcs" LOC = "p30" ; -NET "cmdi" LOC = "p31" ; -NET "cmdo" LOC = "p32" ; -NET "fault" LOC = "p18" ; +NET "autofd_dstrobe" LOC = "p16" ; +NET "busd0" LOC = "p36" ; +NET "busy_wait" LOC = "p12" ; +NET "clk" LOC = "p1" ; +NET "cmcs" LOC = "p30" ; +NET "cmdi" LOC = "p31" ; +NET "cmdo" LOC = "p32" ; +NET "fault" LOC = "p18" ; NET "fpga_epp_astrobe" LOC = "p21" ; NET "fpga_epp_dstrobe" LOC = "p22" ; NET "fpga_epp_read" LOC = "p3" ; NET "fpga_epp_wait" LOC = "p43" ; -NET "fpgacclk" LOC = "p33" ; -NET "fpgaconfigd0" LOC = "p37" ; -NET "fpgadone" LOC = "p23" ; +NET "fpgacclk" LOC = "p33" ; +NET "fpgaconfigd0" LOC = "p37" ; +NET "fpgadone" LOC = "p23" ; NET "fpgancs_paramode" LOC = "p2" ; -NET "fpganinit" LOC = "p28" ; -NET "fpganprogram" LOC = "p27" ; -NET "fpganrdwr" LOC = "p44" ; -NET "fpganreconfig" LOC = "p41" ; -NET "fpgaserial" LOC = "p29" ; -NET "ninit" LOC = "p19" ; -NET "nreset" LOC = "p42" ; -NET "nstrobe_nwrite" LOC = "p7" ; -NET "opt<0>" LOC = "p5" ; -NET "opt<1>" LOC = "p6" ; -NET "perror" LOC = "p13" ; -NET "selectin_astrobe" LOC = "p20" ; -NET "usbnrd" LOC = "p40" ; -NET "usbnrxf" LOC = "p34" ; -NET "usbwr" LOC = "p39" ; +NET "fpganinit" LOC = "p28" ; +NET "fpganprogram" LOC = "p27" ; +NET "fpganrdwr" LOC = "p44" ; +NET "fpganreconfig" LOC = "p41" ; +NET "fpgaserial" LOC = "p29" ; +NET "ninit" LOC = "p19" ; +NET "nreset" LOC = "p42" ; +NET "nstrobe_nwrite" LOC = "p7" ; +NET "opt<0>" LOC = "p5" ; +NET "opt<1>" LOC = "p6" ; +NET "perror" LOC = "p13" ; +NET "selectin_astrobe" LOC = "p20" ; +NET "usbnrd" LOC = "p40" ; +NET "usbnrxf" LOC = "p34" ; +NET "usbwr" LOC = "p39" ; #PACE: Start of PACE Area Constraints diff --git a/src/modules/managed/drivers/hostmot2/firmware/7i43/CPLD/SOURCE/I43CPLD.VHD b/src/modules/managed/drivers/hostmot2/firmware/7i43/CPLD/SOURCE/I43CPLD.VHD index 6a2bc6b00f..fc97ec82f0 100644 --- a/src/modules/managed/drivers/hostmot2/firmware/7i43/CPLD/SOURCE/I43CPLD.VHD +++ b/src/modules/managed/drivers/hostmot2/firmware/7i43/CPLD/SOURCE/I43CPLD.VHD @@ -7,7 +7,7 @@ entity i43cpld is generic( FPGASize : std_logic := '0' -- FPGA size 0 = 200K, 1 = 400K ); - Port ( + Port ( clk : in std_logic; opt : in std_logic_vector(1 downto 0); nreset : in std_logic; @@ -53,12 +53,12 @@ signal para_cclk : std_logic; signal para_program : std_logic; signal para_wait: std_logic; signal dautofd_dstrobe: std_logic; -signal dselectin_astrobe: std_logic; +signal dselectin_astrobe: std_logic; -signal alatch : std_logic; -signal dwrite : std_logic; -signal awrite : std_logic; +signal alatch : std_logic; +signal dwrite : std_logic; +signal awrite : std_logic; signal usb_cclk : std_logic; signal dusb_cclk : std_logic; @@ -76,7 +76,7 @@ signal spi_cmcs : std_logic; signal spi_cmdi : std_logic; signal spi_cclk : std_logic; signal pdelcounter : std_logic_vector(11 downto 0); -signal lastcounts : std_logic_vector(3 downto 0); +signal lastcounts : std_logic_vector(3 downto 0); signal spiprescale : std_logic_vector(3 downto 0); signal eestate : std_logic_vector(3 downto 0); signal senddata : std_logic; @@ -84,82 +84,82 @@ signal dospiconfig : std_logic; begin - - paraconfig: process(clk,waitpipe, alatch, filter, nstrobe_nwrite, + + paraconfig: process(clk,waitpipe, alatch, filter, nstrobe_nwrite, autofd_dstrobe, selectin_astrobe) begin if rising_edge(clk) then dautofd_dstrobe <= autofd_dstrobe; -- 1st stage sync FF - dselectin_astrobe <= selectin_astrobe; -- 1st stage sync FF + dselectin_astrobe <= selectin_astrobe; -- 1st stage sync FF filter(1) <= filter(0); if dautofd_dstrobe = '0' or dselectin_astrobe = '0' then waitpipe <= waitpipe(3 downto 0) & '1'; - if fcnt /= "11" then + if fcnt /= "11" then fcnt <= fcnt +1; end if; else waitpipe <= "00000"; - if fcnt /= "00" then + if fcnt /= "00" then fcnt <= fcnt -1; end if; end if; - if fcnt = "11" then + if fcnt = "11" then filter(0) <= '1'; end if; - if fcnt = "00" then + if fcnt = "00" then filter(0) <= '0'; end if; - - if awrite = '1' then + + if awrite = '1' then alatch <= busd0; end if; - + if dwrite = '1' and alatch = '1' then para_program <= busd0; - end if; - end if; -- clk - + end if; + end if; -- clk + para_wait <= waitpipe(4); - + if filter = "01" and nstrobe_nwrite = '0' and dautofd_dstrobe = '0' then dwrite <= '1'; else dwrite <= '0'; end if; - + if filter = "01" and nstrobe_nwrite = '0' and dselectin_astrobe = '0' then awrite <= '1'; else awrite <= '0'; end if; - + if dwrite = '1' and alatch = '0' then para_cclk <= '1'; else para_cclk <= '0'; - end if; - - + end if; + + + - end process paraconfig; - + usbconfig: process(clk, rdtimer) begin if rising_edge(clk) then dusbnrxf <= usbnrxf; -- async so need 1 FF sync - dusb_cclk <= usb_cclk; + dusb_cclk <= usb_cclk; usbwritetsen <= usbconfigwrite; -- delayed one clock for data hold time if rdtimer /= "0000" then - rdtimer <= rdtimer -1; - end if; + rdtimer <= rdtimer -1; + end if; if rdtimer = "0000" and dusbnrxf = '0' then rdtimer <= "1111"; - end if; + end if; if usb_cclk= '1' and dusb_cclk = '0' then usbtxoffsr <= usbtxoffsr(2 downto 0)& busd0; -- left shift 20 ns after rising edge of cclk end if; @@ -169,14 +169,14 @@ begin if (nreset = '0') or (fpganreconfig = '0') then -- enable usbecho at startup or reconfig usb_echo <= '1'; usbtxoffsr <= x"F"; - end if; - dusb_cclk <= usb_cclk; - + end if; + dusb_cclk <= usb_cclk; + end if; -- clk usbconfigwrite <= not rdtimer(3) and (rdtimer(2) xor rdtimer(1)) and usb_echo; usbconfigread <= not rdtimer(3); usb_cclk <= rdtimer(3) and not rdtimer(2); - + end process usbconfig; @@ -195,51 +195,51 @@ begin spiprescale <= x"0"; lastcounts <= x"0"; dospiconfig <= '1'; - + else if dospiconfig = '1' then - spi_program <= '1'; + spi_program <= '1'; spiprescale <= spiprescale +1; spi_cclk <= spiprescale(3); if spiprescale = x"0" then pdelcounter <= pdelcounter + 1; - if pdelcounter(11) = '1' then + if pdelcounter(11) = '1' then senddata <= '1'; end if; if senddata = '1' then - if eestate /= 15 then + if eestate /= 15 then eestate <= eestate +1; end if; - if eestate = 1 then + if eestate = 1 then spi_cmcs <= '0'; end if; if eestate = 7 then -- serial EEPROM read command needs ones from now on spi_cmdi <= '1'; end if; - if fpgadone = '1' then + if fpgadone = '1' then lastcounts <= lastcounts +1; end if; if lastcounts(3) = '1' then dospiconfig <= '0'; spi_cmcs <= '1'; - end if; + end if; end if; - end if; + end if; end if; end if; - end if; - end process spiconfig; + end if; + end process spiconfig; - doconfig : process (configmode,opt, spi_cclk, para_cclk, usb_cclk, - fpgadone, busd0, autofd_dstrobe, nstrobe_nwrite, - alatch, nreset, ninit, para_program, fpganinit, - para_wait, usbconfigread, cmdo, spi_program, - spi_cmcs, spi_cmdi, fpganreconfig, selectin_astrobe, + doconfig : process (configmode,opt, spi_cclk, para_cclk, usb_cclk, + fpgadone, busd0, autofd_dstrobe, nstrobe_nwrite, + alatch, nreset, ninit, para_program, fpganinit, + para_wait, usbconfigread, cmdo, spi_program, + spi_cmcs, spi_cmdi, fpganreconfig, selectin_astrobe, fpga_epp_wait) begin - + if opt(1) = '1' then fpgaserial <= 'Z'; configmode <= spi; @@ -252,27 +252,27 @@ begin else configmode <= usb; fpgacclk <= usb_cclk; - end if; + end if; end if; - + if fpgadone = '1' then configmode <= done; - end if; - - + end if; + + case configmode is - when para => + when para => fpgaconfigd0 <= busd0; if autofd_dstrobe = '0' and nstrobe_nwrite = '1' then - if alatch = '1' then + if alatch = '1' then busd0 <= fpgadone; else busd0 <= FPGASize; - end if; + end if; else - busd0 <= 'Z'; - end if; + busd0 <= 'Z'; + end if; fpgancs_paramode <= '0'; fpganrdwr <= '0'; fpganprogram <= nreset and ninit and para_program; @@ -289,14 +289,14 @@ begin when usb => fpgaconfigd0 <= busd0; if usbwritetsen = '1' and usb_echo = '1' then - if usblastd0 = '1' then + if usblastd0 = '1' then busd0 <= fpgadone; else busd0 <= FPGASize; - end if; + end if; else - busd0 <= 'Z'; - end if; + busd0 <= 'Z'; + end if; fpgancs_paramode <= '0'; fpganrdwr <= '0'; fpganprogram <= nreset; @@ -308,7 +308,7 @@ begin fpga_epp_dstrobe <= 'Z'; fpga_epp_read <= 'Z'; busy_wait <= 'Z'; - usbwr <= usbconfigwrite; + usbwr <= usbconfigwrite; usbnrd<= usbconfigread; when spi => fpgaconfigd0 <= cmdo; @@ -336,7 +336,7 @@ begin busy_wait <= fpga_epp_wait; else busy_wait <= 'Z'; - end if; + end if; fpgacclk <= 'Z'; fpgancs_paramode <= 'Z'; fpganrdwr <= 'Z'; @@ -348,8 +348,8 @@ begin usbwr <= 'Z'; usbnrd<= 'Z'; end case; - + end process; - + end Behavioral; diff --git a/src/modules/managed/drivers/hostmot2/hm2soc_program_fpga b/src/modules/managed/drivers/hostmot2/hm2soc_program_fpga index 424b9eab44..a14b12bb69 100755 --- a/src/modules/managed/drivers/hostmot2/hm2soc_program_fpga +++ b/src/modules/managed/drivers/hostmot2/hm2soc_program_fpga @@ -31,4 +31,3 @@ set_bridge lwhps2fpga 1 # re-enable modprobe gpio_altera - diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_7i43/src/hm2_7i43.h b/src/modules/managed/drivers/hostmot2/hostmot2_7i43/src/hm2_7i43.h index 587ed789be..a463749929 100644 --- a/src/modules/managed/drivers/hostmot2/hostmot2_7i43/src/hm2_7i43.h +++ b/src/modules/managed/drivers/hostmot2/hostmot2_7i43/src/hm2_7i43.h @@ -25,9 +25,9 @@ -// +// // EPP stuff -// +// #define HM2_7I43_EPP_STATUS_OFFSET (1) #define HM2_7I43_EPP_CONTROL_OFFSET (2) @@ -56,4 +56,3 @@ typedef struct { hm2_lowlevel_io_t llio; } hm2_7i43_t; - diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_7i90/src/hm2_7i90.h b/src/modules/managed/drivers/hostmot2/hostmot2_7i90/src/hm2_7i90.h index e125aa2d50..cb71ae7c0f 100644 --- a/src/modules/managed/drivers/hostmot2/hostmot2_7i90/src/hm2_7i90.h +++ b/src/modules/managed/drivers/hostmot2/hostmot2_7i90/src/hm2_7i90.h @@ -56,4 +56,3 @@ typedef struct { hm2_lowlevel_io_t llio; } hm2_7i90_t; - diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_core/include/hostmot2/hostmot2-lowlevel.h b/src/modules/managed/drivers/hostmot2/hostmot2_core/include/hostmot2/hostmot2-lowlevel.h index fd1268b3bc..899c79a5ff 100644 --- a/src/modules/managed/drivers/hostmot2/hostmot2_core/include/hostmot2/hostmot2-lowlevel.h +++ b/src/modules/managed/drivers/hostmot2/hostmot2_core/include/hostmot2/hostmot2-lowlevel.h @@ -199,4 +199,3 @@ void hm2_unregister(hm2_lowlevel_io_t *llio); #endif // HOSTMOT2_LOWLEVEL_H - diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_core/include/hostmot2/sserial.h b/src/modules/managed/drivers/hostmot2/hostmot2_core/include/hostmot2/sserial.h index 7628339108..ad05324f88 100644 --- a/src/modules/managed/drivers/hostmot2/hostmot2_core/include/hostmot2/sserial.h +++ b/src/modules/managed/drivers/hostmot2/hostmot2_core/include/hostmot2/sserial.h @@ -27,7 +27,7 @@ #define LBPNONVOL_flag 0xCC000000 #define LBPWRITE 0x20000000 #define LBPNONVOLCLEAR 0x0 -#define LBPNONVOLEEPROM 0x01 +#define LBPNONVOLEEPROM 0x01 #define LBPNONVOLFLASH 0x02 #define READ_LOCAL_CMD 0x2000 @@ -57,7 +57,7 @@ #define LBPCOOKIE 0x5A #define HM2WRITE(a,b) hm2->llio->write(hm2->llio, a, &b, sizeof(u32)) -#define HM2READ(a,b) hm2->llio->read(hm2->llio, a, &b, sizeof(u32)) +#define HM2READ(a,b) hm2->llio->read(hm2->llio, a, &b, sizeof(u32)) #define LBP_IN 0x00 #define LBP_IO 0x40 @@ -77,7 +77,7 @@ #define LBP_ENCODER 0x08 #define LBP_FLOAT 0x10 // New for STMBL #define LBP_ENCODER_H 0x18 // For Fanuc Absolute Encoders with separate -#define LBP_ENCODER_L 0x28 // part and full count fields. +#define LBP_ENCODER_L 0x28 // part and full count fields. typedef struct { unsigned char RecordType; @@ -107,7 +107,7 @@ static const hm2_sserial_data_t hm2_8i20_params[] = { {LBP_DATA,0x01,LBP_BOOLEAN,LBP_IN,0,0,0,"none","status.no-enable"}, {LBP_DATA,0x01,LBP_BOOLEAN,LBP_IN,0,0,0,"none","status.pid-on"}, {LBP_DATA,0x06,LBP_PAD,LBP_IN,0,0,0,"pad","pad"}, - + {LBP_DATA,0x01,LBP_BOOLEAN,LBP_IN,0,0,0,"none","fault.watchdog"}, {LBP_DATA,0x01,LBP_BOOLEAN,LBP_IN,0,0,0,"none","fault.no-enable"}, {LBP_DATA,0x01,LBP_BOOLEAN,LBP_IN,0,0,0,"none","fault.overtemp"}, @@ -125,7 +125,7 @@ static const hm2_sserial_data_t hm2_8i20_params[] = { {LBP_DATA,0x01,LBP_BOOLEAN,LBP_IN,0,0,0,"none","fault.overrun"}, {LBP_DATA,0x01,LBP_BOOLEAN,LBP_IN,0,0,0,"none","fault.framingr"} }; -static const hm2_sserial_data_t hm2_8i20_globals[] = { +static const hm2_sserial_data_t hm2_8i20_globals[] = { {LBP_DATA,0x10,LBP_UNSIGNED,LBP_IN,0,0,2164,"none","swrevision"}, {LBP_DATA,0x20,LBP_UNSIGNED,LBP_IN,0,0,2344,"none","unitnumber"}, {LBP_DATA,0x10,LBP_NONVOL_UNSIGNED,LBP_IN,0,32.768,2,"amps","nvmaxcurrent"}, @@ -245,7 +245,7 @@ typedef struct { hal_u32_t fault_inc; hal_u32_t fault_dec; hal_u32_t fault_lim; - + hal_bit_t *run; hal_u32_t *state; u32 timer; diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/abs_encoder.c b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/abs_encoder.c index b98c64f04b..947a6639b5 100644 --- a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/abs_encoder.c +++ b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/abs_encoder.c @@ -50,13 +50,13 @@ static int hm2_absenc_trigger(void *void_hm2, const hal_funct_args_t *fa) { int hm2_absenc_register_tram(hostmot2_t *hm2){ int i; - - // This function is called from the main hostmot2 driver when all the + + // This function is called from the main hostmot2 driver when all the // encoder types have had a chance to be set up. - + // If we don't read the "busy" flags first in the sequence then they will // always show "busy" - + if (hm2->absenc.ssi_global_start_addr){ if (hm2_register_tram_read_region(hm2, hm2->absenc.ssi_global_start_addr, sizeof(u32), @@ -81,15 +81,15 @@ int hm2_absenc_register_tram(hostmot2_t *hm2){ return -EINVAL; } } - + for (i = 0; i < hm2->absenc.num_chans; i++){ int r = 0; hm2_sserial_remote_t *chan = &hm2->absenc.chans[i]; - + r = hm2_register_tram_read_region(hm2, chan->reg_cs_addr, sizeof(u32), &chan->reg_cs_read); - + switch (chan->myinst){ case HM2_GTAG_FABS: r += hm2_register_tram_read_region(hm2, chan->reg_2_addr, @@ -132,7 +132,7 @@ int hm2_absenc_register_tram(hostmot2_t *hm2){ return -EINVAL; } } - + // If there is no dpll to link to, then we export the trigger function. if (hm2->config.num_dplls == 0){ @@ -158,83 +158,83 @@ int hm2_absenc_register_tram(hostmot2_t *hm2){ return 0; } -int hm2_absenc_setup_ssi(hostmot2_t *hm2, hm2_sserial_remote_t *chan, +int hm2_absenc_setup_ssi(hostmot2_t *hm2, hm2_sserial_remote_t *chan, hm2_module_descriptor_t *md){ if ( hm2_sserial_create_pins(hm2, chan)) return -EINVAL; - + chan->params = hal_malloc(sizeof(hm2_sserial_params_t)); hm2->absenc.clock_frequency = md->clock_freq; hm2->absenc.ssi_version = md->version; - chan->reg_0_addr = md->base_address + chan->reg_0_addr = md->base_address + (0 * md->register_stride) + chan->index * md->instance_stride; - chan->reg_1_addr = md->base_address + chan->reg_1_addr = md->base_address + (1 * md->register_stride) + chan->index * md->instance_stride; - chan->reg_cs_addr = md->base_address + chan->reg_cs_addr = md->base_address + (2 * md->register_stride) + chan->index * md->instance_stride; - hm2->absenc.ssi_global_start_addr = md->base_address + hm2->absenc.ssi_global_start_addr = md->base_address + (3 * md->register_stride); chan->data_written = 0; - + chan->params->float_param = 500; chan->params->timer_num = 0; return 0; } -int hm2_absenc_setup_biss(hostmot2_t *hm2, hm2_sserial_remote_t *chan, +int hm2_absenc_setup_biss(hostmot2_t *hm2, hm2_sserial_remote_t *chan, hm2_module_descriptor_t *md){ - + if ( hm2_sserial_create_pins(hm2, chan)) return -EINVAL; - + chan->params = hal_malloc(sizeof(hm2_sserial_params_t)); hm2->absenc.clock_frequency = md->clock_freq; hm2->absenc.biss_version = md->version; - - chan->reg_0_addr = md->base_address + + chan->reg_0_addr = md->base_address + (0 * md->register_stride) + chan->index * md->instance_stride; - chan->reg_cs_addr = md->base_address + chan->reg_cs_addr = md->base_address + (1 * md->register_stride) + chan->index * md->instance_stride; - hm2->absenc.biss_global_start_addr = md->base_address + hm2->absenc.biss_global_start_addr = md->base_address + (2 * md->register_stride); chan->data_written = 0; - + chan->params->float_param = 500; chan->params->timer_num = 0; return 0; } -int hm2_absenc_setup_fabs(hostmot2_t *hm2, hm2_sserial_remote_t *chan, +int hm2_absenc_setup_fabs(hostmot2_t *hm2, hm2_sserial_remote_t *chan, hm2_module_descriptor_t *md){ - + if ( hm2_sserial_create_pins(hm2, chan)) return -EINVAL; - + chan->params = hal_malloc(sizeof(hm2_sserial_params_t)); hm2->absenc.clock_frequency = md->clock_freq; hm2->absenc.fanuc_version = md->version; - chan->reg_0_addr = md->base_address + chan->reg_0_addr = md->base_address + (0 * md->register_stride) + chan->index * md->instance_stride; - chan->reg_1_addr = md->base_address + chan->reg_1_addr = md->base_address + (1 * md->register_stride) + chan->index * md->instance_stride; - chan->reg_2_addr = md->base_address + chan->reg_2_addr = md->base_address + (2 * md->register_stride) + chan->index * md->instance_stride; - chan->reg_cs_addr = md->base_address + chan->reg_cs_addr = md->base_address + (3 * md->register_stride) + chan->index * md->instance_stride; - chan->data_reg_addr = md->base_address + chan->data_reg_addr = md->base_address + (4 * md->register_stride) + chan->index * md->instance_stride; - hm2->absenc.fabs_global_start_addr = md->base_address + hm2->absenc.fabs_global_start_addr = md->base_address + (5 * md->register_stride); chan->data_written = 0; @@ -256,11 +256,11 @@ int hm2_absenc_parse_format(hm2_sserial_remote_t *chan, hm2_absenc_format_t *de char* AA64 = "%5pbatt_fail%1b%2ppos_invalid%1b%9plow%16l%2pencoder%16h%2pcomm%10u%7pcrc%5u"; char* format = def->string; char name[HM2_SSERIAL_MAX_STRING_LENGTH+1] = ""; - + if (chan->myinst == HM2_GTAG_FABS && strncmp(format, "AA64",4) == 0){ format = AA64; } - + while(*format){ if (*format == '%'){ int q = simple_strtol(++format, &format, 0); @@ -341,7 +341,7 @@ int hm2_absenc_parse_format(hm2_sserial_remote_t *chan, hm2_absenc_format_t *de "with one of the other data types\n"); return -EINVAL; } - + } else { @@ -404,13 +404,13 @@ int hm2_absenc_parse_md(hostmot2_t *hm2, int md_index) { hm2->absenc.fabs_busy_flags = kmalloc(sizeof(u32), GFP_KERNEL); *hm2->absenc.fabs_busy_flags = 0; } - + for (index = 0 ; index < md->instances ; index ++){ bool has_format = false; hm2_sserial_remote_t *chan; list_for_each(ptr, &hm2->config.absenc_formats){ def = list_entry(ptr, hm2_absenc_format_t, list); - + if (def->index > md->instances && def->gtag == md->gtag){ HM2_ERR("You have defined a configuration string for %s number" " %i but only %i %s available, exiting.\n", @@ -428,7 +428,7 @@ int hm2_absenc_parse_md(hostmot2_t *hm2, int md_index) { memset(chan, 0, sizeof(hm2_sserial_remote_t)); chan->index = index; chan->myinst = md->gtag; - + if (hm2_absenc_parse_format(chan, def) ) goto fail1; switch (md->gtag){ @@ -450,12 +450,12 @@ int hm2_absenc_parse_md(hostmot2_t *hm2, int md_index) { default: HM2_ERR("Unsupported GTAG passed to hm2_absenc driver\n"); } - + // Set up the common pins if (hal_pin_bit_newf(HAL_OUT, &(chan->params->error), hm2->llio->comp_id,"%s.data-invalid", chan->name)){ - HM2_ERR("error adding %s over-run pin, aborting\n", + HM2_ERR("error adding %s over-run pin, aborting\n", chan->name); return -EINVAL; } @@ -470,13 +470,13 @@ int hm2_absenc_parse_md(hostmot2_t *hm2, int md_index) { if (hal_param_u32_newf(HAL_RW, &(chan->params->timer_num), hm2->llio->comp_id,"%s.timer-number", chan->name)){ - HM2_ERR("error adding %s timer number param, aborting\n", + HM2_ERR("error adding %s timer number param, aborting\n", chan->name); return -EINVAL; } } } - // pins.c can't handle non-contiguous instances, so set unused pins to + // pins.c can't handle non-contiguous instances, so set unused pins to // GPIO here if (has_format == false){ int pin; @@ -509,39 +509,39 @@ void hm2_absenc_process_tram_read(hostmot2_t *hm2, long period) { hm2_sserial_remote_t *chan = &hm2->absenc.chans[i]; int err_flag = 0; - // This actually populates all the pins. + // This actually populates all the pins. hm2_sserial_read_pins(chan); - if ((chan->myinst == HM2_GTAG_FABS) + if ((chan->myinst == HM2_GTAG_FABS) &&(*chan->reg_2_read & 0x80000000)){ err_flag = 1; - + if(err_count[i] > 5000 && err_tag[i] == 0){ HM2_ERR("Fanuc encoder channel %s cable fault\n" "this warning will not repeat\n", chan->name); err_tag[i] = 1; - } - } + } + } if (((chan->myinst == HM2_GTAG_SSI) && (*hm2->absenc.ssi_busy_flags & (1 << chan->index))) || ((chan->myinst == HM2_GTAG_BISS) && (*hm2->absenc.biss_busy_flags & (1 << chan->index))) || ((chan->myinst == HM2_GTAG_FABS) && (*hm2->absenc.fabs_busy_flags & (1 << chan->index)))){ - + err_flag = 1; - + if (err_count[i] > 5000 && err_tag[i] == 0){ HM2_ERR("Data transmission not complete on channel %s read." " You may need to change the timing of %s. This " "warning will not repeat\n", chan->name, - (chan->params->timer_num == 0) ? + (chan->params->timer_num == 0) ? "the trigger function" : "the hm2dpll timer"); err_tag[i] = 1; } - } - + } + // a bit of hysteresis (50 cycles) on the error bit and a long wait // before reporting a fault (5000 cycles) if (err_flag){ @@ -550,7 +550,7 @@ void hm2_absenc_process_tram_read(hostmot2_t *hm2, long period) { } else { *chan->params->error = 1; } - + } else { if (err_count[i] > 4950){ --err_count[i]; @@ -617,7 +617,7 @@ void hm2_absenc_write(hostmot2_t *hm2){ | (buff3 != chan->data3_written || buff2 != chan->data2_written) << 7; if (buff != chan->data_written){ // if necessary this will set the write flag, then next time through - // it will get cleared. + // it will get cleared. hm2->llio->write(hm2->llio, chan->reg_cs_addr, &buff, @@ -640,7 +640,7 @@ void hm2_absenc_write(hostmot2_t *hm2){ } break; default: - HM2_ERR("hm2_absenc_write called with unsupported type (%i)\n", + HM2_ERR("hm2_absenc_write called with unsupported type (%i)\n", chan->myinst); } } diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/bspi.c b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/bspi.c index 1827b99c19..afebe3f8bb 100644 --- a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/bspi.c +++ b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/bspi.c @@ -364,6 +364,3 @@ void hm2_bspi_cleanup(hostmot2_t *hm2) void hm2_bspi_write(hostmot2_t *hm2) { } - - - diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/dbspi.c b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/dbspi.c index 1e4d6eb087..bc4aea45b8 100644 --- a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/dbspi.c +++ b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/dbspi.c @@ -364,6 +364,3 @@ void hm2_dbspi_cleanup(hostmot2_t *hm2) void hm2_dbspi_write(hostmot2_t *hm2) { } - - - diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/encoder.c b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/encoder.c old mode 100755 new mode 100644 index 75f4674198..8979d47814 --- a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/encoder.c +++ b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/encoder.c @@ -273,7 +273,7 @@ int hm2_encoder_parse_md(hostmot2_t *hm2, hm2_encoder_t *encoder, int md_index, int r; - // + // // some standard sanity checks // @@ -627,36 +627,36 @@ int hm2_encoder_parse_md(hostmot2_t *hm2, hm2_encoder_t *encoder, int md_index, } - // + // // Set the Timestamp Divisor Register - // + // // We want the timestamp to count as quickly as possible, so we get the // best temporal resolution. - // + // // But we want it to count slow enough that the 16-bit counter doesnt // overrun between successive calls to the servo thread (easy), and // even slower so that we can do good low-speed velocity estimation // (long between roll-overs). // // A resonably slow servo thread runs at 1 KHz. A fast one runs at 10 - // KHz. The actual servo period is unknown at loadtime, and is likely + // KHz. The actual servo period is unknown at loadtime, and is likely // to fluctuate slightly when the system is under load. - // + // // Peter suggests a Quadrature Timestamp clock rate of 1 MHz. This // means that a 1 KHz servo period sees about 1000 clocks per period. - // + // // // From the HM2 RegMap: - // + // // Timestamp count rate is ClockLow/(TSDiv+2). // Any divisor with MSb set = divide by 1 - // + // // This gives us: - // + // // rate = 1 MHz = 1e6 = ClockLow / (TSDiv+2) - // + // // TSDiv+2 = ClockLow / 1e6 - // + // // TSDiv = (ClockLow / 1e6) - 2 // // seconds_per_clock = 1 / rate = (TSDiv+2) / ClockLow @@ -757,9 +757,9 @@ static void hm2_encoder_instance_update_rawcounts_and_handle_index(hostmot2_t *h prev_rawcounts = *e->hal.pin.rawcounts; - // + // // figure out current rawcounts accumulated by the driver - // + // reg_count = hm2_encoder_get_reg_count(encoder, instance); @@ -1102,4 +1102,3 @@ void hm2_encoder_print_module(hostmot2_t *hm2, hm2_encoder_t *encoder, char *tag HM2_PRINT(" prev_control = %04x.%04x\n", (encoder->instance[i].prev_control >> 16), (encoder->instance[i].prev_control & 0xffff)); } } - diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/hostmot2.c b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/hostmot2.c old mode 100755 new mode 100644 diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/ioport.c b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/ioport.c old mode 100755 new mode 100644 index b3b88fe75f..3d08a1fb6c --- a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/ioport.c +++ b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/ioport.c @@ -36,7 +36,7 @@ int hm2_ioport_parse_md(hostmot2_t *hm2, int md_index) { int i, r; - // + // // some standard sanity checks // @@ -54,9 +54,9 @@ int hm2_ioport_parse_md(hostmot2_t *hm2, int md_index) { } - // + // // special sanity check for io_ports - // + // if (hm2->idrom.io_ports != md->instances) { HM2_ERR( @@ -488,7 +488,7 @@ void hm2_ioport_gpio_process_tram_read(hostmot2_t *hm2) { int port; int port_pin; - // + // // parse it out to the HAL pins // @@ -510,7 +510,7 @@ void hm2_ioport_gpio_process_tram_read(hostmot2_t *hm2) { // // this function sets the data_write register TRAM buffer from the values of the HAL pins // the data_write buffer will get written to the TRAM and thus to the ioport data register by the caller -// +// void hm2_ioport_gpio_prepare_tram_write(hostmot2_t *hm2) { int port; diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/led.c b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/led.c old mode 100755 new mode 100644 index c87f58ea12..0603125c18 --- a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/led.c +++ b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/led.c @@ -47,7 +47,7 @@ int hm2_led_parse_md(hostmot2_t *hm2, int md_index) { // LEDs were enumerated during llio setup - + if (hm2->llio->num_leds == 0 || hm2->config.num_leds == 0) return 0; if (hm2->config.num_leds > hm2->llio->num_leds) { diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/nano_soc_adc.c b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/nano_soc_adc.c index addcb2aedd..cf0f41ab27 100644 --- a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/nano_soc_adc.c +++ b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/nano_soc_adc.c @@ -38,7 +38,7 @@ int hm2_adc_setup(hostmot2_t *hm2) { if (hm2->config.enable_adc == 0) { return 0; } - + hm2->nano_soc_adc = (de0_nano_soc_adc_t *)hal_malloc(sizeof(de0_nano_soc_adc_t)); if (hm2->nano_soc_adc == NULL) { HM2_ERR("out of memory!\n"); @@ -74,14 +74,14 @@ void de0_nano_soc_adc_read(hostmot2_t *hm2) { u32 start_reg = 0x0101; if (hm2->config.enable_adc == 0) return; - + hm2->llio->read( hm2->llio, DE0_NANO_SOC_ADC_BASE, &val, sizeof(u32) ); - if (val & 1){ + if (val & 1){ /* insert dummy read of first sample */ // hm2->llio->read( // hm2->llio, @@ -89,7 +89,7 @@ void de0_nano_soc_adc_read(hostmot2_t *hm2) { // (void *)hm2->nano_soc_adc->hal.pin.sample[0], // sizeof(u32) // ); - + for(i=0;illio->read( hm2->llio, diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/pins.c b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/pins.c old mode 100755 new mode 100644 diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/pktuart.c b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/pktuart.c old mode 100755 new mode 100644 index 8660596317..ca90d4f207 --- a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/pktuart.c +++ b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/pktuart.c @@ -33,7 +33,7 @@ // Rx mode register errors -#define RxRCFIFOError (114) // RCFIFO Error, Bit 4 +#define RxRCFIFOError (114) // RCFIFO Error, Bit 4 #define RxOverrunError (111) // Overrun error (no stop bit when expected) (sticky), Bit 1 #define RxStartbitError (110) // False Start bit error (sticky), Bit 0 @@ -46,27 +46,27 @@ #define RxPacketSizeZero (1120) // the length of the received packet is 0 #define RxArraySizeError (1140) // sizeof(data array)= num_frames*max_frame_length is too small for all the data in the buffer -int hm2_pktuart_parse_md(hostmot2_t *hm2, int md_index) +int hm2_pktuart_parse_md(hostmot2_t *hm2, int md_index) { // All this function actually does is allocate memory - // and give the uart modules names. - - - // + // and give the uart modules names. + + + // // some standard sanity checks // - + int i, r = -EINVAL; hm2_module_descriptor_t *md = &hm2->md[md_index]; static int last_gtag = -1; - + //The PktUART declares a TX and RX module separately - + if (!hm2_md_is_consistent_or_complain(hm2, md_index, 0, 4, 4, 0x000F)) { HM2_ERR("inconsistent Module Descriptor!\n"); return -EINVAL; } - + if (hm2->pktuart.num_instances > 1 && last_gtag == md->gtag) { HM2_ERR( "found duplicate Module Descriptor for %s (inconsistent " @@ -76,7 +76,7 @@ int hm2_pktuart_parse_md(hostmot2_t *hm2, int md_index) return -EINVAL; } last_gtag = md->gtag; - + if (hm2->config.num_pktuarts > md->instances) { HM2_ERR( "config defines %d pktuarts, but only %d are available, " @@ -86,14 +86,14 @@ int hm2_pktuart_parse_md(hostmot2_t *hm2, int md_index) ); return -EINVAL; } - + if (hm2->config.num_pktuarts == 0) { return 0; } - // + // // looks good, start, or continue, initializing - // + // if (hm2->pktuart.num_instances == 0){ if (hm2->config.num_pktuarts == -1) { @@ -101,8 +101,8 @@ int hm2_pktuart_parse_md(hostmot2_t *hm2, int md_index) } else { hm2->pktuart.num_instances = hm2->config.num_pktuarts; } - - hm2->pktuart.instance = (hm2_pktuart_instance_t *)hal_malloc(hm2->pktuart.num_instances + + hm2->pktuart.instance = (hm2_pktuart_instance_t *)hal_malloc(hm2->pktuart.num_instances * sizeof(hm2_pktuart_instance_t)); if (hm2->pktuart.instance == NULL) { HM2_ERR("out of memory!\n"); @@ -110,7 +110,7 @@ int hm2_pktuart_parse_md(hostmot2_t *hm2, int md_index) goto fail0; } } - + for (i = 0 ; i < hm2->pktuart.num_instances ; i++){ hm2_pktuart_instance_t *inst = &hm2->pktuart.instance[i]; // For the time being we assume that all PktUARTS come on pairs @@ -121,33 +121,33 @@ int hm2_pktuart_parse_md(hostmot2_t *hm2, int md_index) } if (md->gtag == HM2_GTAG_PKTUART_TX){ inst->tx_addr = md->base_address + i * md->instance_stride; - inst->tx_fifo_count_addr = (md->base_address - + md->register_stride + inst->tx_fifo_count_addr = (md->base_address + + md->register_stride + i * md->instance_stride); - inst->tx_bitrate_addr = (md->base_address + inst->tx_bitrate_addr = (md->base_address + 2 * md->register_stride + i * md->instance_stride); - inst->tx_mode_addr = (md->base_address + inst->tx_mode_addr = (md->base_address + 3 * md->register_stride - +i * md->instance_stride); + +i * md->instance_stride); } else if (md->gtag == HM2_GTAG_PKTUART_RX){ inst->rx_addr = md->base_address + i * md->instance_stride; - inst->rx_fifo_count_addr = (md->base_address - + md->register_stride + inst->rx_fifo_count_addr = (md->base_address + + md->register_stride + i * md->instance_stride); - inst->rx_bitrate_addr = (md->base_address + inst->rx_bitrate_addr = (md->base_address + 2 * md->register_stride + i * md->instance_stride); - inst->rx_mode_addr = (md->base_address - + 3 * md->register_stride - +i * md->instance_stride); + inst->rx_mode_addr = (md->base_address + + 3 * md->register_stride + +i * md->instance_stride); } else{ HM2_ERR("Something very wierd happened"); goto fail0; - } - + } + } return hm2->pktuart.num_instances; @@ -163,7 +163,7 @@ int hm2_pktuart_setup(char *name, int bitrate, s32 tx_mode, s32 rx_mode, int txc hm2_pktuart_instance_t *inst = 0; u32 buff; int i,r; - + i = hm2_get_pktuart(&hm2, name); if (i < 0){ HM2_ERR_NO_LL("Can not find PktUART instance %s.\n", name); @@ -181,7 +181,7 @@ int hm2_pktuart_setup(char *name, int bitrate, s32 tx_mode, s32 rx_mode, int txc /* http://freeby.mesanet.com/regmap The PktUARTx/PktUARTr mode register has a special data command that clears the PktUARTx/PktUARTr - Clearing aborts any sends/receives in process, clears the data FIFO and + Clearing aborts any sends/receives in process, clears the data FIFO and clears the send count FIFO. To issue a clear command, you write 0x80010000 to the PktUARTx/PktUARTr mode register. */ @@ -201,7 +201,7 @@ int hm2_pktuart_setup(char *name, int bitrate, s32 tx_mode, s32 rx_mode, int txc Bit 6 Drive Enable bit (enables external RS-422/485 Driver when set) Bit 5 Drive enable Auto (Automatic external drive enable) Bit 4 unused - Bits 3..0 Drive enable delay (delay from asserting drive enable + Bits 3..0 Drive enable delay (delay from asserting drive enable to start of data transmit). In CLock Low periods */ if (tx_mode >= 0) { @@ -210,18 +210,18 @@ int hm2_pktuart_setup(char *name, int bitrate, s32 tx_mode, s32 rx_mode, int txc } /* http://freeby.mesanet.com/regmap - The PktUARTrMode register is used for setting and checking the PktUARTr's + The PktUARTrMode register is used for setting and checking the PktUARTr's operation mode, timing, and status Bit 31..30 Unused Bit 29..22 Filter Register - Bit 21 FrameBuffer has data + Bit 21 FrameBuffer has data Bits 20..16 Frames received Bits 15..8 InterFrame delay in bit times Bit 7 Receive Logic active, not an error Bit 6 RXMask Bit 5 Unused Bit 4 RCFIFO Error - Bit 3 RXEnable (must be set to receive packets) + Bit 3 RXEnable (must be set to receive packets) Bit 2 RXMask Enable (enables input data masking when transmitting) Bit 1 Overrun error (no stop bit when expected) (sticky) Bit 0 False Start bit error (sticky) @@ -255,7 +255,7 @@ int hm2_pktuart_send(char *name, unsigned char data[], u8 *num_frames, u16 fram u32 buff; int r, c; int inst; - + inst = hm2_get_pktuart(&hm2, name); if (inst < 0){ HM2_ERR_NO_LL("Can not find PktUART instance %s.\n", name); @@ -268,15 +268,15 @@ int hm2_pktuart_send(char *name, unsigned char data[], u8 *num_frames, u16 fram c = 0; u16 count = 0; - /* + /* we work with nframes as a local copy of num_frames, so that we can return the num_frames sent out in case of SCFIFO error. */ - u8 nframes = *num_frames; + u8 nframes = *num_frames; /* http://freeby.mesanet.com/regmap - Send counts are written to 16 deep FIFO allowing up to 16 packets to be + Send counts are written to 16 deep FIFO allowing up to 16 packets to be sent in a burst (subject to data FIFO depth limits). */ // Test if num_frames <= MaxTrFrames @@ -285,14 +285,14 @@ int hm2_pktuart_send(char *name, unsigned char data[], u8 *num_frames, u16 fram } else{ nframes = *num_frames; } - + *num_frames = 0; u8 i; for (i = 0; i < nframes; i++){ count = count + frame_sizes[i]; while (c < count - 3){ - buff = (data[c] + + buff = (data[c] + (data[c+1] << 8) + (data[c+2] << 16) + (data[c+3] << 24)); @@ -308,10 +308,10 @@ int hm2_pktuart_send(char *name, unsigned char data[], u8 *num_frames, u16 fram // Now write the last bytes with bytes number < 4 switch(count - c){ - case 0: + case 0: break; case 1: - buff = data[c]; + buff = data[c]; r = hm2->llio->write(hm2->llio, hm2->pktuart.instance[inst].tx_addr, &buff, sizeof(u32)); if (r < 0){ @@ -320,7 +320,7 @@ int hm2_pktuart_send(char *name, unsigned char data[], u8 *num_frames, u16 fram } break; case 2: - buff = (data[c] + + buff = (data[c] + (data[c+1] << 8)); r = hm2->llio->write(hm2->llio, hm2->pktuart.instance[inst].tx_addr, &buff, sizeof(u32)); @@ -330,7 +330,7 @@ int hm2_pktuart_send(char *name, unsigned char data[], u8 *num_frames, u16 fram } break; case 3: - buff = (data[c] + + buff = (data[c] + (data[c+1] << 8) + (data[c+2] << 16)); r = hm2->llio->write(hm2->llio, hm2->pktuart.instance[inst].tx_addr, @@ -343,7 +343,7 @@ int hm2_pktuart_send(char *name, unsigned char data[], u8 *num_frames, u16 fram default: HM2_ERR("%s send error in buffer parsing: count = %i, i = %i\n", name, count, c); return -1; - } // end switch + } // end switch // Write the number of bytes to be sent to PktUARTx sendcount register buff = (u32) frame_sizes[i]; @@ -380,22 +380,22 @@ int hm2_pktuart_read(char *name, unsigned char data[], u8 *num_frames, u16 *max_ int inst; u32 buff; u16 data_size=(*num_frames)*(*max_frame_length); - + inst = hm2_get_pktuart(&hm2, name); - - if (inst < 0){ + + if (inst < 0){ HM2_ERR_NO_LL("Can not find PktUART instance %s.\n", name); - *num_frames=0; + *num_frames=0; return -EINVAL; } if (hm2->pktuart.instance[inst].bitrate == 0 ) { HM2_ERR("%s has not been configured.\n", name); - *num_frames=0; + *num_frames=0; return -EINVAL; } - // First poll the mode register for a non zero frames recieved count + // First poll the mode register for a non zero frames recieved count // (mode register bits 20..16) r = hm2->llio->read(hm2->llio, hm2->pktuart.instance[inst].rx_mode_addr, &buff, sizeof(u32)); @@ -403,37 +403,37 @@ int hm2_pktuart_read(char *name, unsigned char data[], u8 *num_frames, u16 *max_ HM2_ERR("%s read: hm2->llio->write failure\n", name); return -1; // make the error message more detailed } - countp = (buff >> 16) & 0x1f; - // We expect to read at least 1 frame. + countp = (buff >> 16) & 0x1f; + // We expect to read at least 1 frame. // If there is no complete frame yet in the buffer, // we'll deal with this by checking error bits. *num_frames = 0; // Bit 7 set does not really indicate any error condition, // but very probably means that the cycle time of the thread, - // which you attach this function to, is not appropriate. + // which you attach this function to, is not appropriate. if ((buff >> 7) & 0x1){ HM2_INFO("%s: Rx Logic active\n", name); } // Now check the error bits if ((buff >> 1) & 0x1){ - HM2_ERR_NO_LL("%s: Overrun error, no stop bit\n", name); + HM2_ERR_NO_LL("%s: Overrun error, no stop bit\n", name); return -RxOverrunError; } if (buff & 0x1){ - HM2_ERR_NO_LL("%s: False Start bit error\n", name); + HM2_ERR_NO_LL("%s: False Start bit error\n", name); return -RxStartbitError; } // RCFIFO Error will get sticky if it is a consequence of either Overrun or False Start bit error? if ((buff >> 4) & 0x1){ - HM2_ERR_NO_LL("%s: RCFIFO Error\n", name); + HM2_ERR_NO_LL("%s: RCFIFO Error\n", name); return -RxRCFIFOError; } - if (countp==0){ - HM2_ERR_NO_LL("%s: no new frames \n", name); + if (countp==0){ + HM2_ERR_NO_LL("%s: no new frames \n", name); return 0; // return zero bytes } @@ -441,12 +441,12 @@ int hm2_pktuart_read(char *name, unsigned char data[], u8 *num_frames, u16 *max_ int i=0; while ( i < countp ) { buff=0; - /* The receive count register is a FIFO that contains the byte counts - of recieved packets. Since it is a FIFO it must only be read once after it + /* The receive count register is a FIFO that contains the byte counts + of recieved packets. Since it is a FIFO it must only be read once after it has be determined that there are packets available to read. */ r = hm2->llio->read(hm2->llio, hm2->pktuart.instance[inst].rx_fifo_count_addr, &buff, sizeof(u32)); - + countb = buff & 0x3ff; // PktUARTr receive count register Bits 9..0 : bytes in receive packet if ((buff >> 14) & 0x1) { @@ -463,7 +463,7 @@ int hm2_pktuart_read(char *name, unsigned char data[], u8 *num_frames, u16 *max_ // is very unprobable, however we intercept this error too if (countb==0) { HM2_ERR_NO_LL("%s: packet %d has %d bytes.\n", name, countp+1, countb); - return -RxPacketSizeZero; + return -RxPacketSizeZero; } if (( bytes_total+countb)> data_size) { @@ -484,17 +484,17 @@ int hm2_pktuart_read(char *name, unsigned char data[], u8 *num_frames, u16 *max_ HM2_ERR("%s read: hm2->llio->read failure\n", name); return r; } - + data[bytes_total+c] = (buff & 0x000000FF); // i*frame_sizes[i] data[bytes_total+c+1] = (buff & 0x0000FF00) >> 8; data[bytes_total+c+2] = (buff & 0x00FF0000) >> 16; data[bytes_total+c+3] = (buff & 0xFF000000) >> 24; c = c + 4; - + } switch(countb - c){ - case 0: + case 0: break; case 1: r = hm2->llio->read(hm2->llio, hm2->pktuart.instance[inst].rx_addr, @@ -523,7 +523,7 @@ int hm2_pktuart_read(char *name, unsigned char data[], u8 *num_frames, u16 *max_ return -1; } - bytes_total = bytes_total + countb; + bytes_total = bytes_total + countb; i++; // one frame/datagram read }// frame loop @@ -538,15 +538,15 @@ void hm2_pktuart_print_module(hostmot2_t *hm2){ HM2_PRINT(" version: %d\n", hm2->pktuart.version); HM2_PRINT(" channel configurations\n"); for (i = 0; i < hm2->pktuart.num_instances; i ++) { - HM2_PRINT(" clock_frequency: %d Hz (%s MHz)\n", - hm2->pktuart.instance[i].clock_freq, + HM2_PRINT(" clock_frequency: %d Hz (%s MHz)\n", + hm2->pktuart.instance[i].clock_freq, hm2_hz_to_mhz(hm2->pktuart.instance[i].clock_freq)); HM2_PRINT(" instance %d:\n", i); HM2_PRINT(" HAL name = %s\n", hm2->pktuart.instance[i].name); } } -// The following standard Hostmot2 functions are not currently used by pktuart. +// The following standard Hostmot2 functions are not currently used by pktuart. void hm2_pktuart_cleanup(hostmot2_t *hm2) { @@ -555,4 +555,3 @@ void hm2_pktuart_cleanup(hostmot2_t *hm2) void hm2_pktuart_write(hostmot2_t *hm2) { } - diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/pwmgen.c b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/pwmgen.c old mode 100755 new mode 100644 index f7927f7695..011a0fd9dc --- a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/pwmgen.c +++ b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/pwmgen.c @@ -41,7 +41,7 @@ void hm2_pwmgen_handle_pwm_frequency(hostmot2_t *hm2) { } - // + // // hal->pin.pwm_frequency is the user's desired PWM frequency in Hz // // We get to play with PWMClock (frequency at which the PWM counter @@ -117,7 +117,7 @@ void hm2_pwmgen_handle_pdm_frequency(hostmot2_t *hm2) { } - // + // // hal->pin.pdm_frequency is the user's desired PDM frequency in Hz // // We get to play with PDMClock (frequency at which the PDM counter @@ -249,15 +249,15 @@ void hm2_pwmgen_force_write(hostmot2_t *hm2) { HM2_ERR( "invalid pwmgen output_type %d requested\n", *hm2->pwmgen.instance[i].hal.pin.output_type - ); + ); HM2_ERR( "supported .output-type values are: %d (PWM & Dir), %d (Up & Down), %d (PDM & Dir), and %d (Dir & PWM)\n", HM2_PWMGEN_OUTPUT_TYPE_PWM, HM2_PWMGEN_OUTPUT_TYPE_UP_DOWN, HM2_PWMGEN_OUTPUT_TYPE_PDM, HM2_PWMGEN_OUTPUT_TYPE_PWM_SWAPPED - ); - HM2_ERR("switching to 1 (PWM & Dir)\n"); + ); + HM2_ERR("switching to 1 (PWM & Dir)\n"); *(hm2->pwmgen.instance[i].hal.pin.output_type) = HM2_PWMGEN_OUTPUT_TYPE_PWM; double_buffered = 1; // leave the Output Mode bits 0 @@ -338,7 +338,7 @@ int hm2_pwmgen_parse_md(hostmot2_t *hm2, int md_index) { int r; - // + // // some standard sanity checks // @@ -369,9 +369,9 @@ int hm2_pwmgen_parse_md(hostmot2_t *hm2, int md_index) { } - // + // // looks good, start initializing - // + // if (hm2->config.num_pwmgens == -1) { @@ -603,4 +603,3 @@ void hm2_pwmgen_prepare_tram_write(hostmot2_t *hm2) { } } } - diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/raw.c b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/raw.c old mode 100755 new mode 100644 index 4ac20e422e..38580d18e2 --- a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/raw.c +++ b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/raw.c @@ -138,4 +138,3 @@ void hm2_raw_write(hostmot2_t *hm2) { *hm2->raw->hal.pin.write_strobe = 0; } - diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/resolver.c b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/resolver.c old mode 100755 new mode 100644 index 38de490df4..c58b0a84e7 --- a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/resolver.c +++ b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/resolver.c @@ -45,16 +45,16 @@ int hm2_resolver_parse_md(hostmot2_t *hm2, int md_index) { hm2_module_descriptor_t *md = &hm2->md[md_index]; int i, r = 0; int resolvers_per_instance; - + // // some standard sanity checks // - + if ( ! hm2_md_is_consistent_or_complain(hm2, md_index, 0, 5, 4, 0x001F)) { HM2_ERR("inconsistent resolver Module Descriptor!\n"); return -EINVAL; } - + if (hm2->resolver.num_instances != 0) { HM2_ERR( "found duplicate Module Descriptor for %s (inconsistent firmware), not loading driver\n", @@ -62,9 +62,9 @@ int hm2_resolver_parse_md(hostmot2_t *hm2, int md_index) { ); return -EINVAL; } - + resolvers_per_instance = hm2_resolver_get_param(2); // just returns 6 at the moment - + if (hm2->config.num_resolvers > (md->instances * resolvers_per_instance)) { HM2_ERR( "config.num_resolvers=%d, but only %d are available, not loading driver\n", @@ -72,21 +72,21 @@ int hm2_resolver_parse_md(hostmot2_t *hm2, int md_index) { md->instances * resolvers_per_instance); return -EINVAL; } - + if (hm2->config.num_resolvers == 0) { return 0; } - - + + // // looks good, start initializing // - + /*At the moment it is not clear if there will ever be more than one resolver instance. If there were to be more than one then they would need to have a different base-address, and this code would need to be re-enterable. A bridge to cross when we come to it */ - + if (hm2->config.num_resolvers == -1) { hm2->resolver.num_resolvers = md->instances * resolvers_per_instance; hm2->resolver.num_instances = md->instances; @@ -94,7 +94,7 @@ int hm2_resolver_parse_md(hostmot2_t *hm2, int md_index) { hm2->resolver.num_resolvers = hm2->config.num_resolvers; hm2->resolver.num_instances = md->instances; } - + hm2->resolver.hal = (hm2_resolver_global_t *)hal_malloc( sizeof(hm2_resolver_global_t)); if (hm2->resolver.hal == NULL) { @@ -109,18 +109,18 @@ int hm2_resolver_parse_md(hostmot2_t *hm2, int md_index) { r = -ENOMEM; goto fail0; } - + for (i = 0 ; i < hm2->resolver.num_instances ; i++ ){ hm2->resolver.stride = md->register_stride; hm2->resolver.clock_frequency = md->clock_freq; hm2->resolver.version = md->version; - + hm2->resolver.command_addr = md->base_address + (0 * md->register_stride); hm2->resolver.data_addr = md->base_address + (1 * md->register_stride); hm2->resolver.status_addr = md->base_address + (2 * md->register_stride); hm2->resolver.velocity_addr = md->base_address + (3 * md->register_stride); hm2->resolver.position_addr = md->base_address + (4 * md->register_stride); - + // If there were multiple resolver function instances, this would need // to be the number of resolvers for that particular instance r = hm2_register_tram_read_region(hm2, hm2->resolver.status_addr, @@ -137,17 +137,17 @@ int hm2_resolver_parse_md(hostmot2_t *hm2, int md_index) { "register (%d)\n", i); goto fail1; } - + } - + // export the resolvers to HAL - + { int i; int ret; char name[HAL_NAME_LEN + 1]; - - rtapi_snprintf(name, sizeof(name), "%s.resolver.excitation-khz", + + rtapi_snprintf(name, sizeof(name), "%s.resolver.excitation-khz", hm2->llio->name); ret= hal_pin_float_new(name, HAL_IO, &(hm2->resolver.hal->pin.excitation_khz), @@ -156,93 +156,93 @@ int hm2_resolver_parse_md(hostmot2_t *hm2, int md_index) { HM2_ERR("error adding pin '%s', aborting\n", name); goto fail1; } - + for (i = 0; i < hm2->resolver.num_resolvers; i ++) { // pins - - rtapi_snprintf(name, sizeof(name), "%s.resolver.%02d.position", + + rtapi_snprintf(name, sizeof(name), "%s.resolver.%02d.position", hm2->llio->name, i); - ret= hal_pin_float_new(name, HAL_OUT, + ret= hal_pin_float_new(name, HAL_OUT, &(hm2->resolver.instance[i].hal.pin.position), hm2->llio->comp_id); if (ret < 0) { HM2_ERR("error adding pin '%s', aborting\n", name); goto fail1; } - - rtapi_snprintf(name, sizeof(name), "%s.resolver.%02d.angle", + + rtapi_snprintf(name, sizeof(name), "%s.resolver.%02d.angle", hm2->llio->name, i); - ret= hal_pin_float_new(name, HAL_OUT, - &(hm2->resolver.instance[i].hal.pin.angle), + ret= hal_pin_float_new(name, HAL_OUT, + &(hm2->resolver.instance[i].hal.pin.angle), hm2->llio->comp_id); if (ret < 0) { HM2_ERR("error adding pin '%s', aborting\n", name); goto fail1; } - - rtapi_snprintf(name, sizeof(name), "%s.resolver.%02d.velocity", + + rtapi_snprintf(name, sizeof(name), "%s.resolver.%02d.velocity", hm2->llio->name, i); - ret= hal_pin_float_new(name, HAL_OUT, - &(hm2->resolver.instance[i].hal.pin.velocity), + ret= hal_pin_float_new(name, HAL_OUT, + &(hm2->resolver.instance[i].hal.pin.velocity), hm2->llio->comp_id); if (ret < 0) { HM2_ERR("error adding pin '%s', aborting\n", name); goto fail1; } - - rtapi_snprintf(name, sizeof(name), "%s.resolver.%02d.count", + + rtapi_snprintf(name, sizeof(name), "%s.resolver.%02d.count", hm2->llio->name, i); - ret= hal_pin_s32_new(name, HAL_OUT, - &(hm2->resolver.instance[i].hal.pin.count), + ret= hal_pin_s32_new(name, HAL_OUT, + &(hm2->resolver.instance[i].hal.pin.count), hm2->llio->comp_id); if (ret < 0) { HM2_ERR("error adding pin '%s', aborting\n", name); goto fail1; } - + rtapi_snprintf(name, sizeof(name), "%s.resolver.%02d.rawcounts", hm2->llio->name, i); - ret= hal_pin_s32_new(name, HAL_OUT, - &(hm2->resolver.instance[i].hal.pin.rawcounts), + ret= hal_pin_s32_new(name, HAL_OUT, + &(hm2->resolver.instance[i].hal.pin.rawcounts), hm2->llio->comp_id); if (ret < 0) { HM2_ERR("error adding pin '%s', aborting\n", name); goto fail1; } - - rtapi_snprintf(name, sizeof(name), "%s.resolver.%02d.reset", + + rtapi_snprintf(name, sizeof(name), "%s.resolver.%02d.reset", hm2->llio->name, i); - ret= hal_pin_bit_new(name, HAL_IN, - &(hm2->resolver.instance[i].hal.pin.reset), + ret= hal_pin_bit_new(name, HAL_IN, + &(hm2->resolver.instance[i].hal.pin.reset), hm2->llio->comp_id); if (ret < 0) { HM2_ERR("error adding pin '%s', aborting\n", name); goto fail1; } - - rtapi_snprintf(name, sizeof(name), "%s.resolver.%02d.index-enable", + + rtapi_snprintf(name, sizeof(name), "%s.resolver.%02d.index-enable", hm2->llio->name, i); ret= hal_pin_bit_new(name, HAL_IO, - &(hm2->resolver.instance[i].hal.pin.index_enable), + &(hm2->resolver.instance[i].hal.pin.index_enable), hm2->llio->comp_id); if (ret < 0) { HM2_ERR("error adding pin '%s', aborting\n", name); goto fail1; } - - rtapi_snprintf(name, sizeof(name), "%s.resolver.%02d.error", + + rtapi_snprintf(name, sizeof(name), "%s.resolver.%02d.error", hm2->llio->name, i); - ret= hal_pin_bit_new(name, HAL_OUT, - &(hm2->resolver.instance[i].hal.pin.error), + ret= hal_pin_bit_new(name, HAL_OUT, + &(hm2->resolver.instance[i].hal.pin.error), hm2->llio->comp_id); if (ret < 0) { HM2_ERR("error adding pin '%s', aborting\n", name); goto fail1; } - - + + // parameters - rtapi_snprintf(name, sizeof(name), "%s.resolver.%02d.scale", + rtapi_snprintf(name, sizeof(name), "%s.resolver.%02d.scale", hm2->llio->name, i); ret= hal_pin_float_new(name, HAL_IO, &(hm2->resolver.instance[i].hal.pin.scale), @@ -251,8 +251,8 @@ int hm2_resolver_parse_md(hostmot2_t *hm2, int md_index) { HM2_ERR("error adding pin '%s', aborting\n", name); goto fail1; } - - rtapi_snprintf(name, sizeof(name), "%s.resolver.%02d.velocity-scale", + + rtapi_snprintf(name, sizeof(name), "%s.resolver.%02d.velocity-scale", hm2->llio->name, i); ret= hal_pin_float_new(name, HAL_IO, &(hm2->resolver.instance[i].hal.pin.vel_scale), @@ -276,7 +276,7 @@ int hm2_resolver_parse_md(hostmot2_t *hm2, int md_index) { // init the hal objects that need it // the things not initialized here will be set by hm2_resolver_tram_init() // - + *hm2->resolver.instance[i].hal.pin.reset = 0; *hm2->resolver.instance[i].hal.pin.scale = 1.0; *hm2->resolver.instance[i].hal.pin.vel_scale = 1.0; @@ -285,14 +285,14 @@ int hm2_resolver_parse_md(hostmot2_t *hm2, int md_index) { hm2->resolver.kHz = (hm2->resolver.clock_frequency / 5000); } } - - + + return hm2->resolver.num_instances; - + fail1: - // This is where we would kfree anything kmalloced. - - + // This is where we would kfree anything kmalloced. + + fail0: hm2->resolver.num_instances = 0; return r; @@ -301,14 +301,14 @@ int hm2_resolver_parse_md(hostmot2_t *hm2, int md_index) { void hm2_resolver_process_tram_read(hostmot2_t *hm2, long period) { int i; hm2_resolver_instance_t *res; - + if (hm2->resolver.num_instances <= 0) return; - + // process each resolver instance independently for (i = 0; i < hm2->resolver.num_resolvers; i ++) { - + res = &hm2->resolver.instance[i]; - + // sanity check if (*res->hal.pin.scale == 0.0) { HM2_ERR("resolver.%02d.scale == 0.0, bogus, setting to 1.0\n", i); @@ -318,11 +318,11 @@ void hm2_resolver_process_tram_read(hostmot2_t *hm2, long period) { HM2_ERR("resolver.%02d.velocity-scale == 0.0, bogus, setting to 1.0\n", i); *(res->hal.pin.vel_scale) = 1.0; } - + // PROCESS THE REGISTERS, SET THE PINS - + res->accum += (__s32)(hm2->resolver.position_reg[i] - res->old_reg ); - + if ((res->old_reg > hm2->resolver.position_reg[i]) && (res->old_reg - hm2->resolver.position_reg[i] > 0x80000000)){ res->index_cnts++; if (*res->hal.pin.index_enable){ @@ -341,13 +341,13 @@ void hm2_resolver_process_tram_read(hostmot2_t *hm2, long period) { *res->hal.pin.index_enable = 0; } } - + if (*res->hal.pin.reset){ res->offset = res->accum; } - + res->old_reg = hm2->resolver.position_reg[i]; - + *res->hal.pin.angle = hm2->resolver.position_reg[i] / 4294967296.0; *res->hal.pin.rawcounts = (res->accum >> 8); *res->hal.pin.count = (res->accum - res->offset) >> 8; @@ -365,9 +365,9 @@ void hm2_resolver_write(hostmot2_t *hm2, long period){ static u32 cmd_val, data_val; static u32 timer; u32 buff; - + if (hm2->resolver.num_instances <= 0) return; - + switch (state){ case 0: // Idle/waiting if (*hm2->resolver.hal->pin.excitation_khz < 0){ @@ -396,7 +396,7 @@ void hm2_resolver_write(hostmot2_t *hm2, long period){ } break; case 10: // wait for command register clear before setting pins - hm2->llio->read(hm2->llio,hm2->resolver.command_addr, + hm2->llio->read(hm2->llio,hm2->resolver.command_addr, &buff, sizeof(u32)); if (buff){ timer += period; @@ -409,12 +409,12 @@ void hm2_resolver_write(hostmot2_t *hm2, long period){ hm2->llio->write(hm2->llio, hm2->resolver.data_addr, &data_val,sizeof(u32)); hm2->llio->write(hm2->llio, hm2->resolver.command_addr, - &cmd_val,sizeof(u32)); + &cmd_val,sizeof(u32)); state = 20; timer = 0; return; case 20: // wait for command to clear before processing any more pins - hm2->llio->read(hm2->llio,hm2->resolver.command_addr, + hm2->llio->read(hm2->llio,hm2->resolver.command_addr, &buff, sizeof(u32)); if (buff){ timer += period; @@ -423,7 +423,7 @@ void hm2_resolver_write(hostmot2_t *hm2, long period){ state = 0; } return; - } + } state = 0; return; break; @@ -432,7 +432,7 @@ void hm2_resolver_write(hostmot2_t *hm2, long period){ "machine"); } } - + void hm2_resolver_cleanup(hostmot2_t *hm2) { if (hm2->resolver.num_instances <= 0) return; // nothing kmallocced, so nothing to kfree @@ -458,4 +458,3 @@ void hm2_resolver_print_module(hostmot2_t *hm2) { (hm2->resolver.velocity_reg[i])); } } - diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/sserial.c b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/sserial.c index 51b2fc3462..949a54966d 100644 --- a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/sserial.c +++ b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/sserial.c @@ -32,7 +32,7 @@ #include "hostmot2/bitfile.h" //utility function delarations -int hm2_sserial_stopstart(hostmot2_t *hm2, hm2_module_descriptor_t *md, +int hm2_sserial_stopstart(hostmot2_t *hm2, hm2_module_descriptor_t *md, hm2_sserial_instance_t *inst, u32 start_mode); int getbits(hm2_sserial_remote_t *chan, u64 *val, int start, int len); int setbits(hm2_sserial_remote_t *chan, u64 *val, int start, int len); @@ -55,7 +55,7 @@ int hm2_sserial_parse_md(hostmot2_t *hm2, int md_index){ int r = -EINVAL; int count = 0; int chan_counts[] = {0,0,0,0,0,0,0,0}; - + hm2->sserial.version = md->version; // @@ -68,7 +68,7 @@ int hm2_sserial_parse_md(hostmot2_t *hm2, int md_index){ "firmwares\n"); return -EINVAL; } - + if (!hm2_md_is_consistent_or_complain(hm2, md_index, 0, 6, 0x40, 0x003C)) { HM2_ERR("inconsistent Module Descriptor!\n"); return -EINVAL; @@ -156,7 +156,7 @@ int hm2_sserial_parse_md(hostmot2_t *hm2, int md_index){ inst->num_channels = chan_counts[i]; inst->command_reg_addr = md->base_address + i * md->instance_stride; inst->data_reg_addr = md->base_address + i * md->instance_stride + md->register_stride; - + buff=0x4000; //Reset HM2WRITE(inst->command_reg_addr, buff); buff=0x0001; //Clear @@ -170,20 +170,20 @@ int hm2_sserial_parse_md(hostmot2_t *hm2, int md_index){ } while (buff == 0xAA); HM2_PRINT("Smart Serial Firmware Version %i\n",buff); hm2->sserial.version = buff; - + r = check_set_baudrate(hm2, inst) < 0; if (r < 0) {goto fail0;} - + //start up in setup mode r = hm2_sserial_stopstart(hm2, md, inst, 0xF00) < 0; if(r < 0) {goto fail0;} - + inst->num_remotes = 0; - + for (c = 0 ; c < inst->num_channels ; c++) { u32 addr0, addr1, addr2; u32 user0, user1, user2; - + addr0 = md->base_address + 3 * md->register_stride + i * md->instance_stride + c * sizeof(u32); HM2READ(addr0, user0); @@ -193,29 +193,29 @@ int hm2_sserial_parse_md(hostmot2_t *hm2, int md_index){ + i * md->instance_stride + c * sizeof(u32); HM2READ(addr1, user1); HM2_DBG("Inst %i Chan %i User1 = %x\n", i, c, user1); - + addr2 = md->base_address + 5 * md->register_stride + i * md->instance_stride + c * sizeof(u32); HM2READ(addr2, user2); HM2_DBG("Inst %i Chan %i User2 = %x\n", i, c, user2); - + if (hm2->sserial.baudrate == 115200 && hm2->config.sserial_modes[i][c] != 'x') { //setup mode rtapi_print("Setup mode\n"); if ((user1 & 0xFF00) == 0x4900){ //XiXXboard - + rtapi_print("found a %4s\n", (char*)&user1); - + inst->num_remotes += 1; inst->tag |= 1<num_remotes += 1; inst->tag |= 1<num_remotes += 1; inst->tag |= 1<tag & 1<config.sserial_modes[i][c] == 'x'){ + || hm2->config.sserial_modes[i][c] == 'x'){ for (pin = 0 ; pin < hm2->num_pins ; pin++){ if (hm2->pin[pin].sec_tag == HM2_GTAG_SMARTSERIAL && (hm2->pin[pin].sec_pin & 0x0F) - 1 == c @@ -266,25 +266,25 @@ int hm2_sserial_parse_md(hostmot2_t *hm2, int md_index){ } if (inst->num_remotes > 0){ if ((r = hm2_sserial_setup_channel(hm2, inst, count)) < 0 ) { - HM2_ERR("Smart Serial setup failure on instance %i\n", + HM2_ERR("Smart Serial setup failure on instance %i\n", inst->device_id); goto fail0;} if ((r = hm2_sserial_setup_remotes(hm2, inst, md)) < 0 ) { - HM2_ERR("Remote setup failure on instance %i\n", + HM2_ERR("Remote setup failure on instance %i\n", inst->device_id); goto fail0;} if ((r = hm2_sserial_stopstart(hm2, md, inst, 0x900)) < 0 ){ - HM2_ERR("Failed to restart device %i on instance\n", + HM2_ERR("Failed to restart device %i on instance\n", inst->device_id); goto fail0;} if ((r = hm2_sserial_check_errors(hm2, inst)) < 0) { - //goto fail0; // Ignore it for the moment. + //goto fail0; // Ignore it for the moment. } //only increment the instance index if this one is populated count++ ; } } - + hm2->sserial.num_instances = count; // because of the extra increment // Stop the sserial ports. @@ -312,9 +312,9 @@ int hm2_sserial_parse_md(hostmot2_t *hm2, int md_index){ int hm2_sserial_setup_channel(hostmot2_t *hm2, hm2_sserial_instance_t *inst, int index){ int r; - + r = hal_pin_bit_newf(HAL_IN, &(inst->run), - hm2->llio->comp_id, + hm2->llio->comp_id, "%s.sserial.port-%1d.run", hm2->llio->name, index); if (r < 0) { @@ -323,7 +323,7 @@ int hm2_sserial_setup_channel(hostmot2_t *hm2, hm2_sserial_instance_t *inst, int return -EINVAL; } r = hal_pin_u32_newf(HAL_OUT, &(inst->state), - hm2->llio->comp_id, + hm2->llio->comp_id, "%s.sserial.port-%1d.port_state", hm2->llio->name, index); if (r < 0) { @@ -332,7 +332,7 @@ int hm2_sserial_setup_channel(hostmot2_t *hm2, hm2_sserial_instance_t *inst, int return -EINVAL; } r = hal_pin_u32_newf(HAL_OUT, &(inst->fault_count), - hm2->llio->comp_id, + hm2->llio->comp_id, "%s.sserial.port-%1d.fault-count", hm2->llio->name, index); if (r < 0) { @@ -341,17 +341,17 @@ int hm2_sserial_setup_channel(hostmot2_t *hm2, hm2_sserial_instance_t *inst, int return -EINVAL; } r = hal_param_u32_newf(HAL_RW, &(inst->fault_inc), - hm2->llio->comp_id, + hm2->llio->comp_id, "%s.sserial.port-%1d.fault-inc", hm2->llio->name, index); if (r < 0) { HM2_ERR("error adding parameter %s.sserial.port-%1d.fault-inc" " aborting\n",hm2->llio->name, index); return -EINVAL; - } - + } + r = hal_param_u32_newf(HAL_RW, &(inst->fault_dec), - hm2->llio->comp_id, + hm2->llio->comp_id, "%s.sserial.port-%1d.fault-dec", hm2->llio->name, index); if (r < 0) { @@ -359,9 +359,9 @@ int hm2_sserial_setup_channel(hostmot2_t *hm2, hm2_sserial_instance_t *inst, int " aborting\n",hm2->llio->name, index); return -EINVAL; } - + r = hal_param_u32_newf(HAL_RW, &(inst->fault_lim), - hm2->llio->comp_id, + hm2->llio->comp_id, "%s.sserial.port-%1d.fault-lim", hm2->llio->name, index); if (r < 0) { @@ -373,9 +373,9 @@ int hm2_sserial_setup_channel(hostmot2_t *hm2, hm2_sserial_instance_t *inst, int inst->fault_dec = 1; inst->fault_inc = 10; inst->fault_lim = 200; - + // setup read-back in all modes - + r = hm2_register_tram_read_region(hm2, inst->command_reg_addr, sizeof(u32), &inst->command_reg_read); @@ -384,7 +384,7 @@ int hm2_sserial_setup_channel(hostmot2_t *hm2, hm2_sserial_instance_t *inst, int "command register (%d)\n", index); return -EINVAL; } - + r = hm2_register_tram_read_region(hm2, inst->data_reg_addr, sizeof(u32), &inst->data_reg_read); @@ -392,7 +392,7 @@ int hm2_sserial_setup_channel(hostmot2_t *hm2, hm2_sserial_instance_t *inst, int HM2_ERR("error registering tram write region for sserial " "command register (%d)\n", index); return -EINVAL; - + } // Nothing happens without a "Do It" command r = hm2_register_tram_write_region(hm2, inst->command_reg_addr, @@ -402,19 +402,19 @@ int hm2_sserial_setup_channel(hostmot2_t *hm2, hm2_sserial_instance_t *inst, int HM2_ERR("error registering tram write region for sserial " "command register (%d)\n", index); return -EINVAL; - + } return 0; -} +} -int hm2_sserial_setup_remotes(hostmot2_t *hm2, - hm2_sserial_instance_t *inst, +int hm2_sserial_setup_remotes(hostmot2_t *hm2, + hm2_sserial_instance_t *inst, hm2_module_descriptor_t *md) { int c, r; int buff; - + inst->remotes = - (hm2_sserial_remote_t *)kzalloc(inst->num_remotes*sizeof(hm2_sserial_remote_t), + (hm2_sserial_remote_t *)kzalloc(inst->num_remotes*sizeof(hm2_sserial_remote_t), GFP_KERNEL); if (inst->remotes == NULL) { HM2_ERR("out of memory!\n"); @@ -443,9 +443,9 @@ int hm2_sserial_setup_remotes(hostmot2_t *hm2, chan->reg_2_addr = md->base_address + 5 * md->register_stride + inst->index * md->instance_stride + c * sizeof(u32); HM2_DBG("reg_2_addr = %x\n", chan->reg_2_addr); - + // Get the board ID and name before it is over-written by DoIts - hm2->llio->read(hm2->llio, chan->reg_0_addr, + hm2->llio->read(hm2->llio, chan->reg_0_addr, &buff, sizeof(u32)); chan->serialnumber = buff; HM2_DBG("BoardSerial %08x\n", chan->serialnumber); @@ -459,29 +459,29 @@ int hm2_sserial_setup_remotes(hostmot2_t *hm2, } else { rtapi_snprintf(chan->name, sizeof(chan->name), "%s.%2s.%d.%d", - hm2->llio->name, + hm2->llio->name, chan->raw_name, inst->index, c); } - + HM2_DBG("BoardName %s\n", chan->name); - - + + if (hm2_sserial_read_globals(hm2, chan) < 0) { - HM2_ERR("Failed to read/setup the globals on %s\n", + HM2_ERR("Failed to read/setup the globals on %s\n", chan->name); return -EINVAL; } - + if (hm2_sserial_read_configs(hm2, chan) < 0) { - HM2_ERR("Failed to read/setup the config data on %s\n", + HM2_ERR("Failed to read/setup the config data on %s\n", chan->name); return -EINVAL; - } - + } + if ( hm2_sserial_create_pins(hm2, chan) < 0) { - HM2_ERR("Failed to create the pins on %s\n", + HM2_ERR("Failed to create the pins on %s\n", chan->name); return -EINVAL; } @@ -493,7 +493,7 @@ int hm2_sserial_setup_remotes(hostmot2_t *hm2, } } } - return 0; + return 0; } void config_8i20(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ u32 buff; @@ -501,7 +501,7 @@ void config_8i20(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ chan->num_confs = sizeof(hm2_8i20_params) / sizeof(hm2_sserial_data_t); chan->confs = kzalloc(sizeof(hm2_8i20_params),GFP_KERNEL); memcpy(chan->confs, hm2_8i20_params, sizeof(hm2_8i20_params)); - + //8i20 has reprogrammable current scaling: buff = 0; hm2_sserial_get_bytes(hm2, chan, &buff, 0x8E8, 2); @@ -520,15 +520,15 @@ void config_7i64(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ } int hm2_sserial_read_configs(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ - + int ptoc, addr, buff, c, m; unsigned char rectype; - - hm2->llio->read(hm2->llio, chan->reg_2_addr, &buff, sizeof(u32)); - ptoc=(buff & 0xffff); - + + hm2->llio->read(hm2->llio, chan->reg_2_addr, &buff, sizeof(u32)); + ptoc=(buff & 0xffff); + if (ptoc == 0) {return chan->num_confs;} // Old 8i20 or 7i64 - + c = m = 0; chan->num_confs = 0; do { @@ -538,25 +538,25 @@ int hm2_sserial_read_configs(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ if (hm2_sserial_get_bytes(hm2, chan, &rectype, addr, 1) < 0) { return -EINVAL; } - + if (rectype == LBP_DATA) { chan->num_confs++; c = chan->num_confs - 1; chan->confs = (hm2_sserial_data_t *) - krealloc(chan->confs, + krealloc(chan->confs, chan->num_confs * sizeof(hm2_sserial_data_t), GFP_KERNEL); addr = hm2_sserial_get_bytes(hm2, chan, &chan->confs[c], addr, 14); if (addr < 0){ return -EINVAL;} - addr = hm2_sserial_get_bytes(hm2, chan, - &(chan->confs[c].UnitString), + addr = hm2_sserial_get_bytes(hm2, chan, + &(chan->confs[c].UnitString), addr, -1); if (addr < 0){ return -EINVAL;} - addr = hm2_sserial_get_bytes(hm2, chan, - &(chan->confs[c].NameString), + addr = hm2_sserial_get_bytes(hm2, chan, + &(chan->confs[c].NameString), addr, -1); if (addr < 0){ return -EINVAL;} - + if (chan->confs[c].ParmMin == chan->confs[c].ParmMax){ chan->confs[c].ParmMin = 0; chan->confs[c].ParmMax = 1; @@ -565,31 +565,31 @@ int hm2_sserial_read_configs(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ chan->num_modes++; m = chan->num_modes - 1; chan->modes = (hm2_sserial_mode_t *) - krealloc(chan->modes, + krealloc(chan->modes, chan->num_modes * sizeof(hm2_sserial_mode_t), GFP_KERNEL); addr = hm2_sserial_get_bytes(hm2, chan, &chan->modes[m], addr, 4); if (addr < 0){ return -EINVAL;} - addr = hm2_sserial_get_bytes(hm2, chan, - &(chan->modes[m].NameString), + addr = hm2_sserial_get_bytes(hm2, chan, + &(chan->modes[m].NameString), addr, -1); if (addr < 0){ return -EINVAL;} } } while (addr > 0); - + return chan->num_confs; } int hm2_sserial_read_globals(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ - + int gtoc, addr, buff; - + unsigned char rectype; hm2_sserial_data_t data; - + chan->num_globals = 0; - hm2->llio->read(hm2->llio, chan->reg_2_addr, &buff, sizeof(u32)); - gtoc=(buff & 0xffff0000) >> 16; + hm2->llio->read(hm2->llio, chan->reg_2_addr, &buff, sizeof(u32)); + gtoc=(buff & 0xffff0000) >> 16; if (gtoc == 0){ if (hm2->sserial.baudrate == 115200) { HM2_PRINT("Setup mode, creating no pins for smart-serial channel %s\n", @@ -622,18 +622,18 @@ int hm2_sserial_read_globals(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ if (addr < 0){ return -EINVAL;} addr = hm2_sserial_get_bytes(hm2, chan, &(data.NameString), addr, -1); if (addr < 0){ return -EINVAL;} - + // only keep the nonvol types, and swrevision if (data.DataType == 0x04 || data.DataType == 0x05 || 0 == strcmp(data.NameString, "swrevision")){ chan->num_globals++; chan->globals = (hm2_sserial_data_t *) - krealloc(chan->globals, + krealloc(chan->globals, chan->num_globals * sizeof(hm2_sserial_data_t), GFP_KERNEL); - - chan->globals[chan->num_globals - 1] = data; + + chan->globals[chan->num_globals - 1] = data; } } else if (rectype == LBP_MODE){ @@ -642,25 +642,25 @@ int hm2_sserial_read_globals(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ addr = hm2_sserial_get_bytes(hm2, chan, &mode, addr, 4); addr = hm2_sserial_get_bytes(hm2, chan, &mode.NameString, addr, -1); type = (mode.ModeType == 0x01)? "Software" : "Hardware"; - rtapi_print("Board %s %s Mode %i = %s\n", - chan->name, + rtapi_print("Board %s %s Mode %i = %s\n", + chan->name, type, - mode.ModeIndex, + mode.ModeIndex, mode.NameString); } } while (addr > 0); } - + if ( hm2_sserial_create_params(hm2, chan) < 0) { HM2_ERR("Failed to create parameters for device %s\n", chan->name); return -EINVAL; } - + return 0; } -int hm2_sserial_read_nvram_word(hostmot2_t *hm2, - hm2_sserial_remote_t *chan, +int hm2_sserial_read_nvram_word(hostmot2_t *hm2, + hm2_sserial_remote_t *chan, int addr, int length, void *data){ @@ -695,7 +695,7 @@ int hm2_sserial_read_nvram_word(hostmot2_t *hm2, goto fail0; } hm2->llio->read(hm2->llio, chan->reg_0_addr, data, sizeof(u32)); - + fail0: // attempt to set back to normal access buff = 0xEC000000; hm2->llio->write(hm2->llio, chan->reg_cs_addr, &buff, sizeof(u32)); @@ -708,31 +708,31 @@ int hm2_sserial_read_nvram_word(hostmot2_t *hm2, return -EINVAL; } return 0; -} - +} + int hm2_sserial_create_params(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ int i, r; hm2_sserial_data_t global; - + chan->params = hal_malloc(chan->num_globals * sizeof(hm2_sserial_params_t)); - + for (i = 0 ; i < chan->num_globals ; i++){ global = chan->globals[i]; - + r = 0; switch (global.DataType) { case 0x02: - if ( ! strcmp(global.NameString, "swrevision") + if ( ! strcmp(global.NameString, "swrevision") || ! strcmp(global.NameString, "unitnumber")){ - r = hal_param_u32_newf(HAL_RO, - &(chan->params[i].u32_param), + r = hal_param_u32_newf(HAL_RO, + &(chan->params[i].u32_param), hm2->llio->comp_id, - "%s.%s", - chan->name, + "%s.%s", + chan->name, global.NameString); if (r < 0) {HM2_ERR("Out of memory\n") ; return -ENOMEM;} - r = hm2_sserial_get_bytes(hm2, + r = hm2_sserial_get_bytes(hm2, chan, (void*)&(chan->params[i].u32_param), global.ParmAddr, @@ -744,14 +744,14 @@ int hm2_sserial_create_params(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ } break; case 0x04: - r = hal_param_u32_newf(HAL_RO, - &(chan->params[i].u32_param), + r = hal_param_u32_newf(HAL_RO, + &(chan->params[i].u32_param), hm2->llio->comp_id, - "%s.%s", - chan->name, + "%s.%s", + chan->name, global.NameString); if (r < 0) {HM2_ERR("Out of memory\n") ; return -ENOMEM;} - r = hm2_sserial_read_nvram_word(hm2, + r = hm2_sserial_read_nvram_word(hm2, chan, global.ParmAddr, global.DataLength/8, @@ -759,35 +759,35 @@ int hm2_sserial_create_params(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ if (r < 0) {HM2_ERR("SSerial Parameter read error\n") ; return -EINVAL;} break; case 0x05: - r = hal_param_s32_newf(HAL_RO, - &(chan->params[i].s32_param), + r = hal_param_s32_newf(HAL_RO, + &(chan->params[i].s32_param), hm2->llio->comp_id, - "%s.%s", - chan->name, + "%s.%s", + chan->name, chan->globals[i].NameString); if (r < 0) {HM2_ERR("Out of memory\n") ; return -ENOMEM;} - r = hm2_sserial_read_nvram_word(hm2, + r = hm2_sserial_read_nvram_word(hm2, chan, global.ParmAddr, global.DataLength/8, (void*)&(chan->params[i].s32_param)); if (r < 0) {HM2_ERR("SSerial Parameter read error\n") ; return -EINVAL;} break; - + } } return 0; } - - + + int hm2_sserial_create_pins(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ int i, j; int r = 0; char name[HAL_NAME_LEN + 1]; int data_dir; - chan->pins = (hm2_sserial_pins_t*)hal_malloc(chan->num_confs + chan->pins = (hm2_sserial_pins_t*)hal_malloc(chan->num_confs * sizeof(hm2_sserial_pins_t)); - + chan->num_read_bits = 0 ; chan->num_write_bits = 0; for (i = 0 ; i < chan->num_confs ; i++ ){ @@ -810,7 +810,7 @@ int hm2_sserial_create_pins(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ chan->confs[i].DataDir); return -EINVAL; } - + if (strcmp(chan->confs[i].UnitString, "gray") == 0){ chan->pins[i].graycode = 1; } else { @@ -829,9 +829,9 @@ int hm2_sserial_create_pins(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ chan->pins[i].invert = (hal_bit_t*) hal_malloc(chan->confs[i].DataLength * sizeof(hal_bit_t)); for (j = 0; j < chan->confs[i].DataLength ; j++){ - + rtapi_snprintf(name, sizeof(name), "%s.%s-%02d", - chan->name, + chan->name, chan->confs[i].NameString, j); r = hal_pin_bit_new(name, @@ -844,7 +844,7 @@ int hm2_sserial_create_pins(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ } if (data_dir != HAL_IN) { rtapi_snprintf(name, sizeof(name), "%s.%s-%02d-not", - chan->name, + chan->name, chan->confs[i].NameString, j); r = hal_pin_bit_new(name, @@ -858,7 +858,7 @@ int hm2_sserial_create_pins(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ } if (data_dir != HAL_OUT){ rtapi_snprintf(name, sizeof(name), "%s.%s-%02d-invert", - chan->name, + chan->name, chan->confs[i].NameString, j); r = hal_param_bit_new(name, @@ -875,7 +875,7 @@ int hm2_sserial_create_pins(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ case LBP_UNSIGNED: case LBP_SIGNED: rtapi_snprintf(name, sizeof(name), "%s.%s", - chan->name, + chan->name, chan->confs[i].NameString); r = hal_pin_float_new(name, data_dir, @@ -886,7 +886,7 @@ int hm2_sserial_create_pins(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ return r; } rtapi_snprintf(name, sizeof(name), "%s.%s-scalemax", - chan->name, + chan->name, chan->confs[i].NameString); r = hal_param_float_new(name, HAL_RW, @@ -899,7 +899,7 @@ int hm2_sserial_create_pins(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ chan->pins[i].fullscale = chan->confs[i].ParmMax; if (data_dir == HAL_OUT) {break;} rtapi_snprintf(name, sizeof(name), "%s.%s-maxlim", - chan->name, + chan->name, chan->confs[i].NameString); r = hal_param_float_new(name, HAL_RW, @@ -911,7 +911,7 @@ int hm2_sserial_create_pins(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ } chan->pins[i].maxlim = chan->confs[i].ParmMax; rtapi_snprintf(name, sizeof(name), "%s.%s-minlim", - chan->name, + chan->name, chan->confs[i].NameString); r = hal_param_float_new(name, HAL_RW, @@ -930,7 +930,7 @@ int hm2_sserial_create_pins(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ return r; case LBP_STREAM: rtapi_snprintf(name, sizeof(name), "%s.%s", - chan->name, + chan->name, chan->confs[i].NameString); r = hal_pin_u32_new(name, data_dir, @@ -943,7 +943,7 @@ int hm2_sserial_create_pins(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ break; case LBP_BOOLEAN: rtapi_snprintf(name, sizeof(name), "%s.%s", - chan->name, + chan->name, chan->confs[i].NameString); r = hal_pin_bit_new(name, data_dir, @@ -955,7 +955,7 @@ int hm2_sserial_create_pins(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ } if (data_dir != HAL_IN) { rtapi_snprintf(name, sizeof(name), "%s.%s-not", - chan->name, + chan->name, chan->confs[i].NameString); r = hal_pin_bit_new(name, data_dir, @@ -964,12 +964,12 @@ int hm2_sserial_create_pins(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ if (r < 0) { HM2_ERR("error adding pin '%s', aborting\n", name); return r; - } + } } if (data_dir != HAL_OUT) { chan->pins[i].invert = hal_malloc(sizeof(hal_bit_t)); rtapi_snprintf(name, sizeof(name), "%s.%s-invert", - chan->name, + chan->name, chan->confs[i].NameString); r = hal_param_bit_new(name, HAL_RW, @@ -978,14 +978,14 @@ int hm2_sserial_create_pins(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ if (r < 0) { HM2_ERR("error adding pin '%s', aborting\n", name); return r; - } + } } break; case LBP_ENCODER: case LBP_ENCODER_H: rtapi_snprintf(name, sizeof(name), "%s.%s.count", - chan->name, + chan->name, chan->confs[i].NameString); r = hal_pin_s32_new(name, HAL_OUT, @@ -1084,7 +1084,7 @@ int hm2_sserial_create_pins(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ break; default: HM2_ERR("Unhandled sserial data type (%i) Name %s Units %s\n", - chan->confs[i].DataType, + chan->confs[i].DataType, chan->confs[i].NameString, chan->confs[i].UnitString); } @@ -1099,7 +1099,7 @@ int hm2_sserial_register_tram(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ HM2_DBG("%s read-bits = %i, write-bits = %i\n", chan->name, chan->num_read_bits, chan->num_write_bits); - r = hm2_register_tram_read_region(hm2, chan->reg_cs_addr, sizeof(u32), + r = hm2_register_tram_read_region(hm2, chan->reg_cs_addr, sizeof(u32), &chan->reg_cs_read); if (r < 0) { HM2_ERR("error registering tram read region for sserial CS" "register (%d)\n", r); @@ -1115,7 +1115,7 @@ int hm2_sserial_register_tram(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ } else { chan->reg_0_read = NULL; } - + if (chan->num_read_bits > 32){ r = hm2_register_tram_read_region(hm2, chan->reg_1_addr, sizeof(u32), &chan->reg_1_read); @@ -1126,7 +1126,7 @@ int hm2_sserial_register_tram(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ } else { chan->reg_1_read = NULL; } - + if (chan->num_read_bits > 64){ r = hm2_register_tram_read_region(hm2, chan->reg_2_addr, sizeof(u32), &chan->reg_2_read); @@ -1137,7 +1137,7 @@ int hm2_sserial_register_tram(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ } else { chan->reg_2_read = NULL; } - + // Register the TRAM WRITE if (chan->num_write_bits > 0){ r = hm2_register_tram_write_region(hm2, chan->reg_0_addr, sizeof(u32), @@ -1149,7 +1149,7 @@ int hm2_sserial_register_tram(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ } else { chan->reg_0_write = NULL; } - + if (chan->num_write_bits > 32){ r = hm2_register_tram_write_region(hm2, chan->reg_1_addr, sizeof(u32), &(chan->reg_1_write)); @@ -1160,7 +1160,7 @@ int hm2_sserial_register_tram(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ } else { chan->reg_1_write = NULL; } - + if (chan->num_write_bits > 64){ r = hm2_register_tram_write_region(hm2, chan->reg_2_addr, sizeof(u32), &(chan->reg_2_write)); @@ -1171,9 +1171,9 @@ int hm2_sserial_register_tram(hostmot2_t *hm2, hm2_sserial_remote_t *chan){ } else { chan->reg_2_write = NULL; } - + return 0; - + fail1: return -EINVAL; } @@ -1184,28 +1184,28 @@ void hm2_sserial_prepare_tram_write(hostmot2_t *hm2, long period){ // The ports as well as setting up the pin data static int doit_err_count, comm_err_flag; // to avoid repeating error messages - int b, f, i, p, r; + int b, f, i, p, r; int bitcount; u64 buff; float val; - + if (hm2->sserial.num_instances <= 0) return; - + for (i = 0 ; i < hm2->sserial.num_instances ; i++ ) { // a state-machine to start and stop the ports, and to // supply Do-It commands when required. - + hm2_sserial_instance_t *inst = &hm2->sserial.instance[i]; - + switch (*inst->state){ case 0: // Idle if (! *inst->run){ return; } *inst->state = 0x11; inst->timer = 0; - + //set the modes for the cards hm2_sserial_setmode(hm2, inst); - + *inst->command_reg_write = 0x900 | inst->tag; HM2_DBG("Tag-All = %x\n", inst->tag); *inst->fault_count = 0; @@ -1217,18 +1217,18 @@ void hm2_sserial_prepare_tram_write(hostmot2_t *hm2, long period){ *inst->state = 0x02; break; } - + if (*inst->fault_count > inst->fault_lim) { // If there have been a large percentage of misses, for quite - // a long time, it's time to take it seriously. + // a long time, it's time to take it seriously. HM2_ERR("Smart Serial Comms Error: " "There have been more than %i errors in %i " "thread executions at least %i times. " "See other error messages for details.\n", - inst->fault_dec, + inst->fault_dec, inst->fault_inc, inst->fault_lim); - HM2_ERR("***Smart Serial Port %i will be stopped***\n",i); + HM2_ERR("***Smart Serial Port %i will be stopped***\n",i); *inst->state = 0x20; *inst->run = 0; *inst->command_reg_write = 0x800; // stop command @@ -1239,7 +1239,7 @@ void hm2_sserial_prepare_tram_write(hostmot2_t *hm2, long period){ if (doit_err_count == 4 ){ // ignore 4 errors at startup HM2_ERR("Smart Serial port %i: DoIt not cleared from previous " "servo thread. Servo thread rate probably too fast. " - "This message will not be repeated, but the " + "This message will not be repeated, but the " "%s.sserial.%1d.fault-count pin will indicate " "if this is happening frequently.\n", i, hm2->llio->name, i); @@ -1252,7 +1252,7 @@ void hm2_sserial_prepare_tram_write(hostmot2_t *hm2, long period){ if (*inst->data_reg_read & 0xff) { // indicates a failed transfer f = (*inst->data_reg_read & (comm_err_flag ^ 0xFF)); if (f != 0 && f != 0xFF) { - HM2_ERR("Smart Serial Error: port %i channel %i. " + HM2_ERR("Smart Serial Error: port %i channel %i. " "You may see this error if the FPGA card " """read"" thread is not running. " "This error message will not repeat.\n", @@ -1261,7 +1261,7 @@ void hm2_sserial_prepare_tram_write(hostmot2_t *hm2, long period){ } *inst->fault_count += inst->fault_inc; } - + if (*inst->fault_count > inst->fault_dec) { *inst->fault_count -= inst->fault_dec; } @@ -1269,8 +1269,8 @@ void hm2_sserial_prepare_tram_write(hostmot2_t *hm2, long period){ { *inst->fault_count = 0; } - - // All seems well, handle the pins. + + // All seems well, handle the pins. for (r = 0 ; r < inst->num_remotes ; r++ ) { hm2_sserial_remote_t *chan = &inst->remotes[r]; bitcount = 0; @@ -1324,7 +1324,7 @@ void hm2_sserial_prepare_tram_write(hostmot2_t *hm2, long period){ } break; case LBP_ENCODER: - // Would we ever write to a counter? + // Would we ever write to a counter? // Assume not for the time being break; case LBP_FLOAT: @@ -1342,16 +1342,16 @@ void hm2_sserial_prepare_tram_write(hostmot2_t *hm2, long period){ default: HM2_ERR("Unsupported output datatype %i (name ""%s"")\n", conf->DataType, conf->NameString); - + } bitcount = setbits(chan, &buff, bitcount, conf->DataLength); } } } - + *inst->command_reg_write = 0x1000 | inst->tag; break; - + case 0x02: // run to stop transition *inst->state = 0x10; inst->timer = 0; @@ -1386,7 +1386,7 @@ void hm2_sserial_prepare_tram_write(hostmot2_t *hm2, long period){ } int hm2_sserial_read_pins(hm2_sserial_remote_t *chan){ - static int h_flag = 0, l_flag = 0;//these are the "memory" for 2-part + static int h_flag = 0, l_flag = 0;//these are the "memory" for 2-part static int bitshift = 1; //Fanuc encoders where the full turns static u64 buff_store; //and part turns are not contiguous int b, p, r; @@ -1401,7 +1401,7 @@ int hm2_sserial_read_pins(hm2_sserial_remote_t *chan){ if (! (conf->DataDir & 0x80)){ r = getbits(chan, &buff, bitcount, conf->DataLength); if(r < 0) return r; - + switch (conf->DataType){ case LBP_PAD: // do nothing @@ -1413,14 +1413,14 @@ int hm2_sserial_read_pins(hm2_sserial_remote_t *chan){ } break; case LBP_UNSIGNED: - + if (pin->graycode){ u64 mask; for(mask = buff >> 1 ; mask != 0 ; mask = mask >> 1){ buff ^= mask; } } - + *pin->float_pin = (buff * pin->fullscale) / ((1 << conf->DataLength) - 1); break; @@ -1457,7 +1457,7 @@ int hm2_sserial_read_pins(hm2_sserial_remote_t *chan){ s32 rem1, rem2; s64 previous; u32 ppr = pin->u32_param; - + if (conf->DataType == LBP_ENCODER){ bitlength = conf->DataLength; } else { @@ -1465,8 +1465,8 @@ int hm2_sserial_read_pins(hm2_sserial_remote_t *chan){ h_flag = 0; l_flag = 0; buff_store = 0; } - - + + if (pin->graycode){ u64 mask; for(mask = buff >> 1 ; mask != 0 ; mask = mask >> 1){ @@ -1576,12 +1576,12 @@ void hm2_sserial_print_module(hostmot2_t *hm2) { HM2_PRINT(" DataLength = 0x%02x\n", conf.DataLength); HM2_PRINT(" DataType = 0x%02x\n", conf.DataType); HM2_PRINT(" DataDir = 0x%02x\n", conf.DataDir); - HM2_PRINT(" ParmMax %0i.%02i\n", (int)conf.ParmMax, + HM2_PRINT(" ParmMax %0i.%02i\n", (int)conf.ParmMax, (int)((conf.ParmMax - (int)conf.ParmMax) * 100.0)); HM2_PRINT(" ParmMin %0i.%02i\n",(int)conf.ParmMin, (int)((conf.ParmMin - (int)conf.ParmMin) * 100.0)); HM2_PRINT(" SizeOf ParmMin 0x%02zx\n", sizeof(conf.ParmMax)); - HM2_PRINT(" ParmAddr = 0x%04x\n", conf.ParmAddr); + HM2_PRINT(" ParmAddr = 0x%04x\n", conf.ParmAddr); HM2_PRINT(" UnitString = %s\n", conf.UnitString); HM2_PRINT(" NameString = %s\n\n", conf.NameString); } @@ -1592,16 +1592,16 @@ void hm2_sserial_print_module(hostmot2_t *hm2) { HM2_PRINT(" DataLength = 0x%02x\n", conf.DataLength); HM2_PRINT(" DataType = 0x%02x\n", conf.DataType); HM2_PRINT(" DataDir = 0x%02x\n", conf.DataDir); - HM2_PRINT(" ParmMax %0i.%02i\n", (int)conf.ParmMax, + HM2_PRINT(" ParmMax %0i.%02i\n", (int)conf.ParmMax, (int)((conf.ParmMax - (int)conf.ParmMax) * 100.0)); HM2_PRINT(" ParmMin %0i.%02i\n",(int)conf.ParmMin, (int)((conf.ParmMin - (int)conf.ParmMin) * 100.0)); HM2_PRINT(" SizeOf ParmMin %zi\n", sizeof(conf.ParmMax)); - HM2_PRINT(" ParmAddr = 0x%04x\n", conf.ParmAddr); + HM2_PRINT(" ParmAddr = 0x%04x\n", conf.ParmAddr); HM2_PRINT(" UnitString = %s\n", conf.UnitString); HM2_PRINT(" NameString = %s\n\n", conf.NameString); } - HM2_PRINT(" Modes:\n"); + HM2_PRINT(" Modes:\n"); for (m = 0; m < hm2->sserial.instance[i].remotes[r].num_modes; m++){ hm2_sserial_mode_t mode = hm2->sserial.instance[i].remotes[r].modes[m]; HM2_PRINT(" RecordType = 0x%02x\n", mode.RecordType); @@ -1616,40 +1616,40 @@ void hm2_sserial_print_module(hostmot2_t *hm2) { } int hm2_sserial_get_bytes(hostmot2_t *hm2, hm2_sserial_remote_t *chan, void *buffer, int addr, int size ){ - // Gets the bytes one at a time. This could be done more efficiently. + // Gets the bytes one at a time. This could be done more efficiently. char *ptr; u32 data; int string = size; // -1 in size means "find null" for strings. -2 means don't lcase - + ptr = (char*)buffer; while(0 != size){ data = 0x4C000000 | addr++; hm2->llio->write(hm2->llio, chan->reg_cs_addr, &data, sizeof(u32)); - + if (0 > hm2_sserial_waitfor(hm2, chan->reg_cs_addr, 0x0000FF00, 24)){ HM2_ERR("Timeout trying to read config data in sserial_get_bytes\n"); return -EINVAL; } data = 0x1000 | (1 << chan->index); hm2->llio->write(hm2->llio, chan->command_reg_addr, &data, sizeof(u32)); - + if (0 > hm2_sserial_waitfor(hm2, chan->command_reg_addr, 0xFFFFFFFF, 25)){ HM2_ERR("Timeout during do-it in sserial_get_bytes\n"); return -EINVAL; } - + hm2->llio->read(hm2->llio, chan->reg_0_addr, &data, sizeof(u32)); data &= 0x000000FF; size--; if (size < 0) { // string data if (data == 0 || size < (-HM2_SSERIAL_MAX_STRING_LENGTH)){ - size = 0; + size = 0; } else if (string > -2 && data >= 'A' && data <= 'Z') { data |= 0x20; // lower case } - } - + } + *(ptr++) = (unsigned char)data; } return addr; @@ -1660,13 +1660,13 @@ int getbits(hm2_sserial_remote_t *chan, u64 *val, int start, int len){ long long user1 = (chan->reg_1_read == NULL)? 0 : *chan->reg_1_read; long long user2 = (chan->reg_2_read == NULL)? 0 : *chan->reg_2_read; long long mask = (~0ull >> (64 - len)); - + if (start + len <= 32){ *val = (user0 >> start) & mask; } else if (start + len <= 64){ if (start >= 32){ *val = (user1 >> (start - 32)) & mask; - } else { + } else { *val = (((user1 << 32) | user0) >> start ) & mask; } } else { @@ -1675,7 +1675,7 @@ int getbits(hm2_sserial_remote_t *chan, u64 *val, int start, int len){ } else if (start >= 32) { *val = (((user2 << 32) | user1) >> (start - 32)) & mask; } else { - *val = ((user2 << (64 - start)) | (user1 << (32 - start)) + *val = ((user2 << (64 - start)) | (user1 << (32 - start)) | (user0 >> start)) & mask; } } @@ -1687,7 +1687,7 @@ int setbits(hm2_sserial_remote_t *chan, u64 *val, int start, int len){ // Assumes that all registers are zeroed elsewhere as required long long mask0, mask1, mask2; int end = start + len; - + if (end <= 32){ mask0 = (~0ull >> (64 - len)); *chan->reg_0_write |= (*val & mask0) << start; @@ -1695,7 +1695,7 @@ int setbits(hm2_sserial_remote_t *chan, u64 *val, int start, int len){ if (start >= 32){ mask1 = (~0ull >> (64 - len)); *chan->reg_1_write |= (*val & mask1) << (start - 32); - } else { + } else { mask0 = (~0ull >> (32 + start)); mask1 = (~0ull >> (96 - (end))) << (32 - start); *chan->reg_0_write |= (*val & mask0) << start; @@ -1722,18 +1722,18 @@ int setbits(hm2_sserial_remote_t *chan, u64 *val, int start, int len){ return end; } -int hm2_sserial_stopstart(hostmot2_t *hm2, hm2_module_descriptor_t *md, +int hm2_sserial_stopstart(hostmot2_t *hm2, hm2_module_descriptor_t *md, hm2_sserial_instance_t *inst, u32 start_mode){ u32 buff, addr; int i = inst->index; int c; - + buff=0x800; //Stop All hm2->llio->write(hm2->llio, inst->command_reg_addr, &buff, sizeof(u32)); if (hm2_sserial_waitfor(hm2, inst->command_reg_addr, 0xFFFFFFFF,51) < 0){ return -EINVAL; } - + for (c = 0 ; c < inst->num_channels ; c++){ if (hm2->config.sserial_modes[i][c] != 'x'){ start_mode |= 1 << c; @@ -1778,24 +1778,24 @@ int hm2_sserial_check_errors(hostmot2_t *hm2, hm2_sserial_instance_t *inst){ int err_flag = 0; u32 err_mask = 0xFF00E1FF; const char *err_list[32] = {"CRC error", "Invalid cookie", "Overrun", - "Timeout", "Extra character", "Serial Break Error", "Remote Fault", - "Too many errors", - - "Remote fault", "unused", "unused", "unused", "unused", + "Timeout", "Extra character", "Serial Break Error", "Remote Fault", + "Too many errors", + + "Remote fault", "unused", "unused", "unused", "unused", "Communication error", "No Remote ID", "Communication Not Ready", - + "unused","unused","unused","unused","unused","unused","unused","unused", - - "Watchdog Fault", "No Enable", "Over Temperature", "Over Current", + + "Watchdog Fault", "No Enable", "Over Temperature", "Over Current", "Over Voltage", "Under Voltage", "Illegal Remote Mode", "LBPCOM Fault"}; - + for (r = 0 ; r < inst->num_remotes ; r++){ hm2_sserial_remote_t *chan=&inst->remotes[r]; buff = chan->status; buff &= err_mask; for (i = 31 ; i > 0 ; i--){ if (buff & (1 << i)) { - HM2_ERR("Smart serial card %s error = (%i) %s\n", + HM2_ERR("Smart serial card %s error = (%i) %s\n", chan->name, i, err_list[i]); err_flag = -EINVAL; } @@ -1845,7 +1845,7 @@ int getlocal32(hostmot2_t *hm2, hm2_sserial_instance_t *inst, int addr){ hm2_sserial_waitfor(hm2, inst->command_reg_addr, 0xFFFFFFFF, 22); HM2READ(inst->data_reg_addr, buff); val = (val << 8) | buff; - } + } return val; } @@ -1853,33 +1853,33 @@ int setlocal32(hostmot2_t *hm2, hm2_sserial_instance_t *inst, int addr, int val) int bytes = 0; u32 buff; for (;bytes < 4; bytes++){ - + if (hm2_sserial_waitfor(hm2, inst->command_reg_addr, 0xFFFFFFFF, 22) < 0) { HM2_ERR("Command register not ready\n"); return -1; } - + buff = val & 0xff; val >>= 8; HM2WRITE(inst->data_reg_addr, buff); buff = WRITE_LOCAL_CMD | (addr + bytes); HM2WRITE(inst->command_reg_addr, buff); - + if (hm2_sserial_waitfor(hm2, inst->command_reg_addr, 0xFFFFFFFF, 22) < 0) { HM2_ERR("Write failure attempting to set baud rate\n"); return -1; } - } + } return 0; } int check_set_baudrate(hostmot2_t *hm2, hm2_sserial_instance_t *inst){ u32 baudrate; int baudaddr; - int lbpstride; + int lbpstride; u32 buff; int c; - + if (hm2->sserial.baudrate < 0){ return 0;} if (hm2->sserial.version < 34) { HM2_ERR("Setting baudrate is not supported in the current firmware version\n" @@ -1903,7 +1903,7 @@ int check_set_baudrate(hostmot2_t *hm2, hm2_sserial_instance_t *inst){ } } buff = 0x800; HM2WRITE(inst->command_reg_addr, buff); // stop all - + return 0; } @@ -1926,7 +1926,7 @@ void hm2_sserial_cleanup(hostmot2_t *hm2){ int i,r; u32 buff; for (i = 1 ; i < hm2->sserial.num_instances; i++){ - //Shut down the sserial devices rather than leave that to the watchdog. + //Shut down the sserial devices rather than leave that to the watchdog. buff = 0x800; hm2->llio->write(hm2->llio, hm2->sserial.instance[i].command_reg_addr, @@ -1945,8 +1945,6 @@ void hm2_sserial_cleanup(hostmot2_t *hm2){ kfree(hm2->sserial.instance[i].remotes); } } - + } } - - diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/stepgen.c b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/stepgen.c old mode 100755 new mode 100644 index 355de8d7c3..bb41f25505 --- a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/stepgen.c +++ b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/stepgen.c @@ -377,7 +377,7 @@ static void hm2_stepgen_update_mode(hostmot2_t *hm2, int i) { hm2->stepgen.mode_reg[i] = 0; } // In that case, we can assume that we have been fed a step table and the - // step_type is actually the table length. + // step_type is actually the table length. for (j = *inst->hal.pin.step_type - 1; j >= 0 ; j--){ buff = ((*inst->hal.pin.table[j / 4] >> ((j % 4) * 8)) & 0xFF); @@ -475,7 +475,7 @@ static void hm2_stepgen_force_write_dir_setup_time(hostmot2_t *hm2) { hm2->stepgen.dir_setup_time_reg, (hm2->stepgen.num_instances * sizeof(u32)) ); - + } @@ -591,7 +591,7 @@ int hm2_stepgen_parse_md(hostmot2_t *hm2, int md_index) { int r; - // + // // some standard sanity checks // @@ -636,9 +636,9 @@ int hm2_stepgen_parse_md(hostmot2_t *hm2, int md_index) { } - // + // // looks good, start initializing - // + // if (hm2->config.num_stepgens == -1) { @@ -743,8 +743,8 @@ int hm2_stepgen_parse_md(hostmot2_t *hm2, int md_index) { } for (i = 0; i < hm2->stepgen.num_instances; i ++) { - - // Work out if table setup registers are needed. + + // Work out if table setup registers are needed. { int j = 0; hm2->stepgen.instance[i].table_width = 0; @@ -1053,4 +1053,3 @@ void hm2_stepgen_print_module(hostmot2_t *hm2) { HM2_PRINT(" pulse_idle_width = 0x%08X (%u ns)\n", hm2->stepgen.pulse_idle_width_reg[i], *hm2->stepgen.instance[i].hal.pin.stepspace); } } - diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/tp_pwmgen.c b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/tp_pwmgen.c old mode 100755 new mode 100644 diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/tram.c b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/tram.c old mode 100755 new mode 100644 index eded225c57..521125c3bd --- a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/tram.c +++ b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/tram.c @@ -236,4 +236,3 @@ void hm2_tram_cleanup(hostmot2_t *hm2) { if (hm2->tram_read_buffer != NULL) kfree(hm2->tram_read_buffer); if (hm2->tram_write_buffer != NULL) kfree(hm2->tram_write_buffer); } - diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/uart.c b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/uart.c index f8da33b0e9..125a0af24c 100644 --- a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/uart.c +++ b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/uart.c @@ -25,27 +25,27 @@ #include "hal/hal.h" #include "hostmot2/hostmot2.h" -int hm2_uart_parse_md(hostmot2_t *hm2, int md_index) +int hm2_uart_parse_md(hostmot2_t *hm2, int md_index) { // All this function actually does is allocate memory - // and give the uart modules names. - - - // + // and give the uart modules names. + + + // // some standard sanity checks // - + int i, r = -EINVAL; hm2_module_descriptor_t *md = &hm2->md[md_index]; static int last_gtag = -1; - + //The UART declares a TX and RX module separately - + if (!hm2_md_is_consistent_or_complain(hm2, md_index, 0, 4, 0x10, 0x000F)) { HM2_ERR("inconsistent Module Descriptor!\n"); return -EINVAL; } - + if (hm2->uart.num_instances > 1 && last_gtag == md->gtag) { HM2_ERR( "found duplicate Module Descriptor for %s (inconsistent " @@ -55,7 +55,7 @@ int hm2_uart_parse_md(hostmot2_t *hm2, int md_index) return -EINVAL; } last_gtag = md->gtag; - + if (hm2->config.num_uarts > md->instances) { HM2_ERR( "config defines %d uarts, but only %d are available, " @@ -65,23 +65,23 @@ int hm2_uart_parse_md(hostmot2_t *hm2, int md_index) ); return -EINVAL; } - + if (hm2->config.num_uarts == 0) { return 0; } - - // + + // // looks good, start, or continue, initializing - // - + // + if (hm2->uart.num_instances == 0){ if (hm2->config.num_uarts == -1) { hm2->uart.num_instances = md->instances; } else { hm2->uart.num_instances = hm2->config.num_uarts; } - - hm2->uart.instance = (hm2_uart_instance_t *)hal_malloc(hm2->uart.num_instances + + hm2->uart.instance = (hm2_uart_instance_t *)hal_malloc(hm2->uart.num_instances * sizeof(hm2_uart_instance_t)); if (hm2->uart.instance == NULL) { HM2_ERR("out of memory!\n"); @@ -89,7 +89,7 @@ int hm2_uart_parse_md(hostmot2_t *hm2, int md_index) goto fail0; } } - + for (i = 0 ; i < hm2->uart.num_instances ; i++){ hm2_uart_instance_t *inst = &hm2->uart.instance[i]; // For the time being we assume that all UARTS come on pairs @@ -103,36 +103,36 @@ int hm2_uart_parse_md(hostmot2_t *hm2, int md_index) inst->tx2_addr = md->base_address + i * md->instance_stride + 0x4; inst->tx3_addr = md->base_address + i * md->instance_stride + 0x8; inst->tx4_addr = md->base_address + i * md->instance_stride + 0xC; - inst->tx_fifo_count_addr = (md->base_address - + md->register_stride + inst->tx_fifo_count_addr = (md->base_address + + md->register_stride + i * md->instance_stride); - inst->tx_bitrate_addr = (md->base_address + inst->tx_bitrate_addr = (md->base_address + 2 * md->register_stride + i * md->instance_stride); - inst->tx_mode_addr = (md->base_address + inst->tx_mode_addr = (md->base_address + 3 * md->register_stride - +i * md->instance_stride); + +i * md->instance_stride); } else if (md->gtag == HM2_GTAG_UART_RX){ inst->rx1_addr = md->base_address + i * md->instance_stride; inst->rx2_addr = md->base_address + i * md->instance_stride + 0x4; inst->rx3_addr = md->base_address + i * md->instance_stride + 0x8; inst->rx4_addr = md->base_address + i * md->instance_stride + 0xC; - inst->rx_fifo_count_addr = (md->base_address - + md->register_stride + inst->rx_fifo_count_addr = (md->base_address + + md->register_stride + i * md->instance_stride); - inst->rx_bitrate_addr = (md->base_address + inst->rx_bitrate_addr = (md->base_address + 2 * md->register_stride + i * md->instance_stride); - inst->rx_mode_addr = (md->base_address - + 3 * md->register_stride - +i * md->instance_stride); + inst->rx_mode_addr = (md->base_address + + 3 * md->register_stride + +i * md->instance_stride); } else{ HM2_ERR("Something very wierd happened"); goto fail0; } - + } return hm2->uart.num_instances; fail0: @@ -146,14 +146,14 @@ int hm2_uart_setup(char *name, int bitrate, s32 tx_mode, s32 rx_mode){ hm2_uart_instance_t *inst = 0; u32 buff; int i,r; - + i = hm2_get_uart(&hm2, name); if (i < 0){ HM2_ERR_NO_LL("Can not find UART instance %s.\n", name); return -1; } inst = &hm2->uart.instance[i]; - + buff = (u32)((bitrate * 1048576.0)/inst->clock_freq); //20 bits in this version r = 0; if (buff != inst->bitrate){ @@ -165,22 +165,22 @@ int hm2_uart_setup(char *name, int bitrate, s32 tx_mode, s32 rx_mode){ r += hm2->llio->write(hm2->llio, inst->rx_fifo_count_addr, &buff, sizeof(u32)); // clear fifo r += hm2->llio->write(hm2->llio, inst->tx_fifo_count_addr, &buff, sizeof(u32)); // clear fifo } - + if (tx_mode >= 0) { buff = ((u32)tx_mode) & 0x7f; r += hm2->llio->write(hm2->llio, inst->tx_mode_addr, &buff, sizeof(u32)); } - + if (rx_mode >= 0) { buff = ((u32)rx_mode) & 0xff; r += hm2->llio->write(hm2->llio, inst->rx_mode_addr, &buff, sizeof(u32)); } - + if (r < 0) { HM2_ERR("UART: hm2->llio->write failure %s\n", name); return -1; } - + return 0; } @@ -193,7 +193,7 @@ int hm2_uart_send(char *name, unsigned char data[], int count) int r, c; int inst; static int err_flag = 0; - + inst = hm2_get_uart(&hm2, name); if (inst < 0 && !err_flag){ HM2_ERR_NO_LL("Can not find UART instance %s.\n", name); @@ -201,16 +201,16 @@ int hm2_uart_send(char *name, unsigned char data[], int count) return -1; } if (hm2->uart.instance[inst].bitrate == 0 && !err_flag){ - HM2_ERR("The selected UART instance %s.\n" + HM2_ERR("The selected UART instance %s.\n" "Has not been configured.\n", name); - err_flag = 1; // don't fill dmesg with junk. + err_flag = 1; // don't fill dmesg with junk. return -1; } - + c = 0; err_flag = 0; while (c < count - 3){ - buff = (data[c] + + buff = (data[c] + (data[c+1] << 8) + (data[c+2] << 16) + (data[c+3] << 24)); @@ -223,7 +223,7 @@ int hm2_uart_send(char *name, unsigned char data[], int count) c = c + 4; } switch(count - c){ - case 0: + case 0: return c; case 1: buff = data[c]; @@ -236,7 +236,7 @@ int hm2_uart_send(char *name, unsigned char data[], int count) return c + 1; } case 2: - buff = (data[c] + + buff = (data[c] + (data[c+1] << 8)); r = hm2->llio->write(hm2->llio, hm2->uart.instance[inst].tx2_addr, &buff, sizeof(u32)); @@ -247,7 +247,7 @@ int hm2_uart_send(char *name, unsigned char data[], int count) return c + 2; } case 3: - buff = (data[c] + + buff = (data[c] + (data[c+1] << 8) + (data[c+2] << 16)); r = hm2->llio->write(hm2->llio, hm2->uart.instance[inst].tx3_addr, @@ -274,36 +274,36 @@ int hm2_uart_read(char *name, unsigned char data[]) int inst; u32 buff; static int err_flag = 0; - + inst = hm2_get_uart(&hm2, name); - + if (inst < 0){ HM2_ERR_NO_LL("Can not find UART instance %s.\n", name); return -1; } if (hm2->uart.instance[inst].bitrate == 0 && !err_flag){ - HM2_ERR("The selected UART instance %s.\n" + HM2_ERR("The selected UART instance %s.\n" "Has not been configured.\n", name); err_flag = 1; return -1; } - + err_flag = 0; - + r = hm2->llio->read(hm2->llio, hm2->uart.instance[inst].rx_fifo_count_addr, &buff, sizeof(u32)); - - count = buff & 0x1F; + + count = buff & 0x1F; c = 0; while (c < count - 3 && c < 16){ r = hm2->llio->read(hm2->llio, hm2->uart.instance[inst].rx4_addr, &buff, sizeof(u32)); - + if (r < 0) { HM2_ERR("UART: hm2->llio->read failure %s\n", name); return r; } - + data[c] = (buff & 0x000000FF); data[c+1] = (buff & 0x0000FF00) >> 8; data[c+2] = (buff & 0x00FF0000) >> 16; @@ -312,7 +312,7 @@ int hm2_uart_read(char *name, unsigned char data[]) } switch(count - c){ - case 0: + case 0: return c; case 1: r = hm2->llio->read(hm2->llio, hm2->uart.instance[inst].rx1_addr, @@ -349,15 +349,15 @@ void hm2_uart_print_module(hostmot2_t *hm2){ HM2_PRINT(" version: %d\n", hm2->uart.version); HM2_PRINT(" channel configurations\n"); for (i = 0; i < hm2->uart.num_instances; i ++) { - HM2_PRINT(" clock_frequency: %d Hz (%s MHz)\n", - hm2->uart.instance[i].clock_freq, + HM2_PRINT(" clock_frequency: %d Hz (%s MHz)\n", + hm2->uart.instance[i].clock_freq, hm2_hz_to_mhz(hm2->uart.instance[i].clock_freq)); HM2_PRINT(" instance %d:\n", i); HM2_PRINT(" HAL name = %s\n", hm2->uart.instance[i].name); } } -// The following standard Hostmot2 functions are not currently used by uart. +// The following standard Hostmot2 functions are not currently used by uart. void hm2_uart_cleanup(hostmot2_t *hm2) { @@ -366,4 +366,3 @@ void hm2_uart_cleanup(hostmot2_t *hm2) void hm2_uart_write(hostmot2_t *hm2) { } - diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/watchdog.c b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/watchdog.c old mode 100755 new mode 100644 index 174451747a..404159ed93 --- a/src/modules/managed/drivers/hostmot2/hostmot2_core/src/watchdog.c +++ b/src/modules/managed/drivers/hostmot2/hostmot2_core/src/watchdog.c @@ -342,4 +342,3 @@ void hm2_watchdog_write(hostmot2_t *hm2, long period_ns) { hm2_watchdog_force_write(hm2); } - diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_core/test/hostmot2_test/src/hm2_test.h b/src/modules/managed/drivers/hostmot2/hostmot2_core/test/hostmot2_test/src/hm2_test.h index ad347c6490..090200c567 100644 --- a/src/modules/managed/drivers/hostmot2/hostmot2_core/test/hostmot2_test/src/hm2_test.h +++ b/src/modules/managed/drivers/hostmot2/hostmot2_core/test/hostmot2_test/src/hm2_test.h @@ -30,4 +30,3 @@ typedef struct { hm2_lowlevel_io_t llio; } hm2_test_t; - diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_pci/src/hm2_pci.c b/src/modules/managed/drivers/hostmot2/hostmot2_pci/src/hm2_pci.c old mode 100755 new mode 100644 diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_pci/src/hm2_pci.h b/src/modules/managed/drivers/hostmot2/hostmot2_pci/src/hm2_pci.h index 9b5cf58666..50d011112f 100644 --- a/src/modules/managed/drivers/hostmot2/hostmot2_pci/src/hm2_pci.h +++ b/src/modules/managed/drivers/hostmot2/hostmot2_pci/src/hm2_pci.h @@ -28,7 +28,7 @@ -// +// // PCI Device IDs and SubSystem Device IDs // @@ -138,4 +138,3 @@ typedef struct { unsigned long data_base_addr; hm2_lowlevel_io_t llio; } hm2_pci_t; - diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_setsserial/src/setsserial.c b/src/modules/managed/drivers/hostmot2/hostmot2_setsserial/src/setsserial.c index 2eacafc811..bf33c1ec96 100644 --- a/src/modules/managed/drivers/hostmot2/hostmot2_setsserial/src/setsserial.c +++ b/src/modules/managed/drivers/hostmot2/hostmot2_setsserial/src/setsserial.c @@ -16,7 +16,7 @@ // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // // -// The code in this file is based on UFLBP.PAS by Peter C. Wallace. +// The code in this file is based on UFLBP.PAS by Peter C. Wallace. #include "user_pci/config_module.h" #include RTAPI_INC_SLAB_H @@ -53,7 +53,7 @@ int waitfor(void){ return -1; } } while (buff); - + return 0; } @@ -80,7 +80,7 @@ int setup_start(void){ u32 buff=0xF00 | 1 << remote->index; HM2WRITE(remote->command_reg_addr, buff); if (waitfor() < 0) return -1; - HM2READ(remote->data_reg_addr, buff); + HM2READ(remote->data_reg_addr, buff); rtapi_print("setup start: data_reg readback = %x\n", buff); if (buff & (1 << remote->index)){ rtapi_print("Remote failed to start\n"); @@ -99,19 +99,19 @@ int nv_access(u32 type){ int set_nvram_param(u32 addr, u32 value){ u32 buff; - + if (stop_all() < 0) goto fail0; if (setup_start() < 0) goto fail0; if (nv_access(LBPNONVOLEEPROM) < 0) goto fail0; - + // value to set HM2WRITE(remote->reg_0_addr, value); - buff = WRITE_REM_WORD_CMD | addr; + buff = WRITE_REM_WORD_CMD | addr; HM2WRITE(remote->reg_cs_addr, buff); if (doit() < 0) goto fail0; - + if (nv_access(LBPNONVOLCLEAR) < 0) goto fail0; - + return 0; fail0: // It's all gone wrong buff=0x800; //Stop @@ -148,7 +148,7 @@ int setlocal(int addr, int val, int bytes){ buff = WRITE_LOCAL_CMD | (addr + i); HM2WRITE(remote->command_reg_addr, buff); if (waitfor() < 0) return -1; - } + } return 0; } @@ -288,7 +288,7 @@ int sslbp_write_double(u32 addr, u32 data0, u32 data1){ return 0; } - + void flash_start(void){ sslbp_write_lbp(LBPNONVOL_flag, LBPNONVOLFLASH); } @@ -296,13 +296,13 @@ void flash_start(void){ void flash_stop(void){ sslbp_write_lbp(LBPNONVOL_flag, 0); } - + int sslbp_flash(char *fname){ const struct firmware *fw; struct device dev; int r; int write_sz, erase_sz; - + if (strstr("8i20", remote->name)){ if (hm2->sserial.version < 37){ rtapi_print("SSLBP Version must be at least v37 to flash the 8i20" @@ -316,15 +316,15 @@ int sslbp_flash(char *fname){ "\n",hm2->sserial.version); return -1; } - + if (hm2->sserial.baudrate != 115200){ rtapi_print("To flash firmware the baud rate of the board must be set " "to 115200 by jumper, and in Hostmot2 using the " "sserial_baudrate modparam\n"); return -1; } - - //Copied direct from hostmot2.c. A bit of a faff, but seems to be necessary. + + //Copied direct from hostmot2.c. A bit of a faff, but seems to be necessary. memset(&dev, '\0', sizeof(dev)); #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30) strncpy(dev.bus_id, hm2->llio->name, BUS_ID_SIZE); @@ -347,21 +347,21 @@ int sslbp_flash(char *fname){ if (r != 0) { HM2_ERR("request for firmware %s failed, aborting\n", fname); return -1; - } + } rtapi_print("Firmware size 0x%zx\n", fw->size); - + if (setup_start() < 0) goto fail0; flash_start(); write_sz = 1 << sslbp_read_byte(LBPFLASHWRITESIZELOC); erase_sz = 1 << sslbp_read_byte(LBPFLASHERASESIZELOC); HM2_PRINT("Write Size = %x, Erase Size = %x\n", write_sz, erase_sz); flash_stop(); - + //Programming Loop { int ReservedBlock = 0; int StartBlock = ReservedBlock + 1; - + int blocknum = StartBlock; int block_start; int i, j, t; @@ -384,11 +384,11 @@ int sslbp_flash(char *fname){ for (j = 0 ; j < write_sz ; j += 8){ u32 data0, data1, m; m = block_start + i + j; - data0 = (fw->data[m] + data0 = (fw->data[m] + (fw->data[m + 1] << 8) + (fw->data[m + 2] << 16) + (fw->data[m + 3] << 24)); - data1 = (fw->data[m + 4] + data1 = (fw->data[m + 4] + (fw->data[m + 5] << 8) + (fw->data[m + 6] << 16) + (fw->data[m + 7] << 24)); @@ -404,17 +404,17 @@ int sslbp_flash(char *fname){ HM2_PRINT("Wrote block %i\n", blocknum); } else // Looks like an all-zeros block - { + { HM2_PRINT("Skipped Block %i\n", blocknum); } blocknum++; } } - + release_firmware(fw); - + return 0; - + fail0: flash_stop(); return -1; @@ -424,20 +424,20 @@ int rtapi_app_main(void) { int cnt; char **cmd_list; - + comp_id = hal_init("setsserial"); hal_ready(comp_id); - + cmd_list = argv_split(GFP_KERNEL, cmd, &cnt); - + remote = hm2_get_sserial(&hm2, cmd_list[1]); - if (! remote) { + if (! remote) { rtapi_print_msg(RTAPI_MSG_ERR, - "Unable to find sserial remote corresponding to %s\n", + "Unable to find sserial remote corresponding to %s\n", cmd_list[1]); return -1; - } - + } + if (! strncmp("set", cmd_list[0], 3) && cnt == 3){ u32 value; u32 addr; @@ -450,9 +450,9 @@ int rtapi_app_main(void) break; } } - if (! addr) { + if (! addr) { rtapi_print_msg(RTAPI_MSG_ERR, - "Unable to find parameter corresponding to %s\n", + "Unable to find parameter corresponding to %s\n", cmd_list[1]); return -1; } @@ -464,12 +464,12 @@ int rtapi_app_main(void) if (set_nvram_param(addr, value) < 0) { rtapi_print_msg(RTAPI_MSG_ERR, "Parameter setting failed\n"); return -1; - } + } else { rtapi_print_msg(RTAPI_MSG_ERR, "Parameter setting success\n"); return 0; } - } + } else if (! strncmp("flash", cmd_list[0], 5) && cnt == 3){ rtapi_print("flash command\n"); if ( ! strstr(cmd_list[2], ".BIN")){ @@ -480,19 +480,19 @@ int rtapi_app_main(void) if (sslbp_flash(cmd_list[2]) < 0){ rtapi_print_msg(RTAPI_MSG_ERR, "Firmware Flash Failed\n"); return -1; - } + } else { rtapi_print_msg(RTAPI_MSG_ERR, "Firmware Flash Success\n"); return 0; - } + } } else { - rtapi_print_msg(RTAPI_MSG_ERR, - "Unknown commmand or wrong number of parameters to " + rtapi_print_msg(RTAPI_MSG_ERR, + "Unknown commmand or wrong number of parameters to " "setsserial command"); return -1; } - + return 0; } @@ -500,7 +500,3 @@ void rtapi_app_exit(void) { hal_exit(comp_id); } - - - - diff --git a/src/modules/managed/drivers/hostmot2/hostmot2_soc_ol/src/hm2_soc_ol.h b/src/modules/managed/drivers/hostmot2/hostmot2_soc_ol/src/hm2_soc_ol.h index 1e580710bc..0b2f34abb2 100644 --- a/src/modules/managed/drivers/hostmot2/hostmot2_soc_ol/src/hm2_soc_ol.h +++ b/src/modules/managed/drivers/hostmot2/hostmot2_soc_ol/src/hm2_soc_ol.h @@ -24,8 +24,8 @@ #define HM2_SOC_MAX_BOARDS 2 -// AFAICT hm2_soc_pins_t struct -// is not used, its members are +// AFAICT hm2_soc_pins_t struct +// is not used, its members are // not referenced anywhere // and the driver does not create // pins of these names @@ -58,4 +58,3 @@ typedef struct { int debug; int already_programmed; } hm2_soc_t; - diff --git a/src/modules/managed/drivers/hostmot2/mesa_uart/src/mesa_uart.comp b/src/modules/managed/drivers/hostmot2/mesa_uart/src/mesa_uart.comp index 77ba788d9c..5031c95fc2 100644 --- a/src/modules/managed/drivers/hostmot2/mesa_uart/src/mesa_uart.comp +++ b/src/modules/managed/drivers/hostmot2/mesa_uart/src/mesa_uart.comp @@ -1,13 +1,13 @@ component mesa_uart "An example component demonstrating how to access the Hostmot2 UART"; -description """This component creates 16 input and 16 output pins. It transmits +description """This component creates 16 input and 16 output pins. It transmits {name}.N.tx-bytes on the selected UART every thread cycle and reads up to 16 bytes each cycle out of the recieve FIFO and writes the values to the associated -output pins. {name}.rx-bytes indicates how many pins have been written to. +output pins. {name}.rx-bytes indicates how many pins have been written to. (pins > rx-bytes simply hold their previous value) -This module uses the names= mode of loadrt declaration to specifiy which UART -instances to enable. A check is included to ensure that the count= option is +This module uses the names= mode of loadrt declaration to specifiy which UART +instances to enable. A check is included to ensure that the count= option is not used instead. The component takes parameters in the form of a comma-separated @@ -15,18 +15,18 @@ list of UART instance names, for example: \\fB loadrt mesa_uart names=hm2_5i23.0.uart.0,hm2_5i23.0.uart.7\\fR -Note that no spaces are allowed in the string unless it is delimited by double -quotes. +Note that no spaces are allowed in the string unless it is delimited by double +quotes. -The UART instance names are printed to the dmesg buffer during the Hostmot2 -setup sequence, one for each bspi instance included in the bitfile loaded to -each installed card during the Hostmot2 setup sequence. Type "dmesg" at the +The UART instance names are printed to the dmesg buffer during the Hostmot2 +setup sequence, one for each bspi instance included in the bitfile loaded to +each installed card during the Hostmot2 setup sequence. Type "dmesg" at the terminal prompt to view the output. The component exports two functions, send and receive, which need to be added to a realtime thread. -The above example will output data on UART channels 0 and 7 and the pins will +The above example will output data on UART channels 0 and 7 and the pins will have the names of the individual UARTS. (they need not be on the same card, or even the same bus). @@ -60,9 +60,9 @@ char *uart_chans[18] = {0,}; RTAPI_MP_ARRAY_STRING(uart_chans, 16, "UART Channel names"); FUNCTION(send){ -/* This function uses the hm2_uart_send function to transmit data see +/* This function uses the hm2_uart_send function to transmit data see man hm2_uart_send for more information. Data may be up to 64 bytes in size*/ - + unsigned char data[16]; int i, count; count = tx_bytes; @@ -74,9 +74,9 @@ man hm2_uart_send for more information. Data may be up to 64 bytes in size*/ } FUNCTION(receive){ -/* This function uses the hm2_uart_send function to transmit data. +/* This function uses the hm2_uart_send function to transmit data. See man hm2_uart_send for more information. 16 bytes in the Rx buffer*/ - + int i; unsigned char data[16]; rx_bytes = hm2_uart_read(name, data); @@ -84,8 +84,8 @@ FUNCTION(receive){ rx_data(i) = data[i]; } } - -EXTRA_SETUP(){ // the names parameters are passed in 'prefix'. You just have to know that. + +EXTRA_SETUP(){ // the names parameters are passed in 'prefix'. You just have to know that. if (prefix[0] == 'm'){ // should be the 'h' of hm2_.... rtapi_print_msg(0, "mesa_uart can not be loaded using the 'count' " "parameter, see man mesa_uart for details\n"); @@ -104,4 +104,4 @@ int get_count(void){ int i; for (i= 0; uart_chans[i] != NULL && i < 16 ; i++){} return i; -} \ No newline at end of file +} diff --git a/src/modules/managed/drivers/opto_ac5/src/opto_ac5.c b/src/modules/managed/drivers/opto_ac5/src/opto_ac5.c index acda69ffdd..3245e83569 100644 --- a/src/modules/managed/drivers/opto_ac5/src/opto_ac5.c +++ b/src/modules/managed/drivers/opto_ac5/src/opto_ac5.c @@ -85,17 +85,17 @@ int rtapi_app_main(void) if (driver.comp_id < 0) { rtapi_print_msg(RTAPI_MSG_ERR, " ERROR OPTO_AC5--- hal_init() failed\n"); return(-1); - } + } for ( n = 0 ; n < MAX_BOARDS ; n++ ) { driver.boards[n] = NULL; } pDev = NULL; - for ( n = 0 ; n < MAX_BOARDS ; n++ ) + for ( n = 0 ; n < MAX_BOARDS ; n++ ) { // Find a M5I20 card. pDev = pci_get_device(opto22_VENDOR_ID, opto22_pci_AC5_DEVICE_ID, pDev); if ( pDev == NULL ) { /* no more boards */break;} - + /* Allocate HAL memory for the board */ pboard = (board_data_t *)(hal_malloc(sizeof(board_data_t))); @@ -136,23 +136,23 @@ int rtapi_app_main(void) hal_exit(driver.comp_id); return(-1); } - + } - + if(n == 0){ /* No cards detected */ rtapi_print ("ERROR OPTO_AC5--- No opto PCI-AC5 card(s) detected\n"); rtapi_app_exit(); return(-1); } - + hal_ready(driver.comp_id); return(0); } // here we turn the leds and outputs off and unmap the pci driver void rtapi_app_exit(void) -{ +{ int n; board_data_t *pDevice; @@ -160,7 +160,7 @@ void rtapi_app_exit(void) hal_exit(driver.comp_id); - for ( n = 0; n < MAX_BOARDS; n++ ) + for ( n = 0; n < MAX_BOARDS; n++ ) { if ( driver.boards[n] != NULL) { @@ -168,7 +168,7 @@ void rtapi_app_exit(void) writel(0XC0FFFFFF, driver.boards[n]->base + (DATA_WRITE_OFFSET_0)); writel(0XC0FFFFFF, driver.boards[n]->base + (DATA_WRITE_OFFSET_1)); // Unmap board memory - if ( driver.boards[n]->base != NULL ) + if ( driver.boards[n]->base != NULL ) { iounmap(driver.boards[n]->base); } @@ -187,8 +187,8 @@ static int Device_Init(board_data_t *pboard) { // Initialize hardware. -// portconfig[0 or 1] are either the default number from global or mapped from the command line -// make sure last two bits are set for output so leds will work +// portconfig[0 or 1] are either the default number from global or mapped from the command line +// make sure last two bits are set for output so leds will work if ((portconfig0 & 0x80000000) ==0) { portconfig0 |=0x80000000; } if ((portconfig0 & 0x40000000) ==0) { portconfig0 |=0x40000000; } @@ -198,10 +198,10 @@ static int Device_Init(board_data_t *pboard) writel(portconfig1, pboard->base + (CONFIG_WRITE_OFFSET_1)); // Initialize digital I/O structure mask. - + pboard->port[0].mask = portconfig0; pboard->port[1].mask = portconfig1; - + return(0); } @@ -263,7 +263,7 @@ static int Device_ExportDigitalInPinsParametersFunctions(board_data_t *this, int mask <<=1; } - portnum ++; + portnum ++; } // Export functions. @@ -293,7 +293,7 @@ static int Device_ExportDigitalOutPinsParametersFunctions(board_data_t *this, in char name[HAL_NAME_LEN + 1]; // Export pins and parameters. - + while (portnum<2) { mask=1; @@ -388,7 +388,7 @@ Device_DigitalInRead(void *arg, long period) // here we output data and update LEDS // we look at the mask of the first port to see which of the 24 io points are outputs (the bits that are true) -// then check the OUT HAL pins to see if output should be on and if it should - OR the bit (using 'mask') to the variable 'pins' +// then check the OUT HAL pins to see if output should be on and if it should - OR the bit (using 'mask') to the variable 'pins' // then set 'mask' to the last bit (32) and check the HAL led pin to see if true- OR the bit to 'pins' if it is // set 'mask to second to second to last bit (31) do the same // have to remember that a 1 sent to the hardware turns an output OFF @@ -422,7 +422,7 @@ Device_DigitalOutWrite(void *arg, long period) { pins |= mask; } } mask <<=1; // shift mask - + } // CHECK LED PINS @@ -431,8 +431,8 @@ Device_DigitalOutWrite(void *arg, long period) { mask=1<<(31-i); pDigital++; - - if ( *(pDigital->pValue) ==0 ) { pins |= mask; } + + if ( *(pDigital->pValue) ==0 ) { pins |= mask; } } // Write digital I/O register. writel(pins,pboard->base + (offset)); @@ -440,4 +440,3 @@ Device_DigitalOutWrite(void *arg, long period) offset=DATA_WRITE_OFFSET_1; // set to port1 offset } } - diff --git a/src/modules/managed/drivers/opto_ac5/src/opto_ac5.h b/src/modules/managed/drivers/opto_ac5/src/opto_ac5.h index c4c16519c0..14078d7f1b 100644 --- a/src/modules/managed/drivers/opto_ac5/src/opto_ac5.h +++ b/src/modules/managed/drivers/opto_ac5/src/opto_ac5.h @@ -55,11 +55,11 @@ typedef struct board_data_t { int slot; /* PCI slot number */ int num; /* HAL board number */ void __iomem *base; /* base address */ - int len; /* length of address space*/ + int len; /* length of address space*/ struct port_t port[2]; - -} board_data_t; + +} board_data_t; /************************************************************************* Globals @@ -71,6 +71,3 @@ typedef struct board_data_t { /************************************************************************* Functions *************************************************************************/ - - - diff --git a/src/modules/managed/drivers/pci_8255/src/pci_8255.c b/src/modules/managed/drivers/pci_8255/src/pci_8255.c index b3fdef8b58..5dccd027c3 100644 --- a/src/modules/managed/drivers/pci_8255/src/pci_8255.c +++ b/src/modules/managed/drivers/pci_8255/src/pci_8255.c @@ -58,7 +58,7 @@ static void read_all(struct state *inst, long period); static void extra_cleanup(void); #define SHIFT 4 -static inline void WRITE(int value, hal_u32_t base, int offset) { +static inline void WRITE(int value, hal_u32_t base, int offset) { // int *mem = (int*) base; rtapi_outb(value, base + SHIFT*offset); // mem[offset] = value; @@ -113,7 +113,7 @@ static int export(char *prefix, struct port *inst, int ioaddr, int dir) { if(i < 4) { if(inst->dir_ & 1) direction = HAL_OUT; else direction = HAL_IN; - } else { + } else { if(inst->dir_ & 4) direction = HAL_OUT; else direction = HAL_IN; } @@ -206,7 +206,7 @@ int rtapi_app_main(void) { if(r != 0) goto out_error; } hal_pin_bit_newf(HAL_IN, &(inst[i].relay), comp_id, "pci8255.%d.relay", i); - hal_param_bit_newf(HAL_RW, &(inst[i].relay_invert), comp_id, + hal_param_bit_newf(HAL_RW, &(inst[i].relay_invert), comp_id, "pci8255.%d.relay-invert", i); rtapi_snprintf(buf, sizeof(buf), "pci8255.%d.write-relay", i); r = hal_export_funct(buf, (void(*)(void *inst, long))write_relay, &inst[i], 0, 0, comp_id); @@ -264,7 +264,7 @@ static int extra_setup(void) { if(!rtapi_request_region(io[extra_arg], 16, "pci_8255")) { // set this I/O port to 0 so that EXTRA_CLEANUP does not release the IO // ports that were never requested. - io[extra_arg] = 0; + io[extra_arg] = 0; return -EBUSY; } dir_ = dir[extra_arg/3] & 0xf; diff --git a/src/modules/managed/drivers/pcl720/src/pcl720.comp b/src/modules/managed/drivers/pcl720/src/pcl720.comp index 1f011bbe93..6599556ea1 100644 --- a/src/modules/managed/drivers/pcl720/src/pcl720.comp +++ b/src/modules/managed/drivers/pcl720/src/pcl720.comp @@ -1,6 +1,6 @@ component pcl720 """Driver for the Advantech PCL 720 card."""; description """This driver supports the Advantech PCL720 ISA card. It might -work with the PCI version too, but this is untested. +work with the PCI version too, but this is untested. It creates hal pins corresonding to the digital inputs and outputs, but does not support the the counters/timers."""; @@ -58,7 +58,7 @@ FUNCTION(read){ + (inb(base_addr + 1) << 8) + (inb(base_addr + 2) << 16) + (inb(base_addr + 3) << 24); - + for (i = 0;i <= 31;i++){ pin_in(i) = R & (1 << i); pin_in_not(i) = !pin_in(i); @@ -74,9 +74,9 @@ FUNCTION(write){ out |= pin_out(i) << i; inv |= pin_out_invert(i) << i; } - + out ^= inv; - + b = (out & 0xff); outb(b, base_addr); b = (out & 0xff00) >> 8; @@ -85,7 +85,7 @@ FUNCTION(write){ outb(b, base_addr + 2); b = (out & 0xff000000) >> 24; outb(b, base_addr + 3); - + write_time = rtapi_get_time(); } @@ -93,19 +93,19 @@ FUNCTION(reset){ int i; unsigned tmp; unsigned char b; - + res= 0; for (i = 0;i <= 31 ;i++){ res |= pin_reset(i) << i; } - + if (res == 0) {return;} // no pins with reset set - + tmp = (out ^ inv) & (~res); if (tmp == out) {return;} // nothing to reset - + if(reset_time > period/4) reset_time = period/4; - + //compensate for any time elapsed since the write rtapi_delay(reset_time - (rtapi_get_time() - write_time)); @@ -117,7 +117,7 @@ FUNCTION(reset){ outb(b, base_addr + 2); b = (tmp & 0xff000000) >> 24; outb(b, base_addr + 3); - + out = tmp; } @@ -131,8 +131,8 @@ EXTRA_SETUP(){ } return -EINVAL; } - - + + int get_count(void){ int i; for (i=0; ioaddr[i] > 0 && i < MAX_CHAN; i++){} diff --git a/src/modules/managed/drivers/serport/src/serport.comp b/src/modules/managed/drivers/serport/src/serport.comp index 8bb248fb87..b623b92079 100644 --- a/src/modules/managed/drivers/serport/src/serport.comp +++ b/src/modules/managed/drivers/serport/src/serport.comp @@ -8,7 +8,7 @@ Specify the I/O address of the serial ports using the module parameter \\fBio=\\fIaddr[,addr...]\\fR. These ports must not be in use by the kernel. To free up the I/O ports after bootup, install setserial and execute a command like: -.RS +.RS sudo setserial /dev/ttyS0 uart none .RE but it is best to ensure that the serial port is never used or configured by @@ -69,7 +69,7 @@ EXTRA_SETUP() { "Could not register port at address 0x%x. See\n" "'man serport' for information on using 'setserial'\n" "to make a port available to hal", io[extra_arg]); - io[extra_arg] = 0; + io[extra_arg] = 0; return -EBUSY; } ioaddr = io[extra_arg]; @@ -98,7 +98,7 @@ EXTRA_CLEANUP() { #define LCR (ioaddr + 3) #define BREAK (1<<6) -FUNCTION(read) { +FUNCTION(read) { int i = inb(MSR); pin_9_in = (i & RI) == 0; diff --git a/src/modules/managed/drivers/servo_to_go/src/hal_stg.h b/src/modules/managed/drivers/servo_to_go/src/hal_stg.h index f342d2eb71..7f81dd95d9 100644 --- a/src/modules/managed/drivers/servo_to_go/src/hal_stg.h +++ b/src/modules/managed/drivers/servo_to_go/src/hal_stg.h @@ -134,5 +134,5 @@ #define IA2 0x04 #define IA1 0x02 #define IA0 0x01 - + #endif diff --git a/src/modules/managed/drivers/uparport/src/uparport.c b/src/modules/managed/drivers/uparport/src/uparport.c index 2f34b47121..4b4a7372a5 100644 --- a/src/modules/managed/drivers/uparport/src/uparport.c +++ b/src/modules/managed/drivers/uparport/src/uparport.c @@ -115,7 +115,7 @@ #include #include -#include +#include #include #include // the following two lines are crucial - normally @@ -191,7 +191,7 @@ static int num_ports; /* number of ports configured */ static unsigned long ns2tsc_factor; #define ns2tsc(x) (((x) * (unsigned long long)ns2tsc_factor) >> 12) #ifdef SIM -unsigned int cpu_khz; +unsigned int cpu_khz; #endif /*********************************************************************** * LOCAL FUNCTION DECLARATIONS * @@ -243,7 +243,7 @@ int rtapi_app_main(void) rtapi_print_msg(RTAPI_MSG_ERR, "PARPORT: cant retrieve CPU frequency from /proc/cpuinfo\n"); return -1; } - cpu_khz = (unsigned) (MHz * 1000.0); + cpu_khz = (unsigned) (MHz * 1000.0); ns2tsc_factor = (cpu_khz << 6) / 15625ul; #else #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) diff --git a/src/modules/managed/drivers/uparport/src/uparport.h b/src/modules/managed/drivers/uparport/src/uparport.h index 7df55666e6..a2cc69b2a5 100644 --- a/src/modules/managed/drivers/uparport/src/uparport.h +++ b/src/modules/managed/drivers/uparport/src/uparport.h @@ -21,7 +21,7 @@ // drop root privilegs after init // this is a stopgap measure until rtapi_app knows how to handle this -#define DROP_PRIV 1 +#define DROP_PRIV 1 #define MAX_PARPORT 10 // a tad on the high side struct ppres { @@ -48,7 +48,7 @@ typedef struct hal_parport_t } hal_parport_t; #ifdef SIM -float cpu_MHz(void) +float cpu_MHz(void) { char *path = "/proc/cpuinfo", *s, line[1024]; float freq; @@ -81,7 +81,7 @@ int get_ppdev_res(int dev, struct ppres *ppres) unsigned from, to; // parse this: - // $ cat /sys/class/ppdev/parport0/device/resources + // $ cat /sys/class/ppdev/parport0/device/resources // state = active // io 0x378-0x37f // irq 7 @@ -103,7 +103,7 @@ int get_ppdev_res(int dev, struct ppres *ppres) if (s && 1 == sscanf(s, "= %s", value)) { ppres->state = !strcmp(value,"active"); } else { - rtapi_print_msg(RTAPI_MSG_ERR, + rtapi_print_msg(RTAPI_MSG_ERR, "get_ppdev_res: cant parse '%s'\n", line); fclose(f); @@ -112,7 +112,7 @@ int get_ppdev_res(int dev, struct ppres *ppres) } if (!strncmp(line, "irq", 3)) { if (1 != sscanf(line+4, " %d", &ppres->irq)) { - rtapi_print_msg(RTAPI_MSG_ERR, + rtapi_print_msg(RTAPI_MSG_ERR, "get_ppdev_res: cant parse '%s'\n", line); fclose(f); @@ -126,7 +126,7 @@ int get_ppdev_res(int dev, struct ppres *ppres) line); fclose(f); return -1; - + } else { ppres->reg_start = from; ppres->reg_end = to; @@ -158,7 +158,7 @@ hal_parport_get(int comp_id, hal_parport_t *port, break; if (pp_res.reg_start == base) break; - } + } } if (i == MAX_PARPORT) { rtapi_print_msg(RTAPI_MSG_ERR, @@ -173,13 +173,13 @@ hal_parport_get(int comp_id, hal_parport_t *port, snprintf(path, sizeof(path),"/dev/parport%d", i); if ((port->parport_fd = open(path,O_RDWR)) < 0) { rtapi_print_msg(RTAPI_MSG_ERR, - "PARPORT: ERROR: cant open %s: %s\n", + "PARPORT: ERROR: cant open %s: %s\n", path, strerror(errno)); return -EPERM; } if (ioctl(port->parport_fd, PPCLAIM) < 0) { rtapi_print_msg(RTAPI_MSG_ERR, - "PARPORT: ERROR: cant reserve %s: %s\n", + "PARPORT: ERROR: cant reserve %s: %s\n", path, strerror(errno)); return -EPERM; } @@ -205,7 +205,7 @@ hal_parport_get(int comp_id, hal_parport_t *port, rtapi_print_msg(RTAPI_MSG_ERR, "PARPORT: dropping root permissions to uid %d\n", getuid()); - setuid(getuid()); + setuid(getuid()); #endif #ifndef SIM @@ -345,7 +345,7 @@ void hal_parport_release(hal_parport_t *port) } if (ioctl(port->parport_fd, PPRELEASE) < 0) { rtapi_print_msg(RTAPI_MSG_ERR, - "PARPORT: ERROR: releasing parport 0x%x: %s\n", + "PARPORT: ERROR: releasing parport 0x%x: %s\n", port->pp_res.reg_start, strerror(errno)); } #endif diff --git a/src/modules/managed/support-what_to_do/pasm/rtests/fill.p b/src/modules/managed/support-what_to_do/pasm/rtests/fill.p index 4ab70d1c55..ddf7c1b4aa 100644 --- a/src/modules/managed/support-what_to_do/pasm/rtests/fill.p +++ b/src/modules/managed/support-what_to_do/pasm/rtests/fill.p @@ -45,4 +45,4 @@ the_end: QBA the_end - .end \ No newline at end of file + .end diff --git a/src/modules/managed/support-what_to_do/pasm/rtests/iloop.p b/src/modules/managed/support-what_to_do/pasm/rtests/iloop.p index d9dfa7a232..2ba9ef4a72 100644 --- a/src/modules/managed/support-what_to_do/pasm/rtests/iloop.p +++ b/src/modules/managed/support-what_to_do/pasm/rtests/iloop.p @@ -54,4 +54,4 @@ L8: the_end: QBA the_end - .end \ No newline at end of file + .end diff --git a/src/modules/managed/support-what_to_do/pasm/rtests/loop.p b/src/modules/managed/support-what_to_do/pasm/rtests/loop.p index 1e4e813afc..b8c00778b7 100644 --- a/src/modules/managed/support-what_to_do/pasm/rtests/loop.p +++ b/src/modules/managed/support-what_to_do/pasm/rtests/loop.p @@ -54,4 +54,4 @@ L8: the_end: QBA the_end - .end \ No newline at end of file + .end diff --git a/src/modules/managed/support-what_to_do/pasm/rtests/sxchg.p b/src/modules/managed/support-what_to_do/pasm/rtests/sxchg.p index 00b7231ce3..c3df43abec 100644 --- a/src/modules/managed/support-what_to_do/pasm/rtests/sxchg.p +++ b/src/modules/managed/support-what_to_do/pasm/rtests/sxchg.p @@ -30,4 +30,4 @@ the_end: QBA the_end - .end \ No newline at end of file + .end diff --git a/src/modules/managed/support-what_to_do/pasm/rtests/sxout.p b/src/modules/managed/support-what_to_do/pasm/rtests/sxout.p index 2ee5bf63ab..f8d0230217 100644 --- a/src/modules/managed/support-what_to_do/pasm/rtests/sxout.p +++ b/src/modules/managed/support-what_to_do/pasm/rtests/sxout.p @@ -30,4 +30,4 @@ the_end: QBA the_end - .end \ No newline at end of file + .end diff --git a/src/modules/managed/support-what_to_do/pasm/rtests/xchg.p b/src/modules/managed/support-what_to_do/pasm/rtests/xchg.p index e6d22e165d..8465872821 100644 --- a/src/modules/managed/support-what_to_do/pasm/rtests/xchg.p +++ b/src/modules/managed/support-what_to_do/pasm/rtests/xchg.p @@ -26,4 +26,4 @@ the_end: QBA the_end - .end \ No newline at end of file + .end diff --git a/src/modules/managed/support-what_to_do/pasm/rtests/xin.p b/src/modules/managed/support-what_to_do/pasm/rtests/xin.p index 2357f29154..e3849df4bf 100644 --- a/src/modules/managed/support-what_to_do/pasm/rtests/xin.p +++ b/src/modules/managed/support-what_to_do/pasm/rtests/xin.p @@ -26,4 +26,4 @@ the_end: QBA the_end - .end \ No newline at end of file + .end diff --git a/src/modules/managed/support-what_to_do/pasm/rtests/xout.p b/src/modules/managed/support-what_to_do/pasm/rtests/xout.p index 685a28d7d9..1698fab456 100644 --- a/src/modules/managed/support-what_to_do/pasm/rtests/xout.p +++ b/src/modules/managed/support-what_to_do/pasm/rtests/xout.p @@ -26,4 +26,4 @@ the_end: QBA the_end - .end \ No newline at end of file + .end diff --git a/src/modules/managed/support-what_to_do/pasm/rtests/zero.p b/src/modules/managed/support-what_to_do/pasm/rtests/zero.p index 3ac2bde011..5308f7fe86 100644 --- a/src/modules/managed/support-what_to_do/pasm/rtests/zero.p +++ b/src/modules/managed/support-what_to_do/pasm/rtests/zero.p @@ -46,4 +46,4 @@ the_end: QBA the_end - .end \ No newline at end of file + .end diff --git a/src/modules/unmanaged/components/constv2/src/LCNC_Headers.h b/src/modules/unmanaged/components/constv2/src/LCNC_Headers.h index 4637e0028a..a33863887a 100644 --- a/src/modules/unmanaged/components/constv2/src/LCNC_Headers.h +++ b/src/modules/unmanaged/components/constv2/src/LCNC_Headers.h @@ -29,7 +29,7 @@ #include "runtime/rtapi_app.h" #endif #include "runtime/rtapi_string.h" -#include +#include #include // need to get this from source and add it #include #include "hal/hal_internal.h" @@ -49,4 +49,3 @@ #define false (0) #endif - diff --git a/src/modules/unmanaged/components/constv2/src/constv2.cc b/src/modules/unmanaged/components/constv2/src/constv2.cc index 488500ade9..252973ee8f 100644 --- a/src/modules/unmanaged/components/constv2/src/constv2.cc +++ b/src/modules/unmanaged/components/constv2/src/constv2.cc @@ -1,11 +1,11 @@ /********************************************************************** * Demo of writing a SMP_SAFE managed module in std C++ - * + * * Based on the constant.icomp component - * + * * ArcEye 2015 - * -***********************************************************************/ + * +***********************************************************************/ #include "LCNC_Headers.h" diff --git a/src/modules/unmanaged/components/halscope/src/scope.c b/src/modules/unmanaged/components/halscope/src/scope.c index 25519c5531..c41aa9413f 100644 --- a/src/modules/unmanaged/components/halscope/src/scope.c +++ b/src/modules/unmanaged/components/halscope/src/scope.c @@ -396,7 +396,7 @@ void capture_complete(void) default: break; } - + //uncomment me to write log files //write_log_file("scope.log"); refresh_display(); @@ -416,7 +416,7 @@ static void init_usr_control_struct(void *shmem) for (n = 0; n < sizeof(scope_usr_control_t); n++) { cp[n] = 0; } - + /* save pointer to shared control structure */ ctrl_shm = shmem; /* round size of shared struct up to a multiple of 4 for alignment */ @@ -454,14 +454,14 @@ static char *halscope_suffix(GtkFileSelection *fs) { static char buf[256]; int len; char *suffix; - strncpy(buf, gtk_file_selection_get_filename(GTK_FILE_SELECTION(fs)), + strncpy(buf, gtk_file_selection_get_filename(GTK_FILE_SELECTION(fs)), sizeof(buf)-10); len = strlen(buf); suffix = strstr(buf, ".halscope"); if(!suffix || suffix != buf + len - 9) strcat(buf, ".halscope"); return buf; -} +} static void do_open_configuration(GtkWidget *w, GtkFileSelection *fs) { int n; @@ -526,8 +526,8 @@ static void save_configuration(int junk) { static void define_menubar(GtkWidget *vboxtop) { GtkWidget *file_rootmenu, *help_rootmenu; - GtkWidget *menubar, *filemenu, - *fileopenconfiguration, *filesaveconfiguration, + GtkWidget *menubar, *filemenu, + *fileopenconfiguration, *filesaveconfiguration, *fileopendatafile, *filesavedatafile, *filequit, *sep1, *sep2; GtkWidget *helpmenu, *helpabout; @@ -540,38 +540,38 @@ static void define_menubar(GtkWidget *vboxtop) { fileopenconfiguration = gtk_menu_item_new_with_mnemonic(_("_Open Configuration...")); gtk_menu_append(GTK_MENU(filemenu), fileopenconfiguration); - gtk_signal_connect_object(GTK_OBJECT(fileopenconfiguration), "activate", + gtk_signal_connect_object(GTK_OBJECT(fileopenconfiguration), "activate", GTK_SIGNAL_FUNC(open_configuration), 0); gtk_widget_show(fileopenconfiguration); - + filesaveconfiguration = gtk_menu_item_new_with_mnemonic(_("_Save Configuration...")); gtk_menu_append(GTK_MENU(filemenu), filesaveconfiguration); - gtk_signal_connect_object(GTK_OBJECT(filesaveconfiguration), "activate", + gtk_signal_connect_object(GTK_OBJECT(filesaveconfiguration), "activate", GTK_SIGNAL_FUNC(save_configuration), 0); gtk_widget_show(filesaveconfiguration); gtk_menu_append(GTK_MENU(filemenu), sep1); gtk_widget_show(sep1); - + fileopendatafile = gtk_menu_item_new_with_mnemonic(_("O_pen Data File...")); gtk_menu_append(GTK_MENU(filemenu), fileopendatafile); - gtk_signal_connect_object(GTK_OBJECT(fileopendatafile), "activate", + gtk_signal_connect_object(GTK_OBJECT(fileopendatafile), "activate", GTK_SIGNAL_FUNC(menuitem_response), "file/open datafile"); gtk_widget_set_sensitive(GTK_WIDGET(fileopendatafile), FALSE); // XXX gtk_widget_show(fileopendatafile); - + filesavedatafile = gtk_menu_item_new_with_mnemonic(_("S_ave Data File...")); gtk_menu_append(GTK_MENU(filemenu), filesavedatafile); - gtk_signal_connect_object(GTK_OBJECT(filesavedatafile), "activate", + gtk_signal_connect_object(GTK_OBJECT(filesavedatafile), "activate", GTK_SIGNAL_FUNC(log_popup), 0); gtk_widget_show(filesavedatafile); - + gtk_menu_append(GTK_MENU(filemenu), sep2); gtk_widget_show(sep2); filequit = gtk_menu_item_new_with_mnemonic(_("_Quit")); gtk_menu_append(GTK_MENU(filemenu), filequit); - gtk_signal_connect_object(GTK_OBJECT(filequit), "activate", + gtk_signal_connect_object(GTK_OBJECT(filequit), "activate", GTK_SIGNAL_FUNC(quit), 0); gtk_widget_show(filequit); diff --git a/src/modules/unmanaged/components/halscope/src/scope_disp.c b/src/modules/unmanaged/components/halscope/src/scope_disp.c index 08ea8846aa..f5e147fa90 100644 --- a/src/modules/unmanaged/components/halscope/src/scope_disp.c +++ b/src/modules/unmanaged/components/halscope/src/scope_disp.c @@ -372,7 +372,7 @@ static void init_display_window(void) GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK - | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON1_MOTION_MASK + | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON1_MOTION_MASK | GDK_SCROLL_MASK ); gtk_widget_show(disp->drawing); /* get color map */ @@ -390,7 +390,7 @@ static void init_display_window(void) static void handle_window_expose(GtkWidget * widget, gpointer data) { - /* we don't want to react immediately - sometime we get a burst of expose + /* we don't want to react immediately - sometime we get a burst of expose events - instead we request a refresh for later */ request_display_refresh(2); } @@ -511,7 +511,7 @@ static void change_zoom(int dir, int x) { /* calculate horizontal params that depend on width */ pixels_per_div = disp->width * 0.1; pixels_per_sec = pixels_per_div / horiz->disp_scale; - disp->pixels_per_sample = new_pixels_per_sample = + disp->pixels_per_sample = new_pixels_per_sample = pixels_per_sec * horiz->sample_period; // how many samples away from the center of the window is this @@ -535,7 +535,7 @@ static int handle_click(GtkWidget *widget, GdkEventButton *event, gpointer data) } else { int z = select_trace(event->x, event->y); int new_channel = z & 0xff; - int channel_part = z >> 8; + int channel_part = z >> 8; disp->selected_part = channel_part; @@ -638,9 +638,9 @@ void update_readout(void) { if(vert->selected != -1) { double t=0, p=0, v=0; int result = get_cursor_info(&t, &p, &v); - if(result > 0) { + if(result > 0) { snprintf(tip, sizeof(tip), TIPFORMAT, t, v, (v - p)/horiz->sample_period); - } else { + } else { strcpy(tip, ""); } } else { diff --git a/src/modules/unmanaged/components/halscope/src/scope_files.c b/src/modules/unmanaged/components/halscope/src/scope_files.c index 83e6eab401..925ec9fb44 100644 --- a/src/modules/unmanaged/components/halscope/src/scope_files.c +++ b/src/modules/unmanaged/components/halscope/src/scope_files.c @@ -53,7 +53,7 @@ /* Scope setup is stored in the form of a script containing commands that set various parameters. - + Each command consists of a keyword followed by one or more values. Keywords are not case sensitive. */ @@ -79,7 +79,7 @@ TPOLAR triger polarity, RISE or FALL TMODE 0 = normal trigger, 1 = auto trigger RMODE 0 = stop, 1 = norm, 2 = single, 3 = roll - + */ @@ -111,7 +111,7 @@ typedef struct { ************************************************************************/ static int parse_command(char *in); -/* the following functions implement halscope config items +/* the following functions implement halscope config items each is called with a pointer to a single argument (the parser used here allows only one arg per command) and returns NULL if the command succeeded, or an error message if it failed. @@ -142,7 +142,7 @@ static char *rmode_cmd(void * arg); * LOCAL VARIABLES * ************************************************************************/ -static const cmd_lut_entry_t cmd_lut[25] = +static const cmd_lut_entry_t cmd_lut[25] = { { "thread", STRING, thread_cmd }, { "maxchan", INT, maxchan_cmd }, @@ -168,7 +168,7 @@ static const cmd_lut_entry_t cmd_lut[25] = }; static int deferred_channel; - + /*********************************************************************** * PUBLIC FUNCTION CODE * ************************************************************************/ @@ -180,7 +180,7 @@ int read_config_file (char *filename) char *cp; int retval; - deferred_channel = 0; + deferred_channel = 0; fp = fopen(filename, "r"); if ( fp == NULL ) { fprintf(stderr, "halscope: config file '%s' could not be opened\n", filename ); @@ -209,7 +209,7 @@ int read_config_file (char *filename) void write_config_file (char *filename) { FILE *fp; - + fp = fopen(filename, "w"); if ( fp == NULL ) { fprintf(stderr, "halscope: config file '%s' could not be created\n", filename ); @@ -247,7 +247,7 @@ void write_log_file (char *filename) scope_chan_t *chan; hal_type_t type[16]; FILE *fp; - + fp = fopen(filename, "w"); @@ -261,7 +261,7 @@ void write_log_file (char *filename) chan = &(ctrl_usr->chan[chan_num]); label[chan_num] = chan->name; type[chan_num] = chan->data_type; - } + } /* sample_len is really the number of channels, don't let it fool you */ sample_len = ctrl_shm->sample_len; //disp = &(ctrl_usr->disp); @@ -284,9 +284,9 @@ void write_log_file (char *filename) switch (log->order) { case INTERLACED: while (n <= samples) { - - for (chan_num=0; chan_numvert.selected; set_channel_off(chan_num); return NULL; -} +} static char *chan_src_cmd(int src_type, char *src_name) { @@ -566,59 +566,59 @@ static char *param_cmd(void * arg) static char *vscale_cmd(void * arg) { int *argp, rv; - + argp = (int *)(arg); rv = set_vert_scale(*argp); if ( rv < 0 ) { return "could not set vertical scale"; } return NULL; -} +} static char *vpos_cmd(void * arg) { double *argp; int rv; - + argp = (double *)(arg); rv = set_vert_pos(*argp); if ( rv < 0 ) { return "could not set vertical position"; } return NULL; -} +} static char *voff_cmd(void * arg) { double *argp; int rv; - + argp = (double *)(arg); rv = set_vert_offset(*argp, 0); if ( rv < 0 ) { return "could not set vertical offset"; } return NULL; -} +} static char *voff_ac_cmd(void * arg) { double *argp; int rv; - + argp = (double *)(arg); rv = set_vert_offset(*argp, 1); if ( rv < 0 ) { return "could not set vertical offset"; } return NULL; -} +} static char *tsource_cmd(void * arg) { int *argp, rv; - + argp = (int *)(arg); rv = set_trigger_source(*argp); if ( rv < 0 ) { @@ -631,64 +631,63 @@ static char *tlevel_cmd(void * arg) { double *argp; int rv; - + argp = (double *)(arg); rv = set_trigger_level(*argp); if ( rv < 0 ) { return "could not set trigger level"; } return NULL; -} +} static char *tpos_cmd(void * arg) { double *argp; int rv; - + argp = (double *)(arg); rv = set_trigger_pos(*argp); if ( rv < 0 ) { return "could not set trigger position"; } return NULL; -} +} static char *tpolar_cmd(void * arg) { int *argp; int rv; - + argp = (int *)(arg); rv = set_trigger_polarity(*argp); if ( rv < 0 ) { return "could not set trigger polarity"; } return NULL; -} +} static char *tmode_cmd(void * arg) { int *argp; int rv; - + argp = (int *)(arg); rv = set_trigger_mode(*argp); if ( rv < 0 ) { return "could not set trigger mode"; } return NULL; -} +} static char *rmode_cmd(void * arg) { int *argp; int rv; - + argp = (int *)(arg); rv = set_run_mode(*argp); if ( rv < 0 ) { return "could not set run mode"; } return NULL; -} - +} diff --git a/src/modules/unmanaged/components/halscope/src/scope_horiz.c b/src/modules/unmanaged/components/halscope/src/scope_horiz.c index dc9263c066..7f5822c113 100644 --- a/src/modules/unmanaged/components/halscope/src/scope_horiz.c +++ b/src/modules/unmanaged/components/halscope/src/scope_horiz.c @@ -181,11 +181,11 @@ static void init_horiz_window(void) #else horiz->disp_area = gtk_drawing_area_new(); #endif - gtk_signal_connect(GTK_OBJECT(horiz->disp_area), "button_press_event", + gtk_signal_connect(GTK_OBJECT(horiz->disp_area), "button_press_event", GTK_SIGNAL_FUNC(horiz_press), 0); - gtk_signal_connect(GTK_OBJECT(horiz->disp_area), "button_release_event", + gtk_signal_connect(GTK_OBJECT(horiz->disp_area), "button_release_event", GTK_SIGNAL_FUNC(horiz_release), 0); - gtk_signal_connect(GTK_OBJECT(horiz->disp_area), "motion_notify_event", + gtk_signal_connect(GTK_OBJECT(horiz->disp_area), "motion_notify_event", GTK_SIGNAL_FUNC(horiz_motion), 0); gtk_widget_set_events(GTK_WIDGET(horiz->disp_area), GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK @@ -316,7 +316,7 @@ void write_horiz_config(FILE *fp) int set_sample_thread(char *name) { int rv; - + /* This is broken into two parts. When called directly while reading config file commands, both execute in order. however, when the dialog is running, it calls @@ -370,7 +370,7 @@ int set_horiz_mult(int setting) { scope_horiz_t *horiz; long period_ns, max_mult; - + /* validate setting */ if ( setting < 1 ) { return -1; @@ -390,10 +390,10 @@ int set_horiz_mult(int setting) /* make sure we aren't too high */ if ( setting > max_mult ) { setting = max_mult; - } + } /* save new value */ ctrl_shm->mult = setting; - /* refresh other stuff */ + /* refresh other stuff */ calc_horiz_scaling(); refresh_horiz_info(); return 0; @@ -415,7 +415,7 @@ int set_horiz_zoom(int setting) /* set zoom slider based on new setting */ adj = GTK_ADJUSTMENT(horiz->zoom_adj); gtk_adjustment_set_value(adj, setting); - /* refresh other stuff */ + /* refresh other stuff */ calc_horiz_scaling(); refresh_horiz_info(); request_display_refresh(1); @@ -438,7 +438,7 @@ int set_horiz_pos(double setting) /* set position slider based on new setting */ adj = GTK_ADJUSTMENT(horiz->pos_adj); gtk_adjustment_set_value(adj, setting * 1000); - /* refresh other stuff */ + /* refresh other stuff */ refresh_horiz_info(); request_display_refresh(1); return 0; @@ -717,7 +717,7 @@ const gchar *title, *msg; /* yes, preselect appropriate line */ gtk_clist_select_row(GTK_CLIST(horiz->thread_list), sel_row, 1); } else { - // select first row as default, it is already selected .. + // select first row as default, it is already selected .. // the user can change it lateron if it's not right sel_row = 0; acquire_selection_made(GTK_WIDGET(horiz->thread_list), sel_row, 1, NULL, NULL); @@ -785,10 +785,10 @@ void file_ok_sel( GtkWidget *w, { //scope_log_t* log_prefs; //log_prefs = &(ctrl_usr->log); - //log_prefs->filename = + //log_prefs->filename = // (char*)gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)); - //g_print ("filename is: %s\n", log_prefs->filename); - + //g_print ("filename is: %s\n", log_prefs->filename); + write_log_file( (char*)gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs))); //gtk_widget_destroy( w); } @@ -811,7 +811,7 @@ void log_popup(int junk) (filew)->cancel_button), "clicked", (GtkSignalFunc) gtk_widget_destroy, GTK_OBJECT (filew)); - gtk_file_selection_set_filename (GTK_FILE_SELECTION(filew), + gtk_file_selection_set_filename (GTK_FILE_SELECTION(filew), "halscope.log"); gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION(filew) ); gtk_widget_show(filew); @@ -887,7 +887,7 @@ static int set_sample_thread_name(char *name) } /* shut down any prior thread */ deactivate_sample_thread(); - /* save info about the thread */ + /* save info about the thread */ horiz->thread_name = (char *)ho_name(thread); horiz->thread_period_ns = thread->period; /* calc max possible mult (to keep sample period <= 1 sec */ @@ -918,7 +918,7 @@ static int activate_sample_thread(void) { scope_horiz_t *horiz; int rv; - + /* get a pointer to the horiz data structure */ horiz = &(ctrl_usr->horiz); /* has a thread name been specified? */ @@ -947,7 +947,7 @@ static void mult_changed(GtkAdjustment * adj, gpointer gdata) { scope_horiz_t *horiz; int value; - + /* point to GUI widgets */ horiz = &(ctrl_usr->horiz); /* get value from spinbutton */ @@ -1249,7 +1249,7 @@ static gint horiz_motion(GtkWidget *widget, GdkEventMotion *event) { double disp_center, disp_start, disp_end; double rec_start, rec_end; double min, max, span, scale; - double newpos; + double newpos; int x, y; GdkModifierType state; @@ -1262,7 +1262,7 @@ static gint horiz_motion(GtkWidget *widget, GdkEventMotion *event) { y = event->y; state = event->state; } - + if(!(state & GDK_BUTTON1_MASK)) return TRUE; motion = x - horiz->x0; @@ -1292,7 +1292,7 @@ static gint horiz_motion(GtkWidget *widget, GdkEventMotion *event) { newpos = GTK_ADJUSTMENT(horiz->pos_adj)->value + motion * 100 / scale; gtk_adjustment_set_value(GTK_ADJUSTMENT(horiz->pos_adj), newpos); - + horiz->x0 = event->x; return TRUE; } diff --git a/src/modules/unmanaged/components/halscope/src/scope_trig.c b/src/modules/unmanaged/components/halscope/src/scope_trig.c index 07c2f9302b..72c1dcb1e3 100644 --- a/src/modules/unmanaged/components/halscope/src/scope_trig.c +++ b/src/modules/unmanaged/components/halscope/src/scope_trig.c @@ -189,7 +189,7 @@ void refresh_trigger(void) void write_trig_config(FILE *fp) { scope_trig_t *trig; - + trig = &(ctrl_usr->trig); if (ctrl_shm->trig_chan > 0) { fprintf(fp, "TSOURCE %d\n", ctrl_shm->trig_chan); diff --git a/src/modules/unmanaged/components/halscope/src/scope_usr.h b/src/modules/unmanaged/components/halscope/src/scope_usr.h index 9e95ff468c..9b3cb3f1ee 100644 --- a/src/modules/unmanaged/components/halscope/src/scope_usr.h +++ b/src/modules/unmanaged/components/halscope/src/scope_usr.h @@ -179,7 +179,7 @@ typedef struct { int selected_part; } scope_disp_t; -/* this struct holds data relating to logging */ +/* this struct holds data relating to logging */ typedef enum { INTERLACED, NOT_INTERLACED } log_order_t; typedef enum { OVERWRITE, APPEND } log_append_t; diff --git a/src/modules/unmanaged/components/halscope/src/scope_vert.c b/src/modules/unmanaged/components/halscope/src/scope_vert.c index a9a180b796..524e16f424 100644 --- a/src/modules/unmanaged/components/halscope/src/scope_vert.c +++ b/src/modules/unmanaged/components/halscope/src/scope_vert.c @@ -375,7 +375,7 @@ int set_vert_pos(double setting) /* set position slider based on new setting */ adj = GTK_ADJUSTMENT(vert->pos_adj); gtk_adjustment_set_value(adj, chan->position * VERT_POS_RESOLUTION); - /* refresh other stuff */ + /* refresh other stuff */ if (chan_num == ctrl_shm->trig_chan) { refresh_trigger(); } @@ -397,7 +397,7 @@ int set_vert_offset(double setting, int ac_coupled) return -1; } chan = &(ctrl_usr->chan[chan_num - 1]); - /* set the new offset */ + /* set the new offset */ chan->vert_offset = setting; chan->ac_offset = ac_coupled; /* update the offset display */ @@ -412,7 +412,7 @@ int set_vert_offset(double setting, int ac_coupled) } snprintf(buf2, BUFLEN, _("Offset\n%s"), buf1); gtk_label_set_text_if(vert->offset_label, buf2); - /* refresh other stuff */ + /* refresh other stuff */ if (chan_num == ctrl_shm->trig_chan) { refresh_trigger(); } @@ -896,7 +896,7 @@ static void channel_off_button(GtkWidget * widget, gpointer gdata) vert = &(ctrl_usr->vert); chan_num = vert->selected; - set_channel_off(chan_num); + set_channel_off(chan_num); } static void change_source_button(GtkWidget * widget, gpointer gdata) @@ -984,7 +984,7 @@ static gboolean search_for_entry(GtkWidget *widget, GdkEventKey *event, dialog_g } else { strcat(search_target, event->string); } - + for(z = search_row, wrapped=0; z != search_row || !wrapped; z ++) { char *text; @@ -992,13 +992,13 @@ static gboolean search_for_entry(GtkWidget *widget, GdkEventKey *event, dialog_g if(!gtk_clist_get_text(clist, z, 0, &text)) { if(wrapped) break; // wrapped second time (why?) z = 0; - wrapped = 1; + wrapped = 1; } - + if(strstr(text, search_target)) { double pos = (z+.5) / (clist->rows-1); if(pos > 1) pos = 1; - + GTK_CLIST_GET_CLASS(clist)->scroll_vertical(clist, GTK_SCROLL_JUMP, pos); gtk_clist_select_row(clist, z, 0); search_row = z; @@ -1198,7 +1198,7 @@ static gboolean dialog_select_source(int chan_num) // if initial_page was not set, ensure a valid page if(initial_page == -1) initial_page = 0; - + if ( initial_row >= 0 ) { /* highlight the currently selected name */ gtk_clist_select_row(GTK_CLIST(vert->lists[initial_page]), initial_row, -1); @@ -1242,7 +1242,7 @@ static void selection_made(GtkWidget * clist, gint row, gint column, GdkEventButton * event, dialog_generic_t * dptr) { GdkEventType type; - + if ((event == NULL) || (clist == NULL)) { /* We get spurious events when the lists are populated I don't know why. If either clist or event is null, it's a bad one! */ diff --git a/src/modules/unmanaged/components/halstreamer/src/streamer_usr.c b/src/modules/unmanaged/components/halstreamer/src/streamer_usr.c index 2b80e2936f..5bf8caea1e 100644 --- a/src/modules/unmanaged/components/halstreamer/src/streamer_usr.c +++ b/src/modules/unmanaged/components/halstreamer/src/streamer_usr.c @@ -6,7 +6,7 @@ * * Author: John Kasunich * License: GPL Version 2 -* +* * Copyright (c) 2006 All rights reserved. * ********************************************************************/ @@ -14,7 +14,7 @@ that allows numbers stored in a file to be "streamed" onto HAL pins at a uniform realtime sample rate. When the realtime module is loaded, it creates a fifo in shared memory. Then, the user - space program 'hal_streamer' is invoked. 'hal_streamer' takes + space program 'hal_streamer' is invoked. 'hal_streamer' takes input from stdin and writes it to the fifo, and the realtime part transfers the data from the fifo to HAL pins. @@ -24,7 +24,7 @@ 'chan_num', if present, specifies the streamer channel to use. The default is channel zero. Since hal_streamer takes its data - from stdin, it will almost always either need to have stdin + from stdin, it will almost always either need to have stdin redirected from a file, or have data piped into it from some other program. */ @@ -290,7 +290,7 @@ int main(int argc, char **argv) if ( errmsg != NULL ) { /* print message */ fprintf (stderr, "line %d, field %d: %s, skipping the line\n", line, n, errmsg ); - /** TODO - decide whether to skip this line and continue, or + /** TODO - decide whether to skip this line and continue, or abort the program. Right now it skips the line. */ } else { /* good data, keep it */ diff --git a/src/modules/unmanaged/components/haltalk/src/haltalk_command.cc b/src/modules/unmanaged/components/haltalk/src/haltalk_command.cc index 44bb1e849f..15f64309d1 100644 --- a/src/modules/unmanaged/components/haltalk/src/haltalk_command.cc +++ b/src/modules/unmanaged/components/haltalk/src/haltalk_command.cc @@ -411,7 +411,7 @@ process_rcomp_bind(htself_t *self, zmsg_t *from, retval = validate_component(cname, pbcomp, self->tx); if (retval) { zframe_t *o = zmsg_first (from); // freed with msg - if(o == NULL){ + if(o == NULL){ rtapi_print_msg(RTAPI_MSG_ERR,"process_rcomp_bind(): NULL zframe_t 'o' passed"); return -1; } @@ -482,7 +482,7 @@ dispatch_request(htself_t *self, zmsg_t *from, void *socket) // check for component submessages, and fail if none present if (self->rx.comp_size() == 0) { zframe_t *o = zmsg_first (from); // freed with msg - if(o == NULL){ + if(o == NULL){ rtapi_print_msg(RTAPI_MSG_ERR,"dispatch_request(): NULL zframe_t 'o' passed"); return -1; } @@ -523,7 +523,7 @@ dispatch_request(htself_t *self, zmsg_t *from, void *socket) note_printf(self->tx, "rcommand %d: not implemented", self->rx.type()); send_pbcontainer(from, self->tx, socket); zframe_t *o = zmsg_first (from); // freed with msg - if(o == NULL){ + if(o == NULL){ rtapi_print_msg(RTAPI_MSG_ERR,"process_rcomp_bind(): NULL zframe_t 'o' passed"); return -1; } diff --git a/src/modules/unmanaged/components/input/src/hal_input.py b/src/modules/unmanaged/components/input/src/hal_input.py index b81728682d..45260ba715 100644 --- a/src/modules/unmanaged/components/input/src/hal_input.py +++ b/src/modules/unmanaged/components/input/src/hal_input.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python3 # Copyright 2007 Jeff Epler # # This program is free software; you can redistribute it and/or modify diff --git a/src/modules/unmanaged/components/input/src/pyproject.toml.in b/src/modules/unmanaged/components/input/src/pyproject.toml.in index 67ab2194ba..b7d7f4d273 100644 --- a/src/modules/unmanaged/components/input/src/pyproject.toml.in +++ b/src/modules/unmanaged/components/input/src/pyproject.toml.in @@ -55,4 +55,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/modules/unmanaged/components/meter/src/meter.c b/src/modules/unmanaged/components/meter/src/meter.c index 42b2061eac..d68117ecc3 100644 --- a/src/modules/unmanaged/components/meter/src/meter.c +++ b/src/modules/unmanaged/components/meter/src/meter.c @@ -11,8 +11,8 @@ initially display the pin/signal/parameter , otherwise it will initially display nothing. */ -/* Added ability to specify initial window positon on command line - -g Xposition Yposiion Chris Morley June 2009 +/* Added ability to specify initial window positon on command line + -g Xposition Yposiion Chris Morley June 2009 */ /** Copyright (C) 2003 John Kasunich @@ -160,7 +160,7 @@ int main(int argc, gchar * argv[]) /* process my own command line args (if any) here */ small = 0; n = 1; - while ( argc > n ) { + while ( argc > n ) { if ( strcmp (argv[n], "-g") == 0 ) { /* This sets up the variables for initial position of window*/ /* The last check is for the optional width request*/ @@ -173,13 +173,13 @@ int main(int argc, gchar * argv[]) if ( argc > n ){ strcpy(buf,argv[n]); for (i=0; i< strlen(argv[n]); i++) { - if (isdigit(buf[i]) == 0) { break; } + if (isdigit(buf[i]) == 0) { break; } } if (strlen(argv[n]) == i){ width = atoi(argv[n]); n++; } - } + } } if ((argc > n) && ( strcmp (argv[n], "-s") == 0 )) { small = 1; @@ -207,8 +207,8 @@ int main(int argc, gchar * argv[]) } else { printf(_("ERROR: no pin/signal/parameter name\n")); return -1; - } - } + } + } } if ((initial_name == NULL) && (small == 1)) { printf(_("ERROR: -s option requires a probe type and a pin/signal/parameter name\n")); @@ -764,7 +764,7 @@ static void close_selection(GtkWidget * widget, gpointer data) probe = (probe_t *) data; /* destroy the window, hiding it causes problems when showing again */ // it wouldn't always switch to the same tab, which causes confusion - // we need to rebuild the lists anyways, + // we need to rebuild the lists anyways, // so rebuilding it doesn't take that longer gtk_widget_destroy(probe->window); } @@ -793,13 +793,13 @@ static void selection_made(GtkWidget * clist, gint row, gint column, close_selection(GTK_WIDGET(probe->window), probe); } return; - } + } } static void page_switched(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer user_data) { - // update the listnum in probe data, because + // update the listnum in probe data, because ((probe_t *)user_data)->listnum=page_num; } diff --git a/src/modules/unmanaged/components/ringdemo/src/pyproject.toml.in b/src/modules/unmanaged/components/ringdemo/src/pyproject.toml.in index 523bbfcb28..73f6f42df8 100644 --- a/src/modules/unmanaged/components/ringdemo/src/pyproject.toml.in +++ b/src/modules/unmanaged/components/ringdemo/src/pyproject.toml.in @@ -58,4 +58,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/modules/unmanaged/components/ringdemo/src/ringread.py b/src/modules/unmanaged/components/ringdemo/src/ringread.py index 055da794b4..09853ced73 100644 --- a/src/modules/unmanaged/components/ringdemo/src/ringread.py +++ b/src/modules/unmanaged/components/ringdemo/src/ringread.py @@ -17,18 +17,18 @@ def main(): r = hal.Ring(name) except NameError as e: print(e) - + else: while True: # peek at the ring contents: for i in r: print("peek record: ",i.tobytes()) - + # then consume all records available for i in r: print("consume record: ",i.tobytes()) r.shift() - + time.sleep(1) if __name__ == "__main__": diff --git a/src/modules/unmanaged/components/ringdemo/src/zmqringsub.py b/src/modules/unmanaged/components/ringdemo/src/zmqringsub.py index b2dd5c9be9..09f8fa2d2d 100644 --- a/src/modules/unmanaged/components/ringdemo/src/zmqringsub.py +++ b/src/modules/unmanaged/components/ringdemo/src/zmqringsub.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 -# # run as python zmqringsub.py [[destination] [optional list of ring names]] # # see also zmqringpub.py and zmqdemo.hal diff --git a/src/modules/unmanaged/components/sampler_usr/src/sampler_usr.c b/src/modules/unmanaged/components/sampler_usr/src/sampler_usr.c index 69c41a4e38..9cc12c1993 100644 --- a/src/modules/unmanaged/components/sampler_usr/src/sampler_usr.c +++ b/src/modules/unmanaged/components/sampler_usr/src/sampler_usr.c @@ -6,12 +6,12 @@ * * Author: John Kasunich * License: GPL Version 2 -* +* * Copyright (c) 2006 All rights reserved. * ********************************************************************/ /** This file, 'sampler_usr.c', is the user part of a HAL component - that allows values to be sampled from HAL pins at a uniform + that allows values to be sampled from HAL pins at a uniform realtime sample rate, and writes them to a stdout (from which they can be redirected to a file). When the realtime module is loaded, it creates a fifo in shared memory and begins capturing diff --git a/src/modules/unmanaged/components/scounter/src/scounter.comp b/src/modules/unmanaged/components/scounter/src/scounter.comp index 5aed3fdcf4..bde8799bc8 100644 --- a/src/modules/unmanaged/components/scounter/src/scounter.comp +++ b/src/modules/unmanaged/components/scounter/src/scounter.comp @@ -1,4 +1,4 @@ -// simple unmanaged counter component +// simple unmanaged counter component // set target pin to value and will count up to value in half second increments // I used for generating changing pin values to test reading by other components @@ -10,7 +10,7 @@ pin in bit trigger = 0; pin out bit start = 0; pin out bit running = 0; pin out bit stopped = 0; -option singleton yes; +option singleton yes; option userspace yes; author "ArcEye "; @@ -18,7 +18,7 @@ license "GPL"; ;; #include /* Standard input/output definitions */ -#include +#include #include /* Standard types */ #include /* UNIX standard function definitions */ diff --git a/src/modules/unmanaged/components/storage/src/hal_storage.py b/src/modules/unmanaged/components/storage/src/hal_storage.py index 5cb2f743f9..00010140fc 100755 --- a/src/modules/unmanaged/components/storage/src/hal_storage.py +++ b/src/modules/unmanaged/components/storage/src/hal_storage.py @@ -1,5 +1,4 @@ #!/usr/bin/env python3 -# encoding: utf-8 """ Storage.py diff --git a/src/modules/unmanaged/components/storage/src/pyproject.toml.in b/src/modules/unmanaged/components/storage/src/pyproject.toml.in index 0beb985b3a..9efef5712e 100644 --- a/src/modules/unmanaged/components/storage/src/pyproject.toml.in +++ b/src/modules/unmanaged/components/storage/src/pyproject.toml.in @@ -55,4 +55,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/modules/unmanaged/components/videoserver/Submakefile b/src/modules/unmanaged/components/videoserver/Submakefile index e7925ea556..eab9936424 100644 --- a/src/modules/unmanaged/components/videoserver/Submakefile +++ b/src/modules/unmanaged/components/videoserver/Submakefile @@ -9,5 +9,3 @@ $(patsubst %, ../bin/%, $(VIDEOSERVER_COMP_PY)) : ../bin/%: $(MKWDIR)/%.py $(Q)(echo '#!$(PYTHON)'; sed '1 { /^#!/d; }' $<) > $@.tmp && chmod +x $@.tmp && mv -f $@.tmp $@ PYTARGETS += $(patsubst %, ../bin/%, $(VIDEOSERVER_COMP_PY)) - - diff --git a/src/modules/unmanaged/components/videoserver/src/pyproject.toml.in b/src/modules/unmanaged/components/videoserver/src/pyproject.toml.in index 3790251a8f..64b0a41d91 100644 --- a/src/modules/unmanaged/components/videoserver/src/pyproject.toml.in +++ b/src/modules/unmanaged/components/videoserver/src/pyproject.toml.in @@ -55,4 +55,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/modules/unmanaged/components/videoserver/src/videoserver.py b/src/modules/unmanaged/components/videoserver/src/videoserver.py index b1b7bfcbcb..be81f3c494 100644 --- a/src/modules/unmanaged/components/videoserver/src/videoserver.py +++ b/src/modules/unmanaged/components/videoserver/src/videoserver.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python3 -# coding=utf-8 - import os import sys import shlex diff --git a/src/modules/unmanaged/components/vismach/Submakefile b/src/modules/unmanaged/components/vismach/Submakefile index b8644b05ec..611faf3eac 100644 --- a/src/modules/unmanaged/components/vismach/Submakefile +++ b/src/modules/unmanaged/components/vismach/Submakefile @@ -20,4 +20,3 @@ $(VISMACH_PYBIN): ../bin/%: hal/user_comps/vismach/%.py $(Q)$(PYTHON) -c 'import sys; compile(open(sys.argv[1]).read(), sys.argv[1], "exec")' $< $(ECHO) Copying python script $(notdir $@) $(Q)(echo '#!$(PYTHON)'; sed '1 { /^#!/d; }' $<) > $@.tmp && chmod +x $@.tmp && mv -f $@.tmp $@ - diff --git a/src/modules/unmanaged/components/vismach/src/5axisgui.py b/src/modules/unmanaged/components/vismach/src/5axisgui.py index 6bae646869..d18f45fb7a 100755 --- a/src/modules/unmanaged/components/vismach/src/5axisgui.py +++ b/src/modules/unmanaged/components/vismach/src/5axisgui.py @@ -85,7 +85,7 @@ def coords(self): ram = Collection([ram, Box(-100,100,350, 100,200,550) ]) - + ram = HalTranslate([ram],c,"joint0",1,0,0) ram = Collection([ram, diff --git a/src/modules/unmanaged/components/vismach/src/hexagui.py b/src/modules/unmanaged/components/vismach/src/hexagui.py index 2986ce7581..37390a09b9 100755 --- a/src/modules/unmanaged/components/vismach/src/hexagui.py +++ b/src/modules/unmanaged/components/vismach/src/hexagui.py @@ -3,7 +3,7 @@ # You may distribute this software under the GNU GPL v2 or later # # Hexapod visualization. -# In HAL, you must link axis.* to cartesian coordinates from +# In HAL, you must link axis.* to cartesian coordinates from # halui, because I am too lazy to implement inverse kinematics. # This causes some mismatch between the struts and platform. # Hopefully this can be fixed with some twiddling. @@ -42,9 +42,9 @@ #draw it! minitetra = 1 -#stolen from genhexkins.h +#stolen from genhexkins.h # you must change these if you are not using minitetra -# positions of base strut ends in base (world) coordinates +# positions of base strut ends in base (world) coordinates base_offsets = list(range(6)) base_offsets[0] = (-22.950, 13.250, 0) base_offsets[1] = (22.950, 13.250, 0) @@ -53,7 +53,7 @@ base_offsets[4] = (0, -26.5, 0) base_offsets[5] = (-22.950, 13.250, 0) -# position of platform strut end in platform coordinate system +# position of platform strut end in platform coordinate system plat_offsets = list(range(6)) plat_offsets[0] = (-1, 11.5, 0) plat_offsets[1] = (1, 11.5, 0) @@ -113,8 +113,8 @@ inner = HalTranslate([inner],c,hal_pin,0,0,scale) inner = Translate([inner],0,0,strut_length) strut = Collection([inner, outer]) - - #build platform + + #build platform # plat_joint_coords += [Capture()] plat_joint_coords = Capture() plat_joint = BoxCentered(1,1,2) @@ -123,12 +123,12 @@ if(minitetra): plat_joint = Rotate([plat_joint],-120*(i%2)+60*i, 0,0,1) x,y,z = plat_offsets[i] - plat_joint = Translate([plat_joint],x,y,z) + plat_joint = Translate([plat_joint],x,y,z) else: plat_joint = Translate([plat_joint], 0.8*plat_radius,0,-plat_thickness) plat_joint = Rotate([plat_joint], angles[i]-120*(i%2)+60, 0,0,1) plat_joints += [plat_joint] - + #build base # base_joint_coords += [Capture()] base_joint_coords = Capture() @@ -143,7 +143,7 @@ base_joint = Translate([base_joint], 0.8*base_radius,0,0) base_joint = Rotate([base_joint], angles[i], 0,0,1) base_joints += [base_joint] - + #point strut at platform - this also translates the strut to the base joint #because i couldnt figure out how to rotate it around the base of the strut strut = Track([strut],base_joint_coords, plat_joint_coords, world_coords) @@ -188,4 +188,3 @@ #main(model, tool_coords, work_coords, size=30, hud=myhud) main(model, tool_coords, work_coords, size=30) - diff --git a/src/modules/unmanaged/components/vismach/src/puma560gui.py b/src/modules/unmanaged/components/vismach/src/puma560gui.py index 6670889b13..40e039b59f 100755 --- a/src/modules/unmanaged/components/vismach/src/puma560gui.py +++ b/src/modules/unmanaged/components/vismach/src/puma560gui.py @@ -101,7 +101,7 @@ link4 = Rotate([link4],-90,0,1,0) link4 = Rotate([link4],90,0,0,1) link4 = Translate([link4],0,0,-14.25) # note: 14.25 + 2.8 = 17.05 - distance between j3 and j5 -#assemble +#assemble link4 = Collection([link5, link4]) # move back to joint3 in origin link4 = Translate([link4],1.85,0,14.25) #note: 14.25 as above, 1.85 = (9.2 - 5.5) / 2 diff --git a/src/modules/unmanaged/components/vismach/src/rostock.py b/src/modules/unmanaged/components/vismach/src/rostock.py index 6a84851b7f..dcc28d5e0b 100644 --- a/src/modules/unmanaged/components/vismach/src/rostock.py +++ b/src/modules/unmanaged/components/vismach/src/rostock.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python3 # Copyright 2013 Jeff Epler # # This program is free software; you can redistribute it and/or modify @@ -43,7 +42,7 @@ def __init__(self, parts, comp): def apply(self): glPushMatrix() - lineardeltakins.set_geometry(self.comp['R'], self.comp['L']) + lineardeltakins.set_geometry(self.comp['R'], self.comp['L']) f = lineardeltakins.forward(self.comp['joint0'], self.comp['joint1'], self.comp['joint2']) if f is not None: self.x = x = f[0] @@ -68,7 +67,7 @@ def draw(self): x0 = 0 x1 = -self.h*sin(pi/3) x2 = self.h*sin(pi/3) - y0 = self.h + y0 = self.h y1 = y2 = -self.h*cos(pi/3) z0 = self.z0 z1 = self.z1 @@ -174,7 +173,7 @@ def cylinder(self, L): # the top cap needs flipped and translated glTranslatef(0,0, L) gluDisk(self.q, 0, 5, 32, 1) - + tooltip = Capture() tool = DeltaTranslate([ Translate([ diff --git a/src/modules/unmanaged/components/vismach/src/scaragui.py b/src/modules/unmanaged/components/vismach/src/scaragui.py index c055590f2d..da43bf2177 100755 --- a/src/modules/unmanaged/components/vismach/src/scaragui.py +++ b/src/modules/unmanaged/components/vismach/src/scaragui.py @@ -96,7 +96,7 @@ CylinderZ(tool_len, tool_radius, tool_dia, tool_radius), CylinderZ(tool_dia, tool_radius, 0.0, 0.0)]) # translate so origin is at base of tool, not the tip -tool = Translate([tool],0.0,0.0,-tool_len) +tool = Translate([tool],0.0,0.0,-tool_len) # the tool might not be pointing straight down tool = Rotate([tool],tool_angle,0.0,-1.0,0.0) # make joint 3 rotate diff --git a/src/modules/unmanaged/drivers/gpio_mcp23017/src/hal_gpio_mcp23017.py b/src/modules/unmanaged/drivers/gpio_mcp23017/src/hal_gpio_mcp23017.py index 7f2217ea15..a3856b16d5 100755 --- a/src/modules/unmanaged/drivers/gpio_mcp23017/src/hal_gpio_mcp23017.py +++ b/src/modules/unmanaged/drivers/gpio_mcp23017/src/hal_gpio_mcp23017.py @@ -1,5 +1,4 @@ #!/usr/bin/env python3 -# encoding: utf-8 """ Gpio.py diff --git a/src/modules/unmanaged/drivers/gpio_mcp23017/src/pyproject.toml.in b/src/modules/unmanaged/drivers/gpio_mcp23017/src/pyproject.toml.in index c059a1f2ed..7de06ad8be 100644 --- a/src/modules/unmanaged/drivers/gpio_mcp23017/src/pyproject.toml.in +++ b/src/modules/unmanaged/drivers/gpio_mcp23017/src/pyproject.toml.in @@ -55,4 +55,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/modules/unmanaged/drivers/gs2_vfd/src/gs2_vfd.c b/src/modules/unmanaged/drivers/gs2_vfd/src/gs2_vfd.c index c77ed1c16c..f9d0ba2ad5 100644 --- a/src/modules/unmanaged/drivers/gs2_vfd/src/gs2_vfd.c +++ b/src/modules/unmanaged/drivers/gs2_vfd/src/gs2_vfd.c @@ -94,7 +94,7 @@ typedef struct { hal_float_t *freq_cmd; // frequency command hal_float_t *freq_out; // actual output frequency hal_float_t *curr_out; // output current - hal_float_t *DCBusV; // + hal_float_t *DCBusV; // hal_float_t *outV; hal_float_t *RPM; hal_float_t *scale_freq; @@ -339,7 +339,7 @@ int write_data(modbus_t *mb_ctx, slavedata_t *slavedata, haldata_t *haldata) { // int write_data[MAX_WRITE_REGS]; int retval; hal_float_t hzcalc; - + if (haldata->motor_hz<10) haldata->motor_hz = 60; if ((haldata->motor_RPM < 600) || (haldata->motor_RPM > 5000)) @@ -356,7 +356,7 @@ int write_data(modbus_t *mb_ctx, slavedata_t *slavedata, haldata_t *haldata) { if (*haldata->spindle_on){ modbus_write_register(mb_ctx, slavedata->write_reg_start+1, 1); comm_delay=0; - } + } else modbus_write_register(mb_ctx, slavedata->write_reg_start+1, 0); haldata->old_run = *(haldata->spindle_on); @@ -371,7 +371,7 @@ int write_data(modbus_t *mb_ctx, slavedata_t *slavedata, haldata_t *haldata) { if (*(haldata->spindle_fwd) || !(*(haldata->spindle_on))) // JET turn on and off rev based on the status of fwd *(haldata->spindle_rev) = 0; if (!(*haldata->spindle_fwd) && *(haldata->spindle_on)) - *(haldata->spindle_rev) = 1; + *(haldata->spindle_rev) = 1; if (*(haldata->err_reset) != haldata->old_err_reset) { if (*(haldata->err_reset)) modbus_write_register(mb_ctx, slavedata->write_reg_start+4, 1); @@ -385,7 +385,7 @@ int write_data(modbus_t *mb_ctx, slavedata_t *slavedata, haldata_t *haldata) { if ((*haldata->spindle_on) && comm_delay == haldata->ack_delay){ // JET test for up to speed if ((*(haldata->freq_cmd))==(*(haldata->freq_out))) *(haldata->at_speed) = 1; - } + } if (*(haldata->spindle_on)==0){ // JET reset at-speed *(haldata->at_speed) = 0; } @@ -460,10 +460,10 @@ int read_data(modbus_t *mb_ctx, slavedata_t *slavedata, haldata_t *hal_data_bloc *(hal_data_block->freq_cmd) = receive_data[2] * 0.1; *(hal_data_block->freq_out) = receive_data[3] * 0.1; if (receive_data[3]==0){ // JET if freq out is 0 then the drive is stopped - *(hal_data_block->is_stopped) = 1; - } else { - *(hal_data_block->is_stopped) = 0; - } + *(hal_data_block->is_stopped) = 1; + } else { + *(hal_data_block->is_stopped) = 0; + } *(hal_data_block->curr_out) = receive_data[4] * 0.1; *(hal_data_block->DCBusV) = receive_data[5] * 0.1; *(hal_data_block->outV) = receive_data[6] * 0.1; @@ -716,7 +716,7 @@ int main(int argc, char **argv) retval = hal_pin_bit_newf(HAL_OUT, &(haldata->at_speed), hal_comp_id, "%s.at-speed", modname); if (retval!=0) goto out_closeHAL; retval = hal_pin_bit_newf(HAL_OUT, &(haldata->is_stopped), hal_comp_id, "%s.is-stopped", modname); // JET - if (retval!=0) goto out_closeHAL; + if (retval!=0) goto out_closeHAL; retval = hal_pin_float_newf(HAL_IN, &(haldata->speed_command), hal_comp_id, "%s.speed-command", modname); if (retval!=0) goto out_closeHAL; retval = hal_pin_bit_newf(HAL_IN, &(haldata->spindle_on), hal_comp_id, "%s.spindle-on", modname); @@ -763,7 +763,7 @@ int main(int argc, char **argv) haldata->old_dir = -1; haldata->old_err_reset = -1; hal_ready(hal_comp_id); - + /* here's the meat of the program. loop until done (which may be never) */ while (done==0) { read_data(mb_ctx, &slavedata, haldata); @@ -775,7 +775,7 @@ int main(int argc, char **argv) loop_timespec.tv_nsec = (long)((haldata->looptime - loop_timespec.tv_sec) * 1000000000l); nanosleep(&loop_timespec, &remaining); } - + retval = 0; /* if we get here, then everything is fine, so just clean up and exit */ out_closeHAL: hal_exit(hal_comp_id); diff --git a/src/modules/unmanaged/drivers/gy68/src/pyproject.toml.in b/src/modules/unmanaged/drivers/gy68/src/pyproject.toml.in index b12588fd69..32c81aa3bb 100644 --- a/src/modules/unmanaged/drivers/gy68/src/pyproject.toml.in +++ b/src/modules/unmanaged/drivers/gy68/src/pyproject.toml.in @@ -55,4 +55,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/modules/unmanaged/drivers/huanyang_vfd/config-files/custom_postgui.hal b/src/modules/unmanaged/drivers/huanyang_vfd/config-files/custom_postgui.hal index 5a2755a692..7671e1f960 100644 --- a/src/modules/unmanaged/drivers/huanyang_vfd/config-files/custom_postgui.hal +++ b/src/modules/unmanaged/drivers/huanyang_vfd/config-files/custom_postgui.hal @@ -30,5 +30,3 @@ setp spindle-vfd.enable 1 net DRO-Xpos <= axis.0.joint-pos-cmd => pyvcp.Xdisplay net DRO-Ypos <= axis.1.joint-pos-cmd => pyvcp.Ydisplay net DRO-Zpos <= axis.2.joint-pos-cmd => pyvcp.Zdisplay - - diff --git a/src/modules/unmanaged/drivers/huanyang_vfd/config-files/panel.xml b/src/modules/unmanaged/drivers/huanyang_vfd/config-files/panel.xml index 8596a133b6..c471777593 100644 --- a/src/modules/unmanaged/drivers/huanyang_vfd/config-files/panel.xml +++ b/src/modules/unmanaged/drivers/huanyang_vfd/config-files/panel.xml @@ -233,7 +233,7 @@ ("Helvetica",2) - + "spindle-speed" 1440 diff --git a/src/modules/unmanaged/drivers/huanyang_vfd/src/hy_comm.c b/src/modules/unmanaged/drivers/huanyang_vfd/src/hy_comm.c index 2ca0a36f75..c897f47a6a 100644 --- a/src/modules/unmanaged/drivers/huanyang_vfd/src/hy_comm.c +++ b/src/modules/unmanaged/drivers/huanyang_vfd/src/hy_comm.c @@ -1,29 +1,29 @@ /* hy_comm.c - + By S.Alford - + These library of functions are designed to enable a program send and receive data from a Huanyang VFD. This device does not use a standard Modbus function code or data structure. - + 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., 675 Mass Ave, Cambridge, MA 02139, USA. - + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + This code has its origins with libmodbus. - -*/ - + +*/ + #include #include #include @@ -37,90 +37,90 @@ #include "runtime/rtapi.h" #include "hy_comm.h" - + /* Table of CRC values for high-order byte */ static unsigned char table_crc_hi[] = { - 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, - 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, - 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, - 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, - 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, - 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, - 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, - 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, - 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, - 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, - 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, - 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, - 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, - 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, - 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, - 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, - 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, - 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, - 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, - 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, - 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, - 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, - 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, - 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, - 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, + 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, + 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, + 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, + 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, + 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, + 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, + 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, + 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, + 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, + 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, + 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, + 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, + 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, + 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, + 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40 }; /* Table of CRC values for low-order byte */ static unsigned char table_crc_lo[] = { - 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, - 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, - 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, - 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, - 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, - 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, - 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, - 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, - 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, - 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, - 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, - 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, - 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, - 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, - 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, - 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, - 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, - 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, - 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, - 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, - 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, - 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, - 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, - 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, - 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, + 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, + 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, + 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, + 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, + 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, + 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, + 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, + 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, + 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, + 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, + 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, + 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, + 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, + 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, + 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, + 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, + 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, + 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, + 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, + 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, + 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, + 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, + 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, + 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, + 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40 -}; +}; + +/************************************************************************* -/************************************************************************* - Function to treat comms errors - + **************************************************************************/ static void error_treat(hycomm_param_t *hc_param, int code, const char *string) { if (!hc_param->print_errors) return; - + printf("\nERROR %s (%d)\n", string, code); - + /* flush the port */ tcflush(hc_param->fd, TCIOFLUSH); } -/************************************************************************* - +/************************************************************************* + Fast CRC function - + **************************************************************************/ static unsigned short crc16(unsigned char *buffer, @@ -140,10 +140,10 @@ static unsigned short crc16(unsigned char *buffer, return (crc_hi << 8 | crc_lo); } -/************************************************************************* - +/************************************************************************* + Check CRC function, returns 0 else returns INVALID_CRC - + **************************************************************************/ static int check_crc16(hycomm_param_t *hc_param, uint8_t *msg, @@ -152,17 +152,17 @@ static int check_crc16(hycomm_param_t *hc_param, uint8_t *msg, int ret; uint16_t crc_calc; uint16_t crc_received; - + crc_calc = crc16(msg, msg_length - 2); crc_received = (msg[msg_length - 2] << 8) | msg[msg_length - 1]; - + /* Check CRC of msg */ if (crc_calc == crc_received) { ret = 0; } else { char s_error[64]; sprintf(s_error, - "invalid crc received %0X - crc_calc %0X", + "invalid crc received %0X - crc_calc %0X", crc_received, crc_calc); ret = INVALID_CRC; error_treat(hc_param, ret, s_error); @@ -174,14 +174,14 @@ static int check_crc16(hycomm_param_t *hc_param, uint8_t *msg, -/************************************************************************* - +/************************************************************************* + Function to compute the response length based on function code within the query sent to the VFD - + **************************************************************************/ -static unsigned int compute_response_length(hycomm_param_t *hc_param, +static unsigned int compute_response_length(hycomm_param_t *hc_param, uint8_t *query) { int resp_length; @@ -190,68 +190,68 @@ static unsigned int compute_response_length(hycomm_param_t *hc_param, { case 0x01: /* Huanyang VFD - Function Read */ - + case 0x02: /* Huanyang VFD - Function Write */ resp_length = 8; break; - + case 0x03: /* Huanyang VFD - Write Control Data */ resp_length = 6; break; - + case 0x04: /* Huanyang VFD - Read Control Data */ resp_length = 8; - break; - + break; + case 0x05: /* Huanyang VFD - Write Inverter Frequency Data */ resp_length = 7; - break; - + break; + case 0x06: /* Huanyang VFD - Reserved */ - + case 0x07: - /* Huanyang VFD - Reserved */ + /* Huanyang VFD - Reserved */ return -1; break; - + case 0x08: /* Huanyang VFD - Loop Test (not implemented)*/ return -1; break; - + default: return -1; break; } return resp_length; -} - -/************************************************************************* - - Function to add a checksum to the end of a query and send. - -**************************************************************************/ - -static int hycomm_send(hycomm_param_t *hc_param, uint8_t *query, int query_length ) -{ +} + +/************************************************************************* + + Function to add a checksum to the end of a query and send. + +**************************************************************************/ + +static int hycomm_send(hycomm_param_t *hc_param, uint8_t *query, int query_length ) +{ int ret; unsigned short s_crc; int i; - + /* calculate the CRC */ s_crc = crc16(query, query_length); - + /* append the CRC to then end of the query */ - query[query_length++] = s_crc >> 8; - query[query_length++] = s_crc & 0x00FF; - + query[query_length++] = s_crc >> 8; + query[query_length++] = s_crc & 0x00FF; + if (hc_param->debug) { printf("hycomm query = "); @@ -259,7 +259,7 @@ static int hycomm_send(hycomm_param_t *hc_param, uint8_t *query, int query_lengt printf("[%.2X]", query[i]); printf("\n"); } - + /* write the query to the fd */ ret = write(hc_param->fd, query, query_length); @@ -270,21 +270,21 @@ static int hycomm_send(hycomm_param_t *hc_param, uint8_t *query, int query_lengt error_treat(hc_param, ret, "Write port/socket failure"); ret = PORT_FAILURE; } - + return ret; -} +} + + - +/*********************************************************************** -/*********************************************************************** - Definintion to be used multiple times in receive_msg function - -***********************************************************************/ - - + +***********************************************************************/ + + #define WAIT_DATA() \ { \ while ((select_ret = select(hc_param->fd+1, &rfds, NULL, NULL, &tv)) == -1) { \ @@ -304,50 +304,50 @@ static int hycomm_send(hycomm_param_t *hc_param, uint8_t *query, int query_lengt /* Call to error_treat is done later to manage exceptions */ \ return COMM_TIME_OUT; \ } \ -} - - -/*********************************************************************** - - Function to monitor for the reply from the hycomm slave. - This function blocks for timeout seconds if there is no reply. - +} + + +/*********************************************************************** + + Function to monitor for the reply from the hycomm slave. + This function blocks for timeout seconds if there is no reply. + Returns a negative number is an error occured. The variable msg_length is assigned th number of characters received. - -***********************************************************************/ - + +***********************************************************************/ + int receive_msg(hycomm_param_t *hc_param, int msg_length_computed, uint8_t *msg, int *msg_length) -{ +{ int select_ret; int read_ret; - fd_set rfds; + fd_set rfds; struct timeval tv; int length_to_read; unsigned char *p_msg; if (hc_param->debug) - printf("waiting for message (%d bytes)...\n", + printf("waiting for message (%d bytes)...\n", msg_length_computed); /* add a file descriptor to the set */ - FD_ZERO(&rfds); - FD_SET(hc_param->fd, &rfds); - + FD_ZERO(&rfds); + FD_SET(hc_param->fd, &rfds); + /* wait for a response */ tv.tv_sec = 0; - tv.tv_usec = TIME_OUT_BEGIN_OF_FRAME; + tv.tv_usec = TIME_OUT_BEGIN_OF_FRAME; length_to_read = msg_length_computed; WAIT_DATA(); - + /* read the message */ (*msg_length) = 0; - p_msg = msg; - + p_msg = msg; + while (select_ret) /* loop to receive data until end of msg or time out */ { read_ret = read(hc_param->fd, p_msg, length_to_read); @@ -372,7 +372,7 @@ int receive_msg(hycomm_param_t *hc_param, int msg_length_computed, /* sum bytes received */ (*msg_length) += read_ret; - + if ((*msg_length) < msg_length_computed) { /* We can receive a shorter message than msg_length_computed as some functions return one byte in the data feild. Check against @@ -380,10 +380,10 @@ int receive_msg(hycomm_param_t *hc_param, int msg_length_computed, if ((*msg_length >= 2) && (*msg_length == msg[2]+5)) { /* we have received the whole message */ length_to_read = 0; - } else { + } else { /* Message is incomplete */ length_to_read = msg_length_computed - (*msg_length); - + if (hc_param->debug) { printf("message was incomplete, length still to read = [%.2X]", length_to_read); printf("\n"); @@ -392,7 +392,7 @@ int receive_msg(hycomm_param_t *hc_param, int msg_length_computed, } else { length_to_read = 0; } - + /* Moves the pointer to receive other data */ p_msg = &(p_msg[read_ret]); @@ -401,13 +401,13 @@ int receive_msg(hycomm_param_t *hc_param, int msg_length_computed, TIME_OUT_END_OF_TRAME before to generate an error. */ tv.tv_sec = 0; tv.tv_usec = TIME_OUT_END_OF_FRAME; - + WAIT_DATA(); } else { /* All chars are received */ select_ret = FALSE; } - + } if (hc_param->debug) { @@ -421,73 +421,73 @@ int receive_msg(hycomm_param_t *hc_param, int msg_length_computed, /* OK */ return 0; -} - -/********************************************************************* - - Function to check the correct response is returned and that the - checksum is correct. - +} + +/********************************************************************* + + Function to check the correct response is returned and that the + checksum is correct. + Returns the data byte(s) in the response. - -**********************************************************************/ - -static int hycomm_check_response(hycomm_param_t *hc_param, - uint8_t *query, uint8_t *response) -{ + +**********************************************************************/ + +static int hycomm_check_response(hycomm_param_t *hc_param, + uint8_t *query, uint8_t *response) +{ int response_length_computed; int response_length; int crc_check; int ret; - + response_length_computed = compute_response_length(hc_param, query); if (hc_param->debug) { printf("response_length_computed = %d", response_length_computed); printf("\n"); } - - ret = receive_msg(hc_param, response_length_computed, - response, &response_length); - + + ret = receive_msg(hc_param, response_length_computed, + response, &response_length); + if (ret == 0) { - + /* good response so check the CRC*/ crc_check = check_crc16(hc_param, response, response_length); if (hc_param->debug) { printf("crc check = %.2d", crc_check); printf("\n"); } - + if (crc_check != 0) return crc_check; - + if (hc_param->debug) { printf("we received a message of [%.2X] bytes, with a valid crc", response_length); printf("\n"); } - + } else if (ret == COMM_TIME_OUT) { error_treat(hc_param, ret, "Communication time out"); return ret; } else { return ret; } - + return 0; -} - -/*********************************************************************** - - The following functions construct the required query into - a hycomm query packet. - -***********************************************************************/ - -int build_query(hycomm_data_t *hc_data, unsigned char *query ) -{ - /* build Hunayang request packet based on function code and return the +} + +/*********************************************************************** + + The following functions construct the required query into + a hycomm query packet. + +***********************************************************************/ + +int build_query(hycomm_data_t *hc_data, unsigned char *query ) +{ + /* build Hunayang request packet based on function code and return the packet length (less CRC - 2 bytes) */ - + switch (hc_data->function) { case FUNCTION_READ: @@ -497,10 +497,10 @@ int build_query(hycomm_data_t *hc_data, unsigned char *query ) query[2] = 0x03; query[3] = hc_data->parameter; query[4] = hc_data->data >> 8; - query[5] = hc_data->data & 0x00FF; + query[5] = hc_data->data & 0x00FF; return 6; break; - + case WRITE_CONTROL_DATA: case READ_CONTROL_STATUS: query[0] = hc_data->slave; @@ -508,25 +508,25 @@ int build_query(hycomm_data_t *hc_data, unsigned char *query ) query[2] = 0x01; query[3] = hc_data->data & 0x00FF; return 4; - break; - + break; + case WRITE_FREQ_DATA: query[0] = hc_data->slave; query[1] = hc_data->function; query[2] = 0x02; - query[3] = hc_data->data >> 8; + query[3] = hc_data->data >> 8; query[4] = hc_data->data & 0x00FF; return 5; - break; - + break; + case 0x06: /* Huanyang VFD - Reserved */ - + case 0x07: - /* Huanyang VFD - Reserved */ + /* Huanyang VFD - Reserved */ return -1; break; - + case LOOP_TEST: return -1; break; @@ -536,17 +536,17 @@ int build_query(hycomm_data_t *hc_data, unsigned char *query ) } - -} - - -/************************************************************************ - - hy_comm - - sends and receives "hycomm" messages to and from a Huanyang VFD - -*************************************************************************/ + +} + + +/************************************************************************ + + hy_comm + + sends and receives "hycomm" messages to and from a Huanyang VFD + +*************************************************************************/ int hy_comm(hycomm_param_t *hc_param, hycomm_data_t *hc_data) { @@ -557,41 +557,41 @@ int hy_comm(hycomm_param_t *hc_param, hycomm_data_t *hc_data) unsigned char query[MIN_QUERY_SIZE]; unsigned char response[MAX_PACKET_SIZE]; - + /* build the request query */ query_length = build_query(hc_data, query); if (hc_param->debug) { printf("\n"); printf("query_length = %d", query_length); printf("\n"); - } - + } + /* add CRC to the query and send */ query_ret = hycomm_send(hc_param, query, query_length); if (hc_param->debug) { printf("query_ret = %d", query_ret); printf("\n"); - } - + } + if (query_ret > 0){ /* query was sent so get the response from the VFD */ response_ret = hycomm_check_response(hc_param, query, response); - + if (response_ret == 0) { - + msg_function_code = response[1]; if (hc_param->debug) { printf("the message function code is = [%.2X]", msg_function_code); printf("\n"); } - + /* check that the returned function code is the same as the query */ if (msg_function_code != hc_data->function) return ILLEGAL_FUNCTION; - + /* the returned data length */ hc_data->ret_length = response[2]; - + switch (msg_function_code) { case FUNCTION_READ: @@ -603,28 +603,28 @@ int hy_comm(hycomm_param_t *hc_param, hycomm_data_t *hc_data) hc_data->ret_data = response[4] << 8 | response[5]; } break; - + case WRITE_CONTROL_DATA: hc_data->ret_parameter = 0x00; hc_data->ret_data = response[3]; break; - + case READ_CONTROL_STATUS: hc_data->ret_parameter = response[3]; hc_data->ret_data = response[4] << 8 | response[5]; break; - + case WRITE_FREQ_DATA: hc_data->ret_parameter = response[3]; hc_data->ret_data = response[3] << 8 | response[4]; - break; - + break; + default: return -1; break; } - - + + if (hc_param->debug) { printf("response parameter = [%.2X]", hc_data->ret_parameter); printf("\n"); @@ -632,26 +632,26 @@ int hy_comm(hycomm_param_t *hc_param, hycomm_data_t *hc_data) printf("\n"); } } - + } else { response_ret = query_ret; } - + return response_ret; -} - +} + + +/************************************************************************ -/************************************************************************ - Initializes the hycomm_param_t structure for RTU - device: "/dev/ttyS0" - baud: 9600, 19200, 57600, 115200, etc - - parity: "even", "odd" or "none" - - data_bits: 5, 6, 7, 8 - - stop_bits: 1, 2 - -**************************************************************************/ - + - parity: "even", "odd" or "none" + - data_bits: 5, 6, 7, 8 + - stop_bits: 1, 2 + +**************************************************************************/ + void hycomm_init(hycomm_param_t *hc_param, const char *device, int baud, const char *parity, int data_bit, int stop_bit) @@ -663,14 +663,14 @@ void hycomm_init(hycomm_param_t *hc_param, const char *device, hc_param->debug = FALSE; hc_param->data_bit = data_bit; hc_param->stop_bit = stop_bit; -} +} + +/************************************************************************ -/************************************************************************ - Closes the file descriptor in RTU mode - -**************************************************************************/ + +**************************************************************************/ void hycomm_close(hycomm_param_t *hc_param) { @@ -679,13 +679,13 @@ void hycomm_close(hycomm_param_t *hc_param) close(hc_param->fd); } - - -/************************************************************************ - - Sets up a serial port for RTU communications - -**************************************************************************/ + + +/************************************************************************ + + Sets up a serial port for RTU communications + +**************************************************************************/ int hycomm_connect(hycomm_param_t *hc_param) { @@ -740,7 +740,7 @@ int hycomm_connect(hycomm_param_t *hc_param) case 4800: speed = B4800; break; - case 9600: + case 9600: speed = B9600; break; case 19200: @@ -813,14 +813,14 @@ int hycomm_connect(hycomm_param_t *hc_param) tios.c_cflag |= PARENB; tios.c_cflag |= PARODD; } - + /* Read the man page of termios if you need more information. */ - /* This field isn't used on POSIX systems - tios.c_line = 0; + /* This field isn't used on POSIX systems + tios.c_line = 0; */ - /* C_LFLAG Line options + /* C_LFLAG Line options ISIG Enable SIGINTR, SIGSUSP, SIGDSUSP, and SIGQUIT signals ICANON Enable canonical input (else raw) @@ -842,7 +842,7 @@ int hycomm_connect(hycomm_param_t *hc_param) Canonical input is line-oriented. Input characters are put into a buffer which can be edited interactively by the user until a CR (carriage return) or LF (line feed) character is - received. + received. Raw input is unprocessed. Input characters are passed through exactly as they are received, when they are @@ -853,7 +853,7 @@ int hycomm_connect(hycomm_param_t *hc_param) /* Raw input */ tios.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); - /* C_IFLAG Input options + /* C_IFLAG Input options Constant Description INPCK Enable parity check @@ -879,18 +879,18 @@ int hycomm_connect(hycomm_param_t *hc_param) /* Software flow control is disabled */ tios.c_iflag &= ~(IXON | IXOFF | IXANY); - + /* C_OFLAG Output options OPOST Postprocess output (not set = raw output) ONLCR Map NL to CR-NL ONCLR ant others needs OPOST to be enabled - */ + */ /* Raw ouput */ tios.c_oflag &=~ OPOST; - /* C_CC Control characters + /* C_CC Control characters VMIN Minimum number of characters to read VTIME Time to wait for data (tenths of seconds) diff --git a/src/modules/unmanaged/drivers/huanyang_vfd/src/hy_comm.h b/src/modules/unmanaged/drivers/huanyang_vfd/src/hy_comm.h index 76b78a98d0..689ae7e9d8 100644 --- a/src/modules/unmanaged/drivers/huanyang_vfd/src/hy_comm.h +++ b/src/modules/unmanaged/drivers/huanyang_vfd/src/hy_comm.h @@ -1,27 +1,27 @@ /* hy_comm.h By S.Alford - + These library of functions are designed to enable a program send and receive data from a Huanyang VFD. This device does not use a standard Modbus function code or data structure. - + 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., 675 Mass Ave, Cambridge, MA 02139, USA. - + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + This code has its origins with libmodbus - + */ @@ -107,8 +107,8 @@ typedef struct _hycomm_param_t { /* Initializes the hycomm_param_t structure for RTU. - device: "/dev/ttyS0" - baud: 9600, 19200, 57600, 115200, etc - - parity: "even", "odd" or "none" - - data_bits: 5, 6, 7, 8 + - parity: "even", "odd" or "none" + - data_bits: 5, 6, 7, 8 - stop_bits: 1, 2 */ diff --git a/src/modules/unmanaged/drivers/huanyang_vfd/src/hy_vfd.c b/src/modules/unmanaged/drivers/huanyang_vfd/src/hy_vfd.c index 4a3ee40f2c..2f9601ac9d 100644 --- a/src/modules/unmanaged/drivers/huanyang_vfd/src/hy_vfd.c +++ b/src/modules/unmanaged/drivers/huanyang_vfd/src/hy_vfd.c @@ -75,10 +75,10 @@ int slave = 1; /* HAL data struct */ typedef struct { // The HAL comp name will be set to , and all pin and parameter - // names will begin with . + // names will begin with . hal_bit_t *enable; // bit to enable this component - + hal_float_t *Set_F; // frequency command hal_float_t *Out_F; // actual output frequency hal_float_t *Out_A; // actual output amps @@ -87,13 +87,13 @@ typedef struct { hal_float_t *ACV; // AC Volts (to be confirmed) hal_float_t *Cont; hal_float_t *Tmp; // Temperature (to be confirmed) - + hal_bit_t *spindle_forward; // spindle forward input hal_bit_t *spindle_reverse; // spindle reverse input hal_bit_t *spindle_on; // spinlde on input hal_s32_t *CNTR; // stores the status of the control request hal_s32_t *CNST; // stores the response of the control request - + hal_bit_t *CNST_Run; // CNST Run bit hal_bit_t *CNST_Jog; // CNST Jog bit hal_bit_t *CNST_Command_rf; // CNST Run reverse / forward bit @@ -111,9 +111,9 @@ typedef struct { hal_float_t *rated_motor_voltage; // PD141 Rated Motor Voltage - as per motor name plate hal_float_t *rated_motor_current; // PD142 Rated Motor Current - as per motor name plate hal_float_t *rated_motor_rev; // max motor speed (at max_freq). PD144 gets set to value corresponding to RPM at 50Hz - + hal_bit_t *hycomm_ok; // the last HYCOMM_OK transactions returned successfully - + hal_float_t *max_rpm; // calculated based on VFD max frequency setup parameter hal_float_t *spindle_speed_fb; // (out) reports current spindle speed @@ -240,52 +240,52 @@ int write_data(hycomm_param_t *hc_param, hycomm_data_t *hc_data, haldata_t *hald hal_float_t hz_per_rpm; int freq_comp; int freq, old_freq; - + // calculate and set frequency register, limit the frequency (upper and lower to VFD set parameters hc_data->function = WRITE_FREQ_DATA; hc_data->parameter = 0x00; - + if ((*(haldata->spindle_forward) && !*(haldata->spindle_reverse)) && *(haldata->spindle_on)) { freq_comp = 1; } else if ((*(haldata->spindle_reverse) && !*(haldata->spindle_forward)) && *(haldata->spindle_on)) { freq_comp = -1; } else { - freq_comp = 0; + freq_comp = 0; } hz_per_rpm = *haldata->max_freq / *(haldata->rated_motor_rev); freq = abs((int)((*(haldata->speed_command)+freq_comp)*hz_per_rpm*100)); - + // limit the frequency to the max and min as setup in the VFD if (freq > *(haldata->max_freq)*100) freq = *(haldata->max_freq)*100; if (freq < *(haldata->freq_lower_limit)*100) freq = *(haldata->freq_lower_limit)*100; - + old_freq = *(haldata->freq_cmd); - + if (freq != old_freq) { // commanded frequency has changed hc_data->data = freq; if ((retval = hy_comm(hc_param, hc_data)) != 0) goto failed; - *(haldata->freq_cmd) = freq; + *(haldata->freq_cmd) = freq; } - - - + + + // update the control register hc_data->function = WRITE_CONTROL_DATA; hc_data->parameter = 0x00; - + if ((*(haldata->spindle_forward) && !*(haldata->spindle_reverse)) && *(haldata->spindle_on)) { CNTR = CONTROL_Run_Fwd; } else if ((*(haldata->spindle_reverse) && !*(haldata->spindle_forward)) && (*haldata->spindle_on)) { CNTR = CONTROL_Run_Rev; } else { - CNTR = CONTROL_Stop; + CNTR = CONTROL_Stop; } - + old_CNTR = *(haldata->CNTR); hc_data->data = old_CNTR; if ((retval = hy_comm(hc_param, hc_data)) != 0) @@ -296,59 +296,59 @@ int write_data(hycomm_param_t *hc_param, hycomm_data_t *hc_data, haldata_t *hald *(haldata->CNTR) = CNTR; } - + CNST = hc_data->ret_data; *(haldata->CNST) = CNST; - + if ((CNST & CONTROL_Run) != 0) { *(haldata->CNST_Run) = TRUE; } else { *(haldata->CNST_Run) = FALSE; } - + if ((CNST & CONTROL_Jog) != 0) { *(haldata->CNST_Jog) = TRUE; } else { *(haldata->CNST_Jog) = FALSE; } - + if ((CNST & CONTROL_Command_rf) != 0) { *(haldata->CNST_Command_rf) = TRUE; } else { *(haldata->CNST_Command_rf) = FALSE; } - + if ((CNST & CONTROL_Running) != 0) { *(haldata->CNST_Running) = TRUE; } else { *(haldata->CNST_Running) = FALSE; } - + if ((CNST & CONTROL_Jogging) != 0) { *(haldata->CNST_Jogging) = TRUE; } else { *(haldata->CNST_Jogging) = FALSE; } - + if ((CNST & CONTROL_Running_rf) != 0) { *(haldata->CNST_Running_rf) = TRUE; } else { - *(haldata->CNST_Running_rf) = FALSE; + *(haldata->CNST_Running_rf) = FALSE; } - - + + if ((CNST & CONTROL_Bracking) != 0) { *(haldata->CNST_Bracking) = TRUE; } else { *(haldata->CNST_Bracking) = FALSE; } - + if ((CNST & CONTROL_Track_Start) != 0) { *(haldata->CNST_Track_Start) = TRUE; } else { - *(haldata->CNST_Track_Start) = FALSE; + *(haldata->CNST_Track_Start) = FALSE; } - + retval = 0; *(haldata->retval) = retval; return retval; @@ -396,7 +396,7 @@ int read_setup(hycomm_param_t *hc_param, hycomm_data_t *hc_data, haldata_t *hald hc_data->function = FUNCTION_READ; } if ((retval = hy_comm(hc_param, hc_data)) != 0) - goto failed; + goto failed; *(haldata->max_freq) = hc_data->ret_data * 0.01; hc_data->parameter = 11; // PD011 Frequency Lower Limit @@ -410,7 +410,7 @@ int read_setup(hycomm_param_t *hc_param, hycomm_data_t *hc_data, haldata_t *hald hc_data->function = FUNCTION_READ; } if ((retval = hy_comm(hc_param, hc_data)) != 0) - goto failed; + goto failed; *(haldata->freq_lower_limit) = hc_data->ret_data * 0.01; hc_data->parameter = 141; // PD141 Rated Motor Voltage @@ -424,7 +424,7 @@ int read_setup(hycomm_param_t *hc_param, hycomm_data_t *hc_data, haldata_t *hald hc_data->function = FUNCTION_READ; } if ((retval = hy_comm(hc_param, hc_data)) != 0) - goto failed; + goto failed; *(haldata->rated_motor_voltage) = hc_data->ret_data * 0.1; hc_data->parameter = 142; // PD142 Rated Motor Current @@ -438,7 +438,7 @@ int read_setup(hycomm_param_t *hc_param, hycomm_data_t *hc_data, haldata_t *hald hc_data->function = FUNCTION_READ; } if ((retval = hy_comm(hc_param, hc_data)) != 0) - goto failed; + goto failed; *(haldata->rated_motor_current) = hc_data->ret_data * 0.1; hc_data->parameter = 144; // PD144 Rated Motor Rev (at 50 Hz) @@ -456,7 +456,7 @@ int read_setup(hycomm_param_t *hc_param, hycomm_data_t *hc_data, haldata_t *hald } if ((retval = hy_comm(hc_param, hc_data)) != 0) - goto failed; + goto failed; rpm_at_50hz = hc_data->ret_data; *(haldata->rated_motor_rev) = (rpm_at_50hz / 50.0) * *haldata->max_freq; @@ -477,7 +477,7 @@ int read_setup(hycomm_param_t *hc_param, hycomm_data_t *hc_data, haldata_t *hald *(haldata->retval) = retval; (*(haldata->errorcount))++; retval = -1; - return retval; + return retval; } @@ -486,22 +486,22 @@ int read_data(hycomm_param_t *hc_param, hycomm_data_t *hc_data, haldata_t *halda int retval; // Read the Status Data registers - + hc_data->function = READ_CONTROL_STATUS; hc_data->parameter = 0x00; hc_data->data = STATUS_SetF; if ((retval = hy_comm(hc_param, hc_data)) != 0) - goto failed; + goto failed; *(haldata->Set_F) = hc_data->ret_data * 0.01; if (hc_param->debug) { printf("Set_F = [%.2X]", hc_data->ret_data); printf("\n"); } - + hc_data->data = STATUS_OutF; if ((retval = hy_comm(hc_param, hc_data)) != 0) - goto failed; + goto failed; *(haldata->Out_F) = hc_data->ret_data * 0.01; if (hc_param->debug) { printf("Out_F = [%.2X]", hc_data->ret_data); @@ -526,58 +526,58 @@ int read_data(hycomm_param_t *hc_param, hycomm_data_t *hc_data, haldata_t *halda hc_data->data = STATUS_OutA; if ((retval = hy_comm(hc_param, hc_data)) != 0) - goto failed; + goto failed; *(haldata->Out_A) = hc_data->ret_data * 0.1; if (hc_param->debug) { printf("Out_A = [%.2X]", hc_data->ret_data); printf("\n"); } - + hc_data->data = STATUS_RoTT; if ((retval = hy_comm(hc_param, hc_data)) != 0) - goto failed; + goto failed; *(haldata->RoTT) = hc_data->ret_data; if (hc_param->debug) { printf("RoTT = [%.2X]", hc_data->ret_data); printf("\n"); } - + hc_data->data = STATUS_DCV; if ((retval = hy_comm(hc_param, hc_data)) != 0) - goto failed; + goto failed; *(haldata->DCV) = (float)hc_data->ret_data / 10.0f; if (hc_param->debug) { printf("DCV = [%.2X]", hc_data->ret_data); printf("\n"); } - + hc_data->data = STATUS_ACV; if ((retval = hy_comm(hc_param, hc_data)) != 0) - goto failed; + goto failed; *(haldata->ACV) = (float)hc_data->ret_data / 10.0f; if (hc_param->debug) { printf("ACV = [%.2X]", hc_data->ret_data); printf("\n"); } - + hc_data->data = STATUS_Cont; if ((retval = hy_comm(hc_param, hc_data)) != 0) - goto failed; + goto failed; *(haldata->Cont) = hc_data->ret_data; if (hc_param->debug) { printf("Cont = [%.2X]", hc_data->ret_data); printf("\n"); } - + hc_data->data = STATUS_Tmp; if ((retval = hy_comm(hc_param, hc_data)) != 0) - goto failed; + goto failed; *(haldata->Tmp) = hc_data->ret_data; if (hc_param->debug) { printf("Tmp = [%.2X]", hc_data->ret_data); printf("\n"); } - + retval = 0; *(haldata->retval) = retval; @@ -624,7 +624,7 @@ int main(int argc, char **argv) parity = "even"; slave = 1; - + // process command line options while ((opt=getopt_long(argc, argv, option_string, long_options, NULL)) != -1) { switch(opt) { @@ -746,7 +746,7 @@ int main(int argc, char **argv) break; } } - + if (debug) { printf("%s: device='%s', baud=%d, bits=%d, parity='%s', stopbits=%d, address=%d, debug=%d, PID=%d\n", modname,device, baud, bits, parity, stopbits, slave, debug, getpid()); @@ -760,22 +760,22 @@ int main(int argc, char **argv) hycomm_init(&hc_param, device, baud, parity, bits, stopbits); hc_param.debug = debug; hc_param.print_errors = 1; - + /* the open has got to work, or we're out of business */ if (((retval = hycomm_connect(&hc_param))!=0) || done) { printf("%s: ERROR: couldn't open serial device\n", modname); goto out_noclose; } - - + + /* create HAL component */ hal_comp_id = hal_init(modname); if ((hal_comp_id < 0) || done) { printf("%s: ERROR: hal_init failed\n", modname); retval = hal_comp_id; goto out_close; - } - + } + /* grab some shmem to store the HAL data in */ haldata = (haldata_t *)hal_malloc(sizeof(haldata_t)); @@ -783,11 +783,11 @@ int main(int argc, char **argv) printf("%s: ERROR: unable to allocate shared memory\n", modname); retval = -1; goto out_close; - } + } retval = hal_pin_bit_newf(HAL_IN, &(haldata->enable), hal_comp_id, "%s.enable", modname); if (retval!=0) goto out_closeHAL; - + retval = hal_pin_float_newf(HAL_OUT, &(haldata->Set_F), hal_comp_id, "%s.SetF", modname); if (retval!=0) goto out_closeHAL; retval = hal_pin_float_newf(HAL_OUT, &(haldata->Out_F), hal_comp_id, "%s.OutF", modname); @@ -804,7 +804,7 @@ int main(int argc, char **argv) if (retval!=0) goto out_closeHAL; retval = hal_pin_float_newf(HAL_OUT, &(haldata->Tmp), hal_comp_id, "%s.Tmp", modname); if (retval!=0) goto out_closeHAL; - + retval = hal_pin_bit_newf(HAL_IN, &(haldata->spindle_forward), hal_comp_id, "%s.spindle-forward", modname); if (retval!=0) goto out_closeHAL; retval = hal_pin_bit_newf(HAL_IN, &(haldata->spindle_reverse), hal_comp_id, "%s.spindle-reverse", modname); @@ -815,29 +815,29 @@ int main(int argc, char **argv) if (retval!=0) goto out_closeHAL; retval = hal_pin_s32_newf(HAL_OUT, &(haldata->CNST), hal_comp_id, "%s.CNST", modname); if (retval!=0) goto out_closeHAL; - - retval = hal_pin_bit_newf(HAL_OUT, &(haldata->CNST_Run), hal_comp_id, "%s.CNST-run", modname); + + retval = hal_pin_bit_newf(HAL_OUT, &(haldata->CNST_Run), hal_comp_id, "%s.CNST-run", modname); if (retval!=0) goto out_closeHAL; - retval = hal_pin_bit_newf(HAL_OUT, &(haldata->CNST_Jog), hal_comp_id, "%s.CNST-jog", modname); + retval = hal_pin_bit_newf(HAL_OUT, &(haldata->CNST_Jog), hal_comp_id, "%s.CNST-jog", modname); if (retval!=0) goto out_closeHAL; - retval = hal_pin_bit_newf(HAL_OUT, &(haldata->CNST_Command_rf), hal_comp_id, "%s.CNST-command-rf", modname); + retval = hal_pin_bit_newf(HAL_OUT, &(haldata->CNST_Command_rf), hal_comp_id, "%s.CNST-command-rf", modname); if (retval!=0) goto out_closeHAL; - retval = hal_pin_bit_newf(HAL_OUT, &(haldata->CNST_Running), hal_comp_id, "%s.CNST-running", modname); + retval = hal_pin_bit_newf(HAL_OUT, &(haldata->CNST_Running), hal_comp_id, "%s.CNST-running", modname); if (retval!=0) goto out_closeHAL; - retval = hal_pin_bit_newf(HAL_OUT, &(haldata->CNST_Jogging), hal_comp_id, "%s.CNST-jogging", modname); + retval = hal_pin_bit_newf(HAL_OUT, &(haldata->CNST_Jogging), hal_comp_id, "%s.CNST-jogging", modname); if (retval!=0) goto out_closeHAL; - retval = hal_pin_bit_newf(HAL_OUT, &(haldata->CNST_Running_rf), hal_comp_id, "%s.CNST-running-rf", modname); + retval = hal_pin_bit_newf(HAL_OUT, &(haldata->CNST_Running_rf), hal_comp_id, "%s.CNST-running-rf", modname); if (retval!=0) goto out_closeHAL; - retval = hal_pin_bit_newf(HAL_OUT, &(haldata->CNST_Bracking), hal_comp_id, "%s.CNST-bracking", modname); + retval = hal_pin_bit_newf(HAL_OUT, &(haldata->CNST_Bracking), hal_comp_id, "%s.CNST-bracking", modname); if (retval!=0) goto out_closeHAL; - retval = hal_pin_bit_newf(HAL_OUT, &(haldata->CNST_Track_Start), hal_comp_id, "%s.CNST-track-start", modname); + retval = hal_pin_bit_newf(HAL_OUT, &(haldata->CNST_Track_Start), hal_comp_id, "%s.CNST-track-start", modname); if (retval!=0) goto out_closeHAL; - + retval = hal_pin_float_newf(HAL_IN, &(haldata->speed_command), hal_comp_id, "%s.speed-command", modname); if (retval!=0) goto out_closeHAL; retval = hal_pin_float_newf(HAL_OUT, &(haldata->freq_cmd), hal_comp_id, "%s.frequency-command", modname); if (retval!=0) goto out_closeHAL; - + retval = hal_pin_float_newf(HAL_OUT, &(haldata->max_freq), hal_comp_id, "%s.max-freq", modname); if (retval!=0) goto out_closeHAL; retval = hal_pin_float_newf(HAL_OUT, &(haldata->freq_lower_limit), hal_comp_id, "%s.freq-lower-limit", modname); @@ -849,9 +849,9 @@ int main(int argc, char **argv) retval = hal_pin_float_newf(HAL_OUT, &(haldata->rated_motor_rev), hal_comp_id, "%s.rated-motor-rev", modname); if (retval!=0) goto out_closeHAL; - retval = hal_pin_bit_newf(HAL_OUT, &(haldata->hycomm_ok), hal_comp_id, "%s.hycomm-ok", modname); + retval = hal_pin_bit_newf(HAL_OUT, &(haldata->hycomm_ok), hal_comp_id, "%s.hycomm-ok", modname); if (retval!=0) goto out_closeHAL; - + retval = hal_pin_s32_newf(HAL_OUT, &(haldata->errorcount), hal_comp_id, "%s.error-count", modname); if (retval!=0) goto out_closeHAL; @@ -873,7 +873,7 @@ int main(int argc, char **argv) /* make default data match what we expect to use */ *(haldata->enable) = 0; - + *(haldata->Set_F) = 0; *(haldata->Out_F) = 0; *(haldata->Out_A) = 0; @@ -882,14 +882,14 @@ int main(int argc, char **argv) *(haldata->ACV) = 0; *(haldata->Cont) = 0; *(haldata->Tmp) = 0; - + *(haldata->spindle_forward) = 0; *(haldata->spindle_reverse) = 0; *(haldata->spindle_on) = 0; *(haldata->freq_cmd) = 0; *(haldata->CNTR) = 0; *(haldata->CNST) = 0; - + *(haldata->max_freq) = max_freq; *(haldata->freq_lower_limit) = min_freq; *(haldata->rated_motor_voltage) = motor_u; @@ -907,7 +907,7 @@ int main(int argc, char **argv) *(haldata->errorcount) = 0; *(haldata->looptime) = 0.1; - + //haldata->motor_nameplate_hz = 50; // folks in The Colonies typically would use 60Hz and 1730 rpm //haldata->motor_nameplate_RPM = 1410; //haldata->rpm_limit = MAX_RPM; @@ -920,7 +920,7 @@ int main(int argc, char **argv) hal_ready(hal_comp_id); hc_data.slave = slave; - + // wait until EMC and AXIS is ready, ie enable bit is set while (!*(haldata->enable)){ // do nothing until enabled @@ -930,7 +930,7 @@ int main(int argc, char **argv) exit(0); } } - + // read the VFD setup parameters do { retval = read_setup(&hc_param, &hc_data, haldata); @@ -946,15 +946,15 @@ int main(int argc, char **argv) // here's the meat of the program. loop until done (which may be never) while (done==0) { - - if (*(haldata->enable)) { + + if (*(haldata->enable)) { // Read inputs if (read_data(&hc_param, &hc_data, haldata) < 0) { hycomm_ok = 0; } else { hycomm_ok++; } - + // Set outputs if (write_data(&hc_param, &hc_data, haldata) < 0) { hycomm_ok = 0; @@ -962,23 +962,23 @@ int main(int argc, char **argv) hycomm_ok++; } } - - + + if (hycomm_ok > HYCOMM_MIN_OK) { *(haldata->hycomm_ok) = 1; } else { *(haldata->hycomm_ok) = 0; } - + // don't want to scan too fast, and shouldn't delay more than a few seconds if ((*(haldata->looptime)) < 0.001) *(haldata->looptime) = 0.001; if ((*(haldata->looptime)) > 1.0) *(haldata->looptime) = 1.0; loop_timespec.tv_sec = (time_t)(*(haldata->looptime)); loop_timespec.tv_nsec = (long)((*(haldata->looptime) - loop_timespec.tv_sec) * 1000000000l); nanosleep(&loop_timespec, &remaining); - + } retval = 0; /* if we get here, then everything is fine, so just clean up and exit */ diff --git a/src/modules/unmanaged/drivers/pwm_pca9685/src/hal_pwm_pca9685.py b/src/modules/unmanaged/drivers/pwm_pca9685/src/hal_pwm_pca9685.py index cee4b2bf0a..718cafddcb 100755 --- a/src/modules/unmanaged/drivers/pwm_pca9685/src/hal_pwm_pca9685.py +++ b/src/modules/unmanaged/drivers/pwm_pca9685/src/hal_pwm_pca9685.py @@ -1,5 +1,4 @@ #!/usr/bin/env python3 -# encoding: utf-8 """ Pwm.py @@ -34,7 +33,7 @@ def getHalName(pin): def main(): parser = argparse.ArgumentParser(description=""" HAL component to control the PCA9685 LED driver PWM IC - + pins: bit out error indicates an I2C error conditions bit out no-error inverse of the error pin diff --git a/src/modules/unmanaged/drivers/pwm_pca9685/src/pyproject.toml.in b/src/modules/unmanaged/drivers/pwm_pca9685/src/pyproject.toml.in index 73aefe558a..cc2e3d7f96 100644 --- a/src/modules/unmanaged/drivers/pwm_pca9685/src/pyproject.toml.in +++ b/src/modules/unmanaged/drivers/pwm_pca9685/src/pyproject.toml.in @@ -55,4 +55,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/modules/unmanaged/drivers/shuttleexpress/src/shuttlexpress.c b/src/modules/unmanaged/drivers/shuttleexpress/src/shuttlexpress.c index 218f7d8b61..1247f3aa0a 100644 --- a/src/modules/unmanaged/drivers/shuttleexpress/src/shuttlexpress.c +++ b/src/modules/unmanaged/drivers/shuttleexpress/src/shuttlexpress.c @@ -60,7 +60,7 @@ #define PACKET_LEN 5 -// the module name, and prefix for all HAL pins +// the module name, and prefix for all HAL pins char *modname = "shuttlexpress"; @@ -388,4 +388,3 @@ int main(int argc, char *argv[]) { exit(0); } - diff --git a/src/modules/unmanaged/drivers/temp_ads7828/src/hal_temp_ads7828.py b/src/modules/unmanaged/drivers/temp_ads7828/src/hal_temp_ads7828.py index 87d25e56ed..b26cc44a9e 100755 --- a/src/modules/unmanaged/drivers/temp_ads7828/src/hal_temp_ads7828.py +++ b/src/modules/unmanaged/drivers/temp_ads7828/src/hal_temp_ads7828.py @@ -1,5 +1,4 @@ #!/usr/bin/env python3 -# encoding: utf-8 """ Temperature.py diff --git a/src/modules/unmanaged/drivers/temp_ads7828/src/pyproject.toml.in b/src/modules/unmanaged/drivers/temp_ads7828/src/pyproject.toml.in index 35b82ce2b9..4dc3b820a5 100644 --- a/src/modules/unmanaged/drivers/temp_ads7828/src/pyproject.toml.in +++ b/src/modules/unmanaged/drivers/temp_ads7828/src/pyproject.toml.in @@ -55,4 +55,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/modules/unmanaged/drivers/temp_atlas/src/hal_temp_atlas.py b/src/modules/unmanaged/drivers/temp_atlas/src/hal_temp_atlas.py index 7d7cf2a9f0..fc03e95ad6 100644 --- a/src/modules/unmanaged/drivers/temp_atlas/src/hal_temp_atlas.py +++ b/src/modules/unmanaged/drivers/temp_atlas/src/hal_temp_atlas.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 -# encoding: utf-8 """ Temperature.py @@ -23,7 +21,7 @@ def adc2r_cramps(pin,ref): # V_adc = pin.rawValue * 3.3 / 3315.0 V_adc = pin.rawValue * 3.3 / ref V_T = 0.0 # Voltage across the thermistor - R_PU = 2000.0 #Pull-up resistence + R_PU = 2000.0 #Pull-up resistence I_PU = 0.0 # Current flowing through the pull-up resistor R_T = 0.0 # Resistance of the thermistor @@ -31,8 +29,8 @@ def adc2r_cramps(pin,ref): # No dividing by zero or negative voltages despite what the ADC says! # Clip to a small positive value - I_PU = max((3.3 - V_T ) / R_PU, 0.000001) -# I_PU = max((5.0 - V_T ) / R_PU, 0.000001) + I_PU = max((3.3 - V_T ) / R_PU, 0.000001) +# I_PU = max((5.0 - V_T ) / R_PU, 0.000001) R_T = V_T / I_PU @@ -59,7 +57,7 @@ def addSample(self, value): sampleSum += sample # No dividing by zero or negative voltages despite what the ADC says! # Clip to a small positive value - self.rawValue = max(sampleSum / len(self.filterSamples), 0.000001) + self.rawValue = max(sampleSum / len(self.filterSamples), 0.000001) def getHalName(pin): diff --git a/src/modules/unmanaged/drivers/temp_atlas/src/pyproject.toml.in b/src/modules/unmanaged/drivers/temp_atlas/src/pyproject.toml.in index 2261498df3..4cfa4ef608 100644 --- a/src/modules/unmanaged/drivers/temp_atlas/src/pyproject.toml.in +++ b/src/modules/unmanaged/drivers/temp_atlas/src/pyproject.toml.in @@ -55,4 +55,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/modules/unmanaged/drivers/temp_bbb/src/hal_temp_bbb.py b/src/modules/unmanaged/drivers/temp_bbb/src/hal_temp_bbb.py index bc8bb712cd..1fca45a6fb 100755 --- a/src/modules/unmanaged/drivers/temp_bbb/src/hal_temp_bbb.py +++ b/src/modules/unmanaged/drivers/temp_bbb/src/hal_temp_bbb.py @@ -1,5 +1,4 @@ #!/usr/bin/env python3 -# encoding: utf-8 ######################################################################## # Description: temp.py # diff --git a/src/modules/unmanaged/drivers/temp_bbb/src/pyproject.toml.in b/src/modules/unmanaged/drivers/temp_bbb/src/pyproject.toml.in index fdfe4395be..6e0131423c 100644 --- a/src/modules/unmanaged/drivers/temp_bbb/src/pyproject.toml.in +++ b/src/modules/unmanaged/drivers/temp_bbb/src/pyproject.toml.in @@ -55,4 +55,4 @@ package-dir = "src" [build-system] requires = ["pdm-pep517", "setuptools"] -build-backend = "pdm.pep517.api" \ No newline at end of file +build-backend = "pdm.pep517.api" diff --git a/src/modules/unmanaged/drivers/vfdb_vfd/Submakefile b/src/modules/unmanaged/drivers/vfdb_vfd/Submakefile index a328ed5a6a..80b1c7216d 100644 --- a/src/modules/unmanaged/drivers/vfdb_vfd/Submakefile +++ b/src/modules/unmanaged/drivers/vfdb_vfd/Submakefile @@ -10,6 +10,6 @@ USERSRCS += $(VFDB_SRCS) ../bin/vfdb_vfd: $(call TOOBJS, $(VFDB_SRCS)) ../lib/libhal.so.0 ../lib/libmkini.so.0 echo Linking $(notdir $@) echo Flags: $(LIBMODBUS_CFLAGS) $(LIBMODBUS_LIBS) - $(CC) $(LDFLAGS) -o $@ $^ $(VFDB_LIBS) + $(CC) $(LDFLAGS) -o $@ $^ $(VFDB_LIBS) TARGETS += ../bin/vfdb_vfd diff --git a/src/modules/unmanaged/drivers/vfdb_vfd/src/vfdb_vfd.c b/src/modules/unmanaged/drivers/vfdb_vfd/src/vfdb_vfd.c index 3a6d54076a..93ceac3a3b 100644 --- a/src/modules/unmanaged/drivers/vfdb_vfd/src/vfdb_vfd.c +++ b/src/modules/unmanaged/drivers/vfdb_vfd/src/vfdb_vfd.c @@ -109,8 +109,8 @@ * * Then, not all registers are equally important. We would like to read the * VFD status and actual frequency on every Modbus turnaround, but there is no need to - * the read CPU version and inverter model more than once at startup, and the load factor etc - * every so often. + * the read CPU version and inverter model more than once at startup, and the load factor etc + * every so often. */ #define POLLCYCLES 10 // read less important parameters only on every 10th transaction #define MODBUS_MIN_OK 10 // assert the modbus-ok pin after 10 successful modbus transactions @@ -141,7 +141,7 @@ typedef struct { hal_s32_t *errorcount; // number of failed Modbus transactions - hints at logical errors hal_float_t looptime; - hal_float_t speed_tolerance; + hal_float_t speed_tolerance; hal_float_t motor_nameplate_hz; // speeds are scaled in Hz, not RPM hal_float_t motor_nameplate_RPM; // nameplate RPM at default Hz hal_float_t rpm_limit; // do-not-exceed output frequency @@ -159,7 +159,7 @@ typedef struct params { int modbus_debug; int debug; int slave; - int pollcycles; + int pollcycles; char *device; int baud; int bits; @@ -251,7 +251,7 @@ static struct option long_options[] = { }; -void windup(param_pointer p) +void windup(param_pointer p) { if (p->haldata && *(p->haldata->errorcount)) { fprintf(stderr,"%s: %d modbus errors\n",p->progname, *(p->haldata->errorcount)); @@ -275,14 +275,14 @@ static void toggle_debug(int sig) param.debug = !param.debug; } -static void quit(int sig) +static void quit(int sig) { if (param.debug) fprintf(stderr,"quit(connection_state=%d)\n",connection_state); switch (connection_state) { - case CONNECTING: + case CONNECTING: // modbus_tcp_accept() or TCP modbus_connect() were interrupted // these wont return to the main loop, so exit here windup(¶m); @@ -321,10 +321,10 @@ int findkwd(param_pointer p, const char *name, int *result, const char *keyword, kwds[nargs++] = keyword; if (keyword) value = va_arg(ap, int); - } - fprintf(stderr, "%s: %s:[%s]%s: found '%s' - not one of: ", + } + fprintf(stderr, "%s: %s:[%s]%s: found '%s' - not one of: ", p->progname, p->inifile, p->section, name, word); - for (s = kwds; *s; s++) + for (s = kwds; *s; s++) fprintf(stderr, "%s ", *s); fprintf(stderr, "\n"); va_end(ap); @@ -460,7 +460,7 @@ int write_data(modbus_t *ctx, haldata_t *haldata, param_pointer p) rtapi_print_msg(RTAPI_MSG_ERR, "Error writing REG_COMMAND1 register2"); p->last_errno = errno; return errno; - } + } // remember so we can toggle fault/estop reset just once // otherwise the VFD keeps rebooting as long as the fault reset/estop reset bits are sent @@ -472,7 +472,7 @@ int write_data(modbus_t *ctx, haldata_t *haldata, param_pointer p) rtapi_print_msg(RTAPI_MSG_ERR, "Error writing REG_FREQUENCY"); p->last_errno = errno; return errno; - } + } return 0; } @@ -487,12 +487,12 @@ int write_data(modbus_t *ctx, haldata_t *haldata, param_pointer p) int read_initial(modbus_t *ctx, haldata_t *haldata, param_pointer p) { - uint16_t curr_reg, current, + uint16_t curr_reg, current, voltage, model, eeprom, max_freq; GETREG(REG_UPPERLIMIT, &max_freq); *(haldata->upper_limit_hz) = (float)max_freq/100.0; - *(haldata->max_rpm) = *(haldata->upper_limit_hz) * + *(haldata->max_rpm) = *(haldata->upper_limit_hz) * haldata->motor_nameplate_RPM / haldata->motor_nameplate_hz; if (p->report_device) { @@ -776,7 +776,7 @@ int main(int argc, char **argv) signal(SIGUSR1, toggle_debug); signal(SIGUSR2, toggle_modbus_debug); - // create HAL component + // create HAL component p->hal_comp_id = hal_init(p->modname); if ((p->hal_comp_id < 0) || (connection_state == DONE)) { fprintf(stderr, "%s: ERROR: hal_init(%s) failed: HAL error code=%d\n", @@ -915,10 +915,9 @@ int main(int argc, char **argv) default: ; } } - retval = 0; + retval = 0; finish: windup(p); return retval; } - diff --git a/src/modules/unmanaged/drivers/xhc_hb04/src/xhc_hb04.cc b/src/modules/unmanaged/drivers/xhc_hb04/src/xhc_hb04.cc old mode 100755 new mode 100644 index 8e90a130ac..8e85e4c864 --- a/src/modules/unmanaged/drivers/xhc_hb04/src/xhc_hb04.cc +++ b/src/modules/unmanaged/drivers/xhc_hb04/src/xhc_hb04.cc @@ -691,7 +691,7 @@ int main (int argc,char **argv) sleep(5); do_reconnect = 0; } - + r = libusb_init(&ctx); if(r < 0) { diff --git a/src/modules/unmanaged/drivers/xhc_whb04b_6/README.md b/src/modules/unmanaged/drivers/xhc_whb04b_6/README.md index 160cd61e2e..94d0494a96 100644 --- a/src/modules/unmanaged/drivers/xhc_whb04b_6/README.md +++ b/src/modules/unmanaged/drivers/xhc_whb04b_6/README.md @@ -20,7 +20,7 @@ * [HAL pins](#hal-pins) * [Run in HAL mode (halrun)](#run-in-hal-mode-halrun) -## Introduction +## Introduction This component provides an interface to the WHB04B-6 pendant. In productive mode the interface is placed in shared memory, where other components can interact with. The component may be alternatively started in simulation mode, which does not require shared memory at all, but allows a user to inspect the device connectivity. @@ -407,5 +407,5 @@ hal start/stop disabled (pin # 4) ^Ctermination requested upon signal number 2 ... connection lost, cleaning up -halcmd: +halcmd: ``` diff --git a/src/modules/unmanaged/drivers/xhc_whb04b_6/buttons-layout-diagram.txt b/src/modules/unmanaged/drivers/xhc_whb04b_6/buttons-layout-diagram.txt index 94e1203cf1..5ec914536b 100644 --- a/src/modules/unmanaged/drivers/xhc_whb04b_6/buttons-layout-diagram.txt +++ b/src/modules/unmanaged/drivers/xhc_whb04b_6/buttons-layout-diagram.txt @@ -7,7 +7,7 @@ m-home | safe-z | w-home | s-on/off | fn . | . | probe-z | . | . . | . | macro10 | . | . . | <&reload> axis | . | <&reload> speed | . -MPG | . | . | . |step +MPG | . | . | . |step . | . | . | . | . . | <&reload> hand wheel| * | . } diff --git a/src/modules/unmanaged/drivers/xhc_whb04b_6/config/xhc-whb04b-6-post-gui.hal b/src/modules/unmanaged/drivers/xhc_whb04b_6/config/xhc-whb04b-6-post-gui.hal index c5d7ead56f..edb04a21c9 100644 --- a/src/modules/unmanaged/drivers/xhc_whb04b_6/config/xhc-whb04b-6-post-gui.hal +++ b/src/modules/unmanaged/drivers/xhc_whb04b_6/config/xhc-whb04b-6-post-gui.hal @@ -3,4 +3,3 @@ # ###################################################################### net pdnt.machine.on axisui.notifications-clear - diff --git a/src/modules/unmanaged/drivers/xhc_whb04b_6/config/xhc-whb04b-6.hal b/src/modules/unmanaged/drivers/xhc_whb04b_6/config/xhc-whb04b-6.hal index 0748a634fe..8ed70e1286 100644 --- a/src/modules/unmanaged/drivers/xhc_whb04b_6/config/xhc-whb04b-6.hal +++ b/src/modules/unmanaged/drivers/xhc_whb04b_6/config/xhc-whb04b-6.hal @@ -5,12 +5,12 @@ # BEGIN Note: spindle signals are ususally listed in the main .hal file # #net spindle.is-on motion.spindle-on -#net spindle.start halui.spindle.start +#net spindle.start halui.spindle.start #net spindle.stop halui.spindle.stop #net spindle.forward halui.spindle.forward # #net spindle.reverse halui.spindle.reverse -#net spindle.runs-forward motion.spindle-forward +#net spindle.runs-forward motion.spindle-forward #net spindle.runs-reverse motion.spindle-reverse # #net spindle.increase halui.spindle.increase @@ -43,9 +43,9 @@ loadrt scale names=scale.axis.0,scale.axis.1,scale.axis.2 addf scale.axis.0 servo-thread addf scale.axis.1 servo-thread addf scale.axis.2 servo-thread -setp scale.axis.0.gain 0.01 -setp scale.axis.1.gain 0.01 -setp scale.axis.2.gain 0.01 +setp scale.axis.0.gain 0.01 +setp scale.axis.1.gain 0.01 +setp scale.axis.2.gain 0.01 setp scale.axis.0.offset 0 setp scale.axis.1.offset 0 setp scale.axis.2.offset 0 @@ -68,7 +68,7 @@ net pdnt.program.pause whb.halui.program.pause halu net pdnt.program.run whb.halui.program.run halui.program.run net pdnt.program.stop whb.halui.program.stop halui.program.stop -# Connect "selected axis" signals +# Connect "selected axis" signals net pdnt.joint.X.select whb.halui.joint.x.select halui.joint.0.select net pdnt.joint.Y.select whb.halui.joint.y.select halui.joint.1.select net pdnt.joint.Z.select whb.halui.joint.z.select halui.joint.2.select @@ -90,9 +90,9 @@ net pdnt.stepgen.02.position-scale hpg.stepgen.02.position-scale whb. #net pdnt.stepgen.04.position-scale hpg.stepgen.04.position-scale whb.stepgen.04.position-scale #net pdnt.stepgen.05.position-scale hpg.stepgen.05.position-scale whb.stepgen.05.position-scale -net pdnt.axis.0.jog-scale whb.axis.0.jog-scale scale.axis.0.in -net pdnt.axis.1.jog-scale whb.axis.1.jog-scale scale.axis.1.in -net pdnt.axis.2.jog-scale whb.axis.2.jog-scale scale.axis.2.in +net pdnt.axis.0.jog-scale whb.axis.0.jog-scale scale.axis.0.in +net pdnt.axis.1.jog-scale whb.axis.1.jog-scale scale.axis.1.in +net pdnt.axis.2.jog-scale whb.axis.2.jog-scale scale.axis.2.in net scale.axis.0.jog-scale scale.axis.0.out axis.0.jog-scale net scale.axis.1.jog-scale scale.axis.1.out axis.1.jog-scale @@ -155,9 +155,9 @@ net pdnt.home-all whb.button.macro-5 halu net pdnt.button.reset whb.button.reset # already linked to halui.program.stop via whb.program.stop net pdnt.button.stop whb.button.stop -# toggles whb.halui.program{run, pause, resume} which are +# toggles whb.halui.program{run, pause, resume} which are # already connected to halui.program.{run, pause, resume} via whb.halui.program.{run, pause, resume} -net pdnt.button.start-pause whb.button.start-pause +net pdnt.button.start-pause whb.button.start-pause # Connect special positions signals net pdnt.button.m-home whb.button.m-home halui.mdi-command-01 @@ -235,4 +235,3 @@ net pdnt.halui.axis.2.pos-relative halui.axis.2.pos-relative whb. net pdnt.halui.axis.3.pos-relative halui.axis.3.pos-relative whb.halui.axis.3.pos-relative net pdnt.halui.axis.4.pos-relative halui.axis.4.pos-relative whb.halui.axis.4.pos-relative net pdnt.halui.axis.5.pos-relative halui.axis.5.pos-relative whb.halui.axis.5.pos-relative - diff --git a/src/modules/unmanaged/drivers/xhc_whb04b_6/display-layout-diagram.txt b/src/modules/unmanaged/drivers/xhc_whb04b_6/display-layout-diagram.txt index c3337bdb71..ec31d104b9 100644 --- a/src/modules/unmanaged/drivers/xhc_whb04b_6/display-layout-diagram.txt +++ b/src/modules/unmanaged/drivers/xhc_whb04b_6/display-layout-diagram.txt @@ -2,21 +2,21 @@ @startsalt {# -| . | 1 | 2 | 3 +| . | 1 | 2 | 3 | A | { - .|. | <&signal>| <&battery-empty> <&media-stop>| STP: 1.0 + .|. | <&signal>| <&battery-empty> <&media-stop>| STP: 1.0 . | <&star>|X:|+1234|.4561 . |.|Y:|-1470|.9632 . |. |Z:|+0|.0000 |. } | { - .|. | <&signal>| <&battery-empty> <&media-stop>| CONT 30% + .|. | <&signal>| <&battery-empty> <&media-stop>| CONT 30% . | <&star>|X:|+1234|.4561 . |.|Y:|-1470|.9632 . |. |Z:|+0|.0000 |. } | { - .|. | <&signal>| <&battery-empty> <&media-stop>| CON:30% + .|. | <&signal>| <&battery-empty> <&media-stop>| CON:30% . | <&star>|X:|+1234|.4561 . |.|Y:|-1470|.9632 . |. |Z:|+0|.0000 |. @@ -24,19 +24,19 @@ | B | { - .|. | <&signal>| <&battery-empty> <&media-stop>| MPG 30% + .|. | <&signal>| <&battery-empty> <&media-stop>| MPG 30% . | <&star>|X:|+1234|.4561 . |.|Y:|-1470|.9632 . |. |Z:|+0|.0000 |.|. } | { - .|. | <&signal>| <&battery-empty> <&media-stop>| F:120 + .|. | <&signal>| <&battery-empty> <&media-stop>| F:120 . | <&star>|X:|+1234|.4561 . |.|Y:|-1470|.9632 . |. |Z:|+0|.0000 |.|.|.|.|.|. } | { - .|. | <&signal>| <&battery-empty> <&media-stop>| S:1200 + .|. | <&signal>| <&battery-empty> <&media-stop>| S:1200 . | <&star>|X:|+1234|.4561 . |.|Y:|-1470|.9632 . |. |Z:|+0|.0000 |.|.|.|. @@ -44,30 +44,30 @@ | C | { - .|. | <&signal>| <&battery-empty> <&media-stop>| S:1200 + .|. | <&signal>| <&battery-empty> <&media-stop>| S:1200 . | <&star>|X:|+1234|.4561 . |.|Y:|-1470|.9632 . |. |Z:|+0|.0000 |.|.|.|. } | { - .|. | <&signal>| <&battery-empty> <&media-stop>| RESET + .|. | <&signal>| <&battery-empty> <&media-stop>| RESET . | <&star>|X:|+1234|.4561 . |.|Y:|-1470|.9632 . |. |Z:|+0|.0000 |.|.|.|.|. } | { - .|. | <&signal>| <&battery-empty> <&media-stop>| CONT 30% + .|. | <&signal>| <&battery-empty> <&media-stop>| CONT 30% . | <&star>|X1:|+1234|.4561 . |.|Y1:|-1470|.9632 - . |. |Z1:|+0|.0000 + . |. |Z1:|+0|.0000 } -| D | +| D | { - .|. | <&signal>| <&battery-empty> <&media-stop>| CONT 30% + .|. | <&signal>| <&battery-empty> <&media-stop>| CONT 30% . | . |A1:|+1234|.4561 . |.|B1:|-1470|.9632 - . |<&star> |C1:|+0|.0000 + . |<&star> |C1:|+0|.0000 } { <&signal> ... signal strength | X,Y-C ... machine coord. <&star> ... selected axis | X1,Y1-C1 ... workpiece coord. diff --git a/src/modules/unmanaged/drivers/xhc_whb04b_6/example-configuration.md b/src/modules/unmanaged/drivers/xhc_whb04b_6/example-configuration.md old mode 100755 new mode 100644 index a1d0babbcc..416681606e --- a/src/modules/unmanaged/drivers/xhc_whb04b_6/example-configuration.md +++ b/src/modules/unmanaged/drivers/xhc_whb04b_6/example-configuration.md @@ -8,7 +8,7 @@ Define section XHC_WHB04B_6_CONFIG section HAL: # -a to enable debug output #COMPONENT_ARGUMENTS = -a # normal operation mode -COMPONENT_ARGUMENTS = +COMPONENT_ARGUMENTS = [HAL] HALFILE = .hal @@ -27,7 +27,7 @@ net pdnt.machine.is-on halui.machine.is-on whb.halui.mach net pdnt.machine.on whb.halui.machine.on halui.machine.on net pdnt.machine.off whb.halui.machine.off halui.machine.off -# Connect program related signals +# Connect program related signals net pdnt.program.is-idle whb.halui.program.is-idle halui.program.is-idle net pdnt.program.is-paused whb.halui.program.is-paused halui.program.is-paused net pdnt.program.is-running whb.halui.program.is-running halui.program.is-running @@ -36,7 +36,7 @@ net pdnt.program.pause whb.halui.program.pause halui.program. net pdnt.program.run whb.halui.program.run halui.program.run net pdnt.program.stop whb.halui.program.stop halui.program.stop -# Connect "selected axis" signals +# Connect "selected axis" signals net pdnt.joint.X.select whb.halui.joint.x.select halui.joint.0.select net pdnt.joint.Y.select whb.halui.joint.y.select halui.joint.1.select net pdnt.joint.Z.select whb.halui.joint.z.select halui.joint.2.select @@ -108,9 +108,9 @@ net pdnt.button.reset whb.button.reset axisui.notific net pdnt.button.reset axisui.notifications-clear # already linked to halui.program.stop via whb.program.stop net pdnt.button.stop whb.button.stop -# toggles whb.halui.program{run, pause, resume} which are +# toggles whb.halui.program{run, pause, resume} which are # already connected to halui.program.{run, pause, resume} via whb.halui.program.{run, pause, resume} -net pdnt.button.start-pause whb.button.start-pause +net pdnt.button.start-pause whb.button.start-pause # Connect special positions signals net pdnt.button.m-home whb.button.m-home halui.mdi-command-01 diff --git a/src/modules/unmanaged/drivers/xhc_whb04b_6/src/hal.cc b/src/modules/unmanaged/drivers/xhc_whb04b_6/src/hal.cc index e85bc916a4..9e74523e30 100644 --- a/src/modules/unmanaged/drivers/xhc_whb04b_6/src/hal.cc +++ b/src/modules/unmanaged/drivers/xhc_whb04b_6/src/hal.cc @@ -613,7 +613,7 @@ void Hal::init(const MetaButtonCodes* metaButtons, const KeyCodes& keyCodes) newHalBit(HAL_OUT, &(memory->out.resetEmergencyStop), mHalCompId, "%s.halui.estop.reset", mComponentPrefix); newHalBit(HAL_IN, &(memory->in.isMachineOn), mHalCompId, "%s.halui.machine.is-on", mComponentPrefix); - + newHalBit(HAL_OUT, &(memory->out.doMachineOn), mHalCompId, "%s.halui.machine.on", mComponentPrefix); newHalBit(HAL_OUT, &(memory->out.doMachineOff), mHalCompId, "%s.halui.machine.off", mComponentPrefix); diff --git a/src/modules/unmanaged/drivers/xhc_whb04b_6/src/hal.h b/src/modules/unmanaged/drivers/xhc_whb04b_6/src/hal.h index a9a0d053f4..57487c2dc4 100644 --- a/src/modules/unmanaged/drivers/xhc_whb04b_6/src/hal.h +++ b/src/modules/unmanaged/drivers/xhc_whb04b_6/src/hal.h @@ -417,7 +417,7 @@ class Hal //! \sa HalMemory::In::isMachineOn //! \return true if machine is on, false otherwise bool getIsMachineOn() const; - + //! Writes the pendant sleeping status to hal. //! \sa HalMemory::Out::isPendantSleeping //! \param isSleeping true if sleeping, false otherwise diff --git a/src/modules/unmanaged/drivers/xhc_whb04b_6/src/main.cc b/src/modules/unmanaged/drivers/xhc_whb04b_6/src/main.cc old mode 100755 new mode 100644 diff --git a/support/python/machinekit_hal_script_helpers.py b/support/python/machinekit_hal_script_helpers.py index 8c83f723ae..5dc36a19c1 100644 --- a/support/python/machinekit_hal_script_helpers.py +++ b/support/python/machinekit_hal_script_helpers.py @@ -1,6 +1,3 @@ -#!/usr/bin/env python3 -# # -*- coding: utf-8 -*- - ##################################################################### # Description: machinekit_hal_script_helpers.py # diff --git a/tests/attic/build/header-sanity/test.sh b/tests/attic/build/header-sanity/test.sh old mode 100644 new mode 100755 diff --git a/tests/nosetests/test_groups.py b/tests/nosetests/test_groups.py old mode 100644 new mode 100755 diff --git a/tests/nosetests/test_icomp.py b/tests/nosetests/test_icomp.py old mode 100644 new mode 100755 diff --git a/tests/runtests/README.asciidoc b/tests/runtests/README.asciidoc index 2d070036fa..ad5f0408fd 100644 --- a/tests/runtests/README.asciidoc +++ b/tests/runtests/README.asciidoc @@ -12,9 +12,9 @@ be structured as or tests/ xyz/ - 0 - 1 - 2 + 0 + 1 + 2 Two types of tests are supported: Regression tests, in which the output is diff --git a/tests/runtests/abs.0/expected b/tests/runtests/abs.0/expected index d1bb55ac3f..375e0bc046 100644 --- a/tests/runtests/abs.0/expected +++ b/tests/runtests/abs.0/expected @@ -1,7 +1,7 @@ -0.000000 0.000000 -0.250000 0.250000 --0.250000 0.250000 -1.000000 1.000000 --1.000000 1.000000 -64.000000 64.000000 --64.000000 64.000000 +0.000000 0.000000 +0.250000 0.250000 +-0.250000 0.250000 +1.000000 1.000000 +-1.000000 1.000000 +64.000000 64.000000 +-64.000000 64.000000 diff --git a/tests/runtests/abs.0/runstreamer b/tests/runtests/abs.0/runstreamer old mode 100644 new mode 100755 diff --git a/tests/runtests/abs.0/test.hal b/tests/runtests/abs.0/test.hal index c5902cfc07..b56051fe0d 100644 --- a/tests/runtests/abs.0/test.hal +++ b/tests/runtests/abs.0/test.hal @@ -17,4 +17,3 @@ addf sampler.0 fast loadusr -w sh runstreamer start waitusr -i halsampler - diff --git a/tests/runtests/and-or-not-mux.0/expected b/tests/runtests/and-or-not-mux.0/expected index 55e7796c69..ca2348018a 100644 --- a/tests/runtests/and-or-not-mux.0/expected +++ b/tests/runtests/and-or-not-mux.0/expected @@ -1,16 +1,16 @@ -0 0 1 1.000000 3.000000 -0 1 1 1.000000 5.000000 -1 1 0 2.000000 6.000000 -0 1 0 2.000000 4.000000 -0 0 1 1.000000 3.000000 -0 1 1 1.000000 5.000000 -1 1 0 2.000000 6.000000 -0 1 0 2.000000 4.000000 -0 0 1 1.000000 3.000000 -0 1 1 1.000000 5.000000 -1 1 0 2.000000 6.000000 -0 1 0 2.000000 4.000000 -0 0 1 1.000000 3.000000 -0 1 1 1.000000 5.000000 -1 1 0 2.000000 6.000000 -0 1 0 2.000000 4.000000 +0 0 1 1.000000 3.000000 +0 1 1 1.000000 5.000000 +1 1 0 2.000000 6.000000 +0 1 0 2.000000 4.000000 +0 0 1 1.000000 3.000000 +0 1 1 1.000000 5.000000 +1 1 0 2.000000 6.000000 +0 1 0 2.000000 4.000000 +0 0 1 1.000000 3.000000 +0 1 1 1.000000 5.000000 +1 1 0 2.000000 6.000000 +0 1 0 2.000000 4.000000 +0 0 1 1.000000 3.000000 +0 1 1 1.000000 5.000000 +1 1 0 2.000000 6.000000 +0 1 0 2.000000 4.000000 diff --git a/tests/runtests/and-or-not-mux.0/runstreamer b/tests/runtests/and-or-not-mux.0/runstreamer old mode 100644 new mode 100755 diff --git a/tests/runtests/counter-encoder.0/expected b/tests/runtests/counter-encoder.0/expected index 29b66a864c..4b1ca1aa7b 100644 --- a/tests/runtests/counter-encoder.0/expected +++ b/tests/runtests/counter-encoder.0/expected @@ -1,3500 +1,3500 @@ -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -1 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -2 1 1 -3 1 1 -3 1 1 -3 1 1 -3 1 1 -3 1 1 -3 1 1 -3 1 1 -3 1 1 -3 1 1 -3 1 1 -3 1 1 -3 1 1 -3 1 1 -3 1 1 -3 1 1 -3 1 1 -3 1 1 -3 1 1 -3 1 1 -3 1 1 -4 1 1 -4 1 1 -4 1 1 -4 1 1 -4 1 1 -4 1 1 -4 1 1 -4 1 1 -4 1 1 -4 1 1 -4 1 1 -4 1 1 -4 1 1 -4 1 1 -4 1 1 -4 1 1 -5 2 2 -5 2 2 -5 2 2 -5 2 2 -5 2 2 -5 2 2 -5 2 2 -5 2 2 -5 2 2 -5 2 2 -5 2 2 -5 2 2 -5 2 2 -5 2 2 -6 2 2 -6 2 2 -6 2 2 -6 2 2 -6 2 2 -6 2 2 -6 2 2 -6 2 2 -6 2 2 -6 2 2 -6 2 2 -6 2 2 -6 2 2 -7 2 2 -7 2 2 -7 2 2 -7 2 2 -7 2 2 -7 2 2 -7 2 2 -7 2 2 -7 2 2 -7 2 2 -7 2 2 -8 2 2 -8 2 2 -8 2 2 -8 2 2 -8 2 2 -8 2 2 -8 2 2 -8 2 2 -8 2 2 -8 2 2 -8 2 2 -9 3 3 -9 3 3 -9 3 3 -9 3 3 -9 3 3 -9 3 3 -9 3 3 -9 3 3 -9 3 3 -9 3 3 -10 3 3 -10 3 3 -10 3 3 -10 3 3 -10 3 3 -10 3 3 -10 3 3 -10 3 3 -10 3 3 -11 3 3 -11 3 3 -11 3 3 -11 3 3 -11 3 3 -11 3 3 -11 3 3 -11 3 3 -11 3 3 -12 3 3 -12 3 3 -12 3 3 -12 3 3 -12 3 3 -12 3 3 -12 3 3 -12 3 3 -13 4 4 -13 4 4 -13 4 4 -13 4 4 -13 4 4 -13 4 4 -13 4 4 -13 4 4 -14 4 4 -14 4 4 -14 4 4 -14 4 4 -14 4 4 -14 4 4 -14 4 4 -14 4 4 -15 4 4 -15 4 4 -15 4 4 -15 4 4 -15 4 4 -15 4 4 -15 4 4 -15 4 4 -16 4 4 -16 4 4 -16 4 4 -16 4 4 -16 4 4 -16 4 4 -16 4 4 -17 5 5 -17 5 5 -17 5 5 -17 5 5 -17 5 5 -17 5 5 -17 5 5 -18 5 5 -18 5 5 -18 5 5 -18 5 5 -18 5 5 -18 5 5 -18 5 5 -19 5 5 -19 5 5 -19 5 5 -19 5 5 -19 5 5 -19 5 5 -20 5 5 -20 5 5 -20 5 5 -20 5 5 -20 5 5 -20 5 5 -20 5 5 -21 6 6 -21 6 6 -21 6 6 -21 6 6 -21 6 6 -21 6 6 -22 6 6 -22 6 6 -22 6 6 -22 6 6 -22 6 6 -22 6 6 -23 6 6 -23 6 6 -23 6 6 -23 6 6 -23 6 6 -23 6 6 -24 6 6 -24 6 6 -24 6 6 -24 6 6 -24 6 6 -24 6 6 -25 7 7 -25 7 7 -25 7 7 -25 7 7 -25 7 7 -26 7 7 -26 7 7 -26 7 7 -26 7 7 -26 7 7 -26 7 7 -27 7 7 -27 7 7 -27 7 7 -27 7 7 -27 7 7 -27 7 7 -28 7 7 -28 7 7 -28 7 7 -28 7 7 -28 7 7 -29 8 8 -29 8 8 -29 8 8 -29 8 8 -29 8 8 -30 8 8 -30 8 8 -30 8 8 -30 8 8 -30 8 8 -31 8 8 -31 8 8 -31 8 8 -31 8 8 -31 8 8 -32 8 8 -32 8 8 -32 8 8 -32 8 8 -32 8 8 -33 9 9 -33 9 9 -33 9 9 -33 9 9 -33 9 9 -34 9 9 -34 9 9 -34 9 9 -34 9 9 -34 9 9 -35 9 9 -35 9 9 -35 9 9 -35 9 9 -35 9 9 -36 9 9 -36 9 9 -36 9 9 -36 9 9 -36 9 9 -37 10 10 -37 10 10 -37 10 10 -37 10 10 -38 10 10 -38 10 10 -38 10 10 -38 10 10 -38 10 10 -39 10 10 -39 10 10 -39 10 10 -39 10 10 -39 10 10 -40 10 10 -40 10 10 -40 10 10 -40 10 10 -41 11 11 -41 11 11 -41 11 11 -41 11 11 -41 11 11 -42 11 11 -42 11 11 -42 11 11 -42 11 11 -43 11 11 -43 11 11 -43 11 11 -43 11 11 -44 11 11 -44 11 11 -44 11 11 -44 11 11 -45 12 12 -45 12 12 -45 12 12 -45 12 12 -45 12 12 -46 12 12 -46 12 12 -46 12 12 -46 12 12 -47 12 12 -47 12 12 -47 12 12 -47 12 12 -48 12 12 -48 12 12 -48 12 12 -48 12 12 -49 13 13 -49 13 13 -49 13 13 -49 13 13 -50 13 13 -50 13 13 -50 13 13 -50 13 13 -51 13 13 -51 13 13 -51 13 13 -51 13 13 -52 13 13 -52 13 13 -52 13 13 -52 13 13 -53 14 14 -53 14 14 -53 14 14 -53 14 14 -54 14 14 -54 14 14 -54 14 14 -54 14 14 -55 14 14 -55 14 14 -55 14 14 -56 14 14 -56 14 14 -56 14 14 -56 14 14 -57 15 15 -57 15 15 -57 15 15 -57 15 15 -58 15 15 -58 15 15 -58 15 15 -58 15 15 -59 15 15 -59 15 15 -59 15 15 -60 15 15 -60 15 15 -60 15 15 -60 15 15 -61 16 16 -61 16 16 -61 16 16 -61 16 16 -62 16 16 -62 16 16 -62 16 16 -63 16 16 -63 16 16 -63 16 16 -63 16 16 -64 16 16 -64 16 16 -64 16 16 -65 17 17 -65 17 17 -65 17 17 -65 17 17 -66 17 17 -66 17 17 -66 17 17 -67 17 17 -67 17 17 -67 17 17 -67 17 17 -68 17 17 -68 17 17 -68 17 17 -69 18 18 -69 18 18 -69 18 18 -70 18 18 -70 18 18 -70 18 18 -70 18 18 -71 18 18 -71 18 18 -71 18 18 -72 18 18 -72 18 18 -72 18 18 -73 19 19 -73 19 19 -73 19 19 -73 19 19 -74 19 19 -74 19 19 -74 19 19 -75 19 19 -75 19 19 -75 19 19 -76 19 19 -76 19 19 -76 19 19 -77 20 20 -77 20 20 -77 20 20 -77 20 20 -78 20 20 -78 20 20 -78 20 20 -79 20 20 -79 20 20 -79 20 20 -80 20 20 -80 20 20 -80 20 20 -81 21 21 -81 21 21 -81 21 21 -82 21 21 -82 21 21 -82 21 21 -83 21 21 -83 21 21 -83 21 21 -83 21 21 -84 21 21 -84 21 21 -84 21 21 -85 22 22 -85 22 22 -85 22 22 -86 22 22 -86 22 22 -86 22 22 -87 22 22 -87 22 22 -87 22 22 -88 22 22 -88 22 22 -88 22 22 -89 23 23 -89 23 23 -89 23 23 -90 23 23 -90 23 23 -90 23 23 -91 23 23 -91 23 23 -91 23 23 -92 23 23 -92 23 23 -93 24 24 -93 24 24 -93 24 24 -94 24 24 -94 24 24 -94 24 24 -95 24 24 -95 24 24 -95 24 24 -96 24 24 -96 24 24 -96 24 24 -97 25 25 -97 25 25 -97 25 25 -98 25 25 -98 25 25 -98 25 25 -99 25 25 -99 25 25 -99 25 25 -100 25 25 -100 25 25 -101 26 26 -101 26 26 -101 26 26 -102 26 26 -102 26 26 -102 26 26 -103 26 26 -103 26 26 -103 26 26 -104 26 26 -104 26 26 -105 27 27 -105 27 27 -105 27 27 -106 27 27 -106 27 27 -106 27 27 -107 27 27 -107 27 27 -107 27 27 -108 27 27 -108 27 27 -109 28 28 -109 28 28 -109 28 28 -110 28 28 -110 28 28 -110 28 28 -111 28 28 -111 28 28 -112 28 28 -112 28 28 -112 28 28 -113 29 29 -113 29 29 -113 29 29 -114 29 29 -114 29 29 -115 29 29 -115 29 29 -115 29 29 -116 29 29 -116 29 29 -116 29 29 -117 30 30 -117 30 30 -118 30 30 -118 30 30 -118 30 30 -119 30 30 -119 30 30 -120 30 30 -120 30 30 -120 30 30 -121 31 31 -121 31 31 -122 31 31 -122 31 31 -122 31 31 -123 31 31 -123 31 31 -124 31 31 -124 31 31 -124 31 31 -125 32 32 -125 32 32 -125 32 32 -126 32 32 -126 32 32 -127 32 32 -127 32 32 -128 32 32 -128 32 32 -128 32 32 -129 33 33 -129 33 33 -130 33 33 -130 33 33 -130 33 33 -131 33 33 -131 33 33 -132 33 33 -132 33 33 -132 33 33 -133 34 34 -133 34 34 -134 34 34 -134 34 34 -134 34 34 -135 34 34 -135 34 34 -136 34 34 -136 34 34 -137 35 35 -137 35 35 -137 35 35 -138 35 35 -138 35 35 -139 35 35 -139 35 35 -139 35 35 -140 35 35 -140 35 35 -141 36 36 -141 36 36 -142 36 36 -142 36 36 -142 36 36 -143 36 36 -143 36 36 -144 36 36 -144 36 36 -145 37 37 -145 37 37 -145 37 37 -146 37 37 -146 37 37 -147 37 37 -147 37 37 -148 37 37 -148 37 37 -148 37 37 -149 38 38 -149 38 38 -150 38 38 -150 38 38 -151 38 38 -151 38 38 -151 38 38 -152 38 38 -152 38 38 -153 39 39 -153 39 39 -154 39 39 -154 39 39 -155 39 39 -155 39 39 -155 39 39 -156 39 39 -156 39 39 -157 40 40 -157 40 40 -158 40 40 -158 40 40 -159 40 40 -159 40 40 -159 40 40 -160 40 40 -160 40 40 -161 41 41 -161 41 41 -162 41 41 -162 41 41 -163 41 41 -163 41 41 -164 41 41 -164 41 41 -164 41 41 -165 42 42 -165 42 42 -166 42 42 -166 42 42 -167 42 42 -167 42 42 -168 42 42 -168 42 42 -169 43 43 -169 43 43 -170 43 43 -170 43 43 -170 43 43 -171 43 43 -171 43 43 -172 43 43 -172 43 43 -173 44 44 -173 44 44 -174 44 44 -174 44 44 -175 44 44 -175 44 44 -176 44 44 -176 44 44 -177 45 45 -177 45 45 -178 45 45 -178 45 45 -178 45 45 -179 45 45 -179 45 45 -180 45 45 -180 45 45 -181 46 46 -181 46 46 -182 46 46 -182 46 46 -183 46 46 -183 46 46 -184 46 46 -184 46 46 -185 47 47 -185 47 47 -186 47 47 -186 47 47 -187 47 47 -187 47 47 -188 47 47 -188 47 47 -189 48 48 -189 48 48 -190 48 48 -190 48 48 -190 48 48 -191 48 48 -191 48 48 -192 48 48 -192 48 48 -193 49 49 -193 49 49 -194 49 49 -194 49 49 -195 49 49 -195 49 49 -196 49 49 -196 49 49 -197 50 50 -197 50 50 -198 50 50 -198 50 50 -199 50 50 -199 50 50 -200 50 50 -200 50 50 -201 51 51 -201 51 51 -202 51 51 -202 51 51 -202 51 51 -203 51 51 -203 51 51 -204 51 51 -204 51 51 -205 52 52 -205 52 52 -206 52 52 -206 52 52 -207 52 52 -207 52 52 -208 52 52 -208 52 52 -209 53 53 -209 53 53 -210 53 53 -210 53 53 -211 53 53 -211 53 53 -212 53 53 -212 53 53 -213 54 54 -213 54 54 -214 54 54 -214 54 54 -214 54 54 -215 54 54 -215 54 54 -216 54 54 -216 54 54 -217 55 55 -217 55 55 -218 55 55 -218 55 55 -219 55 55 -219 55 55 -220 55 55 -220 55 55 -221 56 56 -221 56 56 -222 56 56 -222 56 56 -223 56 56 -223 56 56 -224 56 56 -224 56 56 -225 57 57 -225 57 57 -226 57 57 -226 57 57 -226 57 57 -227 57 57 -227 57 57 -228 57 57 -228 57 57 -229 58 58 -229 58 58 -230 58 58 -230 58 58 -231 58 58 -231 58 58 -232 58 58 -232 58 58 -233 59 59 -233 59 59 -234 59 59 -234 59 59 -235 59 59 -235 59 59 -236 59 59 -236 59 59 -237 60 60 -237 60 60 -238 60 60 -238 60 60 -238 60 60 -239 60 60 -239 60 60 -240 60 60 -240 60 60 -241 61 61 -241 61 61 -242 61 61 -242 61 61 -243 61 61 -243 61 61 -244 61 61 -244 61 61 -245 62 62 -245 62 62 -246 62 62 -246 62 62 -247 62 62 -247 62 62 -248 62 62 -248 62 62 -249 63 63 -249 63 63 -250 63 63 -250 63 63 -250 63 63 -251 63 63 -251 63 63 -252 63 63 -252 63 63 -253 64 64 -253 64 64 -254 64 64 -254 64 64 -255 64 64 -255 64 64 -256 64 64 -256 64 64 -257 65 65 -257 65 65 -258 65 65 -258 65 65 -259 65 65 -259 65 65 -260 65 65 -260 65 65 -261 66 66 -261 66 66 -262 66 66 -262 66 66 -262 66 66 -263 66 66 -263 66 66 -264 66 66 -264 66 66 -265 67 67 -265 67 67 -266 67 67 -266 67 67 -267 67 67 -267 67 67 -268 67 67 -268 67 67 -269 68 68 -269 68 68 -270 68 68 -270 68 68 -271 68 68 -271 68 68 -272 68 68 -272 68 68 -273 69 69 -273 69 69 -274 69 69 -274 69 69 -274 69 69 -275 69 69 -275 69 69 -276 69 69 -276 69 69 -277 70 70 -277 70 70 -278 70 70 -278 70 70 -279 70 70 -279 70 70 -280 70 70 -280 70 70 -281 71 71 -281 71 71 -282 71 71 -282 71 71 -283 71 71 -283 71 71 -284 71 71 -284 71 71 -285 72 72 -285 72 72 -286 72 72 -286 72 72 -286 72 72 -287 72 72 -287 72 72 -288 72 72 -288 72 72 -289 73 73 -289 73 73 -290 73 73 -290 73 73 -291 73 73 -291 73 73 -292 73 73 -292 73 73 -293 74 74 -293 74 74 -294 74 74 -294 74 74 -295 74 74 -295 74 74 -296 74 74 -296 74 74 -297 75 75 -297 75 75 -298 75 75 -298 75 75 -298 75 75 -299 75 75 -299 75 75 -300 75 75 -300 75 75 -301 76 76 -301 76 76 -302 76 76 -302 76 76 -303 76 76 -303 76 76 -304 76 76 -304 76 76 -305 77 77 -305 77 77 -306 77 77 -306 77 77 -307 77 77 -307 77 77 -308 77 77 -308 77 77 -309 78 78 -309 78 78 -310 78 78 -310 78 78 -310 78 78 -311 78 78 -311 78 78 -312 78 78 -312 78 78 -313 79 79 -313 79 79 -314 79 79 -314 79 79 -315 79 79 -315 79 79 -316 79 79 -316 79 79 -317 80 80 -317 80 80 -318 80 80 -318 80 80 -319 80 80 -319 80 80 -320 80 80 -320 80 80 -321 81 81 -321 81 81 -322 81 81 -322 81 81 -322 81 81 -323 81 81 -323 81 81 -324 81 81 -324 81 81 -325 82 82 -325 82 82 -326 82 82 -326 82 82 -327 82 82 -327 82 82 -328 82 82 -328 82 82 -329 83 83 -329 83 83 -330 83 83 -330 83 83 -331 83 83 -331 83 83 -332 83 83 -332 83 83 -333 84 84 -333 84 84 -334 84 84 -334 84 84 -334 84 84 -335 84 84 -335 84 84 -336 84 84 -336 84 84 -337 85 85 -337 85 85 -338 85 85 -338 85 85 -339 85 85 -339 85 85 -340 85 85 -340 85 85 -341 86 86 -341 86 86 -342 86 86 -342 86 86 -343 86 86 -343 86 86 -344 86 86 -344 86 86 -345 87 87 -345 87 87 -346 87 87 -346 87 87 -346 87 87 -347 87 87 -347 87 87 -348 87 87 -348 87 87 -349 88 88 -349 88 88 -350 88 88 -350 88 88 -351 88 88 -351 88 88 -352 88 88 -352 88 88 -353 89 89 -353 89 89 -354 89 89 -354 89 89 -355 89 89 -355 89 89 -356 89 89 -356 89 89 -357 90 90 -357 90 90 -358 90 90 -358 90 90 -358 90 90 -359 90 90 -359 90 90 -360 90 90 -360 90 90 -361 91 91 -361 91 91 -362 91 91 -362 91 91 -363 91 91 -363 91 91 -364 91 91 -364 91 91 -365 92 92 -365 92 92 -366 92 92 -366 92 92 -367 92 92 -367 92 92 -368 92 92 -368 92 92 -369 93 93 -369 93 93 -370 93 93 -370 93 93 -370 93 93 -371 93 93 -371 93 93 -372 93 93 -372 93 93 -373 94 94 -373 94 94 -374 94 94 -374 94 94 -375 94 94 -375 94 94 -376 94 94 -376 94 94 -377 95 95 -377 95 95 -378 95 95 -378 95 95 -379 95 95 -379 95 95 -380 95 95 -380 95 95 -381 96 96 -381 96 96 -382 96 96 -382 96 96 -382 96 96 -383 96 96 -383 96 96 -384 96 96 -384 96 96 -385 97 97 -385 97 97 -386 97 97 -386 97 97 -387 97 97 -387 97 97 -388 97 97 -388 97 97 -389 98 98 -389 98 98 -390 98 98 -390 98 98 -391 98 98 -391 98 98 -392 98 98 -392 98 98 -393 99 99 -393 99 99 -394 99 99 -394 99 99 -394 99 99 -395 99 99 -395 99 99 -396 99 99 -396 99 99 -397 100 100 -397 100 100 -398 100 100 -398 100 100 -399 100 100 -399 100 100 -400 100 100 -400 100 100 -401 101 101 -401 101 101 -402 101 101 -402 101 101 -403 101 101 -403 101 101 -404 101 101 -404 101 101 -405 102 102 -405 102 102 -406 102 102 -406 102 102 -406 102 102 -407 102 102 -407 102 102 -408 102 102 -408 102 102 -409 103 103 -409 103 103 -410 103 103 -410 103 103 -411 103 103 -411 103 103 -412 103 103 -412 103 103 -413 104 104 -413 104 104 -414 104 104 -414 104 104 -415 104 104 -415 104 104 -416 104 104 -416 104 104 -417 105 105 -417 105 105 -418 105 105 -418 105 105 -418 105 105 -419 105 105 -419 105 105 -420 105 105 -420 105 105 -421 106 106 -421 106 106 -422 106 106 -422 106 106 -423 106 106 -423 106 106 -424 106 106 -424 106 106 -425 107 107 -425 107 107 -426 107 107 -426 107 107 -427 107 107 -427 107 107 -428 107 107 -428 107 107 -429 108 108 -429 108 108 -430 108 108 -430 108 108 -430 108 108 -431 108 108 -431 108 108 -432 108 108 -432 108 108 -433 109 109 -433 109 109 -434 109 109 -434 109 109 -435 109 109 -435 109 109 -436 109 109 -436 109 109 -437 110 110 -437 110 110 -438 110 110 -438 110 110 -439 110 110 -439 110 110 -440 110 110 -440 110 110 -441 111 111 -441 111 111 -442 111 111 -442 111 111 -442 111 111 -443 111 111 -443 111 111 -444 111 111 -444 111 111 -445 112 112 -445 112 112 -446 112 112 -446 112 112 -447 112 112 -447 112 112 -448 112 112 -448 112 112 -449 113 113 -449 113 113 -450 113 113 -450 113 113 -451 113 113 -451 113 113 -452 113 113 -452 113 113 -453 114 114 -453 114 114 -454 114 114 -454 114 114 -454 114 114 -455 114 114 -455 114 114 -456 114 114 -456 114 114 -457 115 115 -457 115 115 -458 115 115 -458 115 115 -459 115 115 -459 115 115 -460 115 115 -460 115 115 -461 116 116 -461 116 116 -462 116 116 -462 116 116 -463 116 116 -463 116 116 -464 116 116 -464 116 116 -465 117 117 -465 117 117 -466 117 117 -466 117 117 -466 117 117 -467 117 117 -467 117 117 -468 117 117 -468 117 117 -469 118 118 -469 118 118 -470 118 118 -470 118 118 -471 118 118 -471 118 118 -472 118 118 -472 118 118 -473 119 119 -473 119 119 -474 119 119 -474 119 119 -475 119 119 -475 119 119 -476 119 119 -476 119 119 -477 120 120 -477 120 120 -478 120 120 -478 120 120 -478 120 120 -479 120 120 -479 120 120 -480 120 120 -480 120 120 -481 121 121 -481 121 121 -482 121 121 -482 121 121 -483 121 121 -483 121 121 -484 121 121 -484 121 121 -485 122 122 -485 122 122 -486 122 122 -486 122 122 -487 122 122 -487 122 122 -488 122 122 -488 122 122 -489 123 123 -489 123 123 -490 123 123 -490 123 123 -490 123 123 -491 123 123 -491 123 123 -492 123 123 -492 123 123 -493 124 124 -493 124 124 -494 124 124 -494 124 124 -495 124 124 -495 124 124 -496 124 124 -496 124 124 -497 125 125 -497 125 125 -498 125 125 -498 125 125 -499 125 125 -499 125 125 -500 125 125 -500 125 125 -501 126 126 -501 126 126 -502 126 126 -502 126 126 -502 126 126 -503 126 126 -503 126 126 -504 126 126 -504 126 126 -505 127 127 -505 127 127 -506 127 127 -506 127 127 -507 127 127 -507 127 127 -508 127 127 -508 127 127 -509 128 128 -509 128 128 -510 128 128 -510 128 128 -511 128 128 -511 128 128 -512 128 128 -512 128 128 -513 129 129 -513 129 129 -514 129 129 -514 129 129 -514 129 129 -515 129 129 -515 129 129 -516 129 129 -516 129 129 -517 130 130 -517 130 130 -518 130 130 -518 130 130 -519 130 130 -519 130 130 -520 130 130 -520 130 130 -521 131 131 -521 131 131 -522 131 131 -522 131 131 -523 131 131 -523 131 131 -524 131 131 -524 131 131 -525 132 132 -525 132 132 -526 132 132 -526 132 132 -526 132 132 -527 132 132 -527 132 132 -528 132 132 -528 132 132 -529 133 133 -529 133 133 -530 133 133 -530 133 133 -531 133 133 -531 133 133 -532 133 133 -532 133 133 -533 134 134 -533 134 134 -534 134 134 -534 134 134 -535 134 134 -535 134 134 -536 134 134 -536 134 134 -537 135 135 -537 135 135 -538 135 135 -538 135 135 -538 135 135 -539 135 135 -539 135 135 -540 135 135 -540 135 135 -541 136 136 -541 136 136 -542 136 136 -542 136 136 -543 136 136 -543 136 136 -544 136 136 -544 136 136 -545 137 137 -545 137 137 -546 137 137 -546 137 137 -547 137 137 -547 137 137 -548 137 137 -548 137 137 -549 138 138 -549 138 138 -550 138 138 -550 138 138 -550 138 138 -551 138 138 -551 138 138 -552 138 138 -552 138 138 -553 139 139 -553 139 139 -554 139 139 -554 139 139 -555 139 139 -555 139 139 -556 139 139 -556 139 139 -557 140 140 -557 140 140 -558 140 140 -558 140 140 -559 140 140 -559 140 140 -560 140 140 -560 140 140 -561 141 141 -561 141 141 -562 141 141 -562 141 141 -562 141 141 -563 141 141 -563 141 141 -564 141 141 -564 141 141 -565 142 142 -565 142 142 -566 142 142 -566 142 142 -567 142 142 -567 142 142 -568 142 142 -568 142 142 -569 143 143 -569 143 143 -570 143 143 -570 143 143 -571 143 143 -571 143 143 -572 143 143 -572 143 143 -573 144 144 -573 144 144 -574 144 144 -574 144 144 -574 144 144 -575 144 144 -575 144 144 -576 144 144 -576 144 144 -577 145 145 -577 145 145 -578 145 145 -578 145 145 -579 145 145 -579 145 145 -580 145 145 -580 145 145 -581 146 146 -581 146 146 -582 146 146 -582 146 146 -583 146 146 -583 146 146 -584 146 146 -584 146 146 -585 147 147 -585 147 147 -586 147 147 -586 147 147 -586 147 147 -587 147 147 -587 147 147 -588 147 147 -588 147 147 -589 148 148 -589 148 148 -590 148 148 -590 148 148 -591 148 148 -591 148 148 -592 148 148 -592 148 148 -593 149 149 -593 149 149 -594 149 149 -594 149 149 -595 149 149 -595 149 149 -596 149 149 -596 149 149 -597 150 150 -597 150 150 -598 150 150 -598 150 150 -598 150 150 -599 150 150 -599 150 150 -600 150 150 -600 150 150 -601 151 151 -601 151 151 -602 151 151 -602 151 151 -603 151 151 -603 151 151 -604 151 151 -604 151 151 -605 152 152 -605 152 152 -606 152 152 -606 152 152 -607 152 152 -607 152 152 -608 152 152 -608 152 152 -609 153 153 -609 153 153 -610 153 153 -610 153 153 -610 153 153 -611 153 153 -611 153 153 -612 153 153 -612 153 153 -613 154 154 -613 154 154 -614 154 154 -614 154 154 -615 154 154 -615 154 154 -616 154 154 -616 154 154 -617 155 155 -617 155 155 -618 155 155 -618 155 155 -619 155 155 -619 155 155 -620 155 155 -620 155 155 -621 156 156 -621 156 156 -622 156 156 -622 156 156 -622 156 156 -623 156 156 -623 156 156 -624 156 156 -624 156 156 -625 157 157 -625 157 157 -626 157 157 -626 157 157 -627 157 157 -627 157 157 -628 157 157 -628 157 157 -629 158 158 -629 158 158 -630 158 158 -630 158 158 -631 158 158 -631 158 158 -632 158 158 -632 158 158 -633 159 159 -633 159 159 -634 159 159 -634 159 159 -634 159 159 -635 159 159 -635 159 159 -636 159 159 -636 159 159 -637 160 160 -637 160 160 -638 160 160 -638 160 160 -639 160 160 -639 160 160 -640 160 160 -640 160 160 -641 161 161 -641 161 161 -642 161 161 -642 161 161 -643 161 161 -643 161 161 -644 161 161 -644 161 161 -645 162 162 -645 162 162 -646 162 162 -646 162 162 -646 162 162 -647 162 162 -647 162 162 -648 162 162 -648 162 162 -649 163 163 -649 163 163 -650 163 163 -650 163 163 -651 163 163 -651 163 163 -652 163 163 -652 163 163 -653 164 164 -653 164 164 -654 164 164 -654 164 164 -655 164 164 -655 164 164 -656 164 164 -656 164 164 -657 165 165 -657 165 165 -658 165 165 -658 165 165 -658 165 165 -659 165 165 -659 165 165 -660 165 165 -660 165 165 -661 166 166 -661 166 166 -662 166 166 -662 166 166 -663 166 166 -663 166 166 -664 166 166 -664 166 166 -665 167 167 -665 167 167 -666 167 167 -666 167 167 -667 167 167 -667 167 167 -668 167 167 -668 167 167 -669 168 168 -669 168 168 -670 168 168 -670 168 168 -670 168 168 -671 168 168 -671 168 168 -672 168 168 -672 168 168 -673 169 169 -673 169 169 -674 169 169 -674 169 169 -675 169 169 -675 169 169 -676 169 169 -676 169 169 -677 170 170 -677 170 170 -678 170 170 -678 170 170 -679 170 170 -679 170 170 -680 170 170 -680 170 170 -681 171 171 -681 171 171 -682 171 171 -682 171 171 -682 171 171 -683 171 171 -683 171 171 -684 171 171 -684 171 171 -685 172 172 -685 172 172 -686 172 172 -686 172 172 -687 172 172 -687 172 172 -688 172 172 -688 172 172 -689 173 173 -689 173 173 -690 173 173 -690 173 173 -691 173 173 -691 173 173 -692 173 173 -692 173 173 -693 174 174 -693 174 174 -694 174 174 -694 174 174 -694 174 174 -695 174 174 -695 174 174 -696 174 174 -696 174 174 -697 175 175 -697 175 175 -698 175 175 -698 175 175 -699 175 175 -699 175 175 -700 175 175 -700 175 175 -701 176 176 -701 176 176 -702 176 176 -702 176 176 -703 176 176 -703 176 176 -704 176 176 -704 176 176 -705 177 177 -705 177 177 -706 177 177 -706 177 177 -706 177 177 -707 177 177 -707 177 177 -708 177 177 -708 177 177 -709 178 178 -709 178 178 -710 178 178 -710 178 178 -711 178 178 -711 178 178 -712 178 178 -712 178 178 -713 179 179 -713 179 179 -714 179 179 -714 179 179 -715 179 179 -715 179 179 -716 179 179 -716 179 179 -717 180 180 -717 180 180 -718 180 180 -718 180 180 -718 180 180 -719 180 180 -719 180 180 -720 180 180 -720 180 180 -721 181 181 -721 181 181 -722 181 181 -722 181 181 -723 181 181 -723 181 181 -724 181 181 -724 181 181 -725 182 182 -725 182 182 -726 182 182 -726 182 182 -727 182 182 -727 182 182 -728 182 182 -728 182 182 -729 183 183 -729 183 183 -730 183 183 -730 183 183 -730 183 183 -731 183 183 -731 183 183 -732 183 183 -732 183 183 -733 184 184 -733 184 184 -734 184 184 -734 184 184 -735 184 184 -735 184 184 -736 184 184 -736 184 184 -737 185 185 -737 185 185 -738 185 185 -738 185 185 -739 185 185 -739 185 185 -740 185 185 -740 185 185 -741 186 186 -741 186 186 -742 186 186 -742 186 186 -742 186 186 -743 186 186 -743 186 186 -744 186 186 -744 186 186 -745 187 187 -745 187 187 -746 187 187 -746 187 187 -747 187 187 -747 187 187 -748 187 187 -748 187 187 -749 188 188 -749 188 188 -750 188 188 -750 188 188 -751 188 188 -751 188 188 -752 188 188 -752 188 188 -753 189 189 -753 189 189 -754 189 189 -754 189 189 -754 189 189 -755 189 189 -755 189 189 -756 189 189 -756 189 189 -757 190 190 -757 190 190 -758 190 190 -758 190 190 -759 190 190 -759 190 190 -760 190 190 -760 190 190 -761 191 191 -761 191 191 -762 191 191 -762 191 191 -763 191 191 -763 191 191 -764 191 191 -764 191 191 -765 192 192 -765 192 192 -766 192 192 -766 192 192 -766 192 192 -767 192 192 -767 192 192 -768 192 192 -768 192 192 -769 193 193 -769 193 193 -770 193 193 -770 193 193 -771 193 193 -771 193 193 -772 193 193 -772 193 193 -773 194 194 -773 194 194 -774 194 194 -774 194 194 -775 194 194 -775 194 194 -776 194 194 -776 194 194 -777 195 195 -777 195 195 -778 195 195 -778 195 195 -778 195 195 -779 195 195 -779 195 195 -780 195 195 -780 195 195 -781 196 196 -781 196 196 -782 196 196 -782 196 196 -783 196 196 -783 196 196 -784 196 196 -784 196 196 -785 197 197 -785 197 197 -786 197 197 -786 197 197 -787 197 197 -787 197 197 -788 197 197 -788 197 197 -789 198 198 -789 198 198 -790 198 198 -790 198 198 -790 198 198 -791 198 198 -791 198 198 -792 198 198 -792 198 198 -793 199 199 -793 199 199 -794 199 199 -794 199 199 -795 199 199 -795 199 199 -796 199 199 -796 199 199 -797 200 200 -797 200 200 -798 200 200 -798 200 200 -799 200 200 -799 200 200 -800 200 200 -800 200 200 -801 201 201 -801 201 201 -802 201 201 -802 201 201 -802 201 201 -803 201 201 -803 201 201 -804 201 201 -804 201 201 -805 202 202 -805 202 202 -806 202 202 -806 202 202 -807 202 202 -807 202 202 -808 202 202 -808 202 202 -809 203 203 -809 203 203 -810 203 203 -810 203 203 -811 203 203 -811 203 203 -812 203 203 -812 203 203 -813 204 204 -813 204 204 -814 204 204 -814 204 204 -814 204 204 -815 204 204 -815 204 204 -816 204 204 -816 204 204 -817 205 205 -817 205 205 -818 205 205 -818 205 205 -819 205 205 -819 205 205 -820 205 205 -820 205 205 -821 206 206 -821 206 206 -822 206 206 -822 206 206 -823 206 206 -823 206 206 -824 206 206 -824 206 206 -825 207 207 -825 207 207 -826 207 207 -826 207 207 -826 207 207 -827 207 207 -827 207 207 -828 207 207 -828 207 207 -829 208 208 -829 208 208 -830 208 208 -830 208 208 -831 208 208 -831 208 208 -832 208 208 -832 208 208 -833 209 209 -833 209 209 -834 209 209 -834 209 209 -835 209 209 -835 209 209 -836 209 209 -836 209 209 -837 210 210 -837 210 210 -838 210 210 -838 210 210 -838 210 210 -839 210 210 -839 210 210 -840 210 210 -840 210 210 -841 211 211 -841 211 211 -842 211 211 -842 211 211 -843 211 211 -843 211 211 -844 211 211 -844 211 211 -845 212 212 -845 212 212 -846 212 212 -846 212 212 -847 212 212 -847 212 212 -848 212 212 -848 212 212 -849 213 213 -849 213 213 -850 213 213 -850 213 213 -850 213 213 -851 213 213 -851 213 213 -852 213 213 -852 213 213 -853 214 214 -853 214 214 -854 214 214 -854 214 214 -855 214 214 -855 214 214 -856 214 214 -856 214 214 -857 215 215 -857 215 215 -858 215 215 -858 215 215 -859 215 215 -859 215 215 -860 215 215 -860 215 215 -861 216 216 -861 216 216 -862 216 216 -862 216 216 -862 216 216 -863 216 216 -863 216 216 -864 216 216 -864 216 216 -865 217 217 -865 217 217 -866 217 217 -866 217 217 -867 217 217 -867 217 217 -868 217 217 -868 217 217 -869 218 218 -869 218 218 -870 218 218 -870 218 218 -871 218 218 -871 218 218 -872 218 218 -872 218 218 -873 219 219 -873 219 219 -874 219 219 -874 219 219 -874 219 219 -875 219 219 -875 219 219 -876 219 219 -876 219 219 -877 220 220 -877 220 220 -878 220 220 -878 220 220 -879 220 220 -879 220 220 -880 220 220 -880 220 220 -881 221 221 -881 221 221 -882 221 221 -882 221 221 -883 221 221 -883 221 221 -884 221 221 -884 221 221 -885 222 222 -885 222 222 -886 222 222 -886 222 222 -886 222 222 -887 222 222 -887 222 222 -888 222 222 -888 222 222 -889 223 223 -889 223 223 -890 223 223 -890 223 223 -891 223 223 -891 223 223 -892 223 223 -892 223 223 -893 224 224 -893 224 224 -894 224 224 -894 224 224 -895 224 224 -895 224 224 -896 224 224 -896 224 224 -897 225 225 -897 225 225 -898 225 225 -898 225 225 -898 225 225 -899 225 225 -899 225 225 -900 225 225 -900 225 225 -901 226 226 -901 226 226 -902 226 226 -902 226 226 -903 226 226 -903 226 226 -904 226 226 -904 226 226 -905 227 227 -905 227 227 -906 227 227 -906 227 227 -907 227 227 -907 227 227 -908 227 227 -908 227 227 -909 228 228 -909 228 228 -910 228 228 -910 228 228 -910 228 228 -911 228 228 -911 228 228 -912 228 228 -912 228 228 -913 229 229 -913 229 229 -914 229 229 -914 229 229 -915 229 229 -915 229 229 -916 229 229 -916 229 229 -917 230 230 -917 230 230 -918 230 230 -918 230 230 -919 230 230 -919 230 230 -920 230 230 -920 230 230 -921 231 231 -921 231 231 -922 231 231 -922 231 231 -922 231 231 -923 231 231 -923 231 231 -924 231 231 -924 231 231 -925 232 232 -925 232 232 -926 232 232 -926 232 232 -927 232 232 -927 232 232 -928 232 232 -928 232 232 -929 233 233 -929 233 233 -930 233 233 -930 233 233 -931 233 233 -931 233 233 -932 233 233 -932 233 233 -933 234 234 -933 234 234 -934 234 234 -934 234 234 -934 234 234 -935 234 234 -935 234 234 -936 234 234 -936 234 234 -937 235 235 -937 235 235 -938 235 235 -938 235 235 -939 235 235 -939 235 235 -940 235 235 -940 235 235 -941 236 236 -941 236 236 -942 236 236 -942 236 236 -943 236 236 -943 236 236 -944 236 236 -944 236 236 -945 237 237 -945 237 237 -946 237 237 -946 237 237 -946 237 237 -947 237 237 -947 237 237 -948 237 237 -948 237 237 -949 238 238 -949 238 238 -950 238 238 -950 238 238 -951 238 238 -951 238 238 -952 238 238 -952 238 238 -953 239 239 -953 239 239 -954 239 239 -954 239 239 -955 239 239 -955 239 239 -956 239 239 -956 239 239 -957 240 240 -957 240 240 -958 240 240 -958 240 240 -958 240 240 -959 240 240 -959 240 240 -960 240 240 -960 240 240 -961 241 241 -961 241 241 -962 241 241 -962 241 241 -963 241 241 -963 241 241 -964 241 241 -964 241 241 -965 242 242 -965 242 242 -966 242 242 -966 242 242 -967 242 242 -967 242 242 -968 242 242 -968 242 242 -969 243 243 -969 243 243 -970 243 243 -970 243 243 -970 243 243 -971 243 243 -971 243 243 -972 243 243 -972 243 243 -973 244 244 -973 244 244 -974 244 244 -974 244 244 -975 244 244 -975 244 244 -976 244 244 -976 244 244 -977 245 245 -977 245 245 -978 245 245 -978 245 245 -979 245 245 -979 245 245 -980 245 245 -980 245 245 -981 246 246 -981 246 246 -982 246 246 -982 246 246 -982 246 246 -983 246 246 -983 246 246 -984 246 246 -984 246 246 -985 247 247 -985 247 247 -986 247 247 -986 247 247 -987 247 247 -987 247 247 -988 247 247 -988 247 247 -989 248 248 -989 248 248 -990 248 248 -990 248 248 -991 248 248 -991 248 248 -992 248 248 -992 248 248 -993 249 249 -993 249 249 -994 249 249 -994 249 249 -994 249 249 -995 249 249 -995 249 249 -996 249 249 -996 249 249 -997 250 250 -997 250 250 -998 250 250 -998 250 250 -999 250 250 -999 250 250 -1000 250 250 -1000 250 250 -1001 251 251 -1001 251 251 -1002 251 251 -1002 251 251 -1003 251 251 -1003 251 251 -1004 251 251 -1004 251 251 -1005 252 252 -1005 252 252 -1006 252 252 -1006 252 252 -1006 252 252 -1007 252 252 -1007 252 252 -1008 252 252 -1008 252 252 -1009 253 253 -1009 253 253 -1010 253 253 -1010 253 253 -1011 253 253 -1011 253 253 -1012 253 253 -1012 253 253 -1013 254 254 -1013 254 254 -1014 254 254 -1014 254 254 -1015 254 254 -1015 254 254 -1016 254 254 -1016 254 254 -1017 255 255 -1017 255 255 -1018 255 255 -1018 255 255 -1018 255 255 -1019 255 255 -1019 255 255 -1020 255 255 -1020 255 255 -1021 256 256 -1021 256 256 -1022 256 256 -1022 256 256 -1023 256 256 -1023 256 256 -1024 256 256 -1024 256 256 -1025 257 257 -1025 257 257 -1026 257 257 -1026 257 257 -1027 257 257 -1027 257 257 -1028 257 257 -1028 257 257 -1029 258 258 -1029 258 258 -1030 258 258 -1030 258 258 -1030 258 258 -1031 258 258 -1031 258 258 -1032 258 258 -1032 258 258 -1033 259 259 -1033 259 259 -1034 259 259 -1034 259 259 -1035 259 259 -1035 259 259 -1036 259 259 -1036 259 259 -1037 260 260 -1037 260 260 -1038 260 260 -1038 260 260 -1039 260 260 -1039 260 260 -1040 260 260 -1040 260 260 -1041 261 261 -1041 261 261 -1042 261 261 -1042 261 261 -1042 261 261 -1043 261 261 -1043 261 261 -1044 261 261 -1044 261 261 -1045 262 262 -1045 262 262 -1046 262 262 -1046 262 262 -1047 262 262 -1047 262 262 -1048 262 262 -1048 262 262 -1049 263 263 -1049 263 263 -1050 263 263 -1050 263 263 -1051 263 263 -1051 263 263 -1052 263 263 -1052 263 263 -1053 264 264 -1053 264 264 -1054 264 264 -1054 264 264 -1054 264 264 -1055 264 264 -1055 264 264 -1056 264 264 -1056 264 264 -1057 265 265 -1057 265 265 -1058 265 265 -1058 265 265 -1059 265 265 -1059 265 265 -1060 265 265 -1060 265 265 -1061 266 266 -1061 266 266 -1062 266 266 -1062 266 266 -1063 266 266 -1063 266 266 -1064 266 266 -1064 266 266 -1065 267 267 -1065 267 267 -1066 267 267 -1066 267 267 -1066 267 267 -1067 267 267 -1067 267 267 -1068 267 267 -1068 267 267 -1069 268 268 -1069 268 268 -1070 268 268 -1070 268 268 -1071 268 268 -1071 268 268 -1072 268 268 -1072 268 268 -1073 269 269 -1073 269 269 -1074 269 269 -1074 269 269 -1075 269 269 -1075 269 269 -1076 269 269 -1076 269 269 -1077 270 270 -1077 270 270 -1078 270 270 -1078 270 270 -1078 270 270 -1079 270 270 -1079 270 270 -1080 270 270 -1080 270 270 -1081 271 271 -1081 271 271 -1082 271 271 -1082 271 271 -1083 271 271 -1083 271 271 -1084 271 271 -1084 271 271 -1085 272 272 -1085 272 272 -1086 272 272 -1086 272 272 -1087 272 272 -1087 272 272 -1088 272 272 -1088 272 272 -1089 273 273 -1089 273 273 -1090 273 273 -1090 273 273 -1090 273 273 -1091 273 273 -1091 273 273 -1092 273 273 -1092 273 273 -1093 274 274 -1093 274 274 -1094 274 274 -1094 274 274 -1095 274 274 -1095 274 274 -1096 274 274 -1096 274 274 -1097 275 275 -1097 275 275 -1098 275 275 -1098 275 275 -1099 275 275 -1099 275 275 -1100 275 275 -1100 275 275 -1101 276 276 -1101 276 276 -1102 276 276 -1102 276 276 -1102 276 276 -1103 276 276 -1103 276 276 -1104 276 276 -1104 276 276 -1105 277 277 -1105 277 277 -1106 277 277 -1106 277 277 -1107 277 277 -1107 277 277 -1108 277 277 -1108 277 277 -1109 278 278 -1109 278 278 -1110 278 278 -1110 278 278 -1110 278 278 -1111 278 278 -1111 278 278 -1112 278 278 -1112 278 278 -1113 279 279 -1113 279 279 -1114 279 279 -1114 279 279 -1115 279 279 -1115 279 279 -1116 279 279 -1116 279 279 -1116 279 279 -1117 280 280 -1117 280 280 -1118 280 280 -1118 280 280 -1119 280 280 -1119 280 280 -1120 280 280 -1120 280 280 -1121 281 281 -1121 281 281 -1121 281 281 -1122 281 281 -1122 281 281 -1123 281 281 -1123 281 281 -1124 281 281 -1124 281 281 -1125 282 282 -1125 282 282 -1126 282 282 -1126 282 282 -1126 282 282 -1127 282 282 -1127 282 282 -1128 282 282 -1128 282 282 -1129 283 283 -1129 283 283 -1130 283 283 -1130 283 283 -1130 283 283 -1131 283 283 -1131 283 283 -1132 283 283 -1132 283 283 -1133 284 284 -1133 284 284 -1133 284 284 -1134 284 284 -1134 284 284 -1135 284 284 -1135 284 284 -1136 284 284 -1136 284 284 -1136 284 284 -1137 285 285 -1137 285 285 -1138 285 285 -1138 285 285 -1139 285 285 -1139 285 285 -1139 285 285 -1140 285 285 -1140 285 285 -1141 286 286 -1141 286 286 -1142 286 286 -1142 286 286 -1142 286 286 -1143 286 286 -1143 286 286 -1144 286 286 -1144 286 286 -1145 287 287 -1145 287 287 -1145 287 287 -1146 287 287 -1146 287 287 -1147 287 287 -1147 287 287 -1147 287 287 -1148 287 287 -1148 287 287 -1149 288 288 -1149 288 288 -1149 288 288 -1150 288 288 -1150 288 288 -1151 288 288 -1151 288 288 -1152 288 288 -1152 288 288 -1152 288 288 -1153 289 289 -1153 289 289 -1154 289 289 -1154 289 289 -1154 289 289 -1155 289 289 -1155 289 289 -1156 289 289 -1156 289 289 -1156 289 289 -1157 290 290 -1157 290 290 -1158 290 290 -1158 290 290 -1158 290 290 -1159 290 290 -1159 290 290 -1160 290 290 -1160 290 290 -1160 290 290 -1161 291 291 -1161 291 291 -1162 291 291 -1162 291 291 -1162 291 291 -1163 291 291 -1163 291 291 -1163 291 291 -1164 291 291 -1164 291 291 -1165 292 292 -1165 292 292 -1165 292 292 -1166 292 292 -1166 292 292 -1167 292 292 -1167 292 292 -1167 292 292 -1168 292 292 -1168 292 292 -1168 292 292 -1169 293 293 -1169 293 293 -1170 293 293 -1170 293 293 -1170 293 293 -1171 293 293 -1171 293 293 -1171 293 293 -1172 293 293 -1172 293 293 -1173 294 294 -1173 294 294 -1173 294 294 -1174 294 294 -1174 294 294 -1174 294 294 -1175 294 294 -1175 294 294 -1176 294 294 -1176 294 294 -1176 294 294 -1177 295 295 -1177 295 295 -1177 295 295 -1178 295 295 -1178 295 295 -1178 295 295 -1179 295 295 -1179 295 295 -1180 295 295 -1180 295 295 -1180 295 295 -1181 296 296 -1181 296 296 -1181 296 296 -1182 296 296 -1182 296 296 -1182 296 296 -1183 296 296 -1183 296 296 -1183 296 296 -1184 296 296 -1184 296 296 -1184 296 296 -1185 297 297 -1185 297 297 -1186 297 297 -1186 297 297 -1186 297 297 -1187 297 297 -1187 297 297 -1187 297 297 -1188 297 297 -1188 297 297 -1188 297 297 -1189 298 298 -1189 298 298 -1189 298 298 -1190 298 298 -1190 298 298 -1190 298 298 -1191 298 298 -1191 298 298 -1191 298 298 -1192 298 298 -1192 298 298 -1192 298 298 -1193 299 299 -1193 299 299 -1193 299 299 -1194 299 299 -1194 299 299 -1194 299 299 -1195 299 299 -1195 299 299 -1195 299 299 -1196 299 299 -1196 299 299 -1196 299 299 -1197 300 300 -1197 300 300 -1197 300 300 -1198 300 300 -1198 300 300 -1198 300 300 -1199 300 300 -1199 300 300 -1199 300 300 -1200 300 300 -1200 300 300 -1200 300 300 -1201 301 301 -1201 301 301 -1201 301 301 -1202 301 301 -1202 301 301 -1202 301 301 -1203 301 301 -1203 301 301 -1203 301 301 -1203 301 301 -1204 301 301 -1204 301 301 -1204 301 301 -1205 302 302 -1205 302 302 -1205 302 302 -1206 302 302 -1206 302 302 -1206 302 302 -1207 302 302 -1207 302 302 -1207 302 302 -1208 302 302 -1208 302 302 -1208 302 302 -1208 302 302 -1209 303 303 -1209 303 303 -1209 303 303 -1210 303 303 -1210 303 303 -1210 303 303 -1211 303 303 -1211 303 303 -1211 303 303 -1211 303 303 -1212 303 303 -1212 303 303 -1212 303 303 -1213 304 304 -1213 304 304 -1213 304 304 -1213 304 304 -1214 304 304 -1214 304 304 -1214 304 304 -1215 304 304 -1215 304 304 -1215 304 304 -1216 304 304 -1216 304 304 -1216 304 304 -1216 304 304 -1217 305 305 -1217 305 305 -1217 305 305 -1218 305 305 -1218 305 305 -1218 305 305 -1218 305 305 -1219 305 305 -1219 305 305 -1219 305 305 -1220 305 305 -1220 305 305 -1220 305 305 -1220 305 305 -1221 306 306 -1221 306 306 -1221 306 306 -1221 306 306 -1222 306 306 -1222 306 306 -1222 306 306 -1223 306 306 -1223 306 306 -1223 306 306 -1223 306 306 -1224 306 306 -1224 306 306 -1224 306 306 -1224 306 306 -1225 307 307 -1225 307 307 -1225 307 307 -1226 307 307 -1226 307 307 -1226 307 307 -1226 307 307 -1227 307 307 -1227 307 307 -1227 307 307 -1227 307 307 -1228 307 307 -1228 307 307 -1228 307 307 -1228 307 307 -1229 308 308 -1229 308 308 -1229 308 308 -1229 308 308 -1230 308 308 -1230 308 308 -1230 308 308 -1230 308 308 -1231 308 308 -1231 308 308 -1231 308 308 -1231 308 308 -1232 308 308 -1232 308 308 -1232 308 308 -1232 308 308 -1233 309 309 -1233 309 309 -1233 309 309 -1233 309 309 -1234 309 309 -1234 309 309 -1234 309 309 -1234 309 309 -1235 309 309 -1235 309 309 -1235 309 309 -1235 309 309 -1236 309 309 -1236 309 309 -1236 309 309 -1236 309 309 -1237 310 310 -1237 310 310 -1237 310 310 -1237 310 310 -1238 310 310 -1238 310 310 -1238 310 310 -1238 310 310 -1238 310 310 -1239 310 310 -1239 310 310 -1239 310 310 -1239 310 310 -1240 310 310 -1240 310 310 -1240 310 310 -1240 310 310 -1241 311 311 -1241 311 311 -1241 311 311 -1241 311 311 -1241 311 311 -1242 311 311 -1242 311 311 -1242 311 311 -1242 311 311 -1243 311 311 -1243 311 311 -1243 311 311 -1243 311 311 -1243 311 311 -1244 311 311 -1244 311 311 -1244 311 311 -1244 311 311 -1245 312 312 -1245 312 312 -1245 312 312 -1245 312 312 -1245 312 312 -1246 312 312 -1246 312 312 -1246 312 312 -1246 312 312 -1246 312 312 -1247 312 312 -1247 312 312 -1247 312 312 -1247 312 312 -1247 312 312 -1248 312 312 -1248 312 312 -1248 312 312 -1248 312 312 -1249 313 313 -1249 313 313 -1249 313 313 -1249 313 313 -1249 313 313 -1250 313 313 -1250 313 313 -1250 313 313 -1250 313 313 -1250 313 313 -1251 313 313 -1251 313 313 -1251 313 313 -1251 313 313 -1251 313 313 -1251 313 313 -1252 313 313 -1252 313 313 -1252 313 313 -1252 313 313 -1252 313 313 -1253 314 314 -1253 314 314 -1253 314 314 -1253 314 314 -1253 314 314 -1254 314 314 -1254 314 314 -1254 314 314 -1254 314 314 -1254 314 314 -1255 314 314 -1255 314 314 -1255 314 314 -1255 314 314 -1255 314 314 -1255 314 314 -1256 314 314 -1256 314 314 -1256 314 314 -1256 314 314 -1256 314 314 -1256 314 314 -1257 315 315 -1257 315 315 -1257 315 315 -1257 315 315 -1257 315 315 -1258 315 315 -1258 315 315 -1258 315 315 -1258 315 315 -1258 315 315 -1258 315 315 -1259 315 315 -1259 315 315 -1259 315 315 -1259 315 315 -1259 315 315 -1259 315 315 -1260 315 315 -1260 315 315 -1260 315 315 -1260 315 315 -1260 315 315 -1260 315 315 -1261 316 316 -1261 316 316 -1261 316 316 -1261 316 316 -1261 316 316 -1261 316 316 -1261 316 316 -1262 316 316 -1262 316 316 -1262 316 316 -1262 316 316 -1262 316 316 -1262 316 316 -1263 316 316 -1263 316 316 -1263 316 316 -1263 316 316 -1263 316 316 -1263 316 316 -1263 316 316 -1264 316 316 -1264 316 316 -1264 316 316 -1264 316 316 -1264 316 316 -1264 316 316 -1264 316 316 -1265 317 317 -1265 317 317 -1265 317 317 -1265 317 317 -1265 317 317 -1265 317 317 -1265 317 317 -1266 317 317 -1266 317 317 -1266 317 317 -1266 317 317 -1266 317 317 -1266 317 317 -1266 317 317 -1267 317 317 -1267 317 317 -1267 317 317 -1267 317 317 -1267 317 317 -1267 317 317 -1267 317 317 -1268 317 317 -1268 317 317 -1268 317 317 -1268 317 317 -1268 317 317 -1268 317 317 -1268 317 317 -1268 317 317 -1269 318 318 -1269 318 318 -1269 318 318 -1269 318 318 -1269 318 318 -1269 318 318 -1269 318 318 -1269 318 318 -1270 318 318 -1270 318 318 -1270 318 318 -1270 318 318 -1270 318 318 -1270 318 318 -1270 318 318 -1270 318 318 -1270 318 318 -1271 318 318 -1271 318 318 -1271 318 318 -1271 318 318 -1271 318 318 -1271 318 318 -1271 318 318 -1271 318 318 -1271 318 318 -1272 318 318 -1272 318 318 -1272 318 318 -1272 318 318 -1272 318 318 -1272 318 318 -1272 318 318 -1272 318 318 -1272 318 318 -1273 319 319 -1273 319 319 -1273 319 319 -1273 319 319 -1273 319 319 -1273 319 319 -1273 319 319 -1273 319 319 -1273 319 319 -1273 319 319 -1274 319 319 -1274 319 319 -1274 319 319 -1274 319 319 -1274 319 319 -1274 319 319 -1274 319 319 -1274 319 319 -1274 319 319 -1274 319 319 -1274 319 319 -1275 319 319 -1275 319 319 -1275 319 319 -1275 319 319 -1275 319 319 -1275 319 319 -1275 319 319 -1275 319 319 -1275 319 319 -1275 319 319 -1275 319 319 -1276 319 319 -1276 319 319 -1276 319 319 -1276 319 319 -1276 319 319 -1276 319 319 -1276 319 319 -1276 319 319 -1276 319 319 -1276 319 319 -1276 319 319 -1276 319 319 -1276 319 319 -1277 320 320 -1277 320 320 -1277 320 320 -1277 320 320 -1277 320 320 -1277 320 320 -1277 320 320 -1277 320 320 -1277 320 320 -1277 320 320 -1277 320 320 -1277 320 320 -1277 320 320 -1277 320 320 -1278 320 320 -1278 320 320 -1278 320 320 -1278 320 320 -1278 320 320 -1278 320 320 -1278 320 320 -1278 320 320 -1278 320 320 -1278 320 320 -1278 320 320 -1278 320 320 -1278 320 320 -1278 320 320 -1278 320 320 -1278 320 320 -1279 320 320 -1279 320 320 -1279 320 320 -1279 320 320 -1279 320 320 -1279 320 320 -1279 320 320 -1279 320 320 -1279 320 320 -1279 320 320 -1279 320 320 -1279 320 320 -1279 320 320 -1279 320 320 -1279 320 320 -1279 320 320 -1279 320 320 -1279 320 320 -1279 320 320 -1279 320 320 -1279 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1280 320 320 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 -1281 321 321 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +1 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +2 1 1 +3 1 1 +3 1 1 +3 1 1 +3 1 1 +3 1 1 +3 1 1 +3 1 1 +3 1 1 +3 1 1 +3 1 1 +3 1 1 +3 1 1 +3 1 1 +3 1 1 +3 1 1 +3 1 1 +3 1 1 +3 1 1 +3 1 1 +3 1 1 +4 1 1 +4 1 1 +4 1 1 +4 1 1 +4 1 1 +4 1 1 +4 1 1 +4 1 1 +4 1 1 +4 1 1 +4 1 1 +4 1 1 +4 1 1 +4 1 1 +4 1 1 +4 1 1 +5 2 2 +5 2 2 +5 2 2 +5 2 2 +5 2 2 +5 2 2 +5 2 2 +5 2 2 +5 2 2 +5 2 2 +5 2 2 +5 2 2 +5 2 2 +5 2 2 +6 2 2 +6 2 2 +6 2 2 +6 2 2 +6 2 2 +6 2 2 +6 2 2 +6 2 2 +6 2 2 +6 2 2 +6 2 2 +6 2 2 +6 2 2 +7 2 2 +7 2 2 +7 2 2 +7 2 2 +7 2 2 +7 2 2 +7 2 2 +7 2 2 +7 2 2 +7 2 2 +7 2 2 +8 2 2 +8 2 2 +8 2 2 +8 2 2 +8 2 2 +8 2 2 +8 2 2 +8 2 2 +8 2 2 +8 2 2 +8 2 2 +9 3 3 +9 3 3 +9 3 3 +9 3 3 +9 3 3 +9 3 3 +9 3 3 +9 3 3 +9 3 3 +9 3 3 +10 3 3 +10 3 3 +10 3 3 +10 3 3 +10 3 3 +10 3 3 +10 3 3 +10 3 3 +10 3 3 +11 3 3 +11 3 3 +11 3 3 +11 3 3 +11 3 3 +11 3 3 +11 3 3 +11 3 3 +11 3 3 +12 3 3 +12 3 3 +12 3 3 +12 3 3 +12 3 3 +12 3 3 +12 3 3 +12 3 3 +13 4 4 +13 4 4 +13 4 4 +13 4 4 +13 4 4 +13 4 4 +13 4 4 +13 4 4 +14 4 4 +14 4 4 +14 4 4 +14 4 4 +14 4 4 +14 4 4 +14 4 4 +14 4 4 +15 4 4 +15 4 4 +15 4 4 +15 4 4 +15 4 4 +15 4 4 +15 4 4 +15 4 4 +16 4 4 +16 4 4 +16 4 4 +16 4 4 +16 4 4 +16 4 4 +16 4 4 +17 5 5 +17 5 5 +17 5 5 +17 5 5 +17 5 5 +17 5 5 +17 5 5 +18 5 5 +18 5 5 +18 5 5 +18 5 5 +18 5 5 +18 5 5 +18 5 5 +19 5 5 +19 5 5 +19 5 5 +19 5 5 +19 5 5 +19 5 5 +20 5 5 +20 5 5 +20 5 5 +20 5 5 +20 5 5 +20 5 5 +20 5 5 +21 6 6 +21 6 6 +21 6 6 +21 6 6 +21 6 6 +21 6 6 +22 6 6 +22 6 6 +22 6 6 +22 6 6 +22 6 6 +22 6 6 +23 6 6 +23 6 6 +23 6 6 +23 6 6 +23 6 6 +23 6 6 +24 6 6 +24 6 6 +24 6 6 +24 6 6 +24 6 6 +24 6 6 +25 7 7 +25 7 7 +25 7 7 +25 7 7 +25 7 7 +26 7 7 +26 7 7 +26 7 7 +26 7 7 +26 7 7 +26 7 7 +27 7 7 +27 7 7 +27 7 7 +27 7 7 +27 7 7 +27 7 7 +28 7 7 +28 7 7 +28 7 7 +28 7 7 +28 7 7 +29 8 8 +29 8 8 +29 8 8 +29 8 8 +29 8 8 +30 8 8 +30 8 8 +30 8 8 +30 8 8 +30 8 8 +31 8 8 +31 8 8 +31 8 8 +31 8 8 +31 8 8 +32 8 8 +32 8 8 +32 8 8 +32 8 8 +32 8 8 +33 9 9 +33 9 9 +33 9 9 +33 9 9 +33 9 9 +34 9 9 +34 9 9 +34 9 9 +34 9 9 +34 9 9 +35 9 9 +35 9 9 +35 9 9 +35 9 9 +35 9 9 +36 9 9 +36 9 9 +36 9 9 +36 9 9 +36 9 9 +37 10 10 +37 10 10 +37 10 10 +37 10 10 +38 10 10 +38 10 10 +38 10 10 +38 10 10 +38 10 10 +39 10 10 +39 10 10 +39 10 10 +39 10 10 +39 10 10 +40 10 10 +40 10 10 +40 10 10 +40 10 10 +41 11 11 +41 11 11 +41 11 11 +41 11 11 +41 11 11 +42 11 11 +42 11 11 +42 11 11 +42 11 11 +43 11 11 +43 11 11 +43 11 11 +43 11 11 +44 11 11 +44 11 11 +44 11 11 +44 11 11 +45 12 12 +45 12 12 +45 12 12 +45 12 12 +45 12 12 +46 12 12 +46 12 12 +46 12 12 +46 12 12 +47 12 12 +47 12 12 +47 12 12 +47 12 12 +48 12 12 +48 12 12 +48 12 12 +48 12 12 +49 13 13 +49 13 13 +49 13 13 +49 13 13 +50 13 13 +50 13 13 +50 13 13 +50 13 13 +51 13 13 +51 13 13 +51 13 13 +51 13 13 +52 13 13 +52 13 13 +52 13 13 +52 13 13 +53 14 14 +53 14 14 +53 14 14 +53 14 14 +54 14 14 +54 14 14 +54 14 14 +54 14 14 +55 14 14 +55 14 14 +55 14 14 +56 14 14 +56 14 14 +56 14 14 +56 14 14 +57 15 15 +57 15 15 +57 15 15 +57 15 15 +58 15 15 +58 15 15 +58 15 15 +58 15 15 +59 15 15 +59 15 15 +59 15 15 +60 15 15 +60 15 15 +60 15 15 +60 15 15 +61 16 16 +61 16 16 +61 16 16 +61 16 16 +62 16 16 +62 16 16 +62 16 16 +63 16 16 +63 16 16 +63 16 16 +63 16 16 +64 16 16 +64 16 16 +64 16 16 +65 17 17 +65 17 17 +65 17 17 +65 17 17 +66 17 17 +66 17 17 +66 17 17 +67 17 17 +67 17 17 +67 17 17 +67 17 17 +68 17 17 +68 17 17 +68 17 17 +69 18 18 +69 18 18 +69 18 18 +70 18 18 +70 18 18 +70 18 18 +70 18 18 +71 18 18 +71 18 18 +71 18 18 +72 18 18 +72 18 18 +72 18 18 +73 19 19 +73 19 19 +73 19 19 +73 19 19 +74 19 19 +74 19 19 +74 19 19 +75 19 19 +75 19 19 +75 19 19 +76 19 19 +76 19 19 +76 19 19 +77 20 20 +77 20 20 +77 20 20 +77 20 20 +78 20 20 +78 20 20 +78 20 20 +79 20 20 +79 20 20 +79 20 20 +80 20 20 +80 20 20 +80 20 20 +81 21 21 +81 21 21 +81 21 21 +82 21 21 +82 21 21 +82 21 21 +83 21 21 +83 21 21 +83 21 21 +83 21 21 +84 21 21 +84 21 21 +84 21 21 +85 22 22 +85 22 22 +85 22 22 +86 22 22 +86 22 22 +86 22 22 +87 22 22 +87 22 22 +87 22 22 +88 22 22 +88 22 22 +88 22 22 +89 23 23 +89 23 23 +89 23 23 +90 23 23 +90 23 23 +90 23 23 +91 23 23 +91 23 23 +91 23 23 +92 23 23 +92 23 23 +93 24 24 +93 24 24 +93 24 24 +94 24 24 +94 24 24 +94 24 24 +95 24 24 +95 24 24 +95 24 24 +96 24 24 +96 24 24 +96 24 24 +97 25 25 +97 25 25 +97 25 25 +98 25 25 +98 25 25 +98 25 25 +99 25 25 +99 25 25 +99 25 25 +100 25 25 +100 25 25 +101 26 26 +101 26 26 +101 26 26 +102 26 26 +102 26 26 +102 26 26 +103 26 26 +103 26 26 +103 26 26 +104 26 26 +104 26 26 +105 27 27 +105 27 27 +105 27 27 +106 27 27 +106 27 27 +106 27 27 +107 27 27 +107 27 27 +107 27 27 +108 27 27 +108 27 27 +109 28 28 +109 28 28 +109 28 28 +110 28 28 +110 28 28 +110 28 28 +111 28 28 +111 28 28 +112 28 28 +112 28 28 +112 28 28 +113 29 29 +113 29 29 +113 29 29 +114 29 29 +114 29 29 +115 29 29 +115 29 29 +115 29 29 +116 29 29 +116 29 29 +116 29 29 +117 30 30 +117 30 30 +118 30 30 +118 30 30 +118 30 30 +119 30 30 +119 30 30 +120 30 30 +120 30 30 +120 30 30 +121 31 31 +121 31 31 +122 31 31 +122 31 31 +122 31 31 +123 31 31 +123 31 31 +124 31 31 +124 31 31 +124 31 31 +125 32 32 +125 32 32 +125 32 32 +126 32 32 +126 32 32 +127 32 32 +127 32 32 +128 32 32 +128 32 32 +128 32 32 +129 33 33 +129 33 33 +130 33 33 +130 33 33 +130 33 33 +131 33 33 +131 33 33 +132 33 33 +132 33 33 +132 33 33 +133 34 34 +133 34 34 +134 34 34 +134 34 34 +134 34 34 +135 34 34 +135 34 34 +136 34 34 +136 34 34 +137 35 35 +137 35 35 +137 35 35 +138 35 35 +138 35 35 +139 35 35 +139 35 35 +139 35 35 +140 35 35 +140 35 35 +141 36 36 +141 36 36 +142 36 36 +142 36 36 +142 36 36 +143 36 36 +143 36 36 +144 36 36 +144 36 36 +145 37 37 +145 37 37 +145 37 37 +146 37 37 +146 37 37 +147 37 37 +147 37 37 +148 37 37 +148 37 37 +148 37 37 +149 38 38 +149 38 38 +150 38 38 +150 38 38 +151 38 38 +151 38 38 +151 38 38 +152 38 38 +152 38 38 +153 39 39 +153 39 39 +154 39 39 +154 39 39 +155 39 39 +155 39 39 +155 39 39 +156 39 39 +156 39 39 +157 40 40 +157 40 40 +158 40 40 +158 40 40 +159 40 40 +159 40 40 +159 40 40 +160 40 40 +160 40 40 +161 41 41 +161 41 41 +162 41 41 +162 41 41 +163 41 41 +163 41 41 +164 41 41 +164 41 41 +164 41 41 +165 42 42 +165 42 42 +166 42 42 +166 42 42 +167 42 42 +167 42 42 +168 42 42 +168 42 42 +169 43 43 +169 43 43 +170 43 43 +170 43 43 +170 43 43 +171 43 43 +171 43 43 +172 43 43 +172 43 43 +173 44 44 +173 44 44 +174 44 44 +174 44 44 +175 44 44 +175 44 44 +176 44 44 +176 44 44 +177 45 45 +177 45 45 +178 45 45 +178 45 45 +178 45 45 +179 45 45 +179 45 45 +180 45 45 +180 45 45 +181 46 46 +181 46 46 +182 46 46 +182 46 46 +183 46 46 +183 46 46 +184 46 46 +184 46 46 +185 47 47 +185 47 47 +186 47 47 +186 47 47 +187 47 47 +187 47 47 +188 47 47 +188 47 47 +189 48 48 +189 48 48 +190 48 48 +190 48 48 +190 48 48 +191 48 48 +191 48 48 +192 48 48 +192 48 48 +193 49 49 +193 49 49 +194 49 49 +194 49 49 +195 49 49 +195 49 49 +196 49 49 +196 49 49 +197 50 50 +197 50 50 +198 50 50 +198 50 50 +199 50 50 +199 50 50 +200 50 50 +200 50 50 +201 51 51 +201 51 51 +202 51 51 +202 51 51 +202 51 51 +203 51 51 +203 51 51 +204 51 51 +204 51 51 +205 52 52 +205 52 52 +206 52 52 +206 52 52 +207 52 52 +207 52 52 +208 52 52 +208 52 52 +209 53 53 +209 53 53 +210 53 53 +210 53 53 +211 53 53 +211 53 53 +212 53 53 +212 53 53 +213 54 54 +213 54 54 +214 54 54 +214 54 54 +214 54 54 +215 54 54 +215 54 54 +216 54 54 +216 54 54 +217 55 55 +217 55 55 +218 55 55 +218 55 55 +219 55 55 +219 55 55 +220 55 55 +220 55 55 +221 56 56 +221 56 56 +222 56 56 +222 56 56 +223 56 56 +223 56 56 +224 56 56 +224 56 56 +225 57 57 +225 57 57 +226 57 57 +226 57 57 +226 57 57 +227 57 57 +227 57 57 +228 57 57 +228 57 57 +229 58 58 +229 58 58 +230 58 58 +230 58 58 +231 58 58 +231 58 58 +232 58 58 +232 58 58 +233 59 59 +233 59 59 +234 59 59 +234 59 59 +235 59 59 +235 59 59 +236 59 59 +236 59 59 +237 60 60 +237 60 60 +238 60 60 +238 60 60 +238 60 60 +239 60 60 +239 60 60 +240 60 60 +240 60 60 +241 61 61 +241 61 61 +242 61 61 +242 61 61 +243 61 61 +243 61 61 +244 61 61 +244 61 61 +245 62 62 +245 62 62 +246 62 62 +246 62 62 +247 62 62 +247 62 62 +248 62 62 +248 62 62 +249 63 63 +249 63 63 +250 63 63 +250 63 63 +250 63 63 +251 63 63 +251 63 63 +252 63 63 +252 63 63 +253 64 64 +253 64 64 +254 64 64 +254 64 64 +255 64 64 +255 64 64 +256 64 64 +256 64 64 +257 65 65 +257 65 65 +258 65 65 +258 65 65 +259 65 65 +259 65 65 +260 65 65 +260 65 65 +261 66 66 +261 66 66 +262 66 66 +262 66 66 +262 66 66 +263 66 66 +263 66 66 +264 66 66 +264 66 66 +265 67 67 +265 67 67 +266 67 67 +266 67 67 +267 67 67 +267 67 67 +268 67 67 +268 67 67 +269 68 68 +269 68 68 +270 68 68 +270 68 68 +271 68 68 +271 68 68 +272 68 68 +272 68 68 +273 69 69 +273 69 69 +274 69 69 +274 69 69 +274 69 69 +275 69 69 +275 69 69 +276 69 69 +276 69 69 +277 70 70 +277 70 70 +278 70 70 +278 70 70 +279 70 70 +279 70 70 +280 70 70 +280 70 70 +281 71 71 +281 71 71 +282 71 71 +282 71 71 +283 71 71 +283 71 71 +284 71 71 +284 71 71 +285 72 72 +285 72 72 +286 72 72 +286 72 72 +286 72 72 +287 72 72 +287 72 72 +288 72 72 +288 72 72 +289 73 73 +289 73 73 +290 73 73 +290 73 73 +291 73 73 +291 73 73 +292 73 73 +292 73 73 +293 74 74 +293 74 74 +294 74 74 +294 74 74 +295 74 74 +295 74 74 +296 74 74 +296 74 74 +297 75 75 +297 75 75 +298 75 75 +298 75 75 +298 75 75 +299 75 75 +299 75 75 +300 75 75 +300 75 75 +301 76 76 +301 76 76 +302 76 76 +302 76 76 +303 76 76 +303 76 76 +304 76 76 +304 76 76 +305 77 77 +305 77 77 +306 77 77 +306 77 77 +307 77 77 +307 77 77 +308 77 77 +308 77 77 +309 78 78 +309 78 78 +310 78 78 +310 78 78 +310 78 78 +311 78 78 +311 78 78 +312 78 78 +312 78 78 +313 79 79 +313 79 79 +314 79 79 +314 79 79 +315 79 79 +315 79 79 +316 79 79 +316 79 79 +317 80 80 +317 80 80 +318 80 80 +318 80 80 +319 80 80 +319 80 80 +320 80 80 +320 80 80 +321 81 81 +321 81 81 +322 81 81 +322 81 81 +322 81 81 +323 81 81 +323 81 81 +324 81 81 +324 81 81 +325 82 82 +325 82 82 +326 82 82 +326 82 82 +327 82 82 +327 82 82 +328 82 82 +328 82 82 +329 83 83 +329 83 83 +330 83 83 +330 83 83 +331 83 83 +331 83 83 +332 83 83 +332 83 83 +333 84 84 +333 84 84 +334 84 84 +334 84 84 +334 84 84 +335 84 84 +335 84 84 +336 84 84 +336 84 84 +337 85 85 +337 85 85 +338 85 85 +338 85 85 +339 85 85 +339 85 85 +340 85 85 +340 85 85 +341 86 86 +341 86 86 +342 86 86 +342 86 86 +343 86 86 +343 86 86 +344 86 86 +344 86 86 +345 87 87 +345 87 87 +346 87 87 +346 87 87 +346 87 87 +347 87 87 +347 87 87 +348 87 87 +348 87 87 +349 88 88 +349 88 88 +350 88 88 +350 88 88 +351 88 88 +351 88 88 +352 88 88 +352 88 88 +353 89 89 +353 89 89 +354 89 89 +354 89 89 +355 89 89 +355 89 89 +356 89 89 +356 89 89 +357 90 90 +357 90 90 +358 90 90 +358 90 90 +358 90 90 +359 90 90 +359 90 90 +360 90 90 +360 90 90 +361 91 91 +361 91 91 +362 91 91 +362 91 91 +363 91 91 +363 91 91 +364 91 91 +364 91 91 +365 92 92 +365 92 92 +366 92 92 +366 92 92 +367 92 92 +367 92 92 +368 92 92 +368 92 92 +369 93 93 +369 93 93 +370 93 93 +370 93 93 +370 93 93 +371 93 93 +371 93 93 +372 93 93 +372 93 93 +373 94 94 +373 94 94 +374 94 94 +374 94 94 +375 94 94 +375 94 94 +376 94 94 +376 94 94 +377 95 95 +377 95 95 +378 95 95 +378 95 95 +379 95 95 +379 95 95 +380 95 95 +380 95 95 +381 96 96 +381 96 96 +382 96 96 +382 96 96 +382 96 96 +383 96 96 +383 96 96 +384 96 96 +384 96 96 +385 97 97 +385 97 97 +386 97 97 +386 97 97 +387 97 97 +387 97 97 +388 97 97 +388 97 97 +389 98 98 +389 98 98 +390 98 98 +390 98 98 +391 98 98 +391 98 98 +392 98 98 +392 98 98 +393 99 99 +393 99 99 +394 99 99 +394 99 99 +394 99 99 +395 99 99 +395 99 99 +396 99 99 +396 99 99 +397 100 100 +397 100 100 +398 100 100 +398 100 100 +399 100 100 +399 100 100 +400 100 100 +400 100 100 +401 101 101 +401 101 101 +402 101 101 +402 101 101 +403 101 101 +403 101 101 +404 101 101 +404 101 101 +405 102 102 +405 102 102 +406 102 102 +406 102 102 +406 102 102 +407 102 102 +407 102 102 +408 102 102 +408 102 102 +409 103 103 +409 103 103 +410 103 103 +410 103 103 +411 103 103 +411 103 103 +412 103 103 +412 103 103 +413 104 104 +413 104 104 +414 104 104 +414 104 104 +415 104 104 +415 104 104 +416 104 104 +416 104 104 +417 105 105 +417 105 105 +418 105 105 +418 105 105 +418 105 105 +419 105 105 +419 105 105 +420 105 105 +420 105 105 +421 106 106 +421 106 106 +422 106 106 +422 106 106 +423 106 106 +423 106 106 +424 106 106 +424 106 106 +425 107 107 +425 107 107 +426 107 107 +426 107 107 +427 107 107 +427 107 107 +428 107 107 +428 107 107 +429 108 108 +429 108 108 +430 108 108 +430 108 108 +430 108 108 +431 108 108 +431 108 108 +432 108 108 +432 108 108 +433 109 109 +433 109 109 +434 109 109 +434 109 109 +435 109 109 +435 109 109 +436 109 109 +436 109 109 +437 110 110 +437 110 110 +438 110 110 +438 110 110 +439 110 110 +439 110 110 +440 110 110 +440 110 110 +441 111 111 +441 111 111 +442 111 111 +442 111 111 +442 111 111 +443 111 111 +443 111 111 +444 111 111 +444 111 111 +445 112 112 +445 112 112 +446 112 112 +446 112 112 +447 112 112 +447 112 112 +448 112 112 +448 112 112 +449 113 113 +449 113 113 +450 113 113 +450 113 113 +451 113 113 +451 113 113 +452 113 113 +452 113 113 +453 114 114 +453 114 114 +454 114 114 +454 114 114 +454 114 114 +455 114 114 +455 114 114 +456 114 114 +456 114 114 +457 115 115 +457 115 115 +458 115 115 +458 115 115 +459 115 115 +459 115 115 +460 115 115 +460 115 115 +461 116 116 +461 116 116 +462 116 116 +462 116 116 +463 116 116 +463 116 116 +464 116 116 +464 116 116 +465 117 117 +465 117 117 +466 117 117 +466 117 117 +466 117 117 +467 117 117 +467 117 117 +468 117 117 +468 117 117 +469 118 118 +469 118 118 +470 118 118 +470 118 118 +471 118 118 +471 118 118 +472 118 118 +472 118 118 +473 119 119 +473 119 119 +474 119 119 +474 119 119 +475 119 119 +475 119 119 +476 119 119 +476 119 119 +477 120 120 +477 120 120 +478 120 120 +478 120 120 +478 120 120 +479 120 120 +479 120 120 +480 120 120 +480 120 120 +481 121 121 +481 121 121 +482 121 121 +482 121 121 +483 121 121 +483 121 121 +484 121 121 +484 121 121 +485 122 122 +485 122 122 +486 122 122 +486 122 122 +487 122 122 +487 122 122 +488 122 122 +488 122 122 +489 123 123 +489 123 123 +490 123 123 +490 123 123 +490 123 123 +491 123 123 +491 123 123 +492 123 123 +492 123 123 +493 124 124 +493 124 124 +494 124 124 +494 124 124 +495 124 124 +495 124 124 +496 124 124 +496 124 124 +497 125 125 +497 125 125 +498 125 125 +498 125 125 +499 125 125 +499 125 125 +500 125 125 +500 125 125 +501 126 126 +501 126 126 +502 126 126 +502 126 126 +502 126 126 +503 126 126 +503 126 126 +504 126 126 +504 126 126 +505 127 127 +505 127 127 +506 127 127 +506 127 127 +507 127 127 +507 127 127 +508 127 127 +508 127 127 +509 128 128 +509 128 128 +510 128 128 +510 128 128 +511 128 128 +511 128 128 +512 128 128 +512 128 128 +513 129 129 +513 129 129 +514 129 129 +514 129 129 +514 129 129 +515 129 129 +515 129 129 +516 129 129 +516 129 129 +517 130 130 +517 130 130 +518 130 130 +518 130 130 +519 130 130 +519 130 130 +520 130 130 +520 130 130 +521 131 131 +521 131 131 +522 131 131 +522 131 131 +523 131 131 +523 131 131 +524 131 131 +524 131 131 +525 132 132 +525 132 132 +526 132 132 +526 132 132 +526 132 132 +527 132 132 +527 132 132 +528 132 132 +528 132 132 +529 133 133 +529 133 133 +530 133 133 +530 133 133 +531 133 133 +531 133 133 +532 133 133 +532 133 133 +533 134 134 +533 134 134 +534 134 134 +534 134 134 +535 134 134 +535 134 134 +536 134 134 +536 134 134 +537 135 135 +537 135 135 +538 135 135 +538 135 135 +538 135 135 +539 135 135 +539 135 135 +540 135 135 +540 135 135 +541 136 136 +541 136 136 +542 136 136 +542 136 136 +543 136 136 +543 136 136 +544 136 136 +544 136 136 +545 137 137 +545 137 137 +546 137 137 +546 137 137 +547 137 137 +547 137 137 +548 137 137 +548 137 137 +549 138 138 +549 138 138 +550 138 138 +550 138 138 +550 138 138 +551 138 138 +551 138 138 +552 138 138 +552 138 138 +553 139 139 +553 139 139 +554 139 139 +554 139 139 +555 139 139 +555 139 139 +556 139 139 +556 139 139 +557 140 140 +557 140 140 +558 140 140 +558 140 140 +559 140 140 +559 140 140 +560 140 140 +560 140 140 +561 141 141 +561 141 141 +562 141 141 +562 141 141 +562 141 141 +563 141 141 +563 141 141 +564 141 141 +564 141 141 +565 142 142 +565 142 142 +566 142 142 +566 142 142 +567 142 142 +567 142 142 +568 142 142 +568 142 142 +569 143 143 +569 143 143 +570 143 143 +570 143 143 +571 143 143 +571 143 143 +572 143 143 +572 143 143 +573 144 144 +573 144 144 +574 144 144 +574 144 144 +574 144 144 +575 144 144 +575 144 144 +576 144 144 +576 144 144 +577 145 145 +577 145 145 +578 145 145 +578 145 145 +579 145 145 +579 145 145 +580 145 145 +580 145 145 +581 146 146 +581 146 146 +582 146 146 +582 146 146 +583 146 146 +583 146 146 +584 146 146 +584 146 146 +585 147 147 +585 147 147 +586 147 147 +586 147 147 +586 147 147 +587 147 147 +587 147 147 +588 147 147 +588 147 147 +589 148 148 +589 148 148 +590 148 148 +590 148 148 +591 148 148 +591 148 148 +592 148 148 +592 148 148 +593 149 149 +593 149 149 +594 149 149 +594 149 149 +595 149 149 +595 149 149 +596 149 149 +596 149 149 +597 150 150 +597 150 150 +598 150 150 +598 150 150 +598 150 150 +599 150 150 +599 150 150 +600 150 150 +600 150 150 +601 151 151 +601 151 151 +602 151 151 +602 151 151 +603 151 151 +603 151 151 +604 151 151 +604 151 151 +605 152 152 +605 152 152 +606 152 152 +606 152 152 +607 152 152 +607 152 152 +608 152 152 +608 152 152 +609 153 153 +609 153 153 +610 153 153 +610 153 153 +610 153 153 +611 153 153 +611 153 153 +612 153 153 +612 153 153 +613 154 154 +613 154 154 +614 154 154 +614 154 154 +615 154 154 +615 154 154 +616 154 154 +616 154 154 +617 155 155 +617 155 155 +618 155 155 +618 155 155 +619 155 155 +619 155 155 +620 155 155 +620 155 155 +621 156 156 +621 156 156 +622 156 156 +622 156 156 +622 156 156 +623 156 156 +623 156 156 +624 156 156 +624 156 156 +625 157 157 +625 157 157 +626 157 157 +626 157 157 +627 157 157 +627 157 157 +628 157 157 +628 157 157 +629 158 158 +629 158 158 +630 158 158 +630 158 158 +631 158 158 +631 158 158 +632 158 158 +632 158 158 +633 159 159 +633 159 159 +634 159 159 +634 159 159 +634 159 159 +635 159 159 +635 159 159 +636 159 159 +636 159 159 +637 160 160 +637 160 160 +638 160 160 +638 160 160 +639 160 160 +639 160 160 +640 160 160 +640 160 160 +641 161 161 +641 161 161 +642 161 161 +642 161 161 +643 161 161 +643 161 161 +644 161 161 +644 161 161 +645 162 162 +645 162 162 +646 162 162 +646 162 162 +646 162 162 +647 162 162 +647 162 162 +648 162 162 +648 162 162 +649 163 163 +649 163 163 +650 163 163 +650 163 163 +651 163 163 +651 163 163 +652 163 163 +652 163 163 +653 164 164 +653 164 164 +654 164 164 +654 164 164 +655 164 164 +655 164 164 +656 164 164 +656 164 164 +657 165 165 +657 165 165 +658 165 165 +658 165 165 +658 165 165 +659 165 165 +659 165 165 +660 165 165 +660 165 165 +661 166 166 +661 166 166 +662 166 166 +662 166 166 +663 166 166 +663 166 166 +664 166 166 +664 166 166 +665 167 167 +665 167 167 +666 167 167 +666 167 167 +667 167 167 +667 167 167 +668 167 167 +668 167 167 +669 168 168 +669 168 168 +670 168 168 +670 168 168 +670 168 168 +671 168 168 +671 168 168 +672 168 168 +672 168 168 +673 169 169 +673 169 169 +674 169 169 +674 169 169 +675 169 169 +675 169 169 +676 169 169 +676 169 169 +677 170 170 +677 170 170 +678 170 170 +678 170 170 +679 170 170 +679 170 170 +680 170 170 +680 170 170 +681 171 171 +681 171 171 +682 171 171 +682 171 171 +682 171 171 +683 171 171 +683 171 171 +684 171 171 +684 171 171 +685 172 172 +685 172 172 +686 172 172 +686 172 172 +687 172 172 +687 172 172 +688 172 172 +688 172 172 +689 173 173 +689 173 173 +690 173 173 +690 173 173 +691 173 173 +691 173 173 +692 173 173 +692 173 173 +693 174 174 +693 174 174 +694 174 174 +694 174 174 +694 174 174 +695 174 174 +695 174 174 +696 174 174 +696 174 174 +697 175 175 +697 175 175 +698 175 175 +698 175 175 +699 175 175 +699 175 175 +700 175 175 +700 175 175 +701 176 176 +701 176 176 +702 176 176 +702 176 176 +703 176 176 +703 176 176 +704 176 176 +704 176 176 +705 177 177 +705 177 177 +706 177 177 +706 177 177 +706 177 177 +707 177 177 +707 177 177 +708 177 177 +708 177 177 +709 178 178 +709 178 178 +710 178 178 +710 178 178 +711 178 178 +711 178 178 +712 178 178 +712 178 178 +713 179 179 +713 179 179 +714 179 179 +714 179 179 +715 179 179 +715 179 179 +716 179 179 +716 179 179 +717 180 180 +717 180 180 +718 180 180 +718 180 180 +718 180 180 +719 180 180 +719 180 180 +720 180 180 +720 180 180 +721 181 181 +721 181 181 +722 181 181 +722 181 181 +723 181 181 +723 181 181 +724 181 181 +724 181 181 +725 182 182 +725 182 182 +726 182 182 +726 182 182 +727 182 182 +727 182 182 +728 182 182 +728 182 182 +729 183 183 +729 183 183 +730 183 183 +730 183 183 +730 183 183 +731 183 183 +731 183 183 +732 183 183 +732 183 183 +733 184 184 +733 184 184 +734 184 184 +734 184 184 +735 184 184 +735 184 184 +736 184 184 +736 184 184 +737 185 185 +737 185 185 +738 185 185 +738 185 185 +739 185 185 +739 185 185 +740 185 185 +740 185 185 +741 186 186 +741 186 186 +742 186 186 +742 186 186 +742 186 186 +743 186 186 +743 186 186 +744 186 186 +744 186 186 +745 187 187 +745 187 187 +746 187 187 +746 187 187 +747 187 187 +747 187 187 +748 187 187 +748 187 187 +749 188 188 +749 188 188 +750 188 188 +750 188 188 +751 188 188 +751 188 188 +752 188 188 +752 188 188 +753 189 189 +753 189 189 +754 189 189 +754 189 189 +754 189 189 +755 189 189 +755 189 189 +756 189 189 +756 189 189 +757 190 190 +757 190 190 +758 190 190 +758 190 190 +759 190 190 +759 190 190 +760 190 190 +760 190 190 +761 191 191 +761 191 191 +762 191 191 +762 191 191 +763 191 191 +763 191 191 +764 191 191 +764 191 191 +765 192 192 +765 192 192 +766 192 192 +766 192 192 +766 192 192 +767 192 192 +767 192 192 +768 192 192 +768 192 192 +769 193 193 +769 193 193 +770 193 193 +770 193 193 +771 193 193 +771 193 193 +772 193 193 +772 193 193 +773 194 194 +773 194 194 +774 194 194 +774 194 194 +775 194 194 +775 194 194 +776 194 194 +776 194 194 +777 195 195 +777 195 195 +778 195 195 +778 195 195 +778 195 195 +779 195 195 +779 195 195 +780 195 195 +780 195 195 +781 196 196 +781 196 196 +782 196 196 +782 196 196 +783 196 196 +783 196 196 +784 196 196 +784 196 196 +785 197 197 +785 197 197 +786 197 197 +786 197 197 +787 197 197 +787 197 197 +788 197 197 +788 197 197 +789 198 198 +789 198 198 +790 198 198 +790 198 198 +790 198 198 +791 198 198 +791 198 198 +792 198 198 +792 198 198 +793 199 199 +793 199 199 +794 199 199 +794 199 199 +795 199 199 +795 199 199 +796 199 199 +796 199 199 +797 200 200 +797 200 200 +798 200 200 +798 200 200 +799 200 200 +799 200 200 +800 200 200 +800 200 200 +801 201 201 +801 201 201 +802 201 201 +802 201 201 +802 201 201 +803 201 201 +803 201 201 +804 201 201 +804 201 201 +805 202 202 +805 202 202 +806 202 202 +806 202 202 +807 202 202 +807 202 202 +808 202 202 +808 202 202 +809 203 203 +809 203 203 +810 203 203 +810 203 203 +811 203 203 +811 203 203 +812 203 203 +812 203 203 +813 204 204 +813 204 204 +814 204 204 +814 204 204 +814 204 204 +815 204 204 +815 204 204 +816 204 204 +816 204 204 +817 205 205 +817 205 205 +818 205 205 +818 205 205 +819 205 205 +819 205 205 +820 205 205 +820 205 205 +821 206 206 +821 206 206 +822 206 206 +822 206 206 +823 206 206 +823 206 206 +824 206 206 +824 206 206 +825 207 207 +825 207 207 +826 207 207 +826 207 207 +826 207 207 +827 207 207 +827 207 207 +828 207 207 +828 207 207 +829 208 208 +829 208 208 +830 208 208 +830 208 208 +831 208 208 +831 208 208 +832 208 208 +832 208 208 +833 209 209 +833 209 209 +834 209 209 +834 209 209 +835 209 209 +835 209 209 +836 209 209 +836 209 209 +837 210 210 +837 210 210 +838 210 210 +838 210 210 +838 210 210 +839 210 210 +839 210 210 +840 210 210 +840 210 210 +841 211 211 +841 211 211 +842 211 211 +842 211 211 +843 211 211 +843 211 211 +844 211 211 +844 211 211 +845 212 212 +845 212 212 +846 212 212 +846 212 212 +847 212 212 +847 212 212 +848 212 212 +848 212 212 +849 213 213 +849 213 213 +850 213 213 +850 213 213 +850 213 213 +851 213 213 +851 213 213 +852 213 213 +852 213 213 +853 214 214 +853 214 214 +854 214 214 +854 214 214 +855 214 214 +855 214 214 +856 214 214 +856 214 214 +857 215 215 +857 215 215 +858 215 215 +858 215 215 +859 215 215 +859 215 215 +860 215 215 +860 215 215 +861 216 216 +861 216 216 +862 216 216 +862 216 216 +862 216 216 +863 216 216 +863 216 216 +864 216 216 +864 216 216 +865 217 217 +865 217 217 +866 217 217 +866 217 217 +867 217 217 +867 217 217 +868 217 217 +868 217 217 +869 218 218 +869 218 218 +870 218 218 +870 218 218 +871 218 218 +871 218 218 +872 218 218 +872 218 218 +873 219 219 +873 219 219 +874 219 219 +874 219 219 +874 219 219 +875 219 219 +875 219 219 +876 219 219 +876 219 219 +877 220 220 +877 220 220 +878 220 220 +878 220 220 +879 220 220 +879 220 220 +880 220 220 +880 220 220 +881 221 221 +881 221 221 +882 221 221 +882 221 221 +883 221 221 +883 221 221 +884 221 221 +884 221 221 +885 222 222 +885 222 222 +886 222 222 +886 222 222 +886 222 222 +887 222 222 +887 222 222 +888 222 222 +888 222 222 +889 223 223 +889 223 223 +890 223 223 +890 223 223 +891 223 223 +891 223 223 +892 223 223 +892 223 223 +893 224 224 +893 224 224 +894 224 224 +894 224 224 +895 224 224 +895 224 224 +896 224 224 +896 224 224 +897 225 225 +897 225 225 +898 225 225 +898 225 225 +898 225 225 +899 225 225 +899 225 225 +900 225 225 +900 225 225 +901 226 226 +901 226 226 +902 226 226 +902 226 226 +903 226 226 +903 226 226 +904 226 226 +904 226 226 +905 227 227 +905 227 227 +906 227 227 +906 227 227 +907 227 227 +907 227 227 +908 227 227 +908 227 227 +909 228 228 +909 228 228 +910 228 228 +910 228 228 +910 228 228 +911 228 228 +911 228 228 +912 228 228 +912 228 228 +913 229 229 +913 229 229 +914 229 229 +914 229 229 +915 229 229 +915 229 229 +916 229 229 +916 229 229 +917 230 230 +917 230 230 +918 230 230 +918 230 230 +919 230 230 +919 230 230 +920 230 230 +920 230 230 +921 231 231 +921 231 231 +922 231 231 +922 231 231 +922 231 231 +923 231 231 +923 231 231 +924 231 231 +924 231 231 +925 232 232 +925 232 232 +926 232 232 +926 232 232 +927 232 232 +927 232 232 +928 232 232 +928 232 232 +929 233 233 +929 233 233 +930 233 233 +930 233 233 +931 233 233 +931 233 233 +932 233 233 +932 233 233 +933 234 234 +933 234 234 +934 234 234 +934 234 234 +934 234 234 +935 234 234 +935 234 234 +936 234 234 +936 234 234 +937 235 235 +937 235 235 +938 235 235 +938 235 235 +939 235 235 +939 235 235 +940 235 235 +940 235 235 +941 236 236 +941 236 236 +942 236 236 +942 236 236 +943 236 236 +943 236 236 +944 236 236 +944 236 236 +945 237 237 +945 237 237 +946 237 237 +946 237 237 +946 237 237 +947 237 237 +947 237 237 +948 237 237 +948 237 237 +949 238 238 +949 238 238 +950 238 238 +950 238 238 +951 238 238 +951 238 238 +952 238 238 +952 238 238 +953 239 239 +953 239 239 +954 239 239 +954 239 239 +955 239 239 +955 239 239 +956 239 239 +956 239 239 +957 240 240 +957 240 240 +958 240 240 +958 240 240 +958 240 240 +959 240 240 +959 240 240 +960 240 240 +960 240 240 +961 241 241 +961 241 241 +962 241 241 +962 241 241 +963 241 241 +963 241 241 +964 241 241 +964 241 241 +965 242 242 +965 242 242 +966 242 242 +966 242 242 +967 242 242 +967 242 242 +968 242 242 +968 242 242 +969 243 243 +969 243 243 +970 243 243 +970 243 243 +970 243 243 +971 243 243 +971 243 243 +972 243 243 +972 243 243 +973 244 244 +973 244 244 +974 244 244 +974 244 244 +975 244 244 +975 244 244 +976 244 244 +976 244 244 +977 245 245 +977 245 245 +978 245 245 +978 245 245 +979 245 245 +979 245 245 +980 245 245 +980 245 245 +981 246 246 +981 246 246 +982 246 246 +982 246 246 +982 246 246 +983 246 246 +983 246 246 +984 246 246 +984 246 246 +985 247 247 +985 247 247 +986 247 247 +986 247 247 +987 247 247 +987 247 247 +988 247 247 +988 247 247 +989 248 248 +989 248 248 +990 248 248 +990 248 248 +991 248 248 +991 248 248 +992 248 248 +992 248 248 +993 249 249 +993 249 249 +994 249 249 +994 249 249 +994 249 249 +995 249 249 +995 249 249 +996 249 249 +996 249 249 +997 250 250 +997 250 250 +998 250 250 +998 250 250 +999 250 250 +999 250 250 +1000 250 250 +1000 250 250 +1001 251 251 +1001 251 251 +1002 251 251 +1002 251 251 +1003 251 251 +1003 251 251 +1004 251 251 +1004 251 251 +1005 252 252 +1005 252 252 +1006 252 252 +1006 252 252 +1006 252 252 +1007 252 252 +1007 252 252 +1008 252 252 +1008 252 252 +1009 253 253 +1009 253 253 +1010 253 253 +1010 253 253 +1011 253 253 +1011 253 253 +1012 253 253 +1012 253 253 +1013 254 254 +1013 254 254 +1014 254 254 +1014 254 254 +1015 254 254 +1015 254 254 +1016 254 254 +1016 254 254 +1017 255 255 +1017 255 255 +1018 255 255 +1018 255 255 +1018 255 255 +1019 255 255 +1019 255 255 +1020 255 255 +1020 255 255 +1021 256 256 +1021 256 256 +1022 256 256 +1022 256 256 +1023 256 256 +1023 256 256 +1024 256 256 +1024 256 256 +1025 257 257 +1025 257 257 +1026 257 257 +1026 257 257 +1027 257 257 +1027 257 257 +1028 257 257 +1028 257 257 +1029 258 258 +1029 258 258 +1030 258 258 +1030 258 258 +1030 258 258 +1031 258 258 +1031 258 258 +1032 258 258 +1032 258 258 +1033 259 259 +1033 259 259 +1034 259 259 +1034 259 259 +1035 259 259 +1035 259 259 +1036 259 259 +1036 259 259 +1037 260 260 +1037 260 260 +1038 260 260 +1038 260 260 +1039 260 260 +1039 260 260 +1040 260 260 +1040 260 260 +1041 261 261 +1041 261 261 +1042 261 261 +1042 261 261 +1042 261 261 +1043 261 261 +1043 261 261 +1044 261 261 +1044 261 261 +1045 262 262 +1045 262 262 +1046 262 262 +1046 262 262 +1047 262 262 +1047 262 262 +1048 262 262 +1048 262 262 +1049 263 263 +1049 263 263 +1050 263 263 +1050 263 263 +1051 263 263 +1051 263 263 +1052 263 263 +1052 263 263 +1053 264 264 +1053 264 264 +1054 264 264 +1054 264 264 +1054 264 264 +1055 264 264 +1055 264 264 +1056 264 264 +1056 264 264 +1057 265 265 +1057 265 265 +1058 265 265 +1058 265 265 +1059 265 265 +1059 265 265 +1060 265 265 +1060 265 265 +1061 266 266 +1061 266 266 +1062 266 266 +1062 266 266 +1063 266 266 +1063 266 266 +1064 266 266 +1064 266 266 +1065 267 267 +1065 267 267 +1066 267 267 +1066 267 267 +1066 267 267 +1067 267 267 +1067 267 267 +1068 267 267 +1068 267 267 +1069 268 268 +1069 268 268 +1070 268 268 +1070 268 268 +1071 268 268 +1071 268 268 +1072 268 268 +1072 268 268 +1073 269 269 +1073 269 269 +1074 269 269 +1074 269 269 +1075 269 269 +1075 269 269 +1076 269 269 +1076 269 269 +1077 270 270 +1077 270 270 +1078 270 270 +1078 270 270 +1078 270 270 +1079 270 270 +1079 270 270 +1080 270 270 +1080 270 270 +1081 271 271 +1081 271 271 +1082 271 271 +1082 271 271 +1083 271 271 +1083 271 271 +1084 271 271 +1084 271 271 +1085 272 272 +1085 272 272 +1086 272 272 +1086 272 272 +1087 272 272 +1087 272 272 +1088 272 272 +1088 272 272 +1089 273 273 +1089 273 273 +1090 273 273 +1090 273 273 +1090 273 273 +1091 273 273 +1091 273 273 +1092 273 273 +1092 273 273 +1093 274 274 +1093 274 274 +1094 274 274 +1094 274 274 +1095 274 274 +1095 274 274 +1096 274 274 +1096 274 274 +1097 275 275 +1097 275 275 +1098 275 275 +1098 275 275 +1099 275 275 +1099 275 275 +1100 275 275 +1100 275 275 +1101 276 276 +1101 276 276 +1102 276 276 +1102 276 276 +1102 276 276 +1103 276 276 +1103 276 276 +1104 276 276 +1104 276 276 +1105 277 277 +1105 277 277 +1106 277 277 +1106 277 277 +1107 277 277 +1107 277 277 +1108 277 277 +1108 277 277 +1109 278 278 +1109 278 278 +1110 278 278 +1110 278 278 +1110 278 278 +1111 278 278 +1111 278 278 +1112 278 278 +1112 278 278 +1113 279 279 +1113 279 279 +1114 279 279 +1114 279 279 +1115 279 279 +1115 279 279 +1116 279 279 +1116 279 279 +1116 279 279 +1117 280 280 +1117 280 280 +1118 280 280 +1118 280 280 +1119 280 280 +1119 280 280 +1120 280 280 +1120 280 280 +1121 281 281 +1121 281 281 +1121 281 281 +1122 281 281 +1122 281 281 +1123 281 281 +1123 281 281 +1124 281 281 +1124 281 281 +1125 282 282 +1125 282 282 +1126 282 282 +1126 282 282 +1126 282 282 +1127 282 282 +1127 282 282 +1128 282 282 +1128 282 282 +1129 283 283 +1129 283 283 +1130 283 283 +1130 283 283 +1130 283 283 +1131 283 283 +1131 283 283 +1132 283 283 +1132 283 283 +1133 284 284 +1133 284 284 +1133 284 284 +1134 284 284 +1134 284 284 +1135 284 284 +1135 284 284 +1136 284 284 +1136 284 284 +1136 284 284 +1137 285 285 +1137 285 285 +1138 285 285 +1138 285 285 +1139 285 285 +1139 285 285 +1139 285 285 +1140 285 285 +1140 285 285 +1141 286 286 +1141 286 286 +1142 286 286 +1142 286 286 +1142 286 286 +1143 286 286 +1143 286 286 +1144 286 286 +1144 286 286 +1145 287 287 +1145 287 287 +1145 287 287 +1146 287 287 +1146 287 287 +1147 287 287 +1147 287 287 +1147 287 287 +1148 287 287 +1148 287 287 +1149 288 288 +1149 288 288 +1149 288 288 +1150 288 288 +1150 288 288 +1151 288 288 +1151 288 288 +1152 288 288 +1152 288 288 +1152 288 288 +1153 289 289 +1153 289 289 +1154 289 289 +1154 289 289 +1154 289 289 +1155 289 289 +1155 289 289 +1156 289 289 +1156 289 289 +1156 289 289 +1157 290 290 +1157 290 290 +1158 290 290 +1158 290 290 +1158 290 290 +1159 290 290 +1159 290 290 +1160 290 290 +1160 290 290 +1160 290 290 +1161 291 291 +1161 291 291 +1162 291 291 +1162 291 291 +1162 291 291 +1163 291 291 +1163 291 291 +1163 291 291 +1164 291 291 +1164 291 291 +1165 292 292 +1165 292 292 +1165 292 292 +1166 292 292 +1166 292 292 +1167 292 292 +1167 292 292 +1167 292 292 +1168 292 292 +1168 292 292 +1168 292 292 +1169 293 293 +1169 293 293 +1170 293 293 +1170 293 293 +1170 293 293 +1171 293 293 +1171 293 293 +1171 293 293 +1172 293 293 +1172 293 293 +1173 294 294 +1173 294 294 +1173 294 294 +1174 294 294 +1174 294 294 +1174 294 294 +1175 294 294 +1175 294 294 +1176 294 294 +1176 294 294 +1176 294 294 +1177 295 295 +1177 295 295 +1177 295 295 +1178 295 295 +1178 295 295 +1178 295 295 +1179 295 295 +1179 295 295 +1180 295 295 +1180 295 295 +1180 295 295 +1181 296 296 +1181 296 296 +1181 296 296 +1182 296 296 +1182 296 296 +1182 296 296 +1183 296 296 +1183 296 296 +1183 296 296 +1184 296 296 +1184 296 296 +1184 296 296 +1185 297 297 +1185 297 297 +1186 297 297 +1186 297 297 +1186 297 297 +1187 297 297 +1187 297 297 +1187 297 297 +1188 297 297 +1188 297 297 +1188 297 297 +1189 298 298 +1189 298 298 +1189 298 298 +1190 298 298 +1190 298 298 +1190 298 298 +1191 298 298 +1191 298 298 +1191 298 298 +1192 298 298 +1192 298 298 +1192 298 298 +1193 299 299 +1193 299 299 +1193 299 299 +1194 299 299 +1194 299 299 +1194 299 299 +1195 299 299 +1195 299 299 +1195 299 299 +1196 299 299 +1196 299 299 +1196 299 299 +1197 300 300 +1197 300 300 +1197 300 300 +1198 300 300 +1198 300 300 +1198 300 300 +1199 300 300 +1199 300 300 +1199 300 300 +1200 300 300 +1200 300 300 +1200 300 300 +1201 301 301 +1201 301 301 +1201 301 301 +1202 301 301 +1202 301 301 +1202 301 301 +1203 301 301 +1203 301 301 +1203 301 301 +1203 301 301 +1204 301 301 +1204 301 301 +1204 301 301 +1205 302 302 +1205 302 302 +1205 302 302 +1206 302 302 +1206 302 302 +1206 302 302 +1207 302 302 +1207 302 302 +1207 302 302 +1208 302 302 +1208 302 302 +1208 302 302 +1208 302 302 +1209 303 303 +1209 303 303 +1209 303 303 +1210 303 303 +1210 303 303 +1210 303 303 +1211 303 303 +1211 303 303 +1211 303 303 +1211 303 303 +1212 303 303 +1212 303 303 +1212 303 303 +1213 304 304 +1213 304 304 +1213 304 304 +1213 304 304 +1214 304 304 +1214 304 304 +1214 304 304 +1215 304 304 +1215 304 304 +1215 304 304 +1216 304 304 +1216 304 304 +1216 304 304 +1216 304 304 +1217 305 305 +1217 305 305 +1217 305 305 +1218 305 305 +1218 305 305 +1218 305 305 +1218 305 305 +1219 305 305 +1219 305 305 +1219 305 305 +1220 305 305 +1220 305 305 +1220 305 305 +1220 305 305 +1221 306 306 +1221 306 306 +1221 306 306 +1221 306 306 +1222 306 306 +1222 306 306 +1222 306 306 +1223 306 306 +1223 306 306 +1223 306 306 +1223 306 306 +1224 306 306 +1224 306 306 +1224 306 306 +1224 306 306 +1225 307 307 +1225 307 307 +1225 307 307 +1226 307 307 +1226 307 307 +1226 307 307 +1226 307 307 +1227 307 307 +1227 307 307 +1227 307 307 +1227 307 307 +1228 307 307 +1228 307 307 +1228 307 307 +1228 307 307 +1229 308 308 +1229 308 308 +1229 308 308 +1229 308 308 +1230 308 308 +1230 308 308 +1230 308 308 +1230 308 308 +1231 308 308 +1231 308 308 +1231 308 308 +1231 308 308 +1232 308 308 +1232 308 308 +1232 308 308 +1232 308 308 +1233 309 309 +1233 309 309 +1233 309 309 +1233 309 309 +1234 309 309 +1234 309 309 +1234 309 309 +1234 309 309 +1235 309 309 +1235 309 309 +1235 309 309 +1235 309 309 +1236 309 309 +1236 309 309 +1236 309 309 +1236 309 309 +1237 310 310 +1237 310 310 +1237 310 310 +1237 310 310 +1238 310 310 +1238 310 310 +1238 310 310 +1238 310 310 +1238 310 310 +1239 310 310 +1239 310 310 +1239 310 310 +1239 310 310 +1240 310 310 +1240 310 310 +1240 310 310 +1240 310 310 +1241 311 311 +1241 311 311 +1241 311 311 +1241 311 311 +1241 311 311 +1242 311 311 +1242 311 311 +1242 311 311 +1242 311 311 +1243 311 311 +1243 311 311 +1243 311 311 +1243 311 311 +1243 311 311 +1244 311 311 +1244 311 311 +1244 311 311 +1244 311 311 +1245 312 312 +1245 312 312 +1245 312 312 +1245 312 312 +1245 312 312 +1246 312 312 +1246 312 312 +1246 312 312 +1246 312 312 +1246 312 312 +1247 312 312 +1247 312 312 +1247 312 312 +1247 312 312 +1247 312 312 +1248 312 312 +1248 312 312 +1248 312 312 +1248 312 312 +1249 313 313 +1249 313 313 +1249 313 313 +1249 313 313 +1249 313 313 +1250 313 313 +1250 313 313 +1250 313 313 +1250 313 313 +1250 313 313 +1251 313 313 +1251 313 313 +1251 313 313 +1251 313 313 +1251 313 313 +1251 313 313 +1252 313 313 +1252 313 313 +1252 313 313 +1252 313 313 +1252 313 313 +1253 314 314 +1253 314 314 +1253 314 314 +1253 314 314 +1253 314 314 +1254 314 314 +1254 314 314 +1254 314 314 +1254 314 314 +1254 314 314 +1255 314 314 +1255 314 314 +1255 314 314 +1255 314 314 +1255 314 314 +1255 314 314 +1256 314 314 +1256 314 314 +1256 314 314 +1256 314 314 +1256 314 314 +1256 314 314 +1257 315 315 +1257 315 315 +1257 315 315 +1257 315 315 +1257 315 315 +1258 315 315 +1258 315 315 +1258 315 315 +1258 315 315 +1258 315 315 +1258 315 315 +1259 315 315 +1259 315 315 +1259 315 315 +1259 315 315 +1259 315 315 +1259 315 315 +1260 315 315 +1260 315 315 +1260 315 315 +1260 315 315 +1260 315 315 +1260 315 315 +1261 316 316 +1261 316 316 +1261 316 316 +1261 316 316 +1261 316 316 +1261 316 316 +1261 316 316 +1262 316 316 +1262 316 316 +1262 316 316 +1262 316 316 +1262 316 316 +1262 316 316 +1263 316 316 +1263 316 316 +1263 316 316 +1263 316 316 +1263 316 316 +1263 316 316 +1263 316 316 +1264 316 316 +1264 316 316 +1264 316 316 +1264 316 316 +1264 316 316 +1264 316 316 +1264 316 316 +1265 317 317 +1265 317 317 +1265 317 317 +1265 317 317 +1265 317 317 +1265 317 317 +1265 317 317 +1266 317 317 +1266 317 317 +1266 317 317 +1266 317 317 +1266 317 317 +1266 317 317 +1266 317 317 +1267 317 317 +1267 317 317 +1267 317 317 +1267 317 317 +1267 317 317 +1267 317 317 +1267 317 317 +1268 317 317 +1268 317 317 +1268 317 317 +1268 317 317 +1268 317 317 +1268 317 317 +1268 317 317 +1268 317 317 +1269 318 318 +1269 318 318 +1269 318 318 +1269 318 318 +1269 318 318 +1269 318 318 +1269 318 318 +1269 318 318 +1270 318 318 +1270 318 318 +1270 318 318 +1270 318 318 +1270 318 318 +1270 318 318 +1270 318 318 +1270 318 318 +1270 318 318 +1271 318 318 +1271 318 318 +1271 318 318 +1271 318 318 +1271 318 318 +1271 318 318 +1271 318 318 +1271 318 318 +1271 318 318 +1272 318 318 +1272 318 318 +1272 318 318 +1272 318 318 +1272 318 318 +1272 318 318 +1272 318 318 +1272 318 318 +1272 318 318 +1273 319 319 +1273 319 319 +1273 319 319 +1273 319 319 +1273 319 319 +1273 319 319 +1273 319 319 +1273 319 319 +1273 319 319 +1273 319 319 +1274 319 319 +1274 319 319 +1274 319 319 +1274 319 319 +1274 319 319 +1274 319 319 +1274 319 319 +1274 319 319 +1274 319 319 +1274 319 319 +1274 319 319 +1275 319 319 +1275 319 319 +1275 319 319 +1275 319 319 +1275 319 319 +1275 319 319 +1275 319 319 +1275 319 319 +1275 319 319 +1275 319 319 +1275 319 319 +1276 319 319 +1276 319 319 +1276 319 319 +1276 319 319 +1276 319 319 +1276 319 319 +1276 319 319 +1276 319 319 +1276 319 319 +1276 319 319 +1276 319 319 +1276 319 319 +1276 319 319 +1277 320 320 +1277 320 320 +1277 320 320 +1277 320 320 +1277 320 320 +1277 320 320 +1277 320 320 +1277 320 320 +1277 320 320 +1277 320 320 +1277 320 320 +1277 320 320 +1277 320 320 +1277 320 320 +1278 320 320 +1278 320 320 +1278 320 320 +1278 320 320 +1278 320 320 +1278 320 320 +1278 320 320 +1278 320 320 +1278 320 320 +1278 320 320 +1278 320 320 +1278 320 320 +1278 320 320 +1278 320 320 +1278 320 320 +1278 320 320 +1279 320 320 +1279 320 320 +1279 320 320 +1279 320 320 +1279 320 320 +1279 320 320 +1279 320 320 +1279 320 320 +1279 320 320 +1279 320 320 +1279 320 320 +1279 320 320 +1279 320 320 +1279 320 320 +1279 320 320 +1279 320 320 +1279 320 320 +1279 320 320 +1279 320 320 +1279 320 320 +1279 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1280 320 320 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 +1281 321 321 diff --git a/tests/runtests/cpusets/test.hal b/tests/runtests/cpusets/test.hal index ef5f132a92..597f90ad96 100644 --- a/tests/runtests/cpusets/test.hal +++ b/tests/runtests/cpusets/test.hal @@ -3,4 +3,3 @@ setexact_for_test_suite_only newthread test 10000000 cgname=/rt loadusr -w ps -C rtapi:0 -wLo comm=,psr= - diff --git a/tests/runtests/edge/README b/tests/runtests/edge/README index be32a7ce79..3b2af2eb85 100644 --- a/tests/runtests/edge/README +++ b/tests/runtests/edge/README @@ -1,3 +1,2 @@ This tests that the edge component does what it should. - diff --git a/tests/runtests/edge/both-starting-high/expected b/tests/runtests/edge/both-starting-high/expected index e746a0b400..902e2ee8f3 100644 --- a/tests/runtests/edge/both-starting-high/expected +++ b/tests/runtests/edge/both-starting-high/expected @@ -1,10 +1,10 @@ -1 0 1 -1 0 1 -1 0 1 -1 0 1 -0 1 0 -0 0 1 -1 1 0 -0 1 0 -0 0 1 -0 0 1 +1 0 1 +1 0 1 +1 0 1 +1 0 1 +0 1 0 +0 0 1 +1 1 0 +0 1 0 +0 0 1 +0 0 1 diff --git a/tests/runtests/edge/both-starting-high/runstreamer b/tests/runtests/edge/both-starting-high/runstreamer old mode 100644 new mode 100755 diff --git a/tests/runtests/edge/both-starting-high/test.hal b/tests/runtests/edge/both-starting-high/test.hal index 2873b4ff6f..c855a106a0 100644 --- a/tests/runtests/edge/both-starting-high/test.hal +++ b/tests/runtests/edge/both-starting-high/test.hal @@ -26,4 +26,3 @@ setp edge.0.out-width-ns 25000 loadusr -w sh runstreamer start waitusr -i halsampler - diff --git a/tests/runtests/edge/both/expected b/tests/runtests/edge/both/expected index 6f3be8df6b..8037df717c 100644 --- a/tests/runtests/edge/both/expected +++ b/tests/runtests/edge/both/expected @@ -1,10 +1,10 @@ -0 0 1 -1 1 0 -1 0 1 -1 0 1 -0 1 0 -0 0 1 -1 1 0 -0 1 0 -0 0 1 -0 0 1 +0 0 1 +1 1 0 +1 0 1 +1 0 1 +0 1 0 +0 0 1 +1 1 0 +0 1 0 +0 0 1 +0 0 1 diff --git a/tests/runtests/edge/both/runstreamer b/tests/runtests/edge/both/runstreamer old mode 100644 new mode 100755 diff --git a/tests/runtests/edge/both/test.hal b/tests/runtests/edge/both/test.hal index 461a25a900..632461a177 100644 --- a/tests/runtests/edge/both/test.hal +++ b/tests/runtests/edge/both/test.hal @@ -25,6 +25,3 @@ setp edge.0.out-width-ns 25000 loadusr -w sh runstreamer start waitusr -i halsampler - - - diff --git a/tests/runtests/edge/falling-starting-high/expected b/tests/runtests/edge/falling-starting-high/expected index c354812834..27a5e9712e 100644 --- a/tests/runtests/edge/falling-starting-high/expected +++ b/tests/runtests/edge/falling-starting-high/expected @@ -1,10 +1,10 @@ -1 0 1 -1 0 1 -1 0 1 -1 0 1 -0 1 0 -0 0 1 -1 0 1 -0 1 0 -0 0 1 -0 0 1 +1 0 1 +1 0 1 +1 0 1 +1 0 1 +0 1 0 +0 0 1 +1 0 1 +0 1 0 +0 0 1 +0 0 1 diff --git a/tests/runtests/edge/falling-starting-high/runstreamer b/tests/runtests/edge/falling-starting-high/runstreamer old mode 100644 new mode 100755 diff --git a/tests/runtests/edge/falling-starting-high/test.hal b/tests/runtests/edge/falling-starting-high/test.hal index 648e266633..e03b85748e 100644 --- a/tests/runtests/edge/falling-starting-high/test.hal +++ b/tests/runtests/edge/falling-starting-high/test.hal @@ -25,5 +25,3 @@ setp edge.0.out-width-ns 25000 loadusr -w sh runstreamer start waitusr -i halsampler - - diff --git a/tests/runtests/edge/falling/expected b/tests/runtests/edge/falling/expected index 46c71eb6cb..a1f8aa3642 100644 --- a/tests/runtests/edge/falling/expected +++ b/tests/runtests/edge/falling/expected @@ -1,10 +1,10 @@ -0 0 1 -1 0 1 -1 0 1 -1 0 1 -0 1 0 -0 0 1 -1 0 1 -0 1 0 -0 0 1 -0 0 1 +0 0 1 +1 0 1 +1 0 1 +1 0 1 +0 1 0 +0 0 1 +1 0 1 +0 1 0 +0 0 1 +0 0 1 diff --git a/tests/runtests/edge/falling/runstreamer b/tests/runtests/edge/falling/runstreamer old mode 100644 new mode 100755 diff --git a/tests/runtests/edge/falling/test.hal b/tests/runtests/edge/falling/test.hal index 9a6c6c08f0..18661ec9dc 100644 --- a/tests/runtests/edge/falling/test.hal +++ b/tests/runtests/edge/falling/test.hal @@ -25,6 +25,3 @@ setp edge.0.out-width-ns 25000 loadusr -w sh runstreamer start waitusr -i halsampler - - - diff --git a/tests/runtests/edge/rising-starting-high/expected b/tests/runtests/edge/rising-starting-high/expected index 8be860a19e..5314187326 100644 --- a/tests/runtests/edge/rising-starting-high/expected +++ b/tests/runtests/edge/rising-starting-high/expected @@ -1,10 +1,10 @@ -1 0 1 -1 0 1 -1 0 1 -1 0 1 -0 0 1 -1 1 0 -0 0 1 -0 0 1 -0 0 1 -0 0 1 +1 0 1 +1 0 1 +1 0 1 +1 0 1 +0 0 1 +1 1 0 +0 0 1 +0 0 1 +0 0 1 +0 0 1 diff --git a/tests/runtests/edge/rising-starting-high/runstreamer b/tests/runtests/edge/rising-starting-high/runstreamer old mode 100644 new mode 100755 diff --git a/tests/runtests/edge/rising/expected b/tests/runtests/edge/rising/expected index 0d7e236108..d1705df3b0 100644 --- a/tests/runtests/edge/rising/expected +++ b/tests/runtests/edge/rising/expected @@ -1,10 +1,10 @@ -0 0 1 -1 1 0 -1 0 1 -1 0 1 -0 0 1 -1 1 0 -0 0 1 -0 0 1 -0 0 1 -0 0 1 +0 0 1 +1 1 0 +1 0 1 +1 0 1 +0 0 1 +1 1 0 +0 0 1 +0 0 1 +0 0 1 +0 0 1 diff --git a/tests/runtests/edge/rising/runstreamer b/tests/runtests/edge/rising/runstreamer old mode 100644 new mode 100755 diff --git a/tests/runtests/edge/rising/test.hal b/tests/runtests/edge/rising/test.hal index 55e92ae82b..9bdebb05f4 100644 --- a/tests/runtests/edge/rising/test.hal +++ b/tests/runtests/edge/rising/test.hal @@ -27,4 +27,3 @@ setp edge.0.out-width-ns 25000 loadusr -w sh runstreamer start waitusr -i halsampler - diff --git a/tests/runtests/flipflop.0/expected b/tests/runtests/flipflop.0/expected index 0b053a5e6e..919c0ae227 100644 --- a/tests/runtests/flipflop.0/expected +++ b/tests/runtests/flipflop.0/expected @@ -1,10 +1,10 @@ -1 -1 -0 -0 -1 -1 -0 -0 -0 -1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 diff --git a/tests/runtests/flipflop.0/runstreamer b/tests/runtests/flipflop.0/runstreamer old mode 100644 new mode 100755 diff --git a/tests/runtests/hm2-idrom/README b/tests/runtests/hm2-idrom/README index cb8007cecd..88527d9841 100644 --- a/tests/runtests/hm2-idrom/README +++ b/tests/runtests/hm2-idrom/README @@ -4,4 +4,3 @@ This is a test of the hm2_register() function in the hostmot2(9) driver. It makes a fake AnyIO board (using the hm2_test driver) with a static "register file" containing a test pattern. The fake AnyIO board is passed to hm2_register(), and let's see if it panics. - diff --git a/tests/runtests/inst_comps/expected b/tests/runtests/inst_comps/expected index 207c991492..e812710622 100644 --- a/tests/runtests/inst_comps/expected +++ b/tests/runtests/inst_comps/expected @@ -1,2 +1,2 @@ -debounce.0.funct debounce.1.funct debounce.2.funct debounce.3.funct debounce.4.funct debounce.5.funct debouncebig.funct debouncenamed.funct delinst newinst -debounce.0.0.in debounce.0.0.out debounce.0.0.state debounce.0.1.in debounce.0.1.out debounce.0.1.state debounce.0.2.in debounce.0.2.out debounce.0.2.state debounce.0.3.in debounce.0.3.out debounce.0.3.state debounce.0.4.in debounce.0.4.out debounce.0.4.state debounce.0.5.in debounce.0.5.out debounce.0.5.state debounce.0.6.in debounce.0.6.out debounce.0.6.state debounce.0.7.in debounce.0.7.out debounce.0.7.state debounce.0.delay debounce.0.funct.time debounce.0.funct.tmax debounce.0.funct.tmax-inc debounce.1.0.in debounce.1.0.out debounce.1.0.state debounce.1.1.in debounce.1.1.out debounce.1.1.state debounce.1.delay debounce.1.funct.time debounce.1.funct.tmax debounce.1.funct.tmax-inc debounce.2.0.in debounce.2.0.out debounce.2.0.state debounce.2.1.in debounce.2.1.out debounce.2.1.state debounce.2.2.in debounce.2.2.out debounce.2.2.state debounce.2.3.in debounce.2.3.out debounce.2.3.state debounce.2.4.in debounce.2.4.out debounce.2.4.state debounce.2.5.in debounce.2.5.out debounce.2.5.state debounce.2.6.in debounce.2.6.out debounce.2.6.state debounce.2.7.in debounce.2.7.out debounce.2.7.state debounce.2.delay debounce.2.funct.time debounce.2.funct.tmax debounce.2.funct.tmax-inc debounce.3.0.in debounce.3.0.out debounce.3.0.state debounce.3.1.in debounce.3.1.out debounce.3.1.state debounce.3.2.in debounce.3.2.out debounce.3.2.state debounce.3.3.in debounce.3.3.out debounce.3.3.state debounce.3.4.in debounce.3.4.out debounce.3.4.state debounce.3.5.in debounce.3.5.out debounce.3.5.state debounce.3.6.in debounce.3.6.out debounce.3.6.state debounce.3.7.in debounce.3.7.out debounce.3.7.state debounce.3.delay debounce.3.funct.time debounce.3.funct.tmax debounce.3.funct.tmax-inc debounce.4.0.in debounce.4.0.out debounce.4.0.state debounce.4.1.in debounce.4.1.out debounce.4.1.state debounce.4.2.in debounce.4.2.out debounce.4.2.state debounce.4.3.in debounce.4.3.out debounce.4.3.state debounce.4.4.in debounce.4.4.out debounce.4.4.state debounce.4.5.in debounce.4.5.out debounce.4.5.state debounce.4.6.in debounce.4.6.out debounce.4.6.state debounce.4.7.in debounce.4.7.out debounce.4.7.state debounce.4.delay debounce.4.funct.time debounce.4.funct.tmax debounce.4.funct.tmax-inc debounce.5.0.in debounce.5.0.out debounce.5.0.state debounce.5.1.in debounce.5.1.out debounce.5.1.state debounce.5.2.in debounce.5.2.out debounce.5.2.state debounce.5.3.in debounce.5.3.out debounce.5.3.state debounce.5.4.in debounce.5.4.out debounce.5.4.state debounce.5.5.in debounce.5.5.out debounce.5.5.state debounce.5.6.in debounce.5.6.out debounce.5.6.state debounce.5.7.in debounce.5.7.out debounce.5.7.state debounce.5.delay debounce.5.funct.time debounce.5.funct.tmax debounce.5.funct.tmax-inc debouncebig.0.in debouncebig.0.out debouncebig.0.state debouncebig.1.in debouncebig.1.out debouncebig.1.state debouncebig.10.in debouncebig.10.out debouncebig.10.state debouncebig.11.in debouncebig.11.out debouncebig.11.state debouncebig.12.in debouncebig.12.out debouncebig.12.state debouncebig.13.in debouncebig.13.out debouncebig.13.state debouncebig.2.in debouncebig.2.out debouncebig.2.state debouncebig.3.in debouncebig.3.out debouncebig.3.state debouncebig.4.in debouncebig.4.out debouncebig.4.state debouncebig.5.in debouncebig.5.out debouncebig.5.state debouncebig.6.in debouncebig.6.out debouncebig.6.state debouncebig.7.in debouncebig.7.out debouncebig.7.state debouncebig.8.in debouncebig.8.out debouncebig.8.state debouncebig.9.in debouncebig.9.out debouncebig.9.state debouncebig.delay debouncebig.funct.time debouncebig.funct.tmax debouncebig.funct.tmax-inc debouncenamed.0.in debouncenamed.0.out debouncenamed.0.state debouncenamed.1.in debouncenamed.1.out debouncenamed.1.state debouncenamed.2.in debouncenamed.2.out debouncenamed.2.state debouncenamed.3.in debouncenamed.3.out debouncenamed.3.state debouncenamed.4.in debouncenamed.4.out debouncenamed.4.state debouncenamed.5.in debouncenamed.5.out debouncenamed.5.state debouncenamed.6.in debouncenamed.6.out debouncenamed.6.state debouncenamed.7.in debouncenamed.7.out debouncenamed.7.state debouncenamed.delay debouncenamed.funct.time debouncenamed.funct.tmax debouncenamed.funct.tmax-inc +debounce.0.funct debounce.1.funct debounce.2.funct debounce.3.funct debounce.4.funct debounce.5.funct debouncebig.funct debouncenamed.funct delinst newinst +debounce.0.0.in debounce.0.0.out debounce.0.0.state debounce.0.1.in debounce.0.1.out debounce.0.1.state debounce.0.2.in debounce.0.2.out debounce.0.2.state debounce.0.3.in debounce.0.3.out debounce.0.3.state debounce.0.4.in debounce.0.4.out debounce.0.4.state debounce.0.5.in debounce.0.5.out debounce.0.5.state debounce.0.6.in debounce.0.6.out debounce.0.6.state debounce.0.7.in debounce.0.7.out debounce.0.7.state debounce.0.delay debounce.0.funct.time debounce.0.funct.tmax debounce.0.funct.tmax-inc debounce.1.0.in debounce.1.0.out debounce.1.0.state debounce.1.1.in debounce.1.1.out debounce.1.1.state debounce.1.delay debounce.1.funct.time debounce.1.funct.tmax debounce.1.funct.tmax-inc debounce.2.0.in debounce.2.0.out debounce.2.0.state debounce.2.1.in debounce.2.1.out debounce.2.1.state debounce.2.2.in debounce.2.2.out debounce.2.2.state debounce.2.3.in debounce.2.3.out debounce.2.3.state debounce.2.4.in debounce.2.4.out debounce.2.4.state debounce.2.5.in debounce.2.5.out debounce.2.5.state debounce.2.6.in debounce.2.6.out debounce.2.6.state debounce.2.7.in debounce.2.7.out debounce.2.7.state debounce.2.delay debounce.2.funct.time debounce.2.funct.tmax debounce.2.funct.tmax-inc debounce.3.0.in debounce.3.0.out debounce.3.0.state debounce.3.1.in debounce.3.1.out debounce.3.1.state debounce.3.2.in debounce.3.2.out debounce.3.2.state debounce.3.3.in debounce.3.3.out debounce.3.3.state debounce.3.4.in debounce.3.4.out debounce.3.4.state debounce.3.5.in debounce.3.5.out debounce.3.5.state debounce.3.6.in debounce.3.6.out debounce.3.6.state debounce.3.7.in debounce.3.7.out debounce.3.7.state debounce.3.delay debounce.3.funct.time debounce.3.funct.tmax debounce.3.funct.tmax-inc debounce.4.0.in debounce.4.0.out debounce.4.0.state debounce.4.1.in debounce.4.1.out debounce.4.1.state debounce.4.2.in debounce.4.2.out debounce.4.2.state debounce.4.3.in debounce.4.3.out debounce.4.3.state debounce.4.4.in debounce.4.4.out debounce.4.4.state debounce.4.5.in debounce.4.5.out debounce.4.5.state debounce.4.6.in debounce.4.6.out debounce.4.6.state debounce.4.7.in debounce.4.7.out debounce.4.7.state debounce.4.delay debounce.4.funct.time debounce.4.funct.tmax debounce.4.funct.tmax-inc debounce.5.0.in debounce.5.0.out debounce.5.0.state debounce.5.1.in debounce.5.1.out debounce.5.1.state debounce.5.2.in debounce.5.2.out debounce.5.2.state debounce.5.3.in debounce.5.3.out debounce.5.3.state debounce.5.4.in debounce.5.4.out debounce.5.4.state debounce.5.5.in debounce.5.5.out debounce.5.5.state debounce.5.6.in debounce.5.6.out debounce.5.6.state debounce.5.7.in debounce.5.7.out debounce.5.7.state debounce.5.delay debounce.5.funct.time debounce.5.funct.tmax debounce.5.funct.tmax-inc debouncebig.0.in debouncebig.0.out debouncebig.0.state debouncebig.1.in debouncebig.1.out debouncebig.1.state debouncebig.10.in debouncebig.10.out debouncebig.10.state debouncebig.11.in debouncebig.11.out debouncebig.11.state debouncebig.12.in debouncebig.12.out debouncebig.12.state debouncebig.13.in debouncebig.13.out debouncebig.13.state debouncebig.2.in debouncebig.2.out debouncebig.2.state debouncebig.3.in debouncebig.3.out debouncebig.3.state debouncebig.4.in debouncebig.4.out debouncebig.4.state debouncebig.5.in debouncebig.5.out debouncebig.5.state debouncebig.6.in debouncebig.6.out debouncebig.6.state debouncebig.7.in debouncebig.7.out debouncebig.7.state debouncebig.8.in debouncebig.8.out debouncebig.8.state debouncebig.9.in debouncebig.9.out debouncebig.9.state debouncebig.delay debouncebig.funct.time debouncebig.funct.tmax debouncebig.funct.tmax-inc debouncenamed.0.in debouncenamed.0.out debouncenamed.0.state debouncenamed.1.in debouncenamed.1.out debouncenamed.1.state debouncenamed.2.in debouncenamed.2.out debouncenamed.2.state debouncenamed.3.in debouncenamed.3.out debouncenamed.3.state debouncenamed.4.in debouncenamed.4.out debouncenamed.4.state debouncenamed.5.in debouncenamed.5.out debouncenamed.5.state debouncenamed.6.in debouncenamed.6.out debouncenamed.6.state debouncenamed.7.in debouncenamed.7.out debouncenamed.7.state debouncenamed.delay debouncenamed.funct.time debouncenamed.funct.tmax debouncenamed.funct.tmax-inc diff --git a/tests/runtests/limit3/limit-accel-and-max/expected b/tests/runtests/limit3/limit-accel-and-max/expected index ebda2f2fda..0016b58091 100644 --- a/tests/runtests/limit3/limit-accel-and-max/expected +++ b/tests/runtests/limit3/limit-accel-and-max/expected @@ -1,800 +1,800 @@ -0 0.001000 -1 0.003000 -2 0.006000 -3 0.010000 -4 0.015000 -5 0.021000 -6 0.028000 -7 0.036000 -8 0.045000 -9 0.055000 -10 0.066000 -11 0.078000 -12 0.091000 -13 0.105000 -14 0.120000 -15 0.136000 -16 0.153000 -17 0.171000 -18 0.190000 -19 0.210000 -20 0.231000 -21 0.253000 -22 0.276000 -23 0.300000 -24 0.325000 -25 0.351000 -26 0.378000 -27 0.406000 -28 0.435000 -29 0.465000 -30 0.496000 -31 0.528000 -32 0.561000 -33 0.595000 -34 0.630000 -35 0.666000 -36 0.703000 -37 0.741000 -38 0.780000 -39 0.820000 -40 0.861000 -41 0.903000 -42 0.946000 -43 0.990000 -44 1.035000 -45 1.081000 -46 1.128000 -47 1.176000 -48 1.225000 -49 1.275000 -50 1.326000 -51 1.378000 -52 1.431000 -53 1.485000 -54 1.540000 -55 1.596000 -56 1.653000 -57 1.711000 -58 1.770000 -59 1.830000 -60 1.891000 -61 1.953000 -62 2.016000 -63 2.080000 -64 2.145000 -65 2.211000 -66 2.278000 -67 2.346000 -68 2.415000 -69 2.485000 -70 2.556000 -71 2.628000 -72 2.701000 -73 2.775000 -74 2.850000 -75 2.926000 -76 3.003000 -77 3.081000 -78 3.160000 -79 3.240000 -80 3.321000 -81 3.403000 -82 3.486000 -83 3.570000 -84 3.655000 -85 3.741000 -86 3.828000 -87 3.916000 -88 4.005000 -89 4.095000 -90 4.186000 -91 4.278000 -92 4.371000 -93 4.465000 -94 4.560000 -95 4.656000 -96 4.753000 -97 4.851000 -98 4.950000 -99 5.050000 -100 5.151000 -101 5.253000 -102 5.356000 -103 5.460000 -104 5.565000 -105 5.671000 -106 5.778000 -107 5.886000 -108 5.995000 -109 6.105000 -110 6.216000 -111 6.328000 -112 6.441000 -113 6.555000 -114 6.670000 -115 6.786000 -116 6.903000 -117 7.021000 -118 7.140000 -119 7.260000 -120 7.381000 -121 7.503000 -122 7.626000 -123 7.750000 -124 7.875000 -125 8.001000 -126 8.128000 -127 8.256000 -128 8.385000 -129 8.515000 -130 8.646000 -131 8.778000 -132 8.911000 -133 9.045000 -134 9.180000 -135 9.316000 -136 9.453000 -137 9.591000 -138 9.730000 -139 9.870000 -140 10.011000 -141 10.153000 -142 10.296000 -143 10.440000 -144 10.585000 -145 10.731000 -146 10.878000 -147 11.026000 -148 11.175000 -149 11.325000 -150 11.476000 -151 11.628000 -152 11.781000 -153 11.935000 -154 12.090000 -155 12.246000 -156 12.403000 -157 12.561000 -158 12.720000 -159 12.880000 -160 13.041000 -161 13.203000 -162 13.366000 -163 13.530000 -164 13.695000 -165 13.861000 -166 14.028000 -167 14.196000 -168 14.365000 -169 14.535000 -170 14.706000 -171 14.878000 -172 15.051000 -173 15.225000 -174 15.400000 -175 15.576000 -176 15.753000 -177 15.931000 -178 16.110000 -179 16.290000 -180 16.471000 -181 16.653000 -182 16.836000 -183 17.020000 -184 17.205000 -185 17.391000 -186 17.578000 -187 17.766000 -188 17.955000 -189 18.145000 -190 18.336000 -191 18.528000 -192 18.721000 -193 18.915000 -194 19.110000 -195 19.306000 -196 19.503000 -197 19.701000 -198 19.900000 -199 20.100000 -200 20.301000 -201 20.503000 -202 20.706000 -203 20.910000 -204 21.115000 -205 21.321000 -206 21.528000 -207 21.736000 -208 21.945000 -209 22.155000 -210 22.366000 -211 22.578000 -212 22.791000 -213 23.005000 -214 23.220000 -215 23.436000 -216 23.653000 -217 23.871000 -218 24.090000 -219 24.310000 -220 24.531000 -221 24.753000 -222 24.976000 -223 25.200000 -224 25.425000 -225 25.651000 -226 25.878000 -227 26.106000 -228 26.335000 -229 26.565000 -230 26.796000 -231 27.028000 -232 27.261000 -233 27.495000 -234 27.730000 -235 27.966000 -236 28.203000 -237 28.441000 -238 28.680000 -239 28.920000 -240 29.161000 -241 29.403000 -242 29.646000 -243 29.890000 -244 30.135000 -245 30.381000 -246 30.628000 -247 30.876000 -248 31.125000 -249 31.375000 -250 31.626000 -251 31.878000 -252 32.131000 -253 32.385000 -254 32.640000 -255 32.896000 -256 33.153000 -257 33.411000 -258 33.670000 -259 33.930000 -260 34.191000 -261 34.453000 -262 34.716000 -263 34.980000 -264 35.245000 -265 35.511000 -266 35.778000 -267 36.046000 -268 36.315000 -269 36.585000 -270 36.856000 -271 37.128000 -272 37.401000 -273 37.675000 -274 37.950000 -275 38.226000 -276 38.503000 -277 38.781000 -278 39.060000 -279 39.340000 -280 39.621000 -281 39.903000 -282 40.186000 -283 40.470000 -284 40.755000 -285 41.041000 -286 41.328000 -287 41.616000 -288 41.905000 -289 42.195000 -290 42.486000 -291 42.778000 -292 43.071000 -293 43.365000 -294 43.660000 -295 43.956000 -296 44.253000 -297 44.551000 -298 44.850000 -299 45.150000 -300 45.451000 -301 45.753000 -302 46.056000 -303 46.360000 -304 46.665000 -305 46.971000 -306 47.278000 -307 47.586000 -308 47.895000 -309 48.205000 -310 48.516000 -311 48.828000 -312 49.141000 -313 49.455000 -314 49.770000 -315 50.086000 -316 50.403000 -317 50.721000 -318 51.040000 -319 51.360000 -320 51.681000 -321 52.003000 -322 52.326000 -323 52.650000 -324 52.975000 -325 53.301000 -326 53.628000 -327 53.956000 -328 54.285000 -329 54.615000 -330 54.946000 -331 55.278000 -332 55.611000 -333 55.945000 -334 56.280000 -335 56.616000 -336 56.953000 -337 57.291000 -338 57.630000 -339 57.970000 -340 58.311000 -341 58.653000 -342 58.996000 -343 59.340000 -344 59.685000 -345 60.031000 -346 60.378000 -347 60.726000 -348 61.075000 -349 61.425000 -350 61.776000 -351 62.128000 -352 62.481000 -353 62.835000 -354 63.190000 -355 63.546000 -356 63.903000 -357 64.261000 -358 64.620000 -359 64.980000 -360 65.341000 -361 65.703000 -362 66.066000 -363 66.430000 -364 66.795000 -365 67.161000 -366 67.528000 -367 67.896000 -368 68.265000 -369 68.635000 -370 69.006000 -371 69.378000 -372 69.751000 -373 70.125000 -374 70.500000 -375 70.876000 -376 71.253000 -377 71.631000 -378 72.010000 -379 72.390000 -380 72.771000 -381 73.153000 -382 73.536000 -383 73.920000 -384 74.305000 -385 74.691000 -386 75.078000 -387 75.466000 -388 75.855000 -389 76.245000 -390 76.636000 -391 77.028000 -392 77.421000 -393 77.815000 -394 78.210000 -395 78.606000 -396 79.003000 -397 79.401000 -398 79.800000 -399 80.200000 -400 80.599000 -401 80.997000 -402 81.394000 -403 81.790000 -404 82.185000 -405 82.579000 -406 82.972000 -407 83.364000 -408 83.755000 -409 84.145000 -410 84.534000 -411 84.922000 -412 85.309000 -413 85.695000 -414 86.080000 -415 86.464000 -416 86.847000 -417 87.229000 -418 87.610000 -419 87.990000 -420 88.369000 -421 88.747000 -422 89.124000 -423 89.500000 -424 89.875000 -425 90.249000 -426 90.622000 -427 90.994000 -428 91.365000 -429 91.735000 -430 92.104000 -431 92.472000 -432 92.839000 -433 93.205000 -434 93.570000 -435 93.934000 -436 94.297000 -437 94.659000 -438 95.020000 -439 95.380000 -440 95.739000 -441 96.097000 -442 96.454000 -443 96.810000 -444 97.165000 -445 97.519000 -446 97.872000 -447 98.224000 -448 98.575000 -449 98.925000 -450 99.274000 -451 99.622000 -452 99.969000 -453 100.315000 -454 100.660000 -455 101.004000 -456 101.347000 -457 101.689000 -458 102.030000 -459 102.370000 -460 102.709000 -461 103.047000 -462 103.384000 -463 103.720000 -464 104.055000 -465 104.389000 -466 104.722000 -467 105.054000 -468 105.385000 -469 105.715000 -470 106.044000 -471 106.372000 -472 106.699000 -473 107.025000 -474 107.350000 -475 107.674000 -476 107.997000 -477 108.319000 -478 108.640000 -479 108.960000 -480 109.279000 -481 109.597000 -482 109.914000 -483 110.230000 -484 110.545000 -485 110.859000 -486 111.172000 -487 111.484000 -488 111.795000 -489 112.105000 -490 112.414000 -491 112.722000 -492 113.029000 -493 113.335000 -494 113.640000 -495 113.944000 -496 114.247000 -497 114.549000 -498 114.850000 -499 115.150000 -500 115.449000 -501 115.747000 -502 116.044000 -503 116.340000 -504 116.635000 -505 116.929000 -506 117.222000 -507 117.514000 -508 117.805000 -509 118.095000 -510 118.384000 -511 118.672000 -512 118.959000 -513 119.245000 -514 119.530000 -515 119.814000 -516 120.097000 -517 120.379000 -518 120.660000 -519 120.940000 -520 121.219000 -521 121.497000 -522 121.774000 -523 122.050000 -524 122.325000 -525 122.599000 -526 122.872000 -527 123.144000 -528 123.415000 -529 123.685000 -530 123.954000 -531 124.222000 -532 124.489000 -533 124.755000 -534 125.020000 -535 125.284000 -536 125.547000 -537 125.809000 -538 126.070000 -539 126.330000 -540 126.589000 -541 126.847000 -542 127.104000 -543 127.360000 -544 127.615000 -545 127.869000 -546 128.122000 -547 128.374000 -548 128.625000 -549 128.875000 -550 129.124000 -551 129.372000 -552 129.619000 -553 129.865000 -554 130.110000 -555 130.354000 -556 130.597000 -557 130.839000 -558 131.080000 -559 131.320000 -560 131.559000 -561 131.797000 -562 132.034000 -563 132.270000 -564 132.505000 -565 132.739000 -566 132.972000 -567 133.204000 -568 133.435000 -569 133.665000 -570 133.894000 -571 134.122000 -572 134.349000 -573 134.575000 -574 134.800000 -575 135.024000 -576 135.247000 -577 135.469000 -578 135.690000 -579 135.910000 -580 136.129000 -581 136.347000 -582 136.564000 -583 136.780000 -584 136.995000 -585 137.209000 -586 137.422000 -587 137.634000 -588 137.845000 -589 138.055000 -590 138.264000 -591 138.472000 -592 138.679000 -593 138.885000 -594 139.090000 -595 139.294000 -596 139.497000 -597 139.699000 -598 139.900000 -599 140.100000 -600 140.299000 -601 140.497000 -602 140.694000 -603 140.890000 -604 141.085000 -605 141.279000 -606 141.472000 -607 141.664000 -608 141.855000 -609 142.045000 -610 142.234000 -611 142.422000 -612 142.609000 -613 142.795000 -614 142.980000 -615 143.164000 -616 143.347000 -617 143.529000 -618 143.710000 -619 143.890000 -620 144.069000 -621 144.247000 -622 144.424000 -623 144.600000 -624 144.775000 -625 144.949000 -626 145.122000 -627 145.294000 -628 145.465000 -629 145.635000 -630 145.804000 -631 145.972000 -632 146.139000 -633 146.305000 -634 146.470000 -635 146.634000 -636 146.797000 -637 146.959000 -638 147.120000 -639 147.280000 -640 147.439000 -641 147.597000 -642 147.754000 -643 147.910000 -644 148.065000 -645 148.219000 -646 148.372000 -647 148.524000 -648 148.675000 -649 148.825000 -650 148.974000 -651 149.122000 -652 149.269000 -653 149.415000 -654 149.560000 -655 149.704000 -656 149.847000 -657 149.989000 -658 150.130000 -659 150.270000 -660 150.409000 -661 150.547000 -662 150.684000 -663 150.820000 -664 150.955000 -665 151.089000 -666 151.222000 -667 151.354000 -668 151.485000 -669 151.615000 -670 151.744000 -671 151.872000 -672 151.999000 -673 152.125000 -674 152.250000 -675 152.374000 -676 152.497000 -677 152.619000 -678 152.740000 -679 152.860000 -680 152.979000 -681 153.097000 -682 153.214000 -683 153.330000 -684 153.445000 -685 153.559000 -686 153.672000 -687 153.784000 -688 153.895000 -689 154.005000 -690 154.114000 -691 154.222000 -692 154.329000 -693 154.435000 -694 154.540000 -695 154.644000 -696 154.747000 -697 154.849000 -698 154.950000 -699 155.050000 -700 155.149000 -701 155.247000 -702 155.344000 -703 155.440000 -704 155.535000 -705 155.629000 -706 155.722000 -707 155.814000 -708 155.905000 -709 155.995000 -710 156.084000 -711 156.172000 -712 156.259000 -713 156.345000 -714 156.430000 -715 156.514000 -716 156.597000 -717 156.679000 -718 156.760000 -719 156.840000 -720 156.919000 -721 156.997000 -722 157.074000 -723 157.150000 -724 157.225000 -725 157.299000 -726 157.372000 -727 157.444000 -728 157.515000 -729 157.585000 -730 157.654000 -731 157.722000 -732 157.789000 -733 157.855000 -734 157.920000 -735 157.984000 -736 158.047000 -737 158.109000 -738 158.170000 -739 158.230000 -740 158.289000 -741 158.347000 -742 158.404000 -743 158.460000 -744 158.515000 -745 158.569000 -746 158.622000 -747 158.674000 -748 158.725000 -749 158.775000 -750 158.824000 -751 158.872000 -752 158.919000 -753 158.965000 -754 159.010000 -755 159.054000 -756 159.097000 -757 159.139000 -758 159.180000 -759 159.220000 -760 159.259000 -761 159.297000 -762 159.334000 -763 159.370000 -764 159.405000 -765 159.439000 -766 159.472000 -767 159.504000 -768 159.535000 -769 159.565000 -770 159.594000 -771 159.622000 -772 159.649000 -773 159.675000 -774 159.700000 -775 159.724000 -776 159.747000 -777 159.769000 -778 159.790000 -779 159.810000 -780 159.829000 -781 159.847000 -782 159.864000 -783 159.880000 -784 159.895000 -785 159.909000 -786 159.922000 -787 159.934000 -788 159.945000 -789 159.955000 -790 159.964000 -791 159.972000 -792 159.979000 -793 159.985000 -794 159.990000 -795 159.994000 -796 159.997000 -797 159.999000 -798 160.000000 -799 160.000000 +0 0.001000 +1 0.003000 +2 0.006000 +3 0.010000 +4 0.015000 +5 0.021000 +6 0.028000 +7 0.036000 +8 0.045000 +9 0.055000 +10 0.066000 +11 0.078000 +12 0.091000 +13 0.105000 +14 0.120000 +15 0.136000 +16 0.153000 +17 0.171000 +18 0.190000 +19 0.210000 +20 0.231000 +21 0.253000 +22 0.276000 +23 0.300000 +24 0.325000 +25 0.351000 +26 0.378000 +27 0.406000 +28 0.435000 +29 0.465000 +30 0.496000 +31 0.528000 +32 0.561000 +33 0.595000 +34 0.630000 +35 0.666000 +36 0.703000 +37 0.741000 +38 0.780000 +39 0.820000 +40 0.861000 +41 0.903000 +42 0.946000 +43 0.990000 +44 1.035000 +45 1.081000 +46 1.128000 +47 1.176000 +48 1.225000 +49 1.275000 +50 1.326000 +51 1.378000 +52 1.431000 +53 1.485000 +54 1.540000 +55 1.596000 +56 1.653000 +57 1.711000 +58 1.770000 +59 1.830000 +60 1.891000 +61 1.953000 +62 2.016000 +63 2.080000 +64 2.145000 +65 2.211000 +66 2.278000 +67 2.346000 +68 2.415000 +69 2.485000 +70 2.556000 +71 2.628000 +72 2.701000 +73 2.775000 +74 2.850000 +75 2.926000 +76 3.003000 +77 3.081000 +78 3.160000 +79 3.240000 +80 3.321000 +81 3.403000 +82 3.486000 +83 3.570000 +84 3.655000 +85 3.741000 +86 3.828000 +87 3.916000 +88 4.005000 +89 4.095000 +90 4.186000 +91 4.278000 +92 4.371000 +93 4.465000 +94 4.560000 +95 4.656000 +96 4.753000 +97 4.851000 +98 4.950000 +99 5.050000 +100 5.151000 +101 5.253000 +102 5.356000 +103 5.460000 +104 5.565000 +105 5.671000 +106 5.778000 +107 5.886000 +108 5.995000 +109 6.105000 +110 6.216000 +111 6.328000 +112 6.441000 +113 6.555000 +114 6.670000 +115 6.786000 +116 6.903000 +117 7.021000 +118 7.140000 +119 7.260000 +120 7.381000 +121 7.503000 +122 7.626000 +123 7.750000 +124 7.875000 +125 8.001000 +126 8.128000 +127 8.256000 +128 8.385000 +129 8.515000 +130 8.646000 +131 8.778000 +132 8.911000 +133 9.045000 +134 9.180000 +135 9.316000 +136 9.453000 +137 9.591000 +138 9.730000 +139 9.870000 +140 10.011000 +141 10.153000 +142 10.296000 +143 10.440000 +144 10.585000 +145 10.731000 +146 10.878000 +147 11.026000 +148 11.175000 +149 11.325000 +150 11.476000 +151 11.628000 +152 11.781000 +153 11.935000 +154 12.090000 +155 12.246000 +156 12.403000 +157 12.561000 +158 12.720000 +159 12.880000 +160 13.041000 +161 13.203000 +162 13.366000 +163 13.530000 +164 13.695000 +165 13.861000 +166 14.028000 +167 14.196000 +168 14.365000 +169 14.535000 +170 14.706000 +171 14.878000 +172 15.051000 +173 15.225000 +174 15.400000 +175 15.576000 +176 15.753000 +177 15.931000 +178 16.110000 +179 16.290000 +180 16.471000 +181 16.653000 +182 16.836000 +183 17.020000 +184 17.205000 +185 17.391000 +186 17.578000 +187 17.766000 +188 17.955000 +189 18.145000 +190 18.336000 +191 18.528000 +192 18.721000 +193 18.915000 +194 19.110000 +195 19.306000 +196 19.503000 +197 19.701000 +198 19.900000 +199 20.100000 +200 20.301000 +201 20.503000 +202 20.706000 +203 20.910000 +204 21.115000 +205 21.321000 +206 21.528000 +207 21.736000 +208 21.945000 +209 22.155000 +210 22.366000 +211 22.578000 +212 22.791000 +213 23.005000 +214 23.220000 +215 23.436000 +216 23.653000 +217 23.871000 +218 24.090000 +219 24.310000 +220 24.531000 +221 24.753000 +222 24.976000 +223 25.200000 +224 25.425000 +225 25.651000 +226 25.878000 +227 26.106000 +228 26.335000 +229 26.565000 +230 26.796000 +231 27.028000 +232 27.261000 +233 27.495000 +234 27.730000 +235 27.966000 +236 28.203000 +237 28.441000 +238 28.680000 +239 28.920000 +240 29.161000 +241 29.403000 +242 29.646000 +243 29.890000 +244 30.135000 +245 30.381000 +246 30.628000 +247 30.876000 +248 31.125000 +249 31.375000 +250 31.626000 +251 31.878000 +252 32.131000 +253 32.385000 +254 32.640000 +255 32.896000 +256 33.153000 +257 33.411000 +258 33.670000 +259 33.930000 +260 34.191000 +261 34.453000 +262 34.716000 +263 34.980000 +264 35.245000 +265 35.511000 +266 35.778000 +267 36.046000 +268 36.315000 +269 36.585000 +270 36.856000 +271 37.128000 +272 37.401000 +273 37.675000 +274 37.950000 +275 38.226000 +276 38.503000 +277 38.781000 +278 39.060000 +279 39.340000 +280 39.621000 +281 39.903000 +282 40.186000 +283 40.470000 +284 40.755000 +285 41.041000 +286 41.328000 +287 41.616000 +288 41.905000 +289 42.195000 +290 42.486000 +291 42.778000 +292 43.071000 +293 43.365000 +294 43.660000 +295 43.956000 +296 44.253000 +297 44.551000 +298 44.850000 +299 45.150000 +300 45.451000 +301 45.753000 +302 46.056000 +303 46.360000 +304 46.665000 +305 46.971000 +306 47.278000 +307 47.586000 +308 47.895000 +309 48.205000 +310 48.516000 +311 48.828000 +312 49.141000 +313 49.455000 +314 49.770000 +315 50.086000 +316 50.403000 +317 50.721000 +318 51.040000 +319 51.360000 +320 51.681000 +321 52.003000 +322 52.326000 +323 52.650000 +324 52.975000 +325 53.301000 +326 53.628000 +327 53.956000 +328 54.285000 +329 54.615000 +330 54.946000 +331 55.278000 +332 55.611000 +333 55.945000 +334 56.280000 +335 56.616000 +336 56.953000 +337 57.291000 +338 57.630000 +339 57.970000 +340 58.311000 +341 58.653000 +342 58.996000 +343 59.340000 +344 59.685000 +345 60.031000 +346 60.378000 +347 60.726000 +348 61.075000 +349 61.425000 +350 61.776000 +351 62.128000 +352 62.481000 +353 62.835000 +354 63.190000 +355 63.546000 +356 63.903000 +357 64.261000 +358 64.620000 +359 64.980000 +360 65.341000 +361 65.703000 +362 66.066000 +363 66.430000 +364 66.795000 +365 67.161000 +366 67.528000 +367 67.896000 +368 68.265000 +369 68.635000 +370 69.006000 +371 69.378000 +372 69.751000 +373 70.125000 +374 70.500000 +375 70.876000 +376 71.253000 +377 71.631000 +378 72.010000 +379 72.390000 +380 72.771000 +381 73.153000 +382 73.536000 +383 73.920000 +384 74.305000 +385 74.691000 +386 75.078000 +387 75.466000 +388 75.855000 +389 76.245000 +390 76.636000 +391 77.028000 +392 77.421000 +393 77.815000 +394 78.210000 +395 78.606000 +396 79.003000 +397 79.401000 +398 79.800000 +399 80.200000 +400 80.599000 +401 80.997000 +402 81.394000 +403 81.790000 +404 82.185000 +405 82.579000 +406 82.972000 +407 83.364000 +408 83.755000 +409 84.145000 +410 84.534000 +411 84.922000 +412 85.309000 +413 85.695000 +414 86.080000 +415 86.464000 +416 86.847000 +417 87.229000 +418 87.610000 +419 87.990000 +420 88.369000 +421 88.747000 +422 89.124000 +423 89.500000 +424 89.875000 +425 90.249000 +426 90.622000 +427 90.994000 +428 91.365000 +429 91.735000 +430 92.104000 +431 92.472000 +432 92.839000 +433 93.205000 +434 93.570000 +435 93.934000 +436 94.297000 +437 94.659000 +438 95.020000 +439 95.380000 +440 95.739000 +441 96.097000 +442 96.454000 +443 96.810000 +444 97.165000 +445 97.519000 +446 97.872000 +447 98.224000 +448 98.575000 +449 98.925000 +450 99.274000 +451 99.622000 +452 99.969000 +453 100.315000 +454 100.660000 +455 101.004000 +456 101.347000 +457 101.689000 +458 102.030000 +459 102.370000 +460 102.709000 +461 103.047000 +462 103.384000 +463 103.720000 +464 104.055000 +465 104.389000 +466 104.722000 +467 105.054000 +468 105.385000 +469 105.715000 +470 106.044000 +471 106.372000 +472 106.699000 +473 107.025000 +474 107.350000 +475 107.674000 +476 107.997000 +477 108.319000 +478 108.640000 +479 108.960000 +480 109.279000 +481 109.597000 +482 109.914000 +483 110.230000 +484 110.545000 +485 110.859000 +486 111.172000 +487 111.484000 +488 111.795000 +489 112.105000 +490 112.414000 +491 112.722000 +492 113.029000 +493 113.335000 +494 113.640000 +495 113.944000 +496 114.247000 +497 114.549000 +498 114.850000 +499 115.150000 +500 115.449000 +501 115.747000 +502 116.044000 +503 116.340000 +504 116.635000 +505 116.929000 +506 117.222000 +507 117.514000 +508 117.805000 +509 118.095000 +510 118.384000 +511 118.672000 +512 118.959000 +513 119.245000 +514 119.530000 +515 119.814000 +516 120.097000 +517 120.379000 +518 120.660000 +519 120.940000 +520 121.219000 +521 121.497000 +522 121.774000 +523 122.050000 +524 122.325000 +525 122.599000 +526 122.872000 +527 123.144000 +528 123.415000 +529 123.685000 +530 123.954000 +531 124.222000 +532 124.489000 +533 124.755000 +534 125.020000 +535 125.284000 +536 125.547000 +537 125.809000 +538 126.070000 +539 126.330000 +540 126.589000 +541 126.847000 +542 127.104000 +543 127.360000 +544 127.615000 +545 127.869000 +546 128.122000 +547 128.374000 +548 128.625000 +549 128.875000 +550 129.124000 +551 129.372000 +552 129.619000 +553 129.865000 +554 130.110000 +555 130.354000 +556 130.597000 +557 130.839000 +558 131.080000 +559 131.320000 +560 131.559000 +561 131.797000 +562 132.034000 +563 132.270000 +564 132.505000 +565 132.739000 +566 132.972000 +567 133.204000 +568 133.435000 +569 133.665000 +570 133.894000 +571 134.122000 +572 134.349000 +573 134.575000 +574 134.800000 +575 135.024000 +576 135.247000 +577 135.469000 +578 135.690000 +579 135.910000 +580 136.129000 +581 136.347000 +582 136.564000 +583 136.780000 +584 136.995000 +585 137.209000 +586 137.422000 +587 137.634000 +588 137.845000 +589 138.055000 +590 138.264000 +591 138.472000 +592 138.679000 +593 138.885000 +594 139.090000 +595 139.294000 +596 139.497000 +597 139.699000 +598 139.900000 +599 140.100000 +600 140.299000 +601 140.497000 +602 140.694000 +603 140.890000 +604 141.085000 +605 141.279000 +606 141.472000 +607 141.664000 +608 141.855000 +609 142.045000 +610 142.234000 +611 142.422000 +612 142.609000 +613 142.795000 +614 142.980000 +615 143.164000 +616 143.347000 +617 143.529000 +618 143.710000 +619 143.890000 +620 144.069000 +621 144.247000 +622 144.424000 +623 144.600000 +624 144.775000 +625 144.949000 +626 145.122000 +627 145.294000 +628 145.465000 +629 145.635000 +630 145.804000 +631 145.972000 +632 146.139000 +633 146.305000 +634 146.470000 +635 146.634000 +636 146.797000 +637 146.959000 +638 147.120000 +639 147.280000 +640 147.439000 +641 147.597000 +642 147.754000 +643 147.910000 +644 148.065000 +645 148.219000 +646 148.372000 +647 148.524000 +648 148.675000 +649 148.825000 +650 148.974000 +651 149.122000 +652 149.269000 +653 149.415000 +654 149.560000 +655 149.704000 +656 149.847000 +657 149.989000 +658 150.130000 +659 150.270000 +660 150.409000 +661 150.547000 +662 150.684000 +663 150.820000 +664 150.955000 +665 151.089000 +666 151.222000 +667 151.354000 +668 151.485000 +669 151.615000 +670 151.744000 +671 151.872000 +672 151.999000 +673 152.125000 +674 152.250000 +675 152.374000 +676 152.497000 +677 152.619000 +678 152.740000 +679 152.860000 +680 152.979000 +681 153.097000 +682 153.214000 +683 153.330000 +684 153.445000 +685 153.559000 +686 153.672000 +687 153.784000 +688 153.895000 +689 154.005000 +690 154.114000 +691 154.222000 +692 154.329000 +693 154.435000 +694 154.540000 +695 154.644000 +696 154.747000 +697 154.849000 +698 154.950000 +699 155.050000 +700 155.149000 +701 155.247000 +702 155.344000 +703 155.440000 +704 155.535000 +705 155.629000 +706 155.722000 +707 155.814000 +708 155.905000 +709 155.995000 +710 156.084000 +711 156.172000 +712 156.259000 +713 156.345000 +714 156.430000 +715 156.514000 +716 156.597000 +717 156.679000 +718 156.760000 +719 156.840000 +720 156.919000 +721 156.997000 +722 157.074000 +723 157.150000 +724 157.225000 +725 157.299000 +726 157.372000 +727 157.444000 +728 157.515000 +729 157.585000 +730 157.654000 +731 157.722000 +732 157.789000 +733 157.855000 +734 157.920000 +735 157.984000 +736 158.047000 +737 158.109000 +738 158.170000 +739 158.230000 +740 158.289000 +741 158.347000 +742 158.404000 +743 158.460000 +744 158.515000 +745 158.569000 +746 158.622000 +747 158.674000 +748 158.725000 +749 158.775000 +750 158.824000 +751 158.872000 +752 158.919000 +753 158.965000 +754 159.010000 +755 159.054000 +756 159.097000 +757 159.139000 +758 159.180000 +759 159.220000 +760 159.259000 +761 159.297000 +762 159.334000 +763 159.370000 +764 159.405000 +765 159.439000 +766 159.472000 +767 159.504000 +768 159.535000 +769 159.565000 +770 159.594000 +771 159.622000 +772 159.649000 +773 159.675000 +774 159.700000 +775 159.724000 +776 159.747000 +777 159.769000 +778 159.790000 +779 159.810000 +780 159.829000 +781 159.847000 +782 159.864000 +783 159.880000 +784 159.895000 +785 159.909000 +786 159.922000 +787 159.934000 +788 159.945000 +789 159.955000 +790 159.964000 +791 159.972000 +792 159.979000 +793 159.985000 +794 159.990000 +795 159.994000 +796 159.997000 +797 159.999000 +798 160.000000 +799 160.000000 diff --git a/tests/runtests/limit3/limit-max-velocity/expected b/tests/runtests/limit3/limit-max-velocity/expected index 972d58c1e2..83b98e344c 100644 --- a/tests/runtests/limit3/limit-max-velocity/expected +++ b/tests/runtests/limit3/limit-max-velocity/expected @@ -1,800 +1,800 @@ -0 0.500000 -1 1.000000 -2 1.500000 -3 2.000000 -4 2.500000 -5 3.000000 -6 3.500000 -7 4.000000 -8 4.500000 -9 5.000000 -10 5.500000 -11 6.000000 -12 6.500000 -13 7.000000 -14 7.500000 -15 8.000000 -16 8.500000 -17 9.000000 -18 9.500000 -19 10.000000 -20 10.500000 -21 11.000000 -22 11.500000 -23 12.000000 -24 12.500000 -25 13.000000 -26 13.500000 -27 14.000000 -28 14.500000 -29 15.000000 -30 15.500000 -31 16.000000 -32 16.500000 -33 17.000000 -34 17.500000 -35 18.000000 -36 18.500000 -37 19.000000 -38 19.500000 -39 20.000000 -40 20.500000 -41 21.000000 -42 21.500000 -43 22.000000 -44 22.500000 -45 23.000000 -46 23.500000 -47 24.000000 -48 24.500000 -49 25.000000 -50 25.500000 -51 26.000000 -52 26.500000 -53 27.000000 -54 27.500000 -55 28.000000 -56 28.500000 -57 29.000000 -58 29.500000 -59 30.000000 -60 30.500000 -61 31.000000 -62 31.500000 -63 32.000000 -64 32.500000 -65 33.000000 -66 33.500000 -67 34.000000 -68 34.500000 -69 35.000000 -70 35.500000 -71 36.000000 -72 36.500000 -73 37.000000 -74 37.500000 -75 38.000000 -76 38.500000 -77 39.000000 -78 39.500000 -79 40.000000 -80 40.500000 -81 41.000000 -82 41.500000 -83 42.000000 -84 42.500000 -85 43.000000 -86 43.500000 -87 44.000000 -88 44.500000 -89 45.000000 -90 45.500000 -91 46.000000 -92 46.500000 -93 47.000000 -94 47.500000 -95 48.000000 -96 48.500000 -97 49.000000 -98 49.500000 -99 50.000000 -100 50.500000 -101 51.000000 -102 51.500000 -103 52.000000 -104 52.500000 -105 53.000000 -106 53.500000 -107 54.000000 -108 54.500000 -109 55.000000 -110 55.500000 -111 56.000000 -112 56.500000 -113 57.000000 -114 57.500000 -115 58.000000 -116 58.500000 -117 59.000000 -118 59.500000 -119 60.000000 -120 60.500000 -121 61.000000 -122 61.500000 -123 62.000000 -124 62.500000 -125 63.000000 -126 63.500000 -127 64.000000 -128 64.500000 -129 65.000000 -130 65.500000 -131 66.000000 -132 66.500000 -133 67.000000 -134 67.500000 -135 68.000000 -136 68.500000 -137 69.000000 -138 69.500000 -139 70.000000 -140 70.500000 -141 71.000000 -142 71.500000 -143 72.000000 -144 72.500000 -145 73.000000 -146 73.500000 -147 74.000000 -148 74.500000 -149 75.000000 -150 75.500000 -151 76.000000 -152 76.500000 -153 77.000000 -154 77.500000 -155 78.000000 -156 78.500000 -157 79.000000 -158 79.500000 -159 80.000000 -160 80.500000 -161 81.000000 -162 81.500000 -163 82.000000 -164 82.500000 -165 83.000000 -166 83.500000 -167 84.000000 -168 84.500000 -169 85.000000 -170 85.500000 -171 86.000000 -172 86.500000 -173 87.000000 -174 87.500000 -175 88.000000 -176 88.500000 -177 89.000000 -178 89.500000 -179 90.000000 -180 90.500000 -181 91.000000 -182 91.500000 -183 92.000000 -184 92.500000 -185 93.000000 -186 93.500000 -187 94.000000 -188 94.500000 -189 95.000000 -190 95.500000 -191 96.000000 -192 96.500000 -193 97.000000 -194 97.500000 -195 98.000000 -196 98.500000 -197 99.000000 -198 99.500000 -199 100.000000 -200 100.500000 -201 101.000000 -202 101.500000 -203 102.000000 -204 102.500000 -205 103.000000 -206 103.500000 -207 104.000000 -208 104.500000 -209 105.000000 -210 105.500000 -211 106.000000 -212 106.500000 -213 107.000000 -214 107.500000 -215 108.000000 -216 108.500000 -217 109.000000 -218 109.500000 -219 110.000000 -220 110.500000 -221 111.000000 -222 111.500000 -223 112.000000 -224 112.500000 -225 113.000000 -226 113.500000 -227 114.000000 -228 114.500000 -229 115.000000 -230 115.500000 -231 116.000000 -232 116.500000 -233 117.000000 -234 117.500000 -235 118.000000 -236 118.500000 -237 119.000000 -238 119.500000 -239 120.000000 -240 120.500000 -241 121.000000 -242 121.500000 -243 122.000000 -244 122.500000 -245 123.000000 -246 123.500000 -247 124.000000 -248 124.500000 -249 125.000000 -250 125.500000 -251 126.000000 -252 126.500000 -253 127.000000 -254 127.500000 -255 128.000000 -256 128.500000 -257 129.000000 -258 129.500000 -259 130.000000 -260 130.500000 -261 131.000000 -262 131.500000 -263 132.000000 -264 132.500000 -265 133.000000 -266 133.500000 -267 134.000000 -268 134.500000 -269 135.000000 -270 135.500000 -271 136.000000 -272 136.500000 -273 137.000000 -274 137.500000 -275 138.000000 -276 138.500000 -277 139.000000 -278 139.500000 -279 140.000000 -280 140.500000 -281 141.000000 -282 141.500000 -283 142.000000 -284 142.500000 -285 143.000000 -286 143.500000 -287 144.000000 -288 144.500000 -289 145.000000 -290 145.500000 -291 146.000000 -292 146.500000 -293 147.000000 -294 147.500000 -295 148.000000 -296 148.500000 -297 149.000000 -298 149.500000 -299 150.000000 -300 150.500000 -301 151.000000 -302 151.500000 -303 152.000000 -304 152.500000 -305 153.000000 -306 153.500000 -307 154.000000 -308 154.500000 -309 155.000000 -310 155.500000 -311 156.000000 -312 156.500000 -313 157.000000 -314 157.500000 -315 158.000000 -316 158.500000 -317 159.000000 -318 159.500000 -319 160.000000 -320 160.500000 -321 161.000000 -322 161.500000 -323 162.000000 -324 162.500000 -325 163.000000 -326 163.500000 -327 164.000000 -328 164.500000 -329 165.000000 -330 165.500000 -331 166.000000 -332 166.500000 -333 167.000000 -334 167.500000 -335 168.000000 -336 168.500000 -337 169.000000 -338 169.500000 -339 170.000000 -340 170.500000 -341 171.000000 -342 171.500000 -343 172.000000 -344 172.500000 -345 173.000000 -346 173.500000 -347 174.000000 -348 174.500000 -349 175.000000 -350 175.500000 -351 176.000000 -352 176.500000 -353 177.000000 -354 177.500000 -355 178.000000 -356 178.500000 -357 179.000000 -358 179.500000 -359 180.000000 -360 180.500000 -361 181.000000 -362 181.500000 -363 182.000000 -364 182.500000 -365 183.000000 -366 183.500000 -367 184.000000 -368 184.500000 -369 185.000000 -370 185.500000 -371 186.000000 -372 186.500000 -373 187.000000 -374 187.500000 -375 188.000000 -376 188.500000 -377 189.000000 -378 189.500000 -379 190.000000 -380 190.500000 -381 191.000000 -382 191.500000 -383 192.000000 -384 192.500000 -385 193.000000 -386 193.500000 -387 194.000000 -388 194.500000 -389 195.000000 -390 195.500000 -391 196.000000 -392 196.500000 -393 197.000000 -394 197.500000 -395 198.000000 -396 198.500000 -397 199.000000 -398 199.500000 -399 200.000000 -400 200.500000 -401 201.000000 -402 201.500000 -403 202.000000 -404 202.500000 -405 203.000000 -406 203.500000 -407 204.000000 -408 204.500000 -409 205.000000 -410 205.500000 -411 206.000000 -412 206.500000 -413 207.000000 -414 207.500000 -415 208.000000 -416 208.500000 -417 209.000000 -418 209.500000 -419 210.000000 -420 210.500000 -421 211.000000 -422 211.500000 -423 212.000000 -424 212.500000 -425 213.000000 -426 213.500000 -427 214.000000 -428 214.500000 -429 215.000000 -430 215.500000 -431 216.000000 -432 216.500000 -433 217.000000 -434 217.500000 -435 218.000000 -436 218.500000 -437 219.000000 -438 219.500000 -439 220.000000 -440 220.500000 -441 221.000000 -442 221.500000 -443 222.000000 -444 222.500000 -445 223.000000 -446 223.500000 -447 224.000000 -448 224.500000 -449 225.000000 -450 225.500000 -451 226.000000 -452 226.500000 -453 227.000000 -454 227.500000 -455 228.000000 -456 228.500000 -457 229.000000 -458 229.500000 -459 230.000000 -460 230.500000 -461 231.000000 -462 231.500000 -463 232.000000 -464 232.500000 -465 233.000000 -466 233.500000 -467 234.000000 -468 234.500000 -469 235.000000 -470 235.500000 -471 236.000000 -472 236.500000 -473 237.000000 -474 237.500000 -475 238.000000 -476 238.500000 -477 239.000000 -478 239.500000 -479 240.000000 -480 240.500000 -481 241.000000 -482 241.500000 -483 242.000000 -484 242.500000 -485 243.000000 -486 243.500000 -487 244.000000 -488 244.500000 -489 245.000000 -490 245.500000 -491 246.000000 -492 246.500000 -493 247.000000 -494 247.500000 -495 248.000000 -496 248.500000 -497 249.000000 -498 249.500000 -499 250.000000 -500 250.500000 -501 251.000000 -502 251.500000 -503 252.000000 -504 252.500000 -505 253.000000 -506 253.500000 -507 254.000000 -508 254.500000 -509 255.000000 -510 255.500000 -511 256.000000 -512 256.500000 -513 257.000000 -514 257.500000 -515 258.000000 -516 258.500000 -517 259.000000 -518 259.500000 -519 260.000000 -520 260.500000 -521 261.000000 -522 261.500000 -523 262.000000 -524 262.500000 -525 263.000000 -526 263.500000 -527 264.000000 -528 264.500000 -529 265.000000 -530 265.500000 -531 266.000000 -532 266.500000 -533 267.000000 -534 267.500000 -535 268.000000 -536 268.500000 -537 269.000000 -538 269.500000 -539 270.000000 -540 270.500000 -541 271.000000 -542 271.500000 -543 272.000000 -544 272.500000 -545 273.000000 -546 273.500000 -547 274.000000 -548 274.500000 -549 275.000000 -550 275.500000 -551 276.000000 -552 276.500000 -553 277.000000 -554 277.500000 -555 278.000000 -556 278.500000 -557 279.000000 -558 279.500000 -559 280.000000 -560 280.500000 -561 281.000000 -562 281.500000 -563 282.000000 -564 282.500000 -565 283.000000 -566 283.500000 -567 284.000000 -568 284.500000 -569 285.000000 -570 285.500000 -571 286.000000 -572 286.500000 -573 287.000000 -574 287.500000 -575 288.000000 -576 288.500000 -577 289.000000 -578 289.500000 -579 290.000000 -580 290.500000 -581 291.000000 -582 291.500000 -583 292.000000 -584 292.500000 -585 293.000000 -586 293.500000 -587 294.000000 -588 294.500000 -589 295.000000 -590 295.500000 -591 296.000000 -592 296.500000 -593 297.000000 -594 297.500000 -595 298.000000 -596 298.500000 -597 299.000000 -598 299.500000 -599 300.000000 -600 300.500000 -601 301.000000 -602 301.500000 -603 302.000000 -604 302.500000 -605 303.000000 -606 303.500000 -607 304.000000 -608 304.500000 -609 305.000000 -610 305.500000 -611 306.000000 -612 306.500000 -613 307.000000 -614 307.500000 -615 308.000000 -616 308.500000 -617 309.000000 -618 309.500000 -619 310.000000 -620 310.500000 -621 311.000000 -622 311.500000 -623 312.000000 -624 312.500000 -625 313.000000 -626 313.500000 -627 314.000000 -628 314.500000 -629 315.000000 -630 315.500000 -631 316.000000 -632 316.500000 -633 317.000000 -634 317.500000 -635 318.000000 -636 318.500000 -637 319.000000 -638 319.500000 -639 320.000000 -640 320.500000 -641 321.000000 -642 321.500000 -643 322.000000 -644 322.500000 -645 323.000000 -646 323.500000 -647 324.000000 -648 324.500000 -649 325.000000 -650 325.500000 -651 326.000000 -652 326.500000 -653 327.000000 -654 327.500000 -655 328.000000 -656 328.500000 -657 329.000000 -658 329.500000 -659 330.000000 -660 330.500000 -661 331.000000 -662 331.500000 -663 332.000000 -664 332.500000 -665 333.000000 -666 333.500000 -667 334.000000 -668 334.500000 -669 335.000000 -670 335.500000 -671 336.000000 -672 336.500000 -673 337.000000 -674 337.500000 -675 338.000000 -676 338.500000 -677 339.000000 -678 339.500000 -679 340.000000 -680 340.500000 -681 341.000000 -682 341.500000 -683 342.000000 -684 342.500000 -685 343.000000 -686 343.500000 -687 344.000000 -688 344.500000 -689 345.000000 -690 345.500000 -691 346.000000 -692 346.500000 -693 347.000000 -694 347.500000 -695 348.000000 -696 348.500000 -697 349.000000 -698 349.500000 -699 350.000000 -700 350.500000 -701 351.000000 -702 351.500000 -703 352.000000 -704 352.500000 -705 353.000000 -706 353.500000 -707 354.000000 -708 354.500000 -709 355.000000 -710 355.500000 -711 356.000000 -712 356.500000 -713 357.000000 -714 357.500000 -715 358.000000 -716 358.500000 -717 359.000000 -718 359.500000 -719 360.000000 -720 360.500000 -721 361.000000 -722 361.500000 -723 362.000000 -724 362.500000 -725 363.000000 -726 363.500000 -727 364.000000 -728 364.500000 -729 365.000000 -730 365.500000 -731 366.000000 -732 366.500000 -733 367.000000 -734 367.500000 -735 368.000000 -736 368.500000 -737 369.000000 -738 369.500000 -739 370.000000 -740 370.500000 -741 371.000000 -742 371.500000 -743 372.000000 -744 372.500000 -745 373.000000 -746 373.500000 -747 374.000000 -748 374.500000 -749 375.000000 -750 375.500000 -751 376.000000 -752 376.500000 -753 377.000000 -754 377.500000 -755 378.000000 -756 378.500000 -757 379.000000 -758 379.500000 -759 380.000000 -760 380.500000 -761 381.000000 -762 381.500000 -763 382.000000 -764 382.500000 -765 383.000000 -766 383.500000 -767 384.000000 -768 384.500000 -769 385.000000 -770 385.500000 -771 386.000000 -772 386.500000 -773 387.000000 -774 387.500000 -775 388.000000 -776 388.500000 -777 389.000000 -778 389.500000 -779 390.000000 -780 390.500000 -781 391.000000 -782 391.500000 -783 392.000000 -784 392.500000 -785 393.000000 -786 393.500000 -787 394.000000 -788 394.500000 -789 395.000000 -790 395.500000 -791 396.000000 -792 396.500000 -793 397.000000 -794 397.500000 -795 398.000000 -796 398.500000 -797 399.000000 -798 399.500000 -799 400.000000 +0 0.500000 +1 1.000000 +2 1.500000 +3 2.000000 +4 2.500000 +5 3.000000 +6 3.500000 +7 4.000000 +8 4.500000 +9 5.000000 +10 5.500000 +11 6.000000 +12 6.500000 +13 7.000000 +14 7.500000 +15 8.000000 +16 8.500000 +17 9.000000 +18 9.500000 +19 10.000000 +20 10.500000 +21 11.000000 +22 11.500000 +23 12.000000 +24 12.500000 +25 13.000000 +26 13.500000 +27 14.000000 +28 14.500000 +29 15.000000 +30 15.500000 +31 16.000000 +32 16.500000 +33 17.000000 +34 17.500000 +35 18.000000 +36 18.500000 +37 19.000000 +38 19.500000 +39 20.000000 +40 20.500000 +41 21.000000 +42 21.500000 +43 22.000000 +44 22.500000 +45 23.000000 +46 23.500000 +47 24.000000 +48 24.500000 +49 25.000000 +50 25.500000 +51 26.000000 +52 26.500000 +53 27.000000 +54 27.500000 +55 28.000000 +56 28.500000 +57 29.000000 +58 29.500000 +59 30.000000 +60 30.500000 +61 31.000000 +62 31.500000 +63 32.000000 +64 32.500000 +65 33.000000 +66 33.500000 +67 34.000000 +68 34.500000 +69 35.000000 +70 35.500000 +71 36.000000 +72 36.500000 +73 37.000000 +74 37.500000 +75 38.000000 +76 38.500000 +77 39.000000 +78 39.500000 +79 40.000000 +80 40.500000 +81 41.000000 +82 41.500000 +83 42.000000 +84 42.500000 +85 43.000000 +86 43.500000 +87 44.000000 +88 44.500000 +89 45.000000 +90 45.500000 +91 46.000000 +92 46.500000 +93 47.000000 +94 47.500000 +95 48.000000 +96 48.500000 +97 49.000000 +98 49.500000 +99 50.000000 +100 50.500000 +101 51.000000 +102 51.500000 +103 52.000000 +104 52.500000 +105 53.000000 +106 53.500000 +107 54.000000 +108 54.500000 +109 55.000000 +110 55.500000 +111 56.000000 +112 56.500000 +113 57.000000 +114 57.500000 +115 58.000000 +116 58.500000 +117 59.000000 +118 59.500000 +119 60.000000 +120 60.500000 +121 61.000000 +122 61.500000 +123 62.000000 +124 62.500000 +125 63.000000 +126 63.500000 +127 64.000000 +128 64.500000 +129 65.000000 +130 65.500000 +131 66.000000 +132 66.500000 +133 67.000000 +134 67.500000 +135 68.000000 +136 68.500000 +137 69.000000 +138 69.500000 +139 70.000000 +140 70.500000 +141 71.000000 +142 71.500000 +143 72.000000 +144 72.500000 +145 73.000000 +146 73.500000 +147 74.000000 +148 74.500000 +149 75.000000 +150 75.500000 +151 76.000000 +152 76.500000 +153 77.000000 +154 77.500000 +155 78.000000 +156 78.500000 +157 79.000000 +158 79.500000 +159 80.000000 +160 80.500000 +161 81.000000 +162 81.500000 +163 82.000000 +164 82.500000 +165 83.000000 +166 83.500000 +167 84.000000 +168 84.500000 +169 85.000000 +170 85.500000 +171 86.000000 +172 86.500000 +173 87.000000 +174 87.500000 +175 88.000000 +176 88.500000 +177 89.000000 +178 89.500000 +179 90.000000 +180 90.500000 +181 91.000000 +182 91.500000 +183 92.000000 +184 92.500000 +185 93.000000 +186 93.500000 +187 94.000000 +188 94.500000 +189 95.000000 +190 95.500000 +191 96.000000 +192 96.500000 +193 97.000000 +194 97.500000 +195 98.000000 +196 98.500000 +197 99.000000 +198 99.500000 +199 100.000000 +200 100.500000 +201 101.000000 +202 101.500000 +203 102.000000 +204 102.500000 +205 103.000000 +206 103.500000 +207 104.000000 +208 104.500000 +209 105.000000 +210 105.500000 +211 106.000000 +212 106.500000 +213 107.000000 +214 107.500000 +215 108.000000 +216 108.500000 +217 109.000000 +218 109.500000 +219 110.000000 +220 110.500000 +221 111.000000 +222 111.500000 +223 112.000000 +224 112.500000 +225 113.000000 +226 113.500000 +227 114.000000 +228 114.500000 +229 115.000000 +230 115.500000 +231 116.000000 +232 116.500000 +233 117.000000 +234 117.500000 +235 118.000000 +236 118.500000 +237 119.000000 +238 119.500000 +239 120.000000 +240 120.500000 +241 121.000000 +242 121.500000 +243 122.000000 +244 122.500000 +245 123.000000 +246 123.500000 +247 124.000000 +248 124.500000 +249 125.000000 +250 125.500000 +251 126.000000 +252 126.500000 +253 127.000000 +254 127.500000 +255 128.000000 +256 128.500000 +257 129.000000 +258 129.500000 +259 130.000000 +260 130.500000 +261 131.000000 +262 131.500000 +263 132.000000 +264 132.500000 +265 133.000000 +266 133.500000 +267 134.000000 +268 134.500000 +269 135.000000 +270 135.500000 +271 136.000000 +272 136.500000 +273 137.000000 +274 137.500000 +275 138.000000 +276 138.500000 +277 139.000000 +278 139.500000 +279 140.000000 +280 140.500000 +281 141.000000 +282 141.500000 +283 142.000000 +284 142.500000 +285 143.000000 +286 143.500000 +287 144.000000 +288 144.500000 +289 145.000000 +290 145.500000 +291 146.000000 +292 146.500000 +293 147.000000 +294 147.500000 +295 148.000000 +296 148.500000 +297 149.000000 +298 149.500000 +299 150.000000 +300 150.500000 +301 151.000000 +302 151.500000 +303 152.000000 +304 152.500000 +305 153.000000 +306 153.500000 +307 154.000000 +308 154.500000 +309 155.000000 +310 155.500000 +311 156.000000 +312 156.500000 +313 157.000000 +314 157.500000 +315 158.000000 +316 158.500000 +317 159.000000 +318 159.500000 +319 160.000000 +320 160.500000 +321 161.000000 +322 161.500000 +323 162.000000 +324 162.500000 +325 163.000000 +326 163.500000 +327 164.000000 +328 164.500000 +329 165.000000 +330 165.500000 +331 166.000000 +332 166.500000 +333 167.000000 +334 167.500000 +335 168.000000 +336 168.500000 +337 169.000000 +338 169.500000 +339 170.000000 +340 170.500000 +341 171.000000 +342 171.500000 +343 172.000000 +344 172.500000 +345 173.000000 +346 173.500000 +347 174.000000 +348 174.500000 +349 175.000000 +350 175.500000 +351 176.000000 +352 176.500000 +353 177.000000 +354 177.500000 +355 178.000000 +356 178.500000 +357 179.000000 +358 179.500000 +359 180.000000 +360 180.500000 +361 181.000000 +362 181.500000 +363 182.000000 +364 182.500000 +365 183.000000 +366 183.500000 +367 184.000000 +368 184.500000 +369 185.000000 +370 185.500000 +371 186.000000 +372 186.500000 +373 187.000000 +374 187.500000 +375 188.000000 +376 188.500000 +377 189.000000 +378 189.500000 +379 190.000000 +380 190.500000 +381 191.000000 +382 191.500000 +383 192.000000 +384 192.500000 +385 193.000000 +386 193.500000 +387 194.000000 +388 194.500000 +389 195.000000 +390 195.500000 +391 196.000000 +392 196.500000 +393 197.000000 +394 197.500000 +395 198.000000 +396 198.500000 +397 199.000000 +398 199.500000 +399 200.000000 +400 200.500000 +401 201.000000 +402 201.500000 +403 202.000000 +404 202.500000 +405 203.000000 +406 203.500000 +407 204.000000 +408 204.500000 +409 205.000000 +410 205.500000 +411 206.000000 +412 206.500000 +413 207.000000 +414 207.500000 +415 208.000000 +416 208.500000 +417 209.000000 +418 209.500000 +419 210.000000 +420 210.500000 +421 211.000000 +422 211.500000 +423 212.000000 +424 212.500000 +425 213.000000 +426 213.500000 +427 214.000000 +428 214.500000 +429 215.000000 +430 215.500000 +431 216.000000 +432 216.500000 +433 217.000000 +434 217.500000 +435 218.000000 +436 218.500000 +437 219.000000 +438 219.500000 +439 220.000000 +440 220.500000 +441 221.000000 +442 221.500000 +443 222.000000 +444 222.500000 +445 223.000000 +446 223.500000 +447 224.000000 +448 224.500000 +449 225.000000 +450 225.500000 +451 226.000000 +452 226.500000 +453 227.000000 +454 227.500000 +455 228.000000 +456 228.500000 +457 229.000000 +458 229.500000 +459 230.000000 +460 230.500000 +461 231.000000 +462 231.500000 +463 232.000000 +464 232.500000 +465 233.000000 +466 233.500000 +467 234.000000 +468 234.500000 +469 235.000000 +470 235.500000 +471 236.000000 +472 236.500000 +473 237.000000 +474 237.500000 +475 238.000000 +476 238.500000 +477 239.000000 +478 239.500000 +479 240.000000 +480 240.500000 +481 241.000000 +482 241.500000 +483 242.000000 +484 242.500000 +485 243.000000 +486 243.500000 +487 244.000000 +488 244.500000 +489 245.000000 +490 245.500000 +491 246.000000 +492 246.500000 +493 247.000000 +494 247.500000 +495 248.000000 +496 248.500000 +497 249.000000 +498 249.500000 +499 250.000000 +500 250.500000 +501 251.000000 +502 251.500000 +503 252.000000 +504 252.500000 +505 253.000000 +506 253.500000 +507 254.000000 +508 254.500000 +509 255.000000 +510 255.500000 +511 256.000000 +512 256.500000 +513 257.000000 +514 257.500000 +515 258.000000 +516 258.500000 +517 259.000000 +518 259.500000 +519 260.000000 +520 260.500000 +521 261.000000 +522 261.500000 +523 262.000000 +524 262.500000 +525 263.000000 +526 263.500000 +527 264.000000 +528 264.500000 +529 265.000000 +530 265.500000 +531 266.000000 +532 266.500000 +533 267.000000 +534 267.500000 +535 268.000000 +536 268.500000 +537 269.000000 +538 269.500000 +539 270.000000 +540 270.500000 +541 271.000000 +542 271.500000 +543 272.000000 +544 272.500000 +545 273.000000 +546 273.500000 +547 274.000000 +548 274.500000 +549 275.000000 +550 275.500000 +551 276.000000 +552 276.500000 +553 277.000000 +554 277.500000 +555 278.000000 +556 278.500000 +557 279.000000 +558 279.500000 +559 280.000000 +560 280.500000 +561 281.000000 +562 281.500000 +563 282.000000 +564 282.500000 +565 283.000000 +566 283.500000 +567 284.000000 +568 284.500000 +569 285.000000 +570 285.500000 +571 286.000000 +572 286.500000 +573 287.000000 +574 287.500000 +575 288.000000 +576 288.500000 +577 289.000000 +578 289.500000 +579 290.000000 +580 290.500000 +581 291.000000 +582 291.500000 +583 292.000000 +584 292.500000 +585 293.000000 +586 293.500000 +587 294.000000 +588 294.500000 +589 295.000000 +590 295.500000 +591 296.000000 +592 296.500000 +593 297.000000 +594 297.500000 +595 298.000000 +596 298.500000 +597 299.000000 +598 299.500000 +599 300.000000 +600 300.500000 +601 301.000000 +602 301.500000 +603 302.000000 +604 302.500000 +605 303.000000 +606 303.500000 +607 304.000000 +608 304.500000 +609 305.000000 +610 305.500000 +611 306.000000 +612 306.500000 +613 307.000000 +614 307.500000 +615 308.000000 +616 308.500000 +617 309.000000 +618 309.500000 +619 310.000000 +620 310.500000 +621 311.000000 +622 311.500000 +623 312.000000 +624 312.500000 +625 313.000000 +626 313.500000 +627 314.000000 +628 314.500000 +629 315.000000 +630 315.500000 +631 316.000000 +632 316.500000 +633 317.000000 +634 317.500000 +635 318.000000 +636 318.500000 +637 319.000000 +638 319.500000 +639 320.000000 +640 320.500000 +641 321.000000 +642 321.500000 +643 322.000000 +644 322.500000 +645 323.000000 +646 323.500000 +647 324.000000 +648 324.500000 +649 325.000000 +650 325.500000 +651 326.000000 +652 326.500000 +653 327.000000 +654 327.500000 +655 328.000000 +656 328.500000 +657 329.000000 +658 329.500000 +659 330.000000 +660 330.500000 +661 331.000000 +662 331.500000 +663 332.000000 +664 332.500000 +665 333.000000 +666 333.500000 +667 334.000000 +668 334.500000 +669 335.000000 +670 335.500000 +671 336.000000 +672 336.500000 +673 337.000000 +674 337.500000 +675 338.000000 +676 338.500000 +677 339.000000 +678 339.500000 +679 340.000000 +680 340.500000 +681 341.000000 +682 341.500000 +683 342.000000 +684 342.500000 +685 343.000000 +686 343.500000 +687 344.000000 +688 344.500000 +689 345.000000 +690 345.500000 +691 346.000000 +692 346.500000 +693 347.000000 +694 347.500000 +695 348.000000 +696 348.500000 +697 349.000000 +698 349.500000 +699 350.000000 +700 350.500000 +701 351.000000 +702 351.500000 +703 352.000000 +704 352.500000 +705 353.000000 +706 353.500000 +707 354.000000 +708 354.500000 +709 355.000000 +710 355.500000 +711 356.000000 +712 356.500000 +713 357.000000 +714 357.500000 +715 358.000000 +716 358.500000 +717 359.000000 +718 359.500000 +719 360.000000 +720 360.500000 +721 361.000000 +722 361.500000 +723 362.000000 +724 362.500000 +725 363.000000 +726 363.500000 +727 364.000000 +728 364.500000 +729 365.000000 +730 365.500000 +731 366.000000 +732 366.500000 +733 367.000000 +734 367.500000 +735 368.000000 +736 368.500000 +737 369.000000 +738 369.500000 +739 370.000000 +740 370.500000 +741 371.000000 +742 371.500000 +743 372.000000 +744 372.500000 +745 373.000000 +746 373.500000 +747 374.000000 +748 374.500000 +749 375.000000 +750 375.500000 +751 376.000000 +752 376.500000 +753 377.000000 +754 377.500000 +755 378.000000 +756 378.500000 +757 379.000000 +758 379.500000 +759 380.000000 +760 380.500000 +761 381.000000 +762 381.500000 +763 382.000000 +764 382.500000 +765 383.000000 +766 383.500000 +767 384.000000 +768 384.500000 +769 385.000000 +770 385.500000 +771 386.000000 +772 386.500000 +773 387.000000 +774 387.500000 +775 388.000000 +776 388.500000 +777 389.000000 +778 389.500000 +779 390.000000 +780 390.500000 +781 391.000000 +782 391.500000 +783 392.000000 +784 392.500000 +785 393.000000 +786 393.500000 +787 394.000000 +788 394.500000 +789 395.000000 +790 395.500000 +791 396.000000 +792 396.500000 +793 397.000000 +794 397.500000 +795 398.000000 +796 398.500000 +797 399.000000 +798 399.500000 +799 400.000000 diff --git a/tests/runtests/limit3/out_acc_vel-pins/expected b/tests/runtests/limit3/out_acc_vel-pins/expected index ebda2f2fda..0016b58091 100644 --- a/tests/runtests/limit3/out_acc_vel-pins/expected +++ b/tests/runtests/limit3/out_acc_vel-pins/expected @@ -1,800 +1,800 @@ -0 0.001000 -1 0.003000 -2 0.006000 -3 0.010000 -4 0.015000 -5 0.021000 -6 0.028000 -7 0.036000 -8 0.045000 -9 0.055000 -10 0.066000 -11 0.078000 -12 0.091000 -13 0.105000 -14 0.120000 -15 0.136000 -16 0.153000 -17 0.171000 -18 0.190000 -19 0.210000 -20 0.231000 -21 0.253000 -22 0.276000 -23 0.300000 -24 0.325000 -25 0.351000 -26 0.378000 -27 0.406000 -28 0.435000 -29 0.465000 -30 0.496000 -31 0.528000 -32 0.561000 -33 0.595000 -34 0.630000 -35 0.666000 -36 0.703000 -37 0.741000 -38 0.780000 -39 0.820000 -40 0.861000 -41 0.903000 -42 0.946000 -43 0.990000 -44 1.035000 -45 1.081000 -46 1.128000 -47 1.176000 -48 1.225000 -49 1.275000 -50 1.326000 -51 1.378000 -52 1.431000 -53 1.485000 -54 1.540000 -55 1.596000 -56 1.653000 -57 1.711000 -58 1.770000 -59 1.830000 -60 1.891000 -61 1.953000 -62 2.016000 -63 2.080000 -64 2.145000 -65 2.211000 -66 2.278000 -67 2.346000 -68 2.415000 -69 2.485000 -70 2.556000 -71 2.628000 -72 2.701000 -73 2.775000 -74 2.850000 -75 2.926000 -76 3.003000 -77 3.081000 -78 3.160000 -79 3.240000 -80 3.321000 -81 3.403000 -82 3.486000 -83 3.570000 -84 3.655000 -85 3.741000 -86 3.828000 -87 3.916000 -88 4.005000 -89 4.095000 -90 4.186000 -91 4.278000 -92 4.371000 -93 4.465000 -94 4.560000 -95 4.656000 -96 4.753000 -97 4.851000 -98 4.950000 -99 5.050000 -100 5.151000 -101 5.253000 -102 5.356000 -103 5.460000 -104 5.565000 -105 5.671000 -106 5.778000 -107 5.886000 -108 5.995000 -109 6.105000 -110 6.216000 -111 6.328000 -112 6.441000 -113 6.555000 -114 6.670000 -115 6.786000 -116 6.903000 -117 7.021000 -118 7.140000 -119 7.260000 -120 7.381000 -121 7.503000 -122 7.626000 -123 7.750000 -124 7.875000 -125 8.001000 -126 8.128000 -127 8.256000 -128 8.385000 -129 8.515000 -130 8.646000 -131 8.778000 -132 8.911000 -133 9.045000 -134 9.180000 -135 9.316000 -136 9.453000 -137 9.591000 -138 9.730000 -139 9.870000 -140 10.011000 -141 10.153000 -142 10.296000 -143 10.440000 -144 10.585000 -145 10.731000 -146 10.878000 -147 11.026000 -148 11.175000 -149 11.325000 -150 11.476000 -151 11.628000 -152 11.781000 -153 11.935000 -154 12.090000 -155 12.246000 -156 12.403000 -157 12.561000 -158 12.720000 -159 12.880000 -160 13.041000 -161 13.203000 -162 13.366000 -163 13.530000 -164 13.695000 -165 13.861000 -166 14.028000 -167 14.196000 -168 14.365000 -169 14.535000 -170 14.706000 -171 14.878000 -172 15.051000 -173 15.225000 -174 15.400000 -175 15.576000 -176 15.753000 -177 15.931000 -178 16.110000 -179 16.290000 -180 16.471000 -181 16.653000 -182 16.836000 -183 17.020000 -184 17.205000 -185 17.391000 -186 17.578000 -187 17.766000 -188 17.955000 -189 18.145000 -190 18.336000 -191 18.528000 -192 18.721000 -193 18.915000 -194 19.110000 -195 19.306000 -196 19.503000 -197 19.701000 -198 19.900000 -199 20.100000 -200 20.301000 -201 20.503000 -202 20.706000 -203 20.910000 -204 21.115000 -205 21.321000 -206 21.528000 -207 21.736000 -208 21.945000 -209 22.155000 -210 22.366000 -211 22.578000 -212 22.791000 -213 23.005000 -214 23.220000 -215 23.436000 -216 23.653000 -217 23.871000 -218 24.090000 -219 24.310000 -220 24.531000 -221 24.753000 -222 24.976000 -223 25.200000 -224 25.425000 -225 25.651000 -226 25.878000 -227 26.106000 -228 26.335000 -229 26.565000 -230 26.796000 -231 27.028000 -232 27.261000 -233 27.495000 -234 27.730000 -235 27.966000 -236 28.203000 -237 28.441000 -238 28.680000 -239 28.920000 -240 29.161000 -241 29.403000 -242 29.646000 -243 29.890000 -244 30.135000 -245 30.381000 -246 30.628000 -247 30.876000 -248 31.125000 -249 31.375000 -250 31.626000 -251 31.878000 -252 32.131000 -253 32.385000 -254 32.640000 -255 32.896000 -256 33.153000 -257 33.411000 -258 33.670000 -259 33.930000 -260 34.191000 -261 34.453000 -262 34.716000 -263 34.980000 -264 35.245000 -265 35.511000 -266 35.778000 -267 36.046000 -268 36.315000 -269 36.585000 -270 36.856000 -271 37.128000 -272 37.401000 -273 37.675000 -274 37.950000 -275 38.226000 -276 38.503000 -277 38.781000 -278 39.060000 -279 39.340000 -280 39.621000 -281 39.903000 -282 40.186000 -283 40.470000 -284 40.755000 -285 41.041000 -286 41.328000 -287 41.616000 -288 41.905000 -289 42.195000 -290 42.486000 -291 42.778000 -292 43.071000 -293 43.365000 -294 43.660000 -295 43.956000 -296 44.253000 -297 44.551000 -298 44.850000 -299 45.150000 -300 45.451000 -301 45.753000 -302 46.056000 -303 46.360000 -304 46.665000 -305 46.971000 -306 47.278000 -307 47.586000 -308 47.895000 -309 48.205000 -310 48.516000 -311 48.828000 -312 49.141000 -313 49.455000 -314 49.770000 -315 50.086000 -316 50.403000 -317 50.721000 -318 51.040000 -319 51.360000 -320 51.681000 -321 52.003000 -322 52.326000 -323 52.650000 -324 52.975000 -325 53.301000 -326 53.628000 -327 53.956000 -328 54.285000 -329 54.615000 -330 54.946000 -331 55.278000 -332 55.611000 -333 55.945000 -334 56.280000 -335 56.616000 -336 56.953000 -337 57.291000 -338 57.630000 -339 57.970000 -340 58.311000 -341 58.653000 -342 58.996000 -343 59.340000 -344 59.685000 -345 60.031000 -346 60.378000 -347 60.726000 -348 61.075000 -349 61.425000 -350 61.776000 -351 62.128000 -352 62.481000 -353 62.835000 -354 63.190000 -355 63.546000 -356 63.903000 -357 64.261000 -358 64.620000 -359 64.980000 -360 65.341000 -361 65.703000 -362 66.066000 -363 66.430000 -364 66.795000 -365 67.161000 -366 67.528000 -367 67.896000 -368 68.265000 -369 68.635000 -370 69.006000 -371 69.378000 -372 69.751000 -373 70.125000 -374 70.500000 -375 70.876000 -376 71.253000 -377 71.631000 -378 72.010000 -379 72.390000 -380 72.771000 -381 73.153000 -382 73.536000 -383 73.920000 -384 74.305000 -385 74.691000 -386 75.078000 -387 75.466000 -388 75.855000 -389 76.245000 -390 76.636000 -391 77.028000 -392 77.421000 -393 77.815000 -394 78.210000 -395 78.606000 -396 79.003000 -397 79.401000 -398 79.800000 -399 80.200000 -400 80.599000 -401 80.997000 -402 81.394000 -403 81.790000 -404 82.185000 -405 82.579000 -406 82.972000 -407 83.364000 -408 83.755000 -409 84.145000 -410 84.534000 -411 84.922000 -412 85.309000 -413 85.695000 -414 86.080000 -415 86.464000 -416 86.847000 -417 87.229000 -418 87.610000 -419 87.990000 -420 88.369000 -421 88.747000 -422 89.124000 -423 89.500000 -424 89.875000 -425 90.249000 -426 90.622000 -427 90.994000 -428 91.365000 -429 91.735000 -430 92.104000 -431 92.472000 -432 92.839000 -433 93.205000 -434 93.570000 -435 93.934000 -436 94.297000 -437 94.659000 -438 95.020000 -439 95.380000 -440 95.739000 -441 96.097000 -442 96.454000 -443 96.810000 -444 97.165000 -445 97.519000 -446 97.872000 -447 98.224000 -448 98.575000 -449 98.925000 -450 99.274000 -451 99.622000 -452 99.969000 -453 100.315000 -454 100.660000 -455 101.004000 -456 101.347000 -457 101.689000 -458 102.030000 -459 102.370000 -460 102.709000 -461 103.047000 -462 103.384000 -463 103.720000 -464 104.055000 -465 104.389000 -466 104.722000 -467 105.054000 -468 105.385000 -469 105.715000 -470 106.044000 -471 106.372000 -472 106.699000 -473 107.025000 -474 107.350000 -475 107.674000 -476 107.997000 -477 108.319000 -478 108.640000 -479 108.960000 -480 109.279000 -481 109.597000 -482 109.914000 -483 110.230000 -484 110.545000 -485 110.859000 -486 111.172000 -487 111.484000 -488 111.795000 -489 112.105000 -490 112.414000 -491 112.722000 -492 113.029000 -493 113.335000 -494 113.640000 -495 113.944000 -496 114.247000 -497 114.549000 -498 114.850000 -499 115.150000 -500 115.449000 -501 115.747000 -502 116.044000 -503 116.340000 -504 116.635000 -505 116.929000 -506 117.222000 -507 117.514000 -508 117.805000 -509 118.095000 -510 118.384000 -511 118.672000 -512 118.959000 -513 119.245000 -514 119.530000 -515 119.814000 -516 120.097000 -517 120.379000 -518 120.660000 -519 120.940000 -520 121.219000 -521 121.497000 -522 121.774000 -523 122.050000 -524 122.325000 -525 122.599000 -526 122.872000 -527 123.144000 -528 123.415000 -529 123.685000 -530 123.954000 -531 124.222000 -532 124.489000 -533 124.755000 -534 125.020000 -535 125.284000 -536 125.547000 -537 125.809000 -538 126.070000 -539 126.330000 -540 126.589000 -541 126.847000 -542 127.104000 -543 127.360000 -544 127.615000 -545 127.869000 -546 128.122000 -547 128.374000 -548 128.625000 -549 128.875000 -550 129.124000 -551 129.372000 -552 129.619000 -553 129.865000 -554 130.110000 -555 130.354000 -556 130.597000 -557 130.839000 -558 131.080000 -559 131.320000 -560 131.559000 -561 131.797000 -562 132.034000 -563 132.270000 -564 132.505000 -565 132.739000 -566 132.972000 -567 133.204000 -568 133.435000 -569 133.665000 -570 133.894000 -571 134.122000 -572 134.349000 -573 134.575000 -574 134.800000 -575 135.024000 -576 135.247000 -577 135.469000 -578 135.690000 -579 135.910000 -580 136.129000 -581 136.347000 -582 136.564000 -583 136.780000 -584 136.995000 -585 137.209000 -586 137.422000 -587 137.634000 -588 137.845000 -589 138.055000 -590 138.264000 -591 138.472000 -592 138.679000 -593 138.885000 -594 139.090000 -595 139.294000 -596 139.497000 -597 139.699000 -598 139.900000 -599 140.100000 -600 140.299000 -601 140.497000 -602 140.694000 -603 140.890000 -604 141.085000 -605 141.279000 -606 141.472000 -607 141.664000 -608 141.855000 -609 142.045000 -610 142.234000 -611 142.422000 -612 142.609000 -613 142.795000 -614 142.980000 -615 143.164000 -616 143.347000 -617 143.529000 -618 143.710000 -619 143.890000 -620 144.069000 -621 144.247000 -622 144.424000 -623 144.600000 -624 144.775000 -625 144.949000 -626 145.122000 -627 145.294000 -628 145.465000 -629 145.635000 -630 145.804000 -631 145.972000 -632 146.139000 -633 146.305000 -634 146.470000 -635 146.634000 -636 146.797000 -637 146.959000 -638 147.120000 -639 147.280000 -640 147.439000 -641 147.597000 -642 147.754000 -643 147.910000 -644 148.065000 -645 148.219000 -646 148.372000 -647 148.524000 -648 148.675000 -649 148.825000 -650 148.974000 -651 149.122000 -652 149.269000 -653 149.415000 -654 149.560000 -655 149.704000 -656 149.847000 -657 149.989000 -658 150.130000 -659 150.270000 -660 150.409000 -661 150.547000 -662 150.684000 -663 150.820000 -664 150.955000 -665 151.089000 -666 151.222000 -667 151.354000 -668 151.485000 -669 151.615000 -670 151.744000 -671 151.872000 -672 151.999000 -673 152.125000 -674 152.250000 -675 152.374000 -676 152.497000 -677 152.619000 -678 152.740000 -679 152.860000 -680 152.979000 -681 153.097000 -682 153.214000 -683 153.330000 -684 153.445000 -685 153.559000 -686 153.672000 -687 153.784000 -688 153.895000 -689 154.005000 -690 154.114000 -691 154.222000 -692 154.329000 -693 154.435000 -694 154.540000 -695 154.644000 -696 154.747000 -697 154.849000 -698 154.950000 -699 155.050000 -700 155.149000 -701 155.247000 -702 155.344000 -703 155.440000 -704 155.535000 -705 155.629000 -706 155.722000 -707 155.814000 -708 155.905000 -709 155.995000 -710 156.084000 -711 156.172000 -712 156.259000 -713 156.345000 -714 156.430000 -715 156.514000 -716 156.597000 -717 156.679000 -718 156.760000 -719 156.840000 -720 156.919000 -721 156.997000 -722 157.074000 -723 157.150000 -724 157.225000 -725 157.299000 -726 157.372000 -727 157.444000 -728 157.515000 -729 157.585000 -730 157.654000 -731 157.722000 -732 157.789000 -733 157.855000 -734 157.920000 -735 157.984000 -736 158.047000 -737 158.109000 -738 158.170000 -739 158.230000 -740 158.289000 -741 158.347000 -742 158.404000 -743 158.460000 -744 158.515000 -745 158.569000 -746 158.622000 -747 158.674000 -748 158.725000 -749 158.775000 -750 158.824000 -751 158.872000 -752 158.919000 -753 158.965000 -754 159.010000 -755 159.054000 -756 159.097000 -757 159.139000 -758 159.180000 -759 159.220000 -760 159.259000 -761 159.297000 -762 159.334000 -763 159.370000 -764 159.405000 -765 159.439000 -766 159.472000 -767 159.504000 -768 159.535000 -769 159.565000 -770 159.594000 -771 159.622000 -772 159.649000 -773 159.675000 -774 159.700000 -775 159.724000 -776 159.747000 -777 159.769000 -778 159.790000 -779 159.810000 -780 159.829000 -781 159.847000 -782 159.864000 -783 159.880000 -784 159.895000 -785 159.909000 -786 159.922000 -787 159.934000 -788 159.945000 -789 159.955000 -790 159.964000 -791 159.972000 -792 159.979000 -793 159.985000 -794 159.990000 -795 159.994000 -796 159.997000 -797 159.999000 -798 160.000000 -799 160.000000 +0 0.001000 +1 0.003000 +2 0.006000 +3 0.010000 +4 0.015000 +5 0.021000 +6 0.028000 +7 0.036000 +8 0.045000 +9 0.055000 +10 0.066000 +11 0.078000 +12 0.091000 +13 0.105000 +14 0.120000 +15 0.136000 +16 0.153000 +17 0.171000 +18 0.190000 +19 0.210000 +20 0.231000 +21 0.253000 +22 0.276000 +23 0.300000 +24 0.325000 +25 0.351000 +26 0.378000 +27 0.406000 +28 0.435000 +29 0.465000 +30 0.496000 +31 0.528000 +32 0.561000 +33 0.595000 +34 0.630000 +35 0.666000 +36 0.703000 +37 0.741000 +38 0.780000 +39 0.820000 +40 0.861000 +41 0.903000 +42 0.946000 +43 0.990000 +44 1.035000 +45 1.081000 +46 1.128000 +47 1.176000 +48 1.225000 +49 1.275000 +50 1.326000 +51 1.378000 +52 1.431000 +53 1.485000 +54 1.540000 +55 1.596000 +56 1.653000 +57 1.711000 +58 1.770000 +59 1.830000 +60 1.891000 +61 1.953000 +62 2.016000 +63 2.080000 +64 2.145000 +65 2.211000 +66 2.278000 +67 2.346000 +68 2.415000 +69 2.485000 +70 2.556000 +71 2.628000 +72 2.701000 +73 2.775000 +74 2.850000 +75 2.926000 +76 3.003000 +77 3.081000 +78 3.160000 +79 3.240000 +80 3.321000 +81 3.403000 +82 3.486000 +83 3.570000 +84 3.655000 +85 3.741000 +86 3.828000 +87 3.916000 +88 4.005000 +89 4.095000 +90 4.186000 +91 4.278000 +92 4.371000 +93 4.465000 +94 4.560000 +95 4.656000 +96 4.753000 +97 4.851000 +98 4.950000 +99 5.050000 +100 5.151000 +101 5.253000 +102 5.356000 +103 5.460000 +104 5.565000 +105 5.671000 +106 5.778000 +107 5.886000 +108 5.995000 +109 6.105000 +110 6.216000 +111 6.328000 +112 6.441000 +113 6.555000 +114 6.670000 +115 6.786000 +116 6.903000 +117 7.021000 +118 7.140000 +119 7.260000 +120 7.381000 +121 7.503000 +122 7.626000 +123 7.750000 +124 7.875000 +125 8.001000 +126 8.128000 +127 8.256000 +128 8.385000 +129 8.515000 +130 8.646000 +131 8.778000 +132 8.911000 +133 9.045000 +134 9.180000 +135 9.316000 +136 9.453000 +137 9.591000 +138 9.730000 +139 9.870000 +140 10.011000 +141 10.153000 +142 10.296000 +143 10.440000 +144 10.585000 +145 10.731000 +146 10.878000 +147 11.026000 +148 11.175000 +149 11.325000 +150 11.476000 +151 11.628000 +152 11.781000 +153 11.935000 +154 12.090000 +155 12.246000 +156 12.403000 +157 12.561000 +158 12.720000 +159 12.880000 +160 13.041000 +161 13.203000 +162 13.366000 +163 13.530000 +164 13.695000 +165 13.861000 +166 14.028000 +167 14.196000 +168 14.365000 +169 14.535000 +170 14.706000 +171 14.878000 +172 15.051000 +173 15.225000 +174 15.400000 +175 15.576000 +176 15.753000 +177 15.931000 +178 16.110000 +179 16.290000 +180 16.471000 +181 16.653000 +182 16.836000 +183 17.020000 +184 17.205000 +185 17.391000 +186 17.578000 +187 17.766000 +188 17.955000 +189 18.145000 +190 18.336000 +191 18.528000 +192 18.721000 +193 18.915000 +194 19.110000 +195 19.306000 +196 19.503000 +197 19.701000 +198 19.900000 +199 20.100000 +200 20.301000 +201 20.503000 +202 20.706000 +203 20.910000 +204 21.115000 +205 21.321000 +206 21.528000 +207 21.736000 +208 21.945000 +209 22.155000 +210 22.366000 +211 22.578000 +212 22.791000 +213 23.005000 +214 23.220000 +215 23.436000 +216 23.653000 +217 23.871000 +218 24.090000 +219 24.310000 +220 24.531000 +221 24.753000 +222 24.976000 +223 25.200000 +224 25.425000 +225 25.651000 +226 25.878000 +227 26.106000 +228 26.335000 +229 26.565000 +230 26.796000 +231 27.028000 +232 27.261000 +233 27.495000 +234 27.730000 +235 27.966000 +236 28.203000 +237 28.441000 +238 28.680000 +239 28.920000 +240 29.161000 +241 29.403000 +242 29.646000 +243 29.890000 +244 30.135000 +245 30.381000 +246 30.628000 +247 30.876000 +248 31.125000 +249 31.375000 +250 31.626000 +251 31.878000 +252 32.131000 +253 32.385000 +254 32.640000 +255 32.896000 +256 33.153000 +257 33.411000 +258 33.670000 +259 33.930000 +260 34.191000 +261 34.453000 +262 34.716000 +263 34.980000 +264 35.245000 +265 35.511000 +266 35.778000 +267 36.046000 +268 36.315000 +269 36.585000 +270 36.856000 +271 37.128000 +272 37.401000 +273 37.675000 +274 37.950000 +275 38.226000 +276 38.503000 +277 38.781000 +278 39.060000 +279 39.340000 +280 39.621000 +281 39.903000 +282 40.186000 +283 40.470000 +284 40.755000 +285 41.041000 +286 41.328000 +287 41.616000 +288 41.905000 +289 42.195000 +290 42.486000 +291 42.778000 +292 43.071000 +293 43.365000 +294 43.660000 +295 43.956000 +296 44.253000 +297 44.551000 +298 44.850000 +299 45.150000 +300 45.451000 +301 45.753000 +302 46.056000 +303 46.360000 +304 46.665000 +305 46.971000 +306 47.278000 +307 47.586000 +308 47.895000 +309 48.205000 +310 48.516000 +311 48.828000 +312 49.141000 +313 49.455000 +314 49.770000 +315 50.086000 +316 50.403000 +317 50.721000 +318 51.040000 +319 51.360000 +320 51.681000 +321 52.003000 +322 52.326000 +323 52.650000 +324 52.975000 +325 53.301000 +326 53.628000 +327 53.956000 +328 54.285000 +329 54.615000 +330 54.946000 +331 55.278000 +332 55.611000 +333 55.945000 +334 56.280000 +335 56.616000 +336 56.953000 +337 57.291000 +338 57.630000 +339 57.970000 +340 58.311000 +341 58.653000 +342 58.996000 +343 59.340000 +344 59.685000 +345 60.031000 +346 60.378000 +347 60.726000 +348 61.075000 +349 61.425000 +350 61.776000 +351 62.128000 +352 62.481000 +353 62.835000 +354 63.190000 +355 63.546000 +356 63.903000 +357 64.261000 +358 64.620000 +359 64.980000 +360 65.341000 +361 65.703000 +362 66.066000 +363 66.430000 +364 66.795000 +365 67.161000 +366 67.528000 +367 67.896000 +368 68.265000 +369 68.635000 +370 69.006000 +371 69.378000 +372 69.751000 +373 70.125000 +374 70.500000 +375 70.876000 +376 71.253000 +377 71.631000 +378 72.010000 +379 72.390000 +380 72.771000 +381 73.153000 +382 73.536000 +383 73.920000 +384 74.305000 +385 74.691000 +386 75.078000 +387 75.466000 +388 75.855000 +389 76.245000 +390 76.636000 +391 77.028000 +392 77.421000 +393 77.815000 +394 78.210000 +395 78.606000 +396 79.003000 +397 79.401000 +398 79.800000 +399 80.200000 +400 80.599000 +401 80.997000 +402 81.394000 +403 81.790000 +404 82.185000 +405 82.579000 +406 82.972000 +407 83.364000 +408 83.755000 +409 84.145000 +410 84.534000 +411 84.922000 +412 85.309000 +413 85.695000 +414 86.080000 +415 86.464000 +416 86.847000 +417 87.229000 +418 87.610000 +419 87.990000 +420 88.369000 +421 88.747000 +422 89.124000 +423 89.500000 +424 89.875000 +425 90.249000 +426 90.622000 +427 90.994000 +428 91.365000 +429 91.735000 +430 92.104000 +431 92.472000 +432 92.839000 +433 93.205000 +434 93.570000 +435 93.934000 +436 94.297000 +437 94.659000 +438 95.020000 +439 95.380000 +440 95.739000 +441 96.097000 +442 96.454000 +443 96.810000 +444 97.165000 +445 97.519000 +446 97.872000 +447 98.224000 +448 98.575000 +449 98.925000 +450 99.274000 +451 99.622000 +452 99.969000 +453 100.315000 +454 100.660000 +455 101.004000 +456 101.347000 +457 101.689000 +458 102.030000 +459 102.370000 +460 102.709000 +461 103.047000 +462 103.384000 +463 103.720000 +464 104.055000 +465 104.389000 +466 104.722000 +467 105.054000 +468 105.385000 +469 105.715000 +470 106.044000 +471 106.372000 +472 106.699000 +473 107.025000 +474 107.350000 +475 107.674000 +476 107.997000 +477 108.319000 +478 108.640000 +479 108.960000 +480 109.279000 +481 109.597000 +482 109.914000 +483 110.230000 +484 110.545000 +485 110.859000 +486 111.172000 +487 111.484000 +488 111.795000 +489 112.105000 +490 112.414000 +491 112.722000 +492 113.029000 +493 113.335000 +494 113.640000 +495 113.944000 +496 114.247000 +497 114.549000 +498 114.850000 +499 115.150000 +500 115.449000 +501 115.747000 +502 116.044000 +503 116.340000 +504 116.635000 +505 116.929000 +506 117.222000 +507 117.514000 +508 117.805000 +509 118.095000 +510 118.384000 +511 118.672000 +512 118.959000 +513 119.245000 +514 119.530000 +515 119.814000 +516 120.097000 +517 120.379000 +518 120.660000 +519 120.940000 +520 121.219000 +521 121.497000 +522 121.774000 +523 122.050000 +524 122.325000 +525 122.599000 +526 122.872000 +527 123.144000 +528 123.415000 +529 123.685000 +530 123.954000 +531 124.222000 +532 124.489000 +533 124.755000 +534 125.020000 +535 125.284000 +536 125.547000 +537 125.809000 +538 126.070000 +539 126.330000 +540 126.589000 +541 126.847000 +542 127.104000 +543 127.360000 +544 127.615000 +545 127.869000 +546 128.122000 +547 128.374000 +548 128.625000 +549 128.875000 +550 129.124000 +551 129.372000 +552 129.619000 +553 129.865000 +554 130.110000 +555 130.354000 +556 130.597000 +557 130.839000 +558 131.080000 +559 131.320000 +560 131.559000 +561 131.797000 +562 132.034000 +563 132.270000 +564 132.505000 +565 132.739000 +566 132.972000 +567 133.204000 +568 133.435000 +569 133.665000 +570 133.894000 +571 134.122000 +572 134.349000 +573 134.575000 +574 134.800000 +575 135.024000 +576 135.247000 +577 135.469000 +578 135.690000 +579 135.910000 +580 136.129000 +581 136.347000 +582 136.564000 +583 136.780000 +584 136.995000 +585 137.209000 +586 137.422000 +587 137.634000 +588 137.845000 +589 138.055000 +590 138.264000 +591 138.472000 +592 138.679000 +593 138.885000 +594 139.090000 +595 139.294000 +596 139.497000 +597 139.699000 +598 139.900000 +599 140.100000 +600 140.299000 +601 140.497000 +602 140.694000 +603 140.890000 +604 141.085000 +605 141.279000 +606 141.472000 +607 141.664000 +608 141.855000 +609 142.045000 +610 142.234000 +611 142.422000 +612 142.609000 +613 142.795000 +614 142.980000 +615 143.164000 +616 143.347000 +617 143.529000 +618 143.710000 +619 143.890000 +620 144.069000 +621 144.247000 +622 144.424000 +623 144.600000 +624 144.775000 +625 144.949000 +626 145.122000 +627 145.294000 +628 145.465000 +629 145.635000 +630 145.804000 +631 145.972000 +632 146.139000 +633 146.305000 +634 146.470000 +635 146.634000 +636 146.797000 +637 146.959000 +638 147.120000 +639 147.280000 +640 147.439000 +641 147.597000 +642 147.754000 +643 147.910000 +644 148.065000 +645 148.219000 +646 148.372000 +647 148.524000 +648 148.675000 +649 148.825000 +650 148.974000 +651 149.122000 +652 149.269000 +653 149.415000 +654 149.560000 +655 149.704000 +656 149.847000 +657 149.989000 +658 150.130000 +659 150.270000 +660 150.409000 +661 150.547000 +662 150.684000 +663 150.820000 +664 150.955000 +665 151.089000 +666 151.222000 +667 151.354000 +668 151.485000 +669 151.615000 +670 151.744000 +671 151.872000 +672 151.999000 +673 152.125000 +674 152.250000 +675 152.374000 +676 152.497000 +677 152.619000 +678 152.740000 +679 152.860000 +680 152.979000 +681 153.097000 +682 153.214000 +683 153.330000 +684 153.445000 +685 153.559000 +686 153.672000 +687 153.784000 +688 153.895000 +689 154.005000 +690 154.114000 +691 154.222000 +692 154.329000 +693 154.435000 +694 154.540000 +695 154.644000 +696 154.747000 +697 154.849000 +698 154.950000 +699 155.050000 +700 155.149000 +701 155.247000 +702 155.344000 +703 155.440000 +704 155.535000 +705 155.629000 +706 155.722000 +707 155.814000 +708 155.905000 +709 155.995000 +710 156.084000 +711 156.172000 +712 156.259000 +713 156.345000 +714 156.430000 +715 156.514000 +716 156.597000 +717 156.679000 +718 156.760000 +719 156.840000 +720 156.919000 +721 156.997000 +722 157.074000 +723 157.150000 +724 157.225000 +725 157.299000 +726 157.372000 +727 157.444000 +728 157.515000 +729 157.585000 +730 157.654000 +731 157.722000 +732 157.789000 +733 157.855000 +734 157.920000 +735 157.984000 +736 158.047000 +737 158.109000 +738 158.170000 +739 158.230000 +740 158.289000 +741 158.347000 +742 158.404000 +743 158.460000 +744 158.515000 +745 158.569000 +746 158.622000 +747 158.674000 +748 158.725000 +749 158.775000 +750 158.824000 +751 158.872000 +752 158.919000 +753 158.965000 +754 159.010000 +755 159.054000 +756 159.097000 +757 159.139000 +758 159.180000 +759 159.220000 +760 159.259000 +761 159.297000 +762 159.334000 +763 159.370000 +764 159.405000 +765 159.439000 +766 159.472000 +767 159.504000 +768 159.535000 +769 159.565000 +770 159.594000 +771 159.622000 +772 159.649000 +773 159.675000 +774 159.700000 +775 159.724000 +776 159.747000 +777 159.769000 +778 159.790000 +779 159.810000 +780 159.829000 +781 159.847000 +782 159.864000 +783 159.880000 +784 159.895000 +785 159.909000 +786 159.922000 +787 159.934000 +788 159.945000 +789 159.955000 +790 159.964000 +791 159.972000 +792 159.979000 +793 159.985000 +794 159.990000 +795 159.994000 +796 159.997000 +797 159.999000 +798 160.000000 +799 160.000000 diff --git a/tests/runtests/limit3/sunny-day/checkresult b/tests/runtests/limit3/sunny-day/checkresult index 5d377a40a9..1a12a9fdb9 100755 --- a/tests/runtests/limit3/sunny-day/checkresult +++ b/tests/runtests/limit3/sunny-day/checkresult @@ -47,7 +47,7 @@ for line in result_file.readlines(): # # input -> output following - # + # error = math.fabs(in_value - out_value) if error > 0.0: diff --git a/tests/runtests/limit3v2/limit-accel-and-max/expected b/tests/runtests/limit3v2/limit-accel-and-max/expected index ebda2f2fda..0016b58091 100644 --- a/tests/runtests/limit3v2/limit-accel-and-max/expected +++ b/tests/runtests/limit3v2/limit-accel-and-max/expected @@ -1,800 +1,800 @@ -0 0.001000 -1 0.003000 -2 0.006000 -3 0.010000 -4 0.015000 -5 0.021000 -6 0.028000 -7 0.036000 -8 0.045000 -9 0.055000 -10 0.066000 -11 0.078000 -12 0.091000 -13 0.105000 -14 0.120000 -15 0.136000 -16 0.153000 -17 0.171000 -18 0.190000 -19 0.210000 -20 0.231000 -21 0.253000 -22 0.276000 -23 0.300000 -24 0.325000 -25 0.351000 -26 0.378000 -27 0.406000 -28 0.435000 -29 0.465000 -30 0.496000 -31 0.528000 -32 0.561000 -33 0.595000 -34 0.630000 -35 0.666000 -36 0.703000 -37 0.741000 -38 0.780000 -39 0.820000 -40 0.861000 -41 0.903000 -42 0.946000 -43 0.990000 -44 1.035000 -45 1.081000 -46 1.128000 -47 1.176000 -48 1.225000 -49 1.275000 -50 1.326000 -51 1.378000 -52 1.431000 -53 1.485000 -54 1.540000 -55 1.596000 -56 1.653000 -57 1.711000 -58 1.770000 -59 1.830000 -60 1.891000 -61 1.953000 -62 2.016000 -63 2.080000 -64 2.145000 -65 2.211000 -66 2.278000 -67 2.346000 -68 2.415000 -69 2.485000 -70 2.556000 -71 2.628000 -72 2.701000 -73 2.775000 -74 2.850000 -75 2.926000 -76 3.003000 -77 3.081000 -78 3.160000 -79 3.240000 -80 3.321000 -81 3.403000 -82 3.486000 -83 3.570000 -84 3.655000 -85 3.741000 -86 3.828000 -87 3.916000 -88 4.005000 -89 4.095000 -90 4.186000 -91 4.278000 -92 4.371000 -93 4.465000 -94 4.560000 -95 4.656000 -96 4.753000 -97 4.851000 -98 4.950000 -99 5.050000 -100 5.151000 -101 5.253000 -102 5.356000 -103 5.460000 -104 5.565000 -105 5.671000 -106 5.778000 -107 5.886000 -108 5.995000 -109 6.105000 -110 6.216000 -111 6.328000 -112 6.441000 -113 6.555000 -114 6.670000 -115 6.786000 -116 6.903000 -117 7.021000 -118 7.140000 -119 7.260000 -120 7.381000 -121 7.503000 -122 7.626000 -123 7.750000 -124 7.875000 -125 8.001000 -126 8.128000 -127 8.256000 -128 8.385000 -129 8.515000 -130 8.646000 -131 8.778000 -132 8.911000 -133 9.045000 -134 9.180000 -135 9.316000 -136 9.453000 -137 9.591000 -138 9.730000 -139 9.870000 -140 10.011000 -141 10.153000 -142 10.296000 -143 10.440000 -144 10.585000 -145 10.731000 -146 10.878000 -147 11.026000 -148 11.175000 -149 11.325000 -150 11.476000 -151 11.628000 -152 11.781000 -153 11.935000 -154 12.090000 -155 12.246000 -156 12.403000 -157 12.561000 -158 12.720000 -159 12.880000 -160 13.041000 -161 13.203000 -162 13.366000 -163 13.530000 -164 13.695000 -165 13.861000 -166 14.028000 -167 14.196000 -168 14.365000 -169 14.535000 -170 14.706000 -171 14.878000 -172 15.051000 -173 15.225000 -174 15.400000 -175 15.576000 -176 15.753000 -177 15.931000 -178 16.110000 -179 16.290000 -180 16.471000 -181 16.653000 -182 16.836000 -183 17.020000 -184 17.205000 -185 17.391000 -186 17.578000 -187 17.766000 -188 17.955000 -189 18.145000 -190 18.336000 -191 18.528000 -192 18.721000 -193 18.915000 -194 19.110000 -195 19.306000 -196 19.503000 -197 19.701000 -198 19.900000 -199 20.100000 -200 20.301000 -201 20.503000 -202 20.706000 -203 20.910000 -204 21.115000 -205 21.321000 -206 21.528000 -207 21.736000 -208 21.945000 -209 22.155000 -210 22.366000 -211 22.578000 -212 22.791000 -213 23.005000 -214 23.220000 -215 23.436000 -216 23.653000 -217 23.871000 -218 24.090000 -219 24.310000 -220 24.531000 -221 24.753000 -222 24.976000 -223 25.200000 -224 25.425000 -225 25.651000 -226 25.878000 -227 26.106000 -228 26.335000 -229 26.565000 -230 26.796000 -231 27.028000 -232 27.261000 -233 27.495000 -234 27.730000 -235 27.966000 -236 28.203000 -237 28.441000 -238 28.680000 -239 28.920000 -240 29.161000 -241 29.403000 -242 29.646000 -243 29.890000 -244 30.135000 -245 30.381000 -246 30.628000 -247 30.876000 -248 31.125000 -249 31.375000 -250 31.626000 -251 31.878000 -252 32.131000 -253 32.385000 -254 32.640000 -255 32.896000 -256 33.153000 -257 33.411000 -258 33.670000 -259 33.930000 -260 34.191000 -261 34.453000 -262 34.716000 -263 34.980000 -264 35.245000 -265 35.511000 -266 35.778000 -267 36.046000 -268 36.315000 -269 36.585000 -270 36.856000 -271 37.128000 -272 37.401000 -273 37.675000 -274 37.950000 -275 38.226000 -276 38.503000 -277 38.781000 -278 39.060000 -279 39.340000 -280 39.621000 -281 39.903000 -282 40.186000 -283 40.470000 -284 40.755000 -285 41.041000 -286 41.328000 -287 41.616000 -288 41.905000 -289 42.195000 -290 42.486000 -291 42.778000 -292 43.071000 -293 43.365000 -294 43.660000 -295 43.956000 -296 44.253000 -297 44.551000 -298 44.850000 -299 45.150000 -300 45.451000 -301 45.753000 -302 46.056000 -303 46.360000 -304 46.665000 -305 46.971000 -306 47.278000 -307 47.586000 -308 47.895000 -309 48.205000 -310 48.516000 -311 48.828000 -312 49.141000 -313 49.455000 -314 49.770000 -315 50.086000 -316 50.403000 -317 50.721000 -318 51.040000 -319 51.360000 -320 51.681000 -321 52.003000 -322 52.326000 -323 52.650000 -324 52.975000 -325 53.301000 -326 53.628000 -327 53.956000 -328 54.285000 -329 54.615000 -330 54.946000 -331 55.278000 -332 55.611000 -333 55.945000 -334 56.280000 -335 56.616000 -336 56.953000 -337 57.291000 -338 57.630000 -339 57.970000 -340 58.311000 -341 58.653000 -342 58.996000 -343 59.340000 -344 59.685000 -345 60.031000 -346 60.378000 -347 60.726000 -348 61.075000 -349 61.425000 -350 61.776000 -351 62.128000 -352 62.481000 -353 62.835000 -354 63.190000 -355 63.546000 -356 63.903000 -357 64.261000 -358 64.620000 -359 64.980000 -360 65.341000 -361 65.703000 -362 66.066000 -363 66.430000 -364 66.795000 -365 67.161000 -366 67.528000 -367 67.896000 -368 68.265000 -369 68.635000 -370 69.006000 -371 69.378000 -372 69.751000 -373 70.125000 -374 70.500000 -375 70.876000 -376 71.253000 -377 71.631000 -378 72.010000 -379 72.390000 -380 72.771000 -381 73.153000 -382 73.536000 -383 73.920000 -384 74.305000 -385 74.691000 -386 75.078000 -387 75.466000 -388 75.855000 -389 76.245000 -390 76.636000 -391 77.028000 -392 77.421000 -393 77.815000 -394 78.210000 -395 78.606000 -396 79.003000 -397 79.401000 -398 79.800000 -399 80.200000 -400 80.599000 -401 80.997000 -402 81.394000 -403 81.790000 -404 82.185000 -405 82.579000 -406 82.972000 -407 83.364000 -408 83.755000 -409 84.145000 -410 84.534000 -411 84.922000 -412 85.309000 -413 85.695000 -414 86.080000 -415 86.464000 -416 86.847000 -417 87.229000 -418 87.610000 -419 87.990000 -420 88.369000 -421 88.747000 -422 89.124000 -423 89.500000 -424 89.875000 -425 90.249000 -426 90.622000 -427 90.994000 -428 91.365000 -429 91.735000 -430 92.104000 -431 92.472000 -432 92.839000 -433 93.205000 -434 93.570000 -435 93.934000 -436 94.297000 -437 94.659000 -438 95.020000 -439 95.380000 -440 95.739000 -441 96.097000 -442 96.454000 -443 96.810000 -444 97.165000 -445 97.519000 -446 97.872000 -447 98.224000 -448 98.575000 -449 98.925000 -450 99.274000 -451 99.622000 -452 99.969000 -453 100.315000 -454 100.660000 -455 101.004000 -456 101.347000 -457 101.689000 -458 102.030000 -459 102.370000 -460 102.709000 -461 103.047000 -462 103.384000 -463 103.720000 -464 104.055000 -465 104.389000 -466 104.722000 -467 105.054000 -468 105.385000 -469 105.715000 -470 106.044000 -471 106.372000 -472 106.699000 -473 107.025000 -474 107.350000 -475 107.674000 -476 107.997000 -477 108.319000 -478 108.640000 -479 108.960000 -480 109.279000 -481 109.597000 -482 109.914000 -483 110.230000 -484 110.545000 -485 110.859000 -486 111.172000 -487 111.484000 -488 111.795000 -489 112.105000 -490 112.414000 -491 112.722000 -492 113.029000 -493 113.335000 -494 113.640000 -495 113.944000 -496 114.247000 -497 114.549000 -498 114.850000 -499 115.150000 -500 115.449000 -501 115.747000 -502 116.044000 -503 116.340000 -504 116.635000 -505 116.929000 -506 117.222000 -507 117.514000 -508 117.805000 -509 118.095000 -510 118.384000 -511 118.672000 -512 118.959000 -513 119.245000 -514 119.530000 -515 119.814000 -516 120.097000 -517 120.379000 -518 120.660000 -519 120.940000 -520 121.219000 -521 121.497000 -522 121.774000 -523 122.050000 -524 122.325000 -525 122.599000 -526 122.872000 -527 123.144000 -528 123.415000 -529 123.685000 -530 123.954000 -531 124.222000 -532 124.489000 -533 124.755000 -534 125.020000 -535 125.284000 -536 125.547000 -537 125.809000 -538 126.070000 -539 126.330000 -540 126.589000 -541 126.847000 -542 127.104000 -543 127.360000 -544 127.615000 -545 127.869000 -546 128.122000 -547 128.374000 -548 128.625000 -549 128.875000 -550 129.124000 -551 129.372000 -552 129.619000 -553 129.865000 -554 130.110000 -555 130.354000 -556 130.597000 -557 130.839000 -558 131.080000 -559 131.320000 -560 131.559000 -561 131.797000 -562 132.034000 -563 132.270000 -564 132.505000 -565 132.739000 -566 132.972000 -567 133.204000 -568 133.435000 -569 133.665000 -570 133.894000 -571 134.122000 -572 134.349000 -573 134.575000 -574 134.800000 -575 135.024000 -576 135.247000 -577 135.469000 -578 135.690000 -579 135.910000 -580 136.129000 -581 136.347000 -582 136.564000 -583 136.780000 -584 136.995000 -585 137.209000 -586 137.422000 -587 137.634000 -588 137.845000 -589 138.055000 -590 138.264000 -591 138.472000 -592 138.679000 -593 138.885000 -594 139.090000 -595 139.294000 -596 139.497000 -597 139.699000 -598 139.900000 -599 140.100000 -600 140.299000 -601 140.497000 -602 140.694000 -603 140.890000 -604 141.085000 -605 141.279000 -606 141.472000 -607 141.664000 -608 141.855000 -609 142.045000 -610 142.234000 -611 142.422000 -612 142.609000 -613 142.795000 -614 142.980000 -615 143.164000 -616 143.347000 -617 143.529000 -618 143.710000 -619 143.890000 -620 144.069000 -621 144.247000 -622 144.424000 -623 144.600000 -624 144.775000 -625 144.949000 -626 145.122000 -627 145.294000 -628 145.465000 -629 145.635000 -630 145.804000 -631 145.972000 -632 146.139000 -633 146.305000 -634 146.470000 -635 146.634000 -636 146.797000 -637 146.959000 -638 147.120000 -639 147.280000 -640 147.439000 -641 147.597000 -642 147.754000 -643 147.910000 -644 148.065000 -645 148.219000 -646 148.372000 -647 148.524000 -648 148.675000 -649 148.825000 -650 148.974000 -651 149.122000 -652 149.269000 -653 149.415000 -654 149.560000 -655 149.704000 -656 149.847000 -657 149.989000 -658 150.130000 -659 150.270000 -660 150.409000 -661 150.547000 -662 150.684000 -663 150.820000 -664 150.955000 -665 151.089000 -666 151.222000 -667 151.354000 -668 151.485000 -669 151.615000 -670 151.744000 -671 151.872000 -672 151.999000 -673 152.125000 -674 152.250000 -675 152.374000 -676 152.497000 -677 152.619000 -678 152.740000 -679 152.860000 -680 152.979000 -681 153.097000 -682 153.214000 -683 153.330000 -684 153.445000 -685 153.559000 -686 153.672000 -687 153.784000 -688 153.895000 -689 154.005000 -690 154.114000 -691 154.222000 -692 154.329000 -693 154.435000 -694 154.540000 -695 154.644000 -696 154.747000 -697 154.849000 -698 154.950000 -699 155.050000 -700 155.149000 -701 155.247000 -702 155.344000 -703 155.440000 -704 155.535000 -705 155.629000 -706 155.722000 -707 155.814000 -708 155.905000 -709 155.995000 -710 156.084000 -711 156.172000 -712 156.259000 -713 156.345000 -714 156.430000 -715 156.514000 -716 156.597000 -717 156.679000 -718 156.760000 -719 156.840000 -720 156.919000 -721 156.997000 -722 157.074000 -723 157.150000 -724 157.225000 -725 157.299000 -726 157.372000 -727 157.444000 -728 157.515000 -729 157.585000 -730 157.654000 -731 157.722000 -732 157.789000 -733 157.855000 -734 157.920000 -735 157.984000 -736 158.047000 -737 158.109000 -738 158.170000 -739 158.230000 -740 158.289000 -741 158.347000 -742 158.404000 -743 158.460000 -744 158.515000 -745 158.569000 -746 158.622000 -747 158.674000 -748 158.725000 -749 158.775000 -750 158.824000 -751 158.872000 -752 158.919000 -753 158.965000 -754 159.010000 -755 159.054000 -756 159.097000 -757 159.139000 -758 159.180000 -759 159.220000 -760 159.259000 -761 159.297000 -762 159.334000 -763 159.370000 -764 159.405000 -765 159.439000 -766 159.472000 -767 159.504000 -768 159.535000 -769 159.565000 -770 159.594000 -771 159.622000 -772 159.649000 -773 159.675000 -774 159.700000 -775 159.724000 -776 159.747000 -777 159.769000 -778 159.790000 -779 159.810000 -780 159.829000 -781 159.847000 -782 159.864000 -783 159.880000 -784 159.895000 -785 159.909000 -786 159.922000 -787 159.934000 -788 159.945000 -789 159.955000 -790 159.964000 -791 159.972000 -792 159.979000 -793 159.985000 -794 159.990000 -795 159.994000 -796 159.997000 -797 159.999000 -798 160.000000 -799 160.000000 +0 0.001000 +1 0.003000 +2 0.006000 +3 0.010000 +4 0.015000 +5 0.021000 +6 0.028000 +7 0.036000 +8 0.045000 +9 0.055000 +10 0.066000 +11 0.078000 +12 0.091000 +13 0.105000 +14 0.120000 +15 0.136000 +16 0.153000 +17 0.171000 +18 0.190000 +19 0.210000 +20 0.231000 +21 0.253000 +22 0.276000 +23 0.300000 +24 0.325000 +25 0.351000 +26 0.378000 +27 0.406000 +28 0.435000 +29 0.465000 +30 0.496000 +31 0.528000 +32 0.561000 +33 0.595000 +34 0.630000 +35 0.666000 +36 0.703000 +37 0.741000 +38 0.780000 +39 0.820000 +40 0.861000 +41 0.903000 +42 0.946000 +43 0.990000 +44 1.035000 +45 1.081000 +46 1.128000 +47 1.176000 +48 1.225000 +49 1.275000 +50 1.326000 +51 1.378000 +52 1.431000 +53 1.485000 +54 1.540000 +55 1.596000 +56 1.653000 +57 1.711000 +58 1.770000 +59 1.830000 +60 1.891000 +61 1.953000 +62 2.016000 +63 2.080000 +64 2.145000 +65 2.211000 +66 2.278000 +67 2.346000 +68 2.415000 +69 2.485000 +70 2.556000 +71 2.628000 +72 2.701000 +73 2.775000 +74 2.850000 +75 2.926000 +76 3.003000 +77 3.081000 +78 3.160000 +79 3.240000 +80 3.321000 +81 3.403000 +82 3.486000 +83 3.570000 +84 3.655000 +85 3.741000 +86 3.828000 +87 3.916000 +88 4.005000 +89 4.095000 +90 4.186000 +91 4.278000 +92 4.371000 +93 4.465000 +94 4.560000 +95 4.656000 +96 4.753000 +97 4.851000 +98 4.950000 +99 5.050000 +100 5.151000 +101 5.253000 +102 5.356000 +103 5.460000 +104 5.565000 +105 5.671000 +106 5.778000 +107 5.886000 +108 5.995000 +109 6.105000 +110 6.216000 +111 6.328000 +112 6.441000 +113 6.555000 +114 6.670000 +115 6.786000 +116 6.903000 +117 7.021000 +118 7.140000 +119 7.260000 +120 7.381000 +121 7.503000 +122 7.626000 +123 7.750000 +124 7.875000 +125 8.001000 +126 8.128000 +127 8.256000 +128 8.385000 +129 8.515000 +130 8.646000 +131 8.778000 +132 8.911000 +133 9.045000 +134 9.180000 +135 9.316000 +136 9.453000 +137 9.591000 +138 9.730000 +139 9.870000 +140 10.011000 +141 10.153000 +142 10.296000 +143 10.440000 +144 10.585000 +145 10.731000 +146 10.878000 +147 11.026000 +148 11.175000 +149 11.325000 +150 11.476000 +151 11.628000 +152 11.781000 +153 11.935000 +154 12.090000 +155 12.246000 +156 12.403000 +157 12.561000 +158 12.720000 +159 12.880000 +160 13.041000 +161 13.203000 +162 13.366000 +163 13.530000 +164 13.695000 +165 13.861000 +166 14.028000 +167 14.196000 +168 14.365000 +169 14.535000 +170 14.706000 +171 14.878000 +172 15.051000 +173 15.225000 +174 15.400000 +175 15.576000 +176 15.753000 +177 15.931000 +178 16.110000 +179 16.290000 +180 16.471000 +181 16.653000 +182 16.836000 +183 17.020000 +184 17.205000 +185 17.391000 +186 17.578000 +187 17.766000 +188 17.955000 +189 18.145000 +190 18.336000 +191 18.528000 +192 18.721000 +193 18.915000 +194 19.110000 +195 19.306000 +196 19.503000 +197 19.701000 +198 19.900000 +199 20.100000 +200 20.301000 +201 20.503000 +202 20.706000 +203 20.910000 +204 21.115000 +205 21.321000 +206 21.528000 +207 21.736000 +208 21.945000 +209 22.155000 +210 22.366000 +211 22.578000 +212 22.791000 +213 23.005000 +214 23.220000 +215 23.436000 +216 23.653000 +217 23.871000 +218 24.090000 +219 24.310000 +220 24.531000 +221 24.753000 +222 24.976000 +223 25.200000 +224 25.425000 +225 25.651000 +226 25.878000 +227 26.106000 +228 26.335000 +229 26.565000 +230 26.796000 +231 27.028000 +232 27.261000 +233 27.495000 +234 27.730000 +235 27.966000 +236 28.203000 +237 28.441000 +238 28.680000 +239 28.920000 +240 29.161000 +241 29.403000 +242 29.646000 +243 29.890000 +244 30.135000 +245 30.381000 +246 30.628000 +247 30.876000 +248 31.125000 +249 31.375000 +250 31.626000 +251 31.878000 +252 32.131000 +253 32.385000 +254 32.640000 +255 32.896000 +256 33.153000 +257 33.411000 +258 33.670000 +259 33.930000 +260 34.191000 +261 34.453000 +262 34.716000 +263 34.980000 +264 35.245000 +265 35.511000 +266 35.778000 +267 36.046000 +268 36.315000 +269 36.585000 +270 36.856000 +271 37.128000 +272 37.401000 +273 37.675000 +274 37.950000 +275 38.226000 +276 38.503000 +277 38.781000 +278 39.060000 +279 39.340000 +280 39.621000 +281 39.903000 +282 40.186000 +283 40.470000 +284 40.755000 +285 41.041000 +286 41.328000 +287 41.616000 +288 41.905000 +289 42.195000 +290 42.486000 +291 42.778000 +292 43.071000 +293 43.365000 +294 43.660000 +295 43.956000 +296 44.253000 +297 44.551000 +298 44.850000 +299 45.150000 +300 45.451000 +301 45.753000 +302 46.056000 +303 46.360000 +304 46.665000 +305 46.971000 +306 47.278000 +307 47.586000 +308 47.895000 +309 48.205000 +310 48.516000 +311 48.828000 +312 49.141000 +313 49.455000 +314 49.770000 +315 50.086000 +316 50.403000 +317 50.721000 +318 51.040000 +319 51.360000 +320 51.681000 +321 52.003000 +322 52.326000 +323 52.650000 +324 52.975000 +325 53.301000 +326 53.628000 +327 53.956000 +328 54.285000 +329 54.615000 +330 54.946000 +331 55.278000 +332 55.611000 +333 55.945000 +334 56.280000 +335 56.616000 +336 56.953000 +337 57.291000 +338 57.630000 +339 57.970000 +340 58.311000 +341 58.653000 +342 58.996000 +343 59.340000 +344 59.685000 +345 60.031000 +346 60.378000 +347 60.726000 +348 61.075000 +349 61.425000 +350 61.776000 +351 62.128000 +352 62.481000 +353 62.835000 +354 63.190000 +355 63.546000 +356 63.903000 +357 64.261000 +358 64.620000 +359 64.980000 +360 65.341000 +361 65.703000 +362 66.066000 +363 66.430000 +364 66.795000 +365 67.161000 +366 67.528000 +367 67.896000 +368 68.265000 +369 68.635000 +370 69.006000 +371 69.378000 +372 69.751000 +373 70.125000 +374 70.500000 +375 70.876000 +376 71.253000 +377 71.631000 +378 72.010000 +379 72.390000 +380 72.771000 +381 73.153000 +382 73.536000 +383 73.920000 +384 74.305000 +385 74.691000 +386 75.078000 +387 75.466000 +388 75.855000 +389 76.245000 +390 76.636000 +391 77.028000 +392 77.421000 +393 77.815000 +394 78.210000 +395 78.606000 +396 79.003000 +397 79.401000 +398 79.800000 +399 80.200000 +400 80.599000 +401 80.997000 +402 81.394000 +403 81.790000 +404 82.185000 +405 82.579000 +406 82.972000 +407 83.364000 +408 83.755000 +409 84.145000 +410 84.534000 +411 84.922000 +412 85.309000 +413 85.695000 +414 86.080000 +415 86.464000 +416 86.847000 +417 87.229000 +418 87.610000 +419 87.990000 +420 88.369000 +421 88.747000 +422 89.124000 +423 89.500000 +424 89.875000 +425 90.249000 +426 90.622000 +427 90.994000 +428 91.365000 +429 91.735000 +430 92.104000 +431 92.472000 +432 92.839000 +433 93.205000 +434 93.570000 +435 93.934000 +436 94.297000 +437 94.659000 +438 95.020000 +439 95.380000 +440 95.739000 +441 96.097000 +442 96.454000 +443 96.810000 +444 97.165000 +445 97.519000 +446 97.872000 +447 98.224000 +448 98.575000 +449 98.925000 +450 99.274000 +451 99.622000 +452 99.969000 +453 100.315000 +454 100.660000 +455 101.004000 +456 101.347000 +457 101.689000 +458 102.030000 +459 102.370000 +460 102.709000 +461 103.047000 +462 103.384000 +463 103.720000 +464 104.055000 +465 104.389000 +466 104.722000 +467 105.054000 +468 105.385000 +469 105.715000 +470 106.044000 +471 106.372000 +472 106.699000 +473 107.025000 +474 107.350000 +475 107.674000 +476 107.997000 +477 108.319000 +478 108.640000 +479 108.960000 +480 109.279000 +481 109.597000 +482 109.914000 +483 110.230000 +484 110.545000 +485 110.859000 +486 111.172000 +487 111.484000 +488 111.795000 +489 112.105000 +490 112.414000 +491 112.722000 +492 113.029000 +493 113.335000 +494 113.640000 +495 113.944000 +496 114.247000 +497 114.549000 +498 114.850000 +499 115.150000 +500 115.449000 +501 115.747000 +502 116.044000 +503 116.340000 +504 116.635000 +505 116.929000 +506 117.222000 +507 117.514000 +508 117.805000 +509 118.095000 +510 118.384000 +511 118.672000 +512 118.959000 +513 119.245000 +514 119.530000 +515 119.814000 +516 120.097000 +517 120.379000 +518 120.660000 +519 120.940000 +520 121.219000 +521 121.497000 +522 121.774000 +523 122.050000 +524 122.325000 +525 122.599000 +526 122.872000 +527 123.144000 +528 123.415000 +529 123.685000 +530 123.954000 +531 124.222000 +532 124.489000 +533 124.755000 +534 125.020000 +535 125.284000 +536 125.547000 +537 125.809000 +538 126.070000 +539 126.330000 +540 126.589000 +541 126.847000 +542 127.104000 +543 127.360000 +544 127.615000 +545 127.869000 +546 128.122000 +547 128.374000 +548 128.625000 +549 128.875000 +550 129.124000 +551 129.372000 +552 129.619000 +553 129.865000 +554 130.110000 +555 130.354000 +556 130.597000 +557 130.839000 +558 131.080000 +559 131.320000 +560 131.559000 +561 131.797000 +562 132.034000 +563 132.270000 +564 132.505000 +565 132.739000 +566 132.972000 +567 133.204000 +568 133.435000 +569 133.665000 +570 133.894000 +571 134.122000 +572 134.349000 +573 134.575000 +574 134.800000 +575 135.024000 +576 135.247000 +577 135.469000 +578 135.690000 +579 135.910000 +580 136.129000 +581 136.347000 +582 136.564000 +583 136.780000 +584 136.995000 +585 137.209000 +586 137.422000 +587 137.634000 +588 137.845000 +589 138.055000 +590 138.264000 +591 138.472000 +592 138.679000 +593 138.885000 +594 139.090000 +595 139.294000 +596 139.497000 +597 139.699000 +598 139.900000 +599 140.100000 +600 140.299000 +601 140.497000 +602 140.694000 +603 140.890000 +604 141.085000 +605 141.279000 +606 141.472000 +607 141.664000 +608 141.855000 +609 142.045000 +610 142.234000 +611 142.422000 +612 142.609000 +613 142.795000 +614 142.980000 +615 143.164000 +616 143.347000 +617 143.529000 +618 143.710000 +619 143.890000 +620 144.069000 +621 144.247000 +622 144.424000 +623 144.600000 +624 144.775000 +625 144.949000 +626 145.122000 +627 145.294000 +628 145.465000 +629 145.635000 +630 145.804000 +631 145.972000 +632 146.139000 +633 146.305000 +634 146.470000 +635 146.634000 +636 146.797000 +637 146.959000 +638 147.120000 +639 147.280000 +640 147.439000 +641 147.597000 +642 147.754000 +643 147.910000 +644 148.065000 +645 148.219000 +646 148.372000 +647 148.524000 +648 148.675000 +649 148.825000 +650 148.974000 +651 149.122000 +652 149.269000 +653 149.415000 +654 149.560000 +655 149.704000 +656 149.847000 +657 149.989000 +658 150.130000 +659 150.270000 +660 150.409000 +661 150.547000 +662 150.684000 +663 150.820000 +664 150.955000 +665 151.089000 +666 151.222000 +667 151.354000 +668 151.485000 +669 151.615000 +670 151.744000 +671 151.872000 +672 151.999000 +673 152.125000 +674 152.250000 +675 152.374000 +676 152.497000 +677 152.619000 +678 152.740000 +679 152.860000 +680 152.979000 +681 153.097000 +682 153.214000 +683 153.330000 +684 153.445000 +685 153.559000 +686 153.672000 +687 153.784000 +688 153.895000 +689 154.005000 +690 154.114000 +691 154.222000 +692 154.329000 +693 154.435000 +694 154.540000 +695 154.644000 +696 154.747000 +697 154.849000 +698 154.950000 +699 155.050000 +700 155.149000 +701 155.247000 +702 155.344000 +703 155.440000 +704 155.535000 +705 155.629000 +706 155.722000 +707 155.814000 +708 155.905000 +709 155.995000 +710 156.084000 +711 156.172000 +712 156.259000 +713 156.345000 +714 156.430000 +715 156.514000 +716 156.597000 +717 156.679000 +718 156.760000 +719 156.840000 +720 156.919000 +721 156.997000 +722 157.074000 +723 157.150000 +724 157.225000 +725 157.299000 +726 157.372000 +727 157.444000 +728 157.515000 +729 157.585000 +730 157.654000 +731 157.722000 +732 157.789000 +733 157.855000 +734 157.920000 +735 157.984000 +736 158.047000 +737 158.109000 +738 158.170000 +739 158.230000 +740 158.289000 +741 158.347000 +742 158.404000 +743 158.460000 +744 158.515000 +745 158.569000 +746 158.622000 +747 158.674000 +748 158.725000 +749 158.775000 +750 158.824000 +751 158.872000 +752 158.919000 +753 158.965000 +754 159.010000 +755 159.054000 +756 159.097000 +757 159.139000 +758 159.180000 +759 159.220000 +760 159.259000 +761 159.297000 +762 159.334000 +763 159.370000 +764 159.405000 +765 159.439000 +766 159.472000 +767 159.504000 +768 159.535000 +769 159.565000 +770 159.594000 +771 159.622000 +772 159.649000 +773 159.675000 +774 159.700000 +775 159.724000 +776 159.747000 +777 159.769000 +778 159.790000 +779 159.810000 +780 159.829000 +781 159.847000 +782 159.864000 +783 159.880000 +784 159.895000 +785 159.909000 +786 159.922000 +787 159.934000 +788 159.945000 +789 159.955000 +790 159.964000 +791 159.972000 +792 159.979000 +793 159.985000 +794 159.990000 +795 159.994000 +796 159.997000 +797 159.999000 +798 160.000000 +799 160.000000 diff --git a/tests/runtests/limit3v2/limit-max-velocity/expected b/tests/runtests/limit3v2/limit-max-velocity/expected index 972d58c1e2..83b98e344c 100644 --- a/tests/runtests/limit3v2/limit-max-velocity/expected +++ b/tests/runtests/limit3v2/limit-max-velocity/expected @@ -1,800 +1,800 @@ -0 0.500000 -1 1.000000 -2 1.500000 -3 2.000000 -4 2.500000 -5 3.000000 -6 3.500000 -7 4.000000 -8 4.500000 -9 5.000000 -10 5.500000 -11 6.000000 -12 6.500000 -13 7.000000 -14 7.500000 -15 8.000000 -16 8.500000 -17 9.000000 -18 9.500000 -19 10.000000 -20 10.500000 -21 11.000000 -22 11.500000 -23 12.000000 -24 12.500000 -25 13.000000 -26 13.500000 -27 14.000000 -28 14.500000 -29 15.000000 -30 15.500000 -31 16.000000 -32 16.500000 -33 17.000000 -34 17.500000 -35 18.000000 -36 18.500000 -37 19.000000 -38 19.500000 -39 20.000000 -40 20.500000 -41 21.000000 -42 21.500000 -43 22.000000 -44 22.500000 -45 23.000000 -46 23.500000 -47 24.000000 -48 24.500000 -49 25.000000 -50 25.500000 -51 26.000000 -52 26.500000 -53 27.000000 -54 27.500000 -55 28.000000 -56 28.500000 -57 29.000000 -58 29.500000 -59 30.000000 -60 30.500000 -61 31.000000 -62 31.500000 -63 32.000000 -64 32.500000 -65 33.000000 -66 33.500000 -67 34.000000 -68 34.500000 -69 35.000000 -70 35.500000 -71 36.000000 -72 36.500000 -73 37.000000 -74 37.500000 -75 38.000000 -76 38.500000 -77 39.000000 -78 39.500000 -79 40.000000 -80 40.500000 -81 41.000000 -82 41.500000 -83 42.000000 -84 42.500000 -85 43.000000 -86 43.500000 -87 44.000000 -88 44.500000 -89 45.000000 -90 45.500000 -91 46.000000 -92 46.500000 -93 47.000000 -94 47.500000 -95 48.000000 -96 48.500000 -97 49.000000 -98 49.500000 -99 50.000000 -100 50.500000 -101 51.000000 -102 51.500000 -103 52.000000 -104 52.500000 -105 53.000000 -106 53.500000 -107 54.000000 -108 54.500000 -109 55.000000 -110 55.500000 -111 56.000000 -112 56.500000 -113 57.000000 -114 57.500000 -115 58.000000 -116 58.500000 -117 59.000000 -118 59.500000 -119 60.000000 -120 60.500000 -121 61.000000 -122 61.500000 -123 62.000000 -124 62.500000 -125 63.000000 -126 63.500000 -127 64.000000 -128 64.500000 -129 65.000000 -130 65.500000 -131 66.000000 -132 66.500000 -133 67.000000 -134 67.500000 -135 68.000000 -136 68.500000 -137 69.000000 -138 69.500000 -139 70.000000 -140 70.500000 -141 71.000000 -142 71.500000 -143 72.000000 -144 72.500000 -145 73.000000 -146 73.500000 -147 74.000000 -148 74.500000 -149 75.000000 -150 75.500000 -151 76.000000 -152 76.500000 -153 77.000000 -154 77.500000 -155 78.000000 -156 78.500000 -157 79.000000 -158 79.500000 -159 80.000000 -160 80.500000 -161 81.000000 -162 81.500000 -163 82.000000 -164 82.500000 -165 83.000000 -166 83.500000 -167 84.000000 -168 84.500000 -169 85.000000 -170 85.500000 -171 86.000000 -172 86.500000 -173 87.000000 -174 87.500000 -175 88.000000 -176 88.500000 -177 89.000000 -178 89.500000 -179 90.000000 -180 90.500000 -181 91.000000 -182 91.500000 -183 92.000000 -184 92.500000 -185 93.000000 -186 93.500000 -187 94.000000 -188 94.500000 -189 95.000000 -190 95.500000 -191 96.000000 -192 96.500000 -193 97.000000 -194 97.500000 -195 98.000000 -196 98.500000 -197 99.000000 -198 99.500000 -199 100.000000 -200 100.500000 -201 101.000000 -202 101.500000 -203 102.000000 -204 102.500000 -205 103.000000 -206 103.500000 -207 104.000000 -208 104.500000 -209 105.000000 -210 105.500000 -211 106.000000 -212 106.500000 -213 107.000000 -214 107.500000 -215 108.000000 -216 108.500000 -217 109.000000 -218 109.500000 -219 110.000000 -220 110.500000 -221 111.000000 -222 111.500000 -223 112.000000 -224 112.500000 -225 113.000000 -226 113.500000 -227 114.000000 -228 114.500000 -229 115.000000 -230 115.500000 -231 116.000000 -232 116.500000 -233 117.000000 -234 117.500000 -235 118.000000 -236 118.500000 -237 119.000000 -238 119.500000 -239 120.000000 -240 120.500000 -241 121.000000 -242 121.500000 -243 122.000000 -244 122.500000 -245 123.000000 -246 123.500000 -247 124.000000 -248 124.500000 -249 125.000000 -250 125.500000 -251 126.000000 -252 126.500000 -253 127.000000 -254 127.500000 -255 128.000000 -256 128.500000 -257 129.000000 -258 129.500000 -259 130.000000 -260 130.500000 -261 131.000000 -262 131.500000 -263 132.000000 -264 132.500000 -265 133.000000 -266 133.500000 -267 134.000000 -268 134.500000 -269 135.000000 -270 135.500000 -271 136.000000 -272 136.500000 -273 137.000000 -274 137.500000 -275 138.000000 -276 138.500000 -277 139.000000 -278 139.500000 -279 140.000000 -280 140.500000 -281 141.000000 -282 141.500000 -283 142.000000 -284 142.500000 -285 143.000000 -286 143.500000 -287 144.000000 -288 144.500000 -289 145.000000 -290 145.500000 -291 146.000000 -292 146.500000 -293 147.000000 -294 147.500000 -295 148.000000 -296 148.500000 -297 149.000000 -298 149.500000 -299 150.000000 -300 150.500000 -301 151.000000 -302 151.500000 -303 152.000000 -304 152.500000 -305 153.000000 -306 153.500000 -307 154.000000 -308 154.500000 -309 155.000000 -310 155.500000 -311 156.000000 -312 156.500000 -313 157.000000 -314 157.500000 -315 158.000000 -316 158.500000 -317 159.000000 -318 159.500000 -319 160.000000 -320 160.500000 -321 161.000000 -322 161.500000 -323 162.000000 -324 162.500000 -325 163.000000 -326 163.500000 -327 164.000000 -328 164.500000 -329 165.000000 -330 165.500000 -331 166.000000 -332 166.500000 -333 167.000000 -334 167.500000 -335 168.000000 -336 168.500000 -337 169.000000 -338 169.500000 -339 170.000000 -340 170.500000 -341 171.000000 -342 171.500000 -343 172.000000 -344 172.500000 -345 173.000000 -346 173.500000 -347 174.000000 -348 174.500000 -349 175.000000 -350 175.500000 -351 176.000000 -352 176.500000 -353 177.000000 -354 177.500000 -355 178.000000 -356 178.500000 -357 179.000000 -358 179.500000 -359 180.000000 -360 180.500000 -361 181.000000 -362 181.500000 -363 182.000000 -364 182.500000 -365 183.000000 -366 183.500000 -367 184.000000 -368 184.500000 -369 185.000000 -370 185.500000 -371 186.000000 -372 186.500000 -373 187.000000 -374 187.500000 -375 188.000000 -376 188.500000 -377 189.000000 -378 189.500000 -379 190.000000 -380 190.500000 -381 191.000000 -382 191.500000 -383 192.000000 -384 192.500000 -385 193.000000 -386 193.500000 -387 194.000000 -388 194.500000 -389 195.000000 -390 195.500000 -391 196.000000 -392 196.500000 -393 197.000000 -394 197.500000 -395 198.000000 -396 198.500000 -397 199.000000 -398 199.500000 -399 200.000000 -400 200.500000 -401 201.000000 -402 201.500000 -403 202.000000 -404 202.500000 -405 203.000000 -406 203.500000 -407 204.000000 -408 204.500000 -409 205.000000 -410 205.500000 -411 206.000000 -412 206.500000 -413 207.000000 -414 207.500000 -415 208.000000 -416 208.500000 -417 209.000000 -418 209.500000 -419 210.000000 -420 210.500000 -421 211.000000 -422 211.500000 -423 212.000000 -424 212.500000 -425 213.000000 -426 213.500000 -427 214.000000 -428 214.500000 -429 215.000000 -430 215.500000 -431 216.000000 -432 216.500000 -433 217.000000 -434 217.500000 -435 218.000000 -436 218.500000 -437 219.000000 -438 219.500000 -439 220.000000 -440 220.500000 -441 221.000000 -442 221.500000 -443 222.000000 -444 222.500000 -445 223.000000 -446 223.500000 -447 224.000000 -448 224.500000 -449 225.000000 -450 225.500000 -451 226.000000 -452 226.500000 -453 227.000000 -454 227.500000 -455 228.000000 -456 228.500000 -457 229.000000 -458 229.500000 -459 230.000000 -460 230.500000 -461 231.000000 -462 231.500000 -463 232.000000 -464 232.500000 -465 233.000000 -466 233.500000 -467 234.000000 -468 234.500000 -469 235.000000 -470 235.500000 -471 236.000000 -472 236.500000 -473 237.000000 -474 237.500000 -475 238.000000 -476 238.500000 -477 239.000000 -478 239.500000 -479 240.000000 -480 240.500000 -481 241.000000 -482 241.500000 -483 242.000000 -484 242.500000 -485 243.000000 -486 243.500000 -487 244.000000 -488 244.500000 -489 245.000000 -490 245.500000 -491 246.000000 -492 246.500000 -493 247.000000 -494 247.500000 -495 248.000000 -496 248.500000 -497 249.000000 -498 249.500000 -499 250.000000 -500 250.500000 -501 251.000000 -502 251.500000 -503 252.000000 -504 252.500000 -505 253.000000 -506 253.500000 -507 254.000000 -508 254.500000 -509 255.000000 -510 255.500000 -511 256.000000 -512 256.500000 -513 257.000000 -514 257.500000 -515 258.000000 -516 258.500000 -517 259.000000 -518 259.500000 -519 260.000000 -520 260.500000 -521 261.000000 -522 261.500000 -523 262.000000 -524 262.500000 -525 263.000000 -526 263.500000 -527 264.000000 -528 264.500000 -529 265.000000 -530 265.500000 -531 266.000000 -532 266.500000 -533 267.000000 -534 267.500000 -535 268.000000 -536 268.500000 -537 269.000000 -538 269.500000 -539 270.000000 -540 270.500000 -541 271.000000 -542 271.500000 -543 272.000000 -544 272.500000 -545 273.000000 -546 273.500000 -547 274.000000 -548 274.500000 -549 275.000000 -550 275.500000 -551 276.000000 -552 276.500000 -553 277.000000 -554 277.500000 -555 278.000000 -556 278.500000 -557 279.000000 -558 279.500000 -559 280.000000 -560 280.500000 -561 281.000000 -562 281.500000 -563 282.000000 -564 282.500000 -565 283.000000 -566 283.500000 -567 284.000000 -568 284.500000 -569 285.000000 -570 285.500000 -571 286.000000 -572 286.500000 -573 287.000000 -574 287.500000 -575 288.000000 -576 288.500000 -577 289.000000 -578 289.500000 -579 290.000000 -580 290.500000 -581 291.000000 -582 291.500000 -583 292.000000 -584 292.500000 -585 293.000000 -586 293.500000 -587 294.000000 -588 294.500000 -589 295.000000 -590 295.500000 -591 296.000000 -592 296.500000 -593 297.000000 -594 297.500000 -595 298.000000 -596 298.500000 -597 299.000000 -598 299.500000 -599 300.000000 -600 300.500000 -601 301.000000 -602 301.500000 -603 302.000000 -604 302.500000 -605 303.000000 -606 303.500000 -607 304.000000 -608 304.500000 -609 305.000000 -610 305.500000 -611 306.000000 -612 306.500000 -613 307.000000 -614 307.500000 -615 308.000000 -616 308.500000 -617 309.000000 -618 309.500000 -619 310.000000 -620 310.500000 -621 311.000000 -622 311.500000 -623 312.000000 -624 312.500000 -625 313.000000 -626 313.500000 -627 314.000000 -628 314.500000 -629 315.000000 -630 315.500000 -631 316.000000 -632 316.500000 -633 317.000000 -634 317.500000 -635 318.000000 -636 318.500000 -637 319.000000 -638 319.500000 -639 320.000000 -640 320.500000 -641 321.000000 -642 321.500000 -643 322.000000 -644 322.500000 -645 323.000000 -646 323.500000 -647 324.000000 -648 324.500000 -649 325.000000 -650 325.500000 -651 326.000000 -652 326.500000 -653 327.000000 -654 327.500000 -655 328.000000 -656 328.500000 -657 329.000000 -658 329.500000 -659 330.000000 -660 330.500000 -661 331.000000 -662 331.500000 -663 332.000000 -664 332.500000 -665 333.000000 -666 333.500000 -667 334.000000 -668 334.500000 -669 335.000000 -670 335.500000 -671 336.000000 -672 336.500000 -673 337.000000 -674 337.500000 -675 338.000000 -676 338.500000 -677 339.000000 -678 339.500000 -679 340.000000 -680 340.500000 -681 341.000000 -682 341.500000 -683 342.000000 -684 342.500000 -685 343.000000 -686 343.500000 -687 344.000000 -688 344.500000 -689 345.000000 -690 345.500000 -691 346.000000 -692 346.500000 -693 347.000000 -694 347.500000 -695 348.000000 -696 348.500000 -697 349.000000 -698 349.500000 -699 350.000000 -700 350.500000 -701 351.000000 -702 351.500000 -703 352.000000 -704 352.500000 -705 353.000000 -706 353.500000 -707 354.000000 -708 354.500000 -709 355.000000 -710 355.500000 -711 356.000000 -712 356.500000 -713 357.000000 -714 357.500000 -715 358.000000 -716 358.500000 -717 359.000000 -718 359.500000 -719 360.000000 -720 360.500000 -721 361.000000 -722 361.500000 -723 362.000000 -724 362.500000 -725 363.000000 -726 363.500000 -727 364.000000 -728 364.500000 -729 365.000000 -730 365.500000 -731 366.000000 -732 366.500000 -733 367.000000 -734 367.500000 -735 368.000000 -736 368.500000 -737 369.000000 -738 369.500000 -739 370.000000 -740 370.500000 -741 371.000000 -742 371.500000 -743 372.000000 -744 372.500000 -745 373.000000 -746 373.500000 -747 374.000000 -748 374.500000 -749 375.000000 -750 375.500000 -751 376.000000 -752 376.500000 -753 377.000000 -754 377.500000 -755 378.000000 -756 378.500000 -757 379.000000 -758 379.500000 -759 380.000000 -760 380.500000 -761 381.000000 -762 381.500000 -763 382.000000 -764 382.500000 -765 383.000000 -766 383.500000 -767 384.000000 -768 384.500000 -769 385.000000 -770 385.500000 -771 386.000000 -772 386.500000 -773 387.000000 -774 387.500000 -775 388.000000 -776 388.500000 -777 389.000000 -778 389.500000 -779 390.000000 -780 390.500000 -781 391.000000 -782 391.500000 -783 392.000000 -784 392.500000 -785 393.000000 -786 393.500000 -787 394.000000 -788 394.500000 -789 395.000000 -790 395.500000 -791 396.000000 -792 396.500000 -793 397.000000 -794 397.500000 -795 398.000000 -796 398.500000 -797 399.000000 -798 399.500000 -799 400.000000 +0 0.500000 +1 1.000000 +2 1.500000 +3 2.000000 +4 2.500000 +5 3.000000 +6 3.500000 +7 4.000000 +8 4.500000 +9 5.000000 +10 5.500000 +11 6.000000 +12 6.500000 +13 7.000000 +14 7.500000 +15 8.000000 +16 8.500000 +17 9.000000 +18 9.500000 +19 10.000000 +20 10.500000 +21 11.000000 +22 11.500000 +23 12.000000 +24 12.500000 +25 13.000000 +26 13.500000 +27 14.000000 +28 14.500000 +29 15.000000 +30 15.500000 +31 16.000000 +32 16.500000 +33 17.000000 +34 17.500000 +35 18.000000 +36 18.500000 +37 19.000000 +38 19.500000 +39 20.000000 +40 20.500000 +41 21.000000 +42 21.500000 +43 22.000000 +44 22.500000 +45 23.000000 +46 23.500000 +47 24.000000 +48 24.500000 +49 25.000000 +50 25.500000 +51 26.000000 +52 26.500000 +53 27.000000 +54 27.500000 +55 28.000000 +56 28.500000 +57 29.000000 +58 29.500000 +59 30.000000 +60 30.500000 +61 31.000000 +62 31.500000 +63 32.000000 +64 32.500000 +65 33.000000 +66 33.500000 +67 34.000000 +68 34.500000 +69 35.000000 +70 35.500000 +71 36.000000 +72 36.500000 +73 37.000000 +74 37.500000 +75 38.000000 +76 38.500000 +77 39.000000 +78 39.500000 +79 40.000000 +80 40.500000 +81 41.000000 +82 41.500000 +83 42.000000 +84 42.500000 +85 43.000000 +86 43.500000 +87 44.000000 +88 44.500000 +89 45.000000 +90 45.500000 +91 46.000000 +92 46.500000 +93 47.000000 +94 47.500000 +95 48.000000 +96 48.500000 +97 49.000000 +98 49.500000 +99 50.000000 +100 50.500000 +101 51.000000 +102 51.500000 +103 52.000000 +104 52.500000 +105 53.000000 +106 53.500000 +107 54.000000 +108 54.500000 +109 55.000000 +110 55.500000 +111 56.000000 +112 56.500000 +113 57.000000 +114 57.500000 +115 58.000000 +116 58.500000 +117 59.000000 +118 59.500000 +119 60.000000 +120 60.500000 +121 61.000000 +122 61.500000 +123 62.000000 +124 62.500000 +125 63.000000 +126 63.500000 +127 64.000000 +128 64.500000 +129 65.000000 +130 65.500000 +131 66.000000 +132 66.500000 +133 67.000000 +134 67.500000 +135 68.000000 +136 68.500000 +137 69.000000 +138 69.500000 +139 70.000000 +140 70.500000 +141 71.000000 +142 71.500000 +143 72.000000 +144 72.500000 +145 73.000000 +146 73.500000 +147 74.000000 +148 74.500000 +149 75.000000 +150 75.500000 +151 76.000000 +152 76.500000 +153 77.000000 +154 77.500000 +155 78.000000 +156 78.500000 +157 79.000000 +158 79.500000 +159 80.000000 +160 80.500000 +161 81.000000 +162 81.500000 +163 82.000000 +164 82.500000 +165 83.000000 +166 83.500000 +167 84.000000 +168 84.500000 +169 85.000000 +170 85.500000 +171 86.000000 +172 86.500000 +173 87.000000 +174 87.500000 +175 88.000000 +176 88.500000 +177 89.000000 +178 89.500000 +179 90.000000 +180 90.500000 +181 91.000000 +182 91.500000 +183 92.000000 +184 92.500000 +185 93.000000 +186 93.500000 +187 94.000000 +188 94.500000 +189 95.000000 +190 95.500000 +191 96.000000 +192 96.500000 +193 97.000000 +194 97.500000 +195 98.000000 +196 98.500000 +197 99.000000 +198 99.500000 +199 100.000000 +200 100.500000 +201 101.000000 +202 101.500000 +203 102.000000 +204 102.500000 +205 103.000000 +206 103.500000 +207 104.000000 +208 104.500000 +209 105.000000 +210 105.500000 +211 106.000000 +212 106.500000 +213 107.000000 +214 107.500000 +215 108.000000 +216 108.500000 +217 109.000000 +218 109.500000 +219 110.000000 +220 110.500000 +221 111.000000 +222 111.500000 +223 112.000000 +224 112.500000 +225 113.000000 +226 113.500000 +227 114.000000 +228 114.500000 +229 115.000000 +230 115.500000 +231 116.000000 +232 116.500000 +233 117.000000 +234 117.500000 +235 118.000000 +236 118.500000 +237 119.000000 +238 119.500000 +239 120.000000 +240 120.500000 +241 121.000000 +242 121.500000 +243 122.000000 +244 122.500000 +245 123.000000 +246 123.500000 +247 124.000000 +248 124.500000 +249 125.000000 +250 125.500000 +251 126.000000 +252 126.500000 +253 127.000000 +254 127.500000 +255 128.000000 +256 128.500000 +257 129.000000 +258 129.500000 +259 130.000000 +260 130.500000 +261 131.000000 +262 131.500000 +263 132.000000 +264 132.500000 +265 133.000000 +266 133.500000 +267 134.000000 +268 134.500000 +269 135.000000 +270 135.500000 +271 136.000000 +272 136.500000 +273 137.000000 +274 137.500000 +275 138.000000 +276 138.500000 +277 139.000000 +278 139.500000 +279 140.000000 +280 140.500000 +281 141.000000 +282 141.500000 +283 142.000000 +284 142.500000 +285 143.000000 +286 143.500000 +287 144.000000 +288 144.500000 +289 145.000000 +290 145.500000 +291 146.000000 +292 146.500000 +293 147.000000 +294 147.500000 +295 148.000000 +296 148.500000 +297 149.000000 +298 149.500000 +299 150.000000 +300 150.500000 +301 151.000000 +302 151.500000 +303 152.000000 +304 152.500000 +305 153.000000 +306 153.500000 +307 154.000000 +308 154.500000 +309 155.000000 +310 155.500000 +311 156.000000 +312 156.500000 +313 157.000000 +314 157.500000 +315 158.000000 +316 158.500000 +317 159.000000 +318 159.500000 +319 160.000000 +320 160.500000 +321 161.000000 +322 161.500000 +323 162.000000 +324 162.500000 +325 163.000000 +326 163.500000 +327 164.000000 +328 164.500000 +329 165.000000 +330 165.500000 +331 166.000000 +332 166.500000 +333 167.000000 +334 167.500000 +335 168.000000 +336 168.500000 +337 169.000000 +338 169.500000 +339 170.000000 +340 170.500000 +341 171.000000 +342 171.500000 +343 172.000000 +344 172.500000 +345 173.000000 +346 173.500000 +347 174.000000 +348 174.500000 +349 175.000000 +350 175.500000 +351 176.000000 +352 176.500000 +353 177.000000 +354 177.500000 +355 178.000000 +356 178.500000 +357 179.000000 +358 179.500000 +359 180.000000 +360 180.500000 +361 181.000000 +362 181.500000 +363 182.000000 +364 182.500000 +365 183.000000 +366 183.500000 +367 184.000000 +368 184.500000 +369 185.000000 +370 185.500000 +371 186.000000 +372 186.500000 +373 187.000000 +374 187.500000 +375 188.000000 +376 188.500000 +377 189.000000 +378 189.500000 +379 190.000000 +380 190.500000 +381 191.000000 +382 191.500000 +383 192.000000 +384 192.500000 +385 193.000000 +386 193.500000 +387 194.000000 +388 194.500000 +389 195.000000 +390 195.500000 +391 196.000000 +392 196.500000 +393 197.000000 +394 197.500000 +395 198.000000 +396 198.500000 +397 199.000000 +398 199.500000 +399 200.000000 +400 200.500000 +401 201.000000 +402 201.500000 +403 202.000000 +404 202.500000 +405 203.000000 +406 203.500000 +407 204.000000 +408 204.500000 +409 205.000000 +410 205.500000 +411 206.000000 +412 206.500000 +413 207.000000 +414 207.500000 +415 208.000000 +416 208.500000 +417 209.000000 +418 209.500000 +419 210.000000 +420 210.500000 +421 211.000000 +422 211.500000 +423 212.000000 +424 212.500000 +425 213.000000 +426 213.500000 +427 214.000000 +428 214.500000 +429 215.000000 +430 215.500000 +431 216.000000 +432 216.500000 +433 217.000000 +434 217.500000 +435 218.000000 +436 218.500000 +437 219.000000 +438 219.500000 +439 220.000000 +440 220.500000 +441 221.000000 +442 221.500000 +443 222.000000 +444 222.500000 +445 223.000000 +446 223.500000 +447 224.000000 +448 224.500000 +449 225.000000 +450 225.500000 +451 226.000000 +452 226.500000 +453 227.000000 +454 227.500000 +455 228.000000 +456 228.500000 +457 229.000000 +458 229.500000 +459 230.000000 +460 230.500000 +461 231.000000 +462 231.500000 +463 232.000000 +464 232.500000 +465 233.000000 +466 233.500000 +467 234.000000 +468 234.500000 +469 235.000000 +470 235.500000 +471 236.000000 +472 236.500000 +473 237.000000 +474 237.500000 +475 238.000000 +476 238.500000 +477 239.000000 +478 239.500000 +479 240.000000 +480 240.500000 +481 241.000000 +482 241.500000 +483 242.000000 +484 242.500000 +485 243.000000 +486 243.500000 +487 244.000000 +488 244.500000 +489 245.000000 +490 245.500000 +491 246.000000 +492 246.500000 +493 247.000000 +494 247.500000 +495 248.000000 +496 248.500000 +497 249.000000 +498 249.500000 +499 250.000000 +500 250.500000 +501 251.000000 +502 251.500000 +503 252.000000 +504 252.500000 +505 253.000000 +506 253.500000 +507 254.000000 +508 254.500000 +509 255.000000 +510 255.500000 +511 256.000000 +512 256.500000 +513 257.000000 +514 257.500000 +515 258.000000 +516 258.500000 +517 259.000000 +518 259.500000 +519 260.000000 +520 260.500000 +521 261.000000 +522 261.500000 +523 262.000000 +524 262.500000 +525 263.000000 +526 263.500000 +527 264.000000 +528 264.500000 +529 265.000000 +530 265.500000 +531 266.000000 +532 266.500000 +533 267.000000 +534 267.500000 +535 268.000000 +536 268.500000 +537 269.000000 +538 269.500000 +539 270.000000 +540 270.500000 +541 271.000000 +542 271.500000 +543 272.000000 +544 272.500000 +545 273.000000 +546 273.500000 +547 274.000000 +548 274.500000 +549 275.000000 +550 275.500000 +551 276.000000 +552 276.500000 +553 277.000000 +554 277.500000 +555 278.000000 +556 278.500000 +557 279.000000 +558 279.500000 +559 280.000000 +560 280.500000 +561 281.000000 +562 281.500000 +563 282.000000 +564 282.500000 +565 283.000000 +566 283.500000 +567 284.000000 +568 284.500000 +569 285.000000 +570 285.500000 +571 286.000000 +572 286.500000 +573 287.000000 +574 287.500000 +575 288.000000 +576 288.500000 +577 289.000000 +578 289.500000 +579 290.000000 +580 290.500000 +581 291.000000 +582 291.500000 +583 292.000000 +584 292.500000 +585 293.000000 +586 293.500000 +587 294.000000 +588 294.500000 +589 295.000000 +590 295.500000 +591 296.000000 +592 296.500000 +593 297.000000 +594 297.500000 +595 298.000000 +596 298.500000 +597 299.000000 +598 299.500000 +599 300.000000 +600 300.500000 +601 301.000000 +602 301.500000 +603 302.000000 +604 302.500000 +605 303.000000 +606 303.500000 +607 304.000000 +608 304.500000 +609 305.000000 +610 305.500000 +611 306.000000 +612 306.500000 +613 307.000000 +614 307.500000 +615 308.000000 +616 308.500000 +617 309.000000 +618 309.500000 +619 310.000000 +620 310.500000 +621 311.000000 +622 311.500000 +623 312.000000 +624 312.500000 +625 313.000000 +626 313.500000 +627 314.000000 +628 314.500000 +629 315.000000 +630 315.500000 +631 316.000000 +632 316.500000 +633 317.000000 +634 317.500000 +635 318.000000 +636 318.500000 +637 319.000000 +638 319.500000 +639 320.000000 +640 320.500000 +641 321.000000 +642 321.500000 +643 322.000000 +644 322.500000 +645 323.000000 +646 323.500000 +647 324.000000 +648 324.500000 +649 325.000000 +650 325.500000 +651 326.000000 +652 326.500000 +653 327.000000 +654 327.500000 +655 328.000000 +656 328.500000 +657 329.000000 +658 329.500000 +659 330.000000 +660 330.500000 +661 331.000000 +662 331.500000 +663 332.000000 +664 332.500000 +665 333.000000 +666 333.500000 +667 334.000000 +668 334.500000 +669 335.000000 +670 335.500000 +671 336.000000 +672 336.500000 +673 337.000000 +674 337.500000 +675 338.000000 +676 338.500000 +677 339.000000 +678 339.500000 +679 340.000000 +680 340.500000 +681 341.000000 +682 341.500000 +683 342.000000 +684 342.500000 +685 343.000000 +686 343.500000 +687 344.000000 +688 344.500000 +689 345.000000 +690 345.500000 +691 346.000000 +692 346.500000 +693 347.000000 +694 347.500000 +695 348.000000 +696 348.500000 +697 349.000000 +698 349.500000 +699 350.000000 +700 350.500000 +701 351.000000 +702 351.500000 +703 352.000000 +704 352.500000 +705 353.000000 +706 353.500000 +707 354.000000 +708 354.500000 +709 355.000000 +710 355.500000 +711 356.000000 +712 356.500000 +713 357.000000 +714 357.500000 +715 358.000000 +716 358.500000 +717 359.000000 +718 359.500000 +719 360.000000 +720 360.500000 +721 361.000000 +722 361.500000 +723 362.000000 +724 362.500000 +725 363.000000 +726 363.500000 +727 364.000000 +728 364.500000 +729 365.000000 +730 365.500000 +731 366.000000 +732 366.500000 +733 367.000000 +734 367.500000 +735 368.000000 +736 368.500000 +737 369.000000 +738 369.500000 +739 370.000000 +740 370.500000 +741 371.000000 +742 371.500000 +743 372.000000 +744 372.500000 +745 373.000000 +746 373.500000 +747 374.000000 +748 374.500000 +749 375.000000 +750 375.500000 +751 376.000000 +752 376.500000 +753 377.000000 +754 377.500000 +755 378.000000 +756 378.500000 +757 379.000000 +758 379.500000 +759 380.000000 +760 380.500000 +761 381.000000 +762 381.500000 +763 382.000000 +764 382.500000 +765 383.000000 +766 383.500000 +767 384.000000 +768 384.500000 +769 385.000000 +770 385.500000 +771 386.000000 +772 386.500000 +773 387.000000 +774 387.500000 +775 388.000000 +776 388.500000 +777 389.000000 +778 389.500000 +779 390.000000 +780 390.500000 +781 391.000000 +782 391.500000 +783 392.000000 +784 392.500000 +785 393.000000 +786 393.500000 +787 394.000000 +788 394.500000 +789 395.000000 +790 395.500000 +791 396.000000 +792 396.500000 +793 397.000000 +794 397.500000 +795 398.000000 +796 398.500000 +797 399.000000 +798 399.500000 +799 400.000000 diff --git a/tests/runtests/limit3v2/out_acc_vel-pins/expected b/tests/runtests/limit3v2/out_acc_vel-pins/expected index ebda2f2fda..0016b58091 100644 --- a/tests/runtests/limit3v2/out_acc_vel-pins/expected +++ b/tests/runtests/limit3v2/out_acc_vel-pins/expected @@ -1,800 +1,800 @@ -0 0.001000 -1 0.003000 -2 0.006000 -3 0.010000 -4 0.015000 -5 0.021000 -6 0.028000 -7 0.036000 -8 0.045000 -9 0.055000 -10 0.066000 -11 0.078000 -12 0.091000 -13 0.105000 -14 0.120000 -15 0.136000 -16 0.153000 -17 0.171000 -18 0.190000 -19 0.210000 -20 0.231000 -21 0.253000 -22 0.276000 -23 0.300000 -24 0.325000 -25 0.351000 -26 0.378000 -27 0.406000 -28 0.435000 -29 0.465000 -30 0.496000 -31 0.528000 -32 0.561000 -33 0.595000 -34 0.630000 -35 0.666000 -36 0.703000 -37 0.741000 -38 0.780000 -39 0.820000 -40 0.861000 -41 0.903000 -42 0.946000 -43 0.990000 -44 1.035000 -45 1.081000 -46 1.128000 -47 1.176000 -48 1.225000 -49 1.275000 -50 1.326000 -51 1.378000 -52 1.431000 -53 1.485000 -54 1.540000 -55 1.596000 -56 1.653000 -57 1.711000 -58 1.770000 -59 1.830000 -60 1.891000 -61 1.953000 -62 2.016000 -63 2.080000 -64 2.145000 -65 2.211000 -66 2.278000 -67 2.346000 -68 2.415000 -69 2.485000 -70 2.556000 -71 2.628000 -72 2.701000 -73 2.775000 -74 2.850000 -75 2.926000 -76 3.003000 -77 3.081000 -78 3.160000 -79 3.240000 -80 3.321000 -81 3.403000 -82 3.486000 -83 3.570000 -84 3.655000 -85 3.741000 -86 3.828000 -87 3.916000 -88 4.005000 -89 4.095000 -90 4.186000 -91 4.278000 -92 4.371000 -93 4.465000 -94 4.560000 -95 4.656000 -96 4.753000 -97 4.851000 -98 4.950000 -99 5.050000 -100 5.151000 -101 5.253000 -102 5.356000 -103 5.460000 -104 5.565000 -105 5.671000 -106 5.778000 -107 5.886000 -108 5.995000 -109 6.105000 -110 6.216000 -111 6.328000 -112 6.441000 -113 6.555000 -114 6.670000 -115 6.786000 -116 6.903000 -117 7.021000 -118 7.140000 -119 7.260000 -120 7.381000 -121 7.503000 -122 7.626000 -123 7.750000 -124 7.875000 -125 8.001000 -126 8.128000 -127 8.256000 -128 8.385000 -129 8.515000 -130 8.646000 -131 8.778000 -132 8.911000 -133 9.045000 -134 9.180000 -135 9.316000 -136 9.453000 -137 9.591000 -138 9.730000 -139 9.870000 -140 10.011000 -141 10.153000 -142 10.296000 -143 10.440000 -144 10.585000 -145 10.731000 -146 10.878000 -147 11.026000 -148 11.175000 -149 11.325000 -150 11.476000 -151 11.628000 -152 11.781000 -153 11.935000 -154 12.090000 -155 12.246000 -156 12.403000 -157 12.561000 -158 12.720000 -159 12.880000 -160 13.041000 -161 13.203000 -162 13.366000 -163 13.530000 -164 13.695000 -165 13.861000 -166 14.028000 -167 14.196000 -168 14.365000 -169 14.535000 -170 14.706000 -171 14.878000 -172 15.051000 -173 15.225000 -174 15.400000 -175 15.576000 -176 15.753000 -177 15.931000 -178 16.110000 -179 16.290000 -180 16.471000 -181 16.653000 -182 16.836000 -183 17.020000 -184 17.205000 -185 17.391000 -186 17.578000 -187 17.766000 -188 17.955000 -189 18.145000 -190 18.336000 -191 18.528000 -192 18.721000 -193 18.915000 -194 19.110000 -195 19.306000 -196 19.503000 -197 19.701000 -198 19.900000 -199 20.100000 -200 20.301000 -201 20.503000 -202 20.706000 -203 20.910000 -204 21.115000 -205 21.321000 -206 21.528000 -207 21.736000 -208 21.945000 -209 22.155000 -210 22.366000 -211 22.578000 -212 22.791000 -213 23.005000 -214 23.220000 -215 23.436000 -216 23.653000 -217 23.871000 -218 24.090000 -219 24.310000 -220 24.531000 -221 24.753000 -222 24.976000 -223 25.200000 -224 25.425000 -225 25.651000 -226 25.878000 -227 26.106000 -228 26.335000 -229 26.565000 -230 26.796000 -231 27.028000 -232 27.261000 -233 27.495000 -234 27.730000 -235 27.966000 -236 28.203000 -237 28.441000 -238 28.680000 -239 28.920000 -240 29.161000 -241 29.403000 -242 29.646000 -243 29.890000 -244 30.135000 -245 30.381000 -246 30.628000 -247 30.876000 -248 31.125000 -249 31.375000 -250 31.626000 -251 31.878000 -252 32.131000 -253 32.385000 -254 32.640000 -255 32.896000 -256 33.153000 -257 33.411000 -258 33.670000 -259 33.930000 -260 34.191000 -261 34.453000 -262 34.716000 -263 34.980000 -264 35.245000 -265 35.511000 -266 35.778000 -267 36.046000 -268 36.315000 -269 36.585000 -270 36.856000 -271 37.128000 -272 37.401000 -273 37.675000 -274 37.950000 -275 38.226000 -276 38.503000 -277 38.781000 -278 39.060000 -279 39.340000 -280 39.621000 -281 39.903000 -282 40.186000 -283 40.470000 -284 40.755000 -285 41.041000 -286 41.328000 -287 41.616000 -288 41.905000 -289 42.195000 -290 42.486000 -291 42.778000 -292 43.071000 -293 43.365000 -294 43.660000 -295 43.956000 -296 44.253000 -297 44.551000 -298 44.850000 -299 45.150000 -300 45.451000 -301 45.753000 -302 46.056000 -303 46.360000 -304 46.665000 -305 46.971000 -306 47.278000 -307 47.586000 -308 47.895000 -309 48.205000 -310 48.516000 -311 48.828000 -312 49.141000 -313 49.455000 -314 49.770000 -315 50.086000 -316 50.403000 -317 50.721000 -318 51.040000 -319 51.360000 -320 51.681000 -321 52.003000 -322 52.326000 -323 52.650000 -324 52.975000 -325 53.301000 -326 53.628000 -327 53.956000 -328 54.285000 -329 54.615000 -330 54.946000 -331 55.278000 -332 55.611000 -333 55.945000 -334 56.280000 -335 56.616000 -336 56.953000 -337 57.291000 -338 57.630000 -339 57.970000 -340 58.311000 -341 58.653000 -342 58.996000 -343 59.340000 -344 59.685000 -345 60.031000 -346 60.378000 -347 60.726000 -348 61.075000 -349 61.425000 -350 61.776000 -351 62.128000 -352 62.481000 -353 62.835000 -354 63.190000 -355 63.546000 -356 63.903000 -357 64.261000 -358 64.620000 -359 64.980000 -360 65.341000 -361 65.703000 -362 66.066000 -363 66.430000 -364 66.795000 -365 67.161000 -366 67.528000 -367 67.896000 -368 68.265000 -369 68.635000 -370 69.006000 -371 69.378000 -372 69.751000 -373 70.125000 -374 70.500000 -375 70.876000 -376 71.253000 -377 71.631000 -378 72.010000 -379 72.390000 -380 72.771000 -381 73.153000 -382 73.536000 -383 73.920000 -384 74.305000 -385 74.691000 -386 75.078000 -387 75.466000 -388 75.855000 -389 76.245000 -390 76.636000 -391 77.028000 -392 77.421000 -393 77.815000 -394 78.210000 -395 78.606000 -396 79.003000 -397 79.401000 -398 79.800000 -399 80.200000 -400 80.599000 -401 80.997000 -402 81.394000 -403 81.790000 -404 82.185000 -405 82.579000 -406 82.972000 -407 83.364000 -408 83.755000 -409 84.145000 -410 84.534000 -411 84.922000 -412 85.309000 -413 85.695000 -414 86.080000 -415 86.464000 -416 86.847000 -417 87.229000 -418 87.610000 -419 87.990000 -420 88.369000 -421 88.747000 -422 89.124000 -423 89.500000 -424 89.875000 -425 90.249000 -426 90.622000 -427 90.994000 -428 91.365000 -429 91.735000 -430 92.104000 -431 92.472000 -432 92.839000 -433 93.205000 -434 93.570000 -435 93.934000 -436 94.297000 -437 94.659000 -438 95.020000 -439 95.380000 -440 95.739000 -441 96.097000 -442 96.454000 -443 96.810000 -444 97.165000 -445 97.519000 -446 97.872000 -447 98.224000 -448 98.575000 -449 98.925000 -450 99.274000 -451 99.622000 -452 99.969000 -453 100.315000 -454 100.660000 -455 101.004000 -456 101.347000 -457 101.689000 -458 102.030000 -459 102.370000 -460 102.709000 -461 103.047000 -462 103.384000 -463 103.720000 -464 104.055000 -465 104.389000 -466 104.722000 -467 105.054000 -468 105.385000 -469 105.715000 -470 106.044000 -471 106.372000 -472 106.699000 -473 107.025000 -474 107.350000 -475 107.674000 -476 107.997000 -477 108.319000 -478 108.640000 -479 108.960000 -480 109.279000 -481 109.597000 -482 109.914000 -483 110.230000 -484 110.545000 -485 110.859000 -486 111.172000 -487 111.484000 -488 111.795000 -489 112.105000 -490 112.414000 -491 112.722000 -492 113.029000 -493 113.335000 -494 113.640000 -495 113.944000 -496 114.247000 -497 114.549000 -498 114.850000 -499 115.150000 -500 115.449000 -501 115.747000 -502 116.044000 -503 116.340000 -504 116.635000 -505 116.929000 -506 117.222000 -507 117.514000 -508 117.805000 -509 118.095000 -510 118.384000 -511 118.672000 -512 118.959000 -513 119.245000 -514 119.530000 -515 119.814000 -516 120.097000 -517 120.379000 -518 120.660000 -519 120.940000 -520 121.219000 -521 121.497000 -522 121.774000 -523 122.050000 -524 122.325000 -525 122.599000 -526 122.872000 -527 123.144000 -528 123.415000 -529 123.685000 -530 123.954000 -531 124.222000 -532 124.489000 -533 124.755000 -534 125.020000 -535 125.284000 -536 125.547000 -537 125.809000 -538 126.070000 -539 126.330000 -540 126.589000 -541 126.847000 -542 127.104000 -543 127.360000 -544 127.615000 -545 127.869000 -546 128.122000 -547 128.374000 -548 128.625000 -549 128.875000 -550 129.124000 -551 129.372000 -552 129.619000 -553 129.865000 -554 130.110000 -555 130.354000 -556 130.597000 -557 130.839000 -558 131.080000 -559 131.320000 -560 131.559000 -561 131.797000 -562 132.034000 -563 132.270000 -564 132.505000 -565 132.739000 -566 132.972000 -567 133.204000 -568 133.435000 -569 133.665000 -570 133.894000 -571 134.122000 -572 134.349000 -573 134.575000 -574 134.800000 -575 135.024000 -576 135.247000 -577 135.469000 -578 135.690000 -579 135.910000 -580 136.129000 -581 136.347000 -582 136.564000 -583 136.780000 -584 136.995000 -585 137.209000 -586 137.422000 -587 137.634000 -588 137.845000 -589 138.055000 -590 138.264000 -591 138.472000 -592 138.679000 -593 138.885000 -594 139.090000 -595 139.294000 -596 139.497000 -597 139.699000 -598 139.900000 -599 140.100000 -600 140.299000 -601 140.497000 -602 140.694000 -603 140.890000 -604 141.085000 -605 141.279000 -606 141.472000 -607 141.664000 -608 141.855000 -609 142.045000 -610 142.234000 -611 142.422000 -612 142.609000 -613 142.795000 -614 142.980000 -615 143.164000 -616 143.347000 -617 143.529000 -618 143.710000 -619 143.890000 -620 144.069000 -621 144.247000 -622 144.424000 -623 144.600000 -624 144.775000 -625 144.949000 -626 145.122000 -627 145.294000 -628 145.465000 -629 145.635000 -630 145.804000 -631 145.972000 -632 146.139000 -633 146.305000 -634 146.470000 -635 146.634000 -636 146.797000 -637 146.959000 -638 147.120000 -639 147.280000 -640 147.439000 -641 147.597000 -642 147.754000 -643 147.910000 -644 148.065000 -645 148.219000 -646 148.372000 -647 148.524000 -648 148.675000 -649 148.825000 -650 148.974000 -651 149.122000 -652 149.269000 -653 149.415000 -654 149.560000 -655 149.704000 -656 149.847000 -657 149.989000 -658 150.130000 -659 150.270000 -660 150.409000 -661 150.547000 -662 150.684000 -663 150.820000 -664 150.955000 -665 151.089000 -666 151.222000 -667 151.354000 -668 151.485000 -669 151.615000 -670 151.744000 -671 151.872000 -672 151.999000 -673 152.125000 -674 152.250000 -675 152.374000 -676 152.497000 -677 152.619000 -678 152.740000 -679 152.860000 -680 152.979000 -681 153.097000 -682 153.214000 -683 153.330000 -684 153.445000 -685 153.559000 -686 153.672000 -687 153.784000 -688 153.895000 -689 154.005000 -690 154.114000 -691 154.222000 -692 154.329000 -693 154.435000 -694 154.540000 -695 154.644000 -696 154.747000 -697 154.849000 -698 154.950000 -699 155.050000 -700 155.149000 -701 155.247000 -702 155.344000 -703 155.440000 -704 155.535000 -705 155.629000 -706 155.722000 -707 155.814000 -708 155.905000 -709 155.995000 -710 156.084000 -711 156.172000 -712 156.259000 -713 156.345000 -714 156.430000 -715 156.514000 -716 156.597000 -717 156.679000 -718 156.760000 -719 156.840000 -720 156.919000 -721 156.997000 -722 157.074000 -723 157.150000 -724 157.225000 -725 157.299000 -726 157.372000 -727 157.444000 -728 157.515000 -729 157.585000 -730 157.654000 -731 157.722000 -732 157.789000 -733 157.855000 -734 157.920000 -735 157.984000 -736 158.047000 -737 158.109000 -738 158.170000 -739 158.230000 -740 158.289000 -741 158.347000 -742 158.404000 -743 158.460000 -744 158.515000 -745 158.569000 -746 158.622000 -747 158.674000 -748 158.725000 -749 158.775000 -750 158.824000 -751 158.872000 -752 158.919000 -753 158.965000 -754 159.010000 -755 159.054000 -756 159.097000 -757 159.139000 -758 159.180000 -759 159.220000 -760 159.259000 -761 159.297000 -762 159.334000 -763 159.370000 -764 159.405000 -765 159.439000 -766 159.472000 -767 159.504000 -768 159.535000 -769 159.565000 -770 159.594000 -771 159.622000 -772 159.649000 -773 159.675000 -774 159.700000 -775 159.724000 -776 159.747000 -777 159.769000 -778 159.790000 -779 159.810000 -780 159.829000 -781 159.847000 -782 159.864000 -783 159.880000 -784 159.895000 -785 159.909000 -786 159.922000 -787 159.934000 -788 159.945000 -789 159.955000 -790 159.964000 -791 159.972000 -792 159.979000 -793 159.985000 -794 159.990000 -795 159.994000 -796 159.997000 -797 159.999000 -798 160.000000 -799 160.000000 +0 0.001000 +1 0.003000 +2 0.006000 +3 0.010000 +4 0.015000 +5 0.021000 +6 0.028000 +7 0.036000 +8 0.045000 +9 0.055000 +10 0.066000 +11 0.078000 +12 0.091000 +13 0.105000 +14 0.120000 +15 0.136000 +16 0.153000 +17 0.171000 +18 0.190000 +19 0.210000 +20 0.231000 +21 0.253000 +22 0.276000 +23 0.300000 +24 0.325000 +25 0.351000 +26 0.378000 +27 0.406000 +28 0.435000 +29 0.465000 +30 0.496000 +31 0.528000 +32 0.561000 +33 0.595000 +34 0.630000 +35 0.666000 +36 0.703000 +37 0.741000 +38 0.780000 +39 0.820000 +40 0.861000 +41 0.903000 +42 0.946000 +43 0.990000 +44 1.035000 +45 1.081000 +46 1.128000 +47 1.176000 +48 1.225000 +49 1.275000 +50 1.326000 +51 1.378000 +52 1.431000 +53 1.485000 +54 1.540000 +55 1.596000 +56 1.653000 +57 1.711000 +58 1.770000 +59 1.830000 +60 1.891000 +61 1.953000 +62 2.016000 +63 2.080000 +64 2.145000 +65 2.211000 +66 2.278000 +67 2.346000 +68 2.415000 +69 2.485000 +70 2.556000 +71 2.628000 +72 2.701000 +73 2.775000 +74 2.850000 +75 2.926000 +76 3.003000 +77 3.081000 +78 3.160000 +79 3.240000 +80 3.321000 +81 3.403000 +82 3.486000 +83 3.570000 +84 3.655000 +85 3.741000 +86 3.828000 +87 3.916000 +88 4.005000 +89 4.095000 +90 4.186000 +91 4.278000 +92 4.371000 +93 4.465000 +94 4.560000 +95 4.656000 +96 4.753000 +97 4.851000 +98 4.950000 +99 5.050000 +100 5.151000 +101 5.253000 +102 5.356000 +103 5.460000 +104 5.565000 +105 5.671000 +106 5.778000 +107 5.886000 +108 5.995000 +109 6.105000 +110 6.216000 +111 6.328000 +112 6.441000 +113 6.555000 +114 6.670000 +115 6.786000 +116 6.903000 +117 7.021000 +118 7.140000 +119 7.260000 +120 7.381000 +121 7.503000 +122 7.626000 +123 7.750000 +124 7.875000 +125 8.001000 +126 8.128000 +127 8.256000 +128 8.385000 +129 8.515000 +130 8.646000 +131 8.778000 +132 8.911000 +133 9.045000 +134 9.180000 +135 9.316000 +136 9.453000 +137 9.591000 +138 9.730000 +139 9.870000 +140 10.011000 +141 10.153000 +142 10.296000 +143 10.440000 +144 10.585000 +145 10.731000 +146 10.878000 +147 11.026000 +148 11.175000 +149 11.325000 +150 11.476000 +151 11.628000 +152 11.781000 +153 11.935000 +154 12.090000 +155 12.246000 +156 12.403000 +157 12.561000 +158 12.720000 +159 12.880000 +160 13.041000 +161 13.203000 +162 13.366000 +163 13.530000 +164 13.695000 +165 13.861000 +166 14.028000 +167 14.196000 +168 14.365000 +169 14.535000 +170 14.706000 +171 14.878000 +172 15.051000 +173 15.225000 +174 15.400000 +175 15.576000 +176 15.753000 +177 15.931000 +178 16.110000 +179 16.290000 +180 16.471000 +181 16.653000 +182 16.836000 +183 17.020000 +184 17.205000 +185 17.391000 +186 17.578000 +187 17.766000 +188 17.955000 +189 18.145000 +190 18.336000 +191 18.528000 +192 18.721000 +193 18.915000 +194 19.110000 +195 19.306000 +196 19.503000 +197 19.701000 +198 19.900000 +199 20.100000 +200 20.301000 +201 20.503000 +202 20.706000 +203 20.910000 +204 21.115000 +205 21.321000 +206 21.528000 +207 21.736000 +208 21.945000 +209 22.155000 +210 22.366000 +211 22.578000 +212 22.791000 +213 23.005000 +214 23.220000 +215 23.436000 +216 23.653000 +217 23.871000 +218 24.090000 +219 24.310000 +220 24.531000 +221 24.753000 +222 24.976000 +223 25.200000 +224 25.425000 +225 25.651000 +226 25.878000 +227 26.106000 +228 26.335000 +229 26.565000 +230 26.796000 +231 27.028000 +232 27.261000 +233 27.495000 +234 27.730000 +235 27.966000 +236 28.203000 +237 28.441000 +238 28.680000 +239 28.920000 +240 29.161000 +241 29.403000 +242 29.646000 +243 29.890000 +244 30.135000 +245 30.381000 +246 30.628000 +247 30.876000 +248 31.125000 +249 31.375000 +250 31.626000 +251 31.878000 +252 32.131000 +253 32.385000 +254 32.640000 +255 32.896000 +256 33.153000 +257 33.411000 +258 33.670000 +259 33.930000 +260 34.191000 +261 34.453000 +262 34.716000 +263 34.980000 +264 35.245000 +265 35.511000 +266 35.778000 +267 36.046000 +268 36.315000 +269 36.585000 +270 36.856000 +271 37.128000 +272 37.401000 +273 37.675000 +274 37.950000 +275 38.226000 +276 38.503000 +277 38.781000 +278 39.060000 +279 39.340000 +280 39.621000 +281 39.903000 +282 40.186000 +283 40.470000 +284 40.755000 +285 41.041000 +286 41.328000 +287 41.616000 +288 41.905000 +289 42.195000 +290 42.486000 +291 42.778000 +292 43.071000 +293 43.365000 +294 43.660000 +295 43.956000 +296 44.253000 +297 44.551000 +298 44.850000 +299 45.150000 +300 45.451000 +301 45.753000 +302 46.056000 +303 46.360000 +304 46.665000 +305 46.971000 +306 47.278000 +307 47.586000 +308 47.895000 +309 48.205000 +310 48.516000 +311 48.828000 +312 49.141000 +313 49.455000 +314 49.770000 +315 50.086000 +316 50.403000 +317 50.721000 +318 51.040000 +319 51.360000 +320 51.681000 +321 52.003000 +322 52.326000 +323 52.650000 +324 52.975000 +325 53.301000 +326 53.628000 +327 53.956000 +328 54.285000 +329 54.615000 +330 54.946000 +331 55.278000 +332 55.611000 +333 55.945000 +334 56.280000 +335 56.616000 +336 56.953000 +337 57.291000 +338 57.630000 +339 57.970000 +340 58.311000 +341 58.653000 +342 58.996000 +343 59.340000 +344 59.685000 +345 60.031000 +346 60.378000 +347 60.726000 +348 61.075000 +349 61.425000 +350 61.776000 +351 62.128000 +352 62.481000 +353 62.835000 +354 63.190000 +355 63.546000 +356 63.903000 +357 64.261000 +358 64.620000 +359 64.980000 +360 65.341000 +361 65.703000 +362 66.066000 +363 66.430000 +364 66.795000 +365 67.161000 +366 67.528000 +367 67.896000 +368 68.265000 +369 68.635000 +370 69.006000 +371 69.378000 +372 69.751000 +373 70.125000 +374 70.500000 +375 70.876000 +376 71.253000 +377 71.631000 +378 72.010000 +379 72.390000 +380 72.771000 +381 73.153000 +382 73.536000 +383 73.920000 +384 74.305000 +385 74.691000 +386 75.078000 +387 75.466000 +388 75.855000 +389 76.245000 +390 76.636000 +391 77.028000 +392 77.421000 +393 77.815000 +394 78.210000 +395 78.606000 +396 79.003000 +397 79.401000 +398 79.800000 +399 80.200000 +400 80.599000 +401 80.997000 +402 81.394000 +403 81.790000 +404 82.185000 +405 82.579000 +406 82.972000 +407 83.364000 +408 83.755000 +409 84.145000 +410 84.534000 +411 84.922000 +412 85.309000 +413 85.695000 +414 86.080000 +415 86.464000 +416 86.847000 +417 87.229000 +418 87.610000 +419 87.990000 +420 88.369000 +421 88.747000 +422 89.124000 +423 89.500000 +424 89.875000 +425 90.249000 +426 90.622000 +427 90.994000 +428 91.365000 +429 91.735000 +430 92.104000 +431 92.472000 +432 92.839000 +433 93.205000 +434 93.570000 +435 93.934000 +436 94.297000 +437 94.659000 +438 95.020000 +439 95.380000 +440 95.739000 +441 96.097000 +442 96.454000 +443 96.810000 +444 97.165000 +445 97.519000 +446 97.872000 +447 98.224000 +448 98.575000 +449 98.925000 +450 99.274000 +451 99.622000 +452 99.969000 +453 100.315000 +454 100.660000 +455 101.004000 +456 101.347000 +457 101.689000 +458 102.030000 +459 102.370000 +460 102.709000 +461 103.047000 +462 103.384000 +463 103.720000 +464 104.055000 +465 104.389000 +466 104.722000 +467 105.054000 +468 105.385000 +469 105.715000 +470 106.044000 +471 106.372000 +472 106.699000 +473 107.025000 +474 107.350000 +475 107.674000 +476 107.997000 +477 108.319000 +478 108.640000 +479 108.960000 +480 109.279000 +481 109.597000 +482 109.914000 +483 110.230000 +484 110.545000 +485 110.859000 +486 111.172000 +487 111.484000 +488 111.795000 +489 112.105000 +490 112.414000 +491 112.722000 +492 113.029000 +493 113.335000 +494 113.640000 +495 113.944000 +496 114.247000 +497 114.549000 +498 114.850000 +499 115.150000 +500 115.449000 +501 115.747000 +502 116.044000 +503 116.340000 +504 116.635000 +505 116.929000 +506 117.222000 +507 117.514000 +508 117.805000 +509 118.095000 +510 118.384000 +511 118.672000 +512 118.959000 +513 119.245000 +514 119.530000 +515 119.814000 +516 120.097000 +517 120.379000 +518 120.660000 +519 120.940000 +520 121.219000 +521 121.497000 +522 121.774000 +523 122.050000 +524 122.325000 +525 122.599000 +526 122.872000 +527 123.144000 +528 123.415000 +529 123.685000 +530 123.954000 +531 124.222000 +532 124.489000 +533 124.755000 +534 125.020000 +535 125.284000 +536 125.547000 +537 125.809000 +538 126.070000 +539 126.330000 +540 126.589000 +541 126.847000 +542 127.104000 +543 127.360000 +544 127.615000 +545 127.869000 +546 128.122000 +547 128.374000 +548 128.625000 +549 128.875000 +550 129.124000 +551 129.372000 +552 129.619000 +553 129.865000 +554 130.110000 +555 130.354000 +556 130.597000 +557 130.839000 +558 131.080000 +559 131.320000 +560 131.559000 +561 131.797000 +562 132.034000 +563 132.270000 +564 132.505000 +565 132.739000 +566 132.972000 +567 133.204000 +568 133.435000 +569 133.665000 +570 133.894000 +571 134.122000 +572 134.349000 +573 134.575000 +574 134.800000 +575 135.024000 +576 135.247000 +577 135.469000 +578 135.690000 +579 135.910000 +580 136.129000 +581 136.347000 +582 136.564000 +583 136.780000 +584 136.995000 +585 137.209000 +586 137.422000 +587 137.634000 +588 137.845000 +589 138.055000 +590 138.264000 +591 138.472000 +592 138.679000 +593 138.885000 +594 139.090000 +595 139.294000 +596 139.497000 +597 139.699000 +598 139.900000 +599 140.100000 +600 140.299000 +601 140.497000 +602 140.694000 +603 140.890000 +604 141.085000 +605 141.279000 +606 141.472000 +607 141.664000 +608 141.855000 +609 142.045000 +610 142.234000 +611 142.422000 +612 142.609000 +613 142.795000 +614 142.980000 +615 143.164000 +616 143.347000 +617 143.529000 +618 143.710000 +619 143.890000 +620 144.069000 +621 144.247000 +622 144.424000 +623 144.600000 +624 144.775000 +625 144.949000 +626 145.122000 +627 145.294000 +628 145.465000 +629 145.635000 +630 145.804000 +631 145.972000 +632 146.139000 +633 146.305000 +634 146.470000 +635 146.634000 +636 146.797000 +637 146.959000 +638 147.120000 +639 147.280000 +640 147.439000 +641 147.597000 +642 147.754000 +643 147.910000 +644 148.065000 +645 148.219000 +646 148.372000 +647 148.524000 +648 148.675000 +649 148.825000 +650 148.974000 +651 149.122000 +652 149.269000 +653 149.415000 +654 149.560000 +655 149.704000 +656 149.847000 +657 149.989000 +658 150.130000 +659 150.270000 +660 150.409000 +661 150.547000 +662 150.684000 +663 150.820000 +664 150.955000 +665 151.089000 +666 151.222000 +667 151.354000 +668 151.485000 +669 151.615000 +670 151.744000 +671 151.872000 +672 151.999000 +673 152.125000 +674 152.250000 +675 152.374000 +676 152.497000 +677 152.619000 +678 152.740000 +679 152.860000 +680 152.979000 +681 153.097000 +682 153.214000 +683 153.330000 +684 153.445000 +685 153.559000 +686 153.672000 +687 153.784000 +688 153.895000 +689 154.005000 +690 154.114000 +691 154.222000 +692 154.329000 +693 154.435000 +694 154.540000 +695 154.644000 +696 154.747000 +697 154.849000 +698 154.950000 +699 155.050000 +700 155.149000 +701 155.247000 +702 155.344000 +703 155.440000 +704 155.535000 +705 155.629000 +706 155.722000 +707 155.814000 +708 155.905000 +709 155.995000 +710 156.084000 +711 156.172000 +712 156.259000 +713 156.345000 +714 156.430000 +715 156.514000 +716 156.597000 +717 156.679000 +718 156.760000 +719 156.840000 +720 156.919000 +721 156.997000 +722 157.074000 +723 157.150000 +724 157.225000 +725 157.299000 +726 157.372000 +727 157.444000 +728 157.515000 +729 157.585000 +730 157.654000 +731 157.722000 +732 157.789000 +733 157.855000 +734 157.920000 +735 157.984000 +736 158.047000 +737 158.109000 +738 158.170000 +739 158.230000 +740 158.289000 +741 158.347000 +742 158.404000 +743 158.460000 +744 158.515000 +745 158.569000 +746 158.622000 +747 158.674000 +748 158.725000 +749 158.775000 +750 158.824000 +751 158.872000 +752 158.919000 +753 158.965000 +754 159.010000 +755 159.054000 +756 159.097000 +757 159.139000 +758 159.180000 +759 159.220000 +760 159.259000 +761 159.297000 +762 159.334000 +763 159.370000 +764 159.405000 +765 159.439000 +766 159.472000 +767 159.504000 +768 159.535000 +769 159.565000 +770 159.594000 +771 159.622000 +772 159.649000 +773 159.675000 +774 159.700000 +775 159.724000 +776 159.747000 +777 159.769000 +778 159.790000 +779 159.810000 +780 159.829000 +781 159.847000 +782 159.864000 +783 159.880000 +784 159.895000 +785 159.909000 +786 159.922000 +787 159.934000 +788 159.945000 +789 159.955000 +790 159.964000 +791 159.972000 +792 159.979000 +793 159.985000 +794 159.990000 +795 159.994000 +796 159.997000 +797 159.999000 +798 160.000000 +799 160.000000 diff --git a/tests/runtests/limit3v2/sunny-day/checkresult b/tests/runtests/limit3v2/sunny-day/checkresult index 5d377a40a9..1a12a9fdb9 100755 --- a/tests/runtests/limit3v2/sunny-day/checkresult +++ b/tests/runtests/limit3v2/sunny-day/checkresult @@ -47,7 +47,7 @@ for line in result_file.readlines(): # # input -> output following - # + # error = math.fabs(in_value - out_value) if error > 0.0: diff --git a/tests/runtests/loadrt.1/expected b/tests/runtests/loadrt.1/expected index 3c1180565b..f8fc8d057c 100644 --- a/tests/runtests/loadrt.1/expected +++ b/tests/runtests/loadrt.1/expected @@ -1,2 +1,2 @@ -and2.0.funct delinst m.q.funct m.r.funct newinst or2.0.funct or2.1.funct or2.2.funct -and2.0.funct.time and2.0.funct.tmax and2.0.funct.tmax-inc and2.0.in0 and2.0.in1 and2.0.out m.q.funct.time m.q.funct.tmax m.q.funct.tmax-inc m.q.in0 m.q.in1 m.q.out m.q.sel m.r.funct.time m.r.funct.tmax m.r.funct.tmax-inc m.r.in0 m.r.in1 m.r.out m.r.sel or2.0.funct.time or2.0.funct.tmax or2.0.funct.tmax-inc or2.0.in0 or2.0.in1 or2.0.out or2.1.funct.time or2.1.funct.tmax or2.1.funct.tmax-inc or2.1.in0 or2.1.in1 or2.1.out or2.2.funct.time or2.2.funct.tmax or2.2.funct.tmax-inc or2.2.in0 or2.2.in1 or2.2.out +and2.0.funct delinst m.q.funct m.r.funct newinst or2.0.funct or2.1.funct or2.2.funct +and2.0.funct.time and2.0.funct.tmax and2.0.funct.tmax-inc and2.0.in0 and2.0.in1 and2.0.out m.q.funct.time m.q.funct.tmax m.q.funct.tmax-inc m.q.in0 m.q.in1 m.q.out m.q.sel m.r.funct.time m.r.funct.tmax m.r.funct.tmax-inc m.r.in0 m.r.in1 m.r.out m.r.sel or2.0.funct.time or2.0.funct.tmax or2.0.funct.tmax-inc or2.0.in0 or2.0.in1 or2.0.out or2.1.funct.time or2.1.funct.tmax or2.1.funct.tmax-inc or2.1.in0 or2.1.in1 or2.1.out or2.2.funct.time or2.2.funct.tmax or2.2.funct.tmax-inc or2.2.in0 or2.2.in1 or2.2.out diff --git a/tests/runtests/modparam.0/expected b/tests/runtests/modparam.0/expected index 266dd0960c..e1936a9873 100644 --- a/tests/runtests/modparam.0/expected +++ b/tests/runtests/modparam.0/expected @@ -1,2 +1 @@ -stepgen.0.maxaccel stepgen.1.maxaccel stepgen.2.maxaccel - +stepgen.0.maxaccel stepgen.1.maxaccel stepgen.2.maxaccel diff --git a/tests/runtests/module-loading/encoder/1-names/setup.hal b/tests/runtests/module-loading/encoder/1-names/setup.hal index 37681c6883..d033d984db 100644 --- a/tests/runtests/module-loading/encoder/1-names/setup.hal +++ b/tests/runtests/module-loading/encoder/1-names/setup.hal @@ -1,4 +1,3 @@ loadrt encoder names=enc0 show pin - diff --git a/tests/runtests/module-loading/encoder/8-names/setup.hal b/tests/runtests/module-loading/encoder/8-names/setup.hal index ffcfa46c64..fc956ea99a 100644 --- a/tests/runtests/module-loading/encoder/8-names/setup.hal +++ b/tests/runtests/module-loading/encoder/8-names/setup.hal @@ -1,4 +1,3 @@ loadrt encoder names=enc0,enc1,enc2,enc3,enc4,enc5,enc6,enc7 show pin - diff --git a/tests/runtests/module-loading/encoder/9-names/setup.hal b/tests/runtests/module-loading/encoder/9-names/setup.hal index 44e893a94b..035624631b 100644 --- a/tests/runtests/module-loading/encoder/9-names/setup.hal +++ b/tests/runtests/module-loading/encoder/9-names/setup.hal @@ -1,4 +1,3 @@ loadrt encoder names=enc0,enc1,enc2,enc3,enc4,enc5,enc6,enc7,enc8 show pin - diff --git a/tests/runtests/module-loading/encoder/num_chan=0/setup.hal b/tests/runtests/module-loading/encoder/num_chan=0/setup.hal index c43ce0ffec..6d39a94572 100644 --- a/tests/runtests/module-loading/encoder/num_chan=0/setup.hal +++ b/tests/runtests/module-loading/encoder/num_chan=0/setup.hal @@ -1,4 +1,3 @@ loadrt encoder num_chan=0 show pin - diff --git a/tests/runtests/module-loading/encoder/num_chan=1/setup.hal b/tests/runtests/module-loading/encoder/num_chan=1/setup.hal index 851536dfd4..17e970679a 100644 --- a/tests/runtests/module-loading/encoder/num_chan=1/setup.hal +++ b/tests/runtests/module-loading/encoder/num_chan=1/setup.hal @@ -1,4 +1,3 @@ loadrt encoder num_chan=1 show pin - diff --git a/tests/runtests/module-loading/encoder/num_chan=8/setup.hal b/tests/runtests/module-loading/encoder/num_chan=8/setup.hal index 474d6ffec0..54936a3430 100644 --- a/tests/runtests/module-loading/encoder/num_chan=8/setup.hal +++ b/tests/runtests/module-loading/encoder/num_chan=8/setup.hal @@ -1,4 +1,3 @@ loadrt encoder num_chan=8 show pin - diff --git a/tests/runtests/module-loading/encoder/num_chan=9/setup.hal b/tests/runtests/module-loading/encoder/num_chan=9/setup.hal index 221dab54f1..123c198de5 100644 --- a/tests/runtests/module-loading/encoder/num_chan=9/setup.hal +++ b/tests/runtests/module-loading/encoder/num_chan=9/setup.hal @@ -1,4 +1,3 @@ loadrt encoder num_chan=9 show pin - diff --git a/tests/runtests/module-loading/encoder_ratio/1-names/setup.hal b/tests/runtests/module-loading/encoder_ratio/1-names/setup.hal index 5b6406c068..675e97ad11 100644 --- a/tests/runtests/module-loading/encoder_ratio/1-names/setup.hal +++ b/tests/runtests/module-loading/encoder_ratio/1-names/setup.hal @@ -1,4 +1,3 @@ loadrt encoder_ratio names=er0 show pin - diff --git a/tests/runtests/module-loading/encoder_ratio/8-names/setup.hal b/tests/runtests/module-loading/encoder_ratio/8-names/setup.hal index c713d25cab..dedec875c2 100644 --- a/tests/runtests/module-loading/encoder_ratio/8-names/setup.hal +++ b/tests/runtests/module-loading/encoder_ratio/8-names/setup.hal @@ -1,4 +1,3 @@ loadrt encoder_ratio names=er0,er1,er2,er3,er4,er5,er6,er7 show pin - diff --git a/tests/runtests/module-loading/encoder_ratio/9-names/setup.hal b/tests/runtests/module-loading/encoder_ratio/9-names/setup.hal index 47f7a60063..e72b899bec 100644 --- a/tests/runtests/module-loading/encoder_ratio/9-names/setup.hal +++ b/tests/runtests/module-loading/encoder_ratio/9-names/setup.hal @@ -1,4 +1,3 @@ loadrt encoder_ratio names=er0,er1,er2,er3,er4,er5,er6,er7,er8 show pin - diff --git a/tests/runtests/module-loading/encoder_ratio/num_chan=0/setup.hal b/tests/runtests/module-loading/encoder_ratio/num_chan=0/setup.hal index 4003dbb1ff..9441fef043 100644 --- a/tests/runtests/module-loading/encoder_ratio/num_chan=0/setup.hal +++ b/tests/runtests/module-loading/encoder_ratio/num_chan=0/setup.hal @@ -1,4 +1,3 @@ loadrt encoder_ratio num_chan=0 show pin - diff --git a/tests/runtests/module-loading/encoder_ratio/num_chan=1/setup.hal b/tests/runtests/module-loading/encoder_ratio/num_chan=1/setup.hal index a6286d5f72..bcd256a8d2 100644 --- a/tests/runtests/module-loading/encoder_ratio/num_chan=1/setup.hal +++ b/tests/runtests/module-loading/encoder_ratio/num_chan=1/setup.hal @@ -1,4 +1,3 @@ loadrt encoder_ratio num_chan=1 show pin - diff --git a/tests/runtests/module-loading/encoder_ratio/num_chan=8/setup.hal b/tests/runtests/module-loading/encoder_ratio/num_chan=8/setup.hal index 6e5fab5f64..884aacdcad 100644 --- a/tests/runtests/module-loading/encoder_ratio/num_chan=8/setup.hal +++ b/tests/runtests/module-loading/encoder_ratio/num_chan=8/setup.hal @@ -1,4 +1,3 @@ loadrt encoder_ratio num_chan=8 show pin - diff --git a/tests/runtests/module-loading/encoder_ratio/num_chan=9/setup.hal b/tests/runtests/module-loading/encoder_ratio/num_chan=9/setup.hal index aec7341697..da3179951e 100644 --- a/tests/runtests/module-loading/encoder_ratio/num_chan=9/setup.hal +++ b/tests/runtests/module-loading/encoder_ratio/num_chan=9/setup.hal @@ -1,4 +1,3 @@ loadrt encoder_ratio num_chan=9 show pin - diff --git a/tests/runtests/module-loading/pid/1-names/setup.hal b/tests/runtests/module-loading/pid/1-names/setup.hal index 0aa3a9b5ac..c67a851b2e 100644 --- a/tests/runtests/module-loading/pid/1-names/setup.hal +++ b/tests/runtests/module-loading/pid/1-names/setup.hal @@ -1,4 +1,3 @@ loadrt pid names=pid0 show pin - diff --git a/tests/runtests/module-loading/pid/16-names/setup.hal b/tests/runtests/module-loading/pid/16-names/setup.hal index dd00f82790..9f8ae8803b 100644 --- a/tests/runtests/module-loading/pid/16-names/setup.hal +++ b/tests/runtests/module-loading/pid/16-names/setup.hal @@ -1,4 +1,3 @@ loadrt pid names=pid0,pid1,pid2,pid3,pid4,pid5,pid6,pid7,pid8,pid9,pid10,pid11,pid12,pid13,pid14,pid15 show pin - diff --git a/tests/runtests/module-loading/pid/17-names/setup.hal b/tests/runtests/module-loading/pid/17-names/setup.hal index b895601f32..d239fc5f34 100644 --- a/tests/runtests/module-loading/pid/17-names/setup.hal +++ b/tests/runtests/module-loading/pid/17-names/setup.hal @@ -1,4 +1,3 @@ loadrt pid names=pid0,pid1,pid2,pid3,pid4,pid5,pid6,pid7,pid8,pid9,pid10,pid11,pid12,pid13,pid14,pid15,pid16 show pin - diff --git a/tests/runtests/module-loading/pid/num_chan=0/README b/tests/runtests/module-loading/pid/num_chan=0/README index eba2e1186e..8e7de6279d 100644 --- a/tests/runtests/module-loading/pid/num_chan=0/README +++ b/tests/runtests/module-loading/pid/num_chan=0/README @@ -2,4 +2,4 @@ This test is deprecated Loading an instantiated component will create one instance by default and thus 1 channel -the test is meaningless \ No newline at end of file +the test is meaningless diff --git a/tests/runtests/module-loading/pid/num_chan=1/setup.hal b/tests/runtests/module-loading/pid/num_chan=1/setup.hal index 13c279ebb4..8496bf131a 100644 --- a/tests/runtests/module-loading/pid/num_chan=1/setup.hal +++ b/tests/runtests/module-loading/pid/num_chan=1/setup.hal @@ -1,4 +1,3 @@ loadrt pid show pin - diff --git a/tests/runtests/module-loading/pid/num_chan=16/setup.hal b/tests/runtests/module-loading/pid/num_chan=16/setup.hal index 07983ce078..7314397447 100644 --- a/tests/runtests/module-loading/pid/num_chan=16/setup.hal +++ b/tests/runtests/module-loading/pid/num_chan=16/setup.hal @@ -1,4 +1,3 @@ loadrt pid count=16 show pin - diff --git a/tests/runtests/module-loading/pid/num_chan=17/setup.hal b/tests/runtests/module-loading/pid/num_chan=17/setup.hal index a72c3ee89d..70d1da101b 100644 --- a/tests/runtests/module-loading/pid/num_chan=17/setup.hal +++ b/tests/runtests/module-loading/pid/num_chan=17/setup.hal @@ -1,4 +1,3 @@ loadrt pid count=17 show pin - diff --git a/tests/runtests/module-loading/shared-test.sh b/tests/runtests/module-loading/shared-test.sh old mode 100644 new mode 100755 diff --git a/tests/runtests/module-loading/siggen/1-names/setup.hal b/tests/runtests/module-loading/siggen/1-names/setup.hal index 52c5e44fea..719990f64c 100644 --- a/tests/runtests/module-loading/siggen/1-names/setup.hal +++ b/tests/runtests/module-loading/siggen/1-names/setup.hal @@ -1,4 +1,3 @@ loadrt siggen names=siggen0 show pin - diff --git a/tests/runtests/module-loading/siggen/16-names/setup.hal b/tests/runtests/module-loading/siggen/16-names/setup.hal index 9df6741768..62b3cde304 100644 --- a/tests/runtests/module-loading/siggen/16-names/setup.hal +++ b/tests/runtests/module-loading/siggen/16-names/setup.hal @@ -1,4 +1,3 @@ loadrt siggen names=siggen0,siggen1,siggen2,siggen3,siggen4,siggen5,siggen6,siggen7,siggen8,siggen9,siggen10,siggen11,siggen12,siggen13,siggen14,siggen15 show pin - diff --git a/tests/runtests/module-loading/siggen/17-names/setup.hal b/tests/runtests/module-loading/siggen/17-names/setup.hal index 5d6a8bfeaf..903af22625 100644 --- a/tests/runtests/module-loading/siggen/17-names/setup.hal +++ b/tests/runtests/module-loading/siggen/17-names/setup.hal @@ -1,4 +1,3 @@ loadrt siggen names=siggen0,siggen1,siggen2,siggen3,siggen4,siggen5,siggen6,siggen7,siggen8,siggen9,siggen10,siggen11,siggen12,siggen13,siggen14,siggen15,siggen16 show pin - diff --git a/tests/runtests/module-loading/siggen/num_chan=0/setup.hal b/tests/runtests/module-loading/siggen/num_chan=0/setup.hal index 96aed83c03..60608a9620 100644 --- a/tests/runtests/module-loading/siggen/num_chan=0/setup.hal +++ b/tests/runtests/module-loading/siggen/num_chan=0/setup.hal @@ -1,4 +1,3 @@ loadrt siggen num_chan=0 show pin - diff --git a/tests/runtests/module-loading/siggen/num_chan=1/setup.hal b/tests/runtests/module-loading/siggen/num_chan=1/setup.hal index 6222b91d1b..8d3f244354 100644 --- a/tests/runtests/module-loading/siggen/num_chan=1/setup.hal +++ b/tests/runtests/module-loading/siggen/num_chan=1/setup.hal @@ -1,4 +1,3 @@ loadrt siggen num_chan=1 show pin - diff --git a/tests/runtests/module-loading/siggen/num_chan=16/setup.hal b/tests/runtests/module-loading/siggen/num_chan=16/setup.hal index 8425100a3f..6513d2ebfd 100644 --- a/tests/runtests/module-loading/siggen/num_chan=16/setup.hal +++ b/tests/runtests/module-loading/siggen/num_chan=16/setup.hal @@ -1,4 +1,3 @@ loadrt siggen num_chan=16 show pin - diff --git a/tests/runtests/module-loading/siggen/num_chan=17/setup.hal b/tests/runtests/module-loading/siggen/num_chan=17/setup.hal index 026b8d1a2e..dac63f9cbb 100644 --- a/tests/runtests/module-loading/siggen/num_chan=17/setup.hal +++ b/tests/runtests/module-loading/siggen/num_chan=17/setup.hal @@ -1,4 +1,3 @@ loadrt siggen num_chan=17 show pin - diff --git a/tests/runtests/module-loading/sim_encoder/1-names/setup.hal b/tests/runtests/module-loading/sim_encoder/1-names/setup.hal index 062fa11dd6..5cacad6916 100644 --- a/tests/runtests/module-loading/sim_encoder/1-names/setup.hal +++ b/tests/runtests/module-loading/sim_encoder/1-names/setup.hal @@ -1,4 +1,3 @@ loadrt sim_encoder names=simenc0 show pin - diff --git a/tests/runtests/module-loading/sim_encoder/8-names/setup.hal b/tests/runtests/module-loading/sim_encoder/8-names/setup.hal index 587582bc0c..0f3e7a1722 100644 --- a/tests/runtests/module-loading/sim_encoder/8-names/setup.hal +++ b/tests/runtests/module-loading/sim_encoder/8-names/setup.hal @@ -1,4 +1,3 @@ loadrt sim_encoder names=simenc0,simenc1,simenc2,simenc3,simenc4,simenc5,simenc6,simenc7 show pin - diff --git a/tests/runtests/module-loading/sim_encoder/9-names/setup.hal b/tests/runtests/module-loading/sim_encoder/9-names/setup.hal index 9270065fdf..574df77d46 100644 --- a/tests/runtests/module-loading/sim_encoder/9-names/setup.hal +++ b/tests/runtests/module-loading/sim_encoder/9-names/setup.hal @@ -1,4 +1,3 @@ loadrt sim_encoder names=simenc0,simenc1,simenc2,simenc3,simenc4,simenc5,simenc6,simenc7,simenc8 show pin - diff --git a/tests/runtests/module-loading/sim_encoder/num_chan=0/setup.hal b/tests/runtests/module-loading/sim_encoder/num_chan=0/setup.hal index fc06aad4d4..00518ade03 100644 --- a/tests/runtests/module-loading/sim_encoder/num_chan=0/setup.hal +++ b/tests/runtests/module-loading/sim_encoder/num_chan=0/setup.hal @@ -1,4 +1,3 @@ loadrt sim_encoder num_chan=0 show pin - diff --git a/tests/runtests/module-loading/sim_encoder/num_chan=1/setup.hal b/tests/runtests/module-loading/sim_encoder/num_chan=1/setup.hal index 94d44c9716..9faf265326 100644 --- a/tests/runtests/module-loading/sim_encoder/num_chan=1/setup.hal +++ b/tests/runtests/module-loading/sim_encoder/num_chan=1/setup.hal @@ -1,4 +1,3 @@ loadrt sim_encoder num_chan=1 show pin - diff --git a/tests/runtests/module-loading/sim_encoder/num_chan=8/setup.hal b/tests/runtests/module-loading/sim_encoder/num_chan=8/setup.hal index 5e977bedae..278babe50c 100644 --- a/tests/runtests/module-loading/sim_encoder/num_chan=8/setup.hal +++ b/tests/runtests/module-loading/sim_encoder/num_chan=8/setup.hal @@ -1,4 +1,3 @@ loadrt sim_encoder num_chan=8 show pin - diff --git a/tests/runtests/module-loading/sim_encoder/num_chan=9/setup.hal b/tests/runtests/module-loading/sim_encoder/num_chan=9/setup.hal index fdfa643da8..a657939a58 100644 --- a/tests/runtests/module-loading/sim_encoder/num_chan=9/setup.hal +++ b/tests/runtests/module-loading/sim_encoder/num_chan=9/setup.hal @@ -1,4 +1,3 @@ loadrt sim_encoder num_chan=9 show pin - diff --git a/tests/runtests/multiclick/expected b/tests/runtests/multiclick/expected index 0271c88624..4314238619 100644 --- a/tests/runtests/multiclick/expected +++ b/tests/runtests/multiclick/expected @@ -1,105 +1,105 @@ -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 -0 1 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 9 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 9 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 9 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 -0 1 0 0 0 0 0 0 0 2 1 1 0 0 0 0 0 0 0 2 -0 0 0 0 0 0 0 0 0 2 1 1 0 0 0 0 0 0 0 2 -0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 2 -0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 2 -0 0 0 0 0 0 0 0 0 2 1 0 1 0 0 0 0 0 0 0 -0 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 -1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 2 -0 1 0 0 0 0 0 0 0 2 0 1 0 0 0 0 0 0 0 3 -0 0 0 0 0 0 0 0 0 2 1 0 0 1 0 0 0 0 0 4 -1 0 0 0 0 0 0 0 0 3 0 0 0 1 0 0 0 0 0 5 -1 0 0 0 0 0 0 0 0 3 1 0 0 0 0 1 0 0 0 6 -1 0 0 0 0 0 0 0 0 3 1 0 0 0 0 1 0 0 0 6 -0 0 0 1 0 0 0 0 0 4 1 0 0 0 0 0 0 0 0 6 -0 0 0 0 0 0 0 0 0 4 1 0 0 0 0 0 0 0 0 6 -0 0 0 0 0 0 0 0 0 4 1 0 0 0 0 0 1 0 0 0 -0 0 0 0 0 0 0 0 0 4 1 0 0 0 0 0 1 0 0 0 -0 0 0 0 0 0 0 0 0 4 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 -0 1 0 0 0 0 0 0 0 2 1 1 0 0 0 0 0 0 0 2 -1 0 0 0 0 0 0 0 0 3 0 1 0 0 0 0 0 0 0 3 -0 0 0 1 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 3 -1 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 3 -0 0 0 0 0 1 0 0 0 6 0 0 0 0 0 0 0 0 0 3 -0 0 0 0 0 0 0 0 0 6 1 0 0 1 0 0 0 0 0 4 -0 0 0 0 0 0 0 0 0 6 1 0 0 1 0 0 0 0 0 4 -0 0 0 0 0 0 0 0 0 6 1 0 0 0 0 0 0 0 0 4 -0 0 0 0 0 0 0 0 0 6 1 0 0 0 0 0 0 0 0 4 -0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 -1 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 1 -1 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 9 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 -1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 2 -1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 3 -0 1 0 0 0 0 0 0 0 2 1 0 0 1 0 0 0 0 0 4 -1 0 0 0 0 0 0 0 0 3 0 0 0 1 0 0 0 0 0 5 -1 0 0 0 0 0 0 0 0 3 1 0 0 0 0 1 0 0 0 6 -1 0 0 0 0 0 0 0 0 3 0 0 0 0 0 1 0 0 0 7 -0 0 0 1 0 0 0 0 0 4 1 0 0 0 0 0 0 1 0 8 -1 0 0 0 0 0 0 0 0 5 1 0 0 0 0 0 0 1 0 8 -1 0 0 0 0 0 0 0 0 5 1 0 0 0 0 0 0 0 0 8 -0 0 0 0 0 1 0 0 0 6 1 0 0 0 0 0 0 0 0 8 -0 0 0 0 0 0 0 0 0 6 1 0 0 0 0 0 0 0 1 0 -0 0 0 0 0 0 0 0 0 6 1 0 0 0 0 0 0 0 1 0 -0 0 0 0 0 0 0 0 0 6 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 6 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 -0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 -1 0 0 0 0 0 0 0 0 3 1 1 0 0 0 0 0 0 0 2 -0 0 0 1 0 0 0 0 0 4 1 1 0 0 0 0 0 0 0 2 -1 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 3 -0 0 0 0 0 1 0 0 0 6 0 0 0 0 0 0 0 0 0 3 -1 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 3 -0 0 0 0 0 0 0 1 0 8 1 0 0 1 0 0 0 0 0 4 -0 0 0 0 0 0 0 0 0 8 1 0 0 1 0 0 0 0 0 4 -0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 5 -0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 5 -0 0 0 0 0 0 0 0 0 8 1 0 0 0 0 1 0 0 0 6 -0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 7 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 8 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 8 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 8 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 8 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 +0 1 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 +0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 0 9 1 0 0 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 0 9 1 0 0 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 0 9 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 +0 1 0 0 0 0 0 0 0 2 1 1 0 0 0 0 0 0 0 2 +0 0 0 0 0 0 0 0 0 2 1 1 0 0 0 0 0 0 0 2 +0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 2 +0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 2 +0 0 0 0 0 0 0 0 0 2 1 0 1 0 0 0 0 0 0 0 +0 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 2 +0 1 0 0 0 0 0 0 0 2 0 1 0 0 0 0 0 0 0 3 +0 0 0 0 0 0 0 0 0 2 1 0 0 1 0 0 0 0 0 4 +1 0 0 0 0 0 0 0 0 3 0 0 0 1 0 0 0 0 0 5 +1 0 0 0 0 0 0 0 0 3 1 0 0 0 0 1 0 0 0 6 +1 0 0 0 0 0 0 0 0 3 1 0 0 0 0 1 0 0 0 6 +0 0 0 1 0 0 0 0 0 4 1 0 0 0 0 0 0 0 0 6 +0 0 0 0 0 0 0 0 0 4 1 0 0 0 0 0 0 0 0 6 +0 0 0 0 0 0 0 0 0 4 1 0 0 0 0 0 1 0 0 0 +0 0 0 0 0 0 0 0 0 4 1 0 0 0 0 0 1 0 0 0 +0 0 0 0 0 0 0 0 0 4 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 +0 1 0 0 0 0 0 0 0 2 1 1 0 0 0 0 0 0 0 2 +1 0 0 0 0 0 0 0 0 3 0 1 0 0 0 0 0 0 0 3 +0 0 0 1 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 3 +1 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 3 +0 0 0 0 0 1 0 0 0 6 0 0 0 0 0 0 0 0 0 3 +0 0 0 0 0 0 0 0 0 6 1 0 0 1 0 0 0 0 0 4 +0 0 0 0 0 0 0 0 0 6 1 0 0 1 0 0 0 0 0 4 +0 0 0 0 0 0 0 0 0 6 1 0 0 0 0 0 0 0 0 4 +0 0 0 0 0 0 0 0 0 6 1 0 0 0 0 0 0 0 0 4 +0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 +1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 9 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 2 +1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 3 +0 1 0 0 0 0 0 0 0 2 1 0 0 1 0 0 0 0 0 4 +1 0 0 0 0 0 0 0 0 3 0 0 0 1 0 0 0 0 0 5 +1 0 0 0 0 0 0 0 0 3 1 0 0 0 0 1 0 0 0 6 +1 0 0 0 0 0 0 0 0 3 0 0 0 0 0 1 0 0 0 7 +0 0 0 1 0 0 0 0 0 4 1 0 0 0 0 0 0 1 0 8 +1 0 0 0 0 0 0 0 0 5 1 0 0 0 0 0 0 1 0 8 +1 0 0 0 0 0 0 0 0 5 1 0 0 0 0 0 0 0 0 8 +0 0 0 0 0 1 0 0 0 6 1 0 0 0 0 0 0 0 0 8 +0 0 0 0 0 0 0 0 0 6 1 0 0 0 0 0 0 0 1 0 +0 0 0 0 0 0 0 0 0 6 1 0 0 0 0 0 0 0 1 0 +0 0 0 0 0 0 0 0 0 6 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 6 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 +1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 +0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 3 1 1 0 0 0 0 0 0 0 2 +0 0 0 1 0 0 0 0 0 4 1 1 0 0 0 0 0 0 0 2 +1 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 3 +0 0 0 0 0 1 0 0 0 6 0 0 0 0 0 0 0 0 0 3 +1 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 3 +0 0 0 0 0 0 0 1 0 8 1 0 0 1 0 0 0 0 0 4 +0 0 0 0 0 0 0 0 0 8 1 0 0 1 0 0 0 0 0 4 +0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 5 +0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 5 +0 0 0 0 0 0 0 0 0 8 1 0 0 0 0 1 0 0 0 6 +0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 7 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 8 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 8 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 8 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 8 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 diff --git a/tests/runtests/multiclick/input-signals b/tests/runtests/multiclick/input-signals index c30b758b85..bc8893a5bc 100644 --- a/tests/runtests/multiclick/input-signals +++ b/tests/runtests/multiclick/input-signals @@ -116,4 +116,3 @@ 0 1 0 1 0 1 - diff --git a/tests/runtests/multiclick/test.hal b/tests/runtests/multiclick/test.hal index 517b3646ab..0b27fbb9ac 100644 --- a/tests/runtests/multiclick/test.hal +++ b/tests/runtests/multiclick/test.hal @@ -59,4 +59,3 @@ start waitusr -i halstreamer waitusr -i halsampler - diff --git a/tests/runtests/mux/README b/tests/runtests/mux/README index 249198ac3b..de789e7179 100644 --- a/tests/runtests/mux/README +++ b/tests/runtests/mux/README @@ -1,2 +1 @@ Simple test of the generic mux component - diff --git a/tests/runtests/mux/expected b/tests/runtests/mux/expected index 2474648900..1c96c846ac 100644 --- a/tests/runtests/mux/expected +++ b/tests/runtests/mux/expected @@ -1,105 +1,105 @@ -0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 -0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 -0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 -0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 -0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 -0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 -0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 -0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 -0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 -0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 -0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 -0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 -0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 -0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 -0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 -0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 -0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 -0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 -0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 -0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 -0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 0 2.220000 1 1 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 0 2.220000 1 1 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 0 2.220000 1 1 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 0 2.220000 1 1 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 1 3.330000 0 2 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 1 3.330000 0 2 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 1 3.330000 0 2 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 1 3.330000 0 2 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 0 4.440000 1 3 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 0 4.440000 1 3 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 0 4.440000 1 3 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 0 4.440000 1 3 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 4.440000 1 3 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 4.440000 1 3 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 4.440000 1 3 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 4.440000 1 3 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 4.440000 1 3 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 4.440000 1 3 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 4.440000 1 3 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 4.440000 1 3 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 4.440000 1 3 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 4.440000 1 3 -1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 4.440000 1 3 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 1 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 1 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 1 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 1 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 -0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 +0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 +0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 +0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 +0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 +0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 +0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 +0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 +0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 +0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 +0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 +0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 +0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 +0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 +0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 +0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 +0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 +0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 +0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 +0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 +0 0.000000 0 0 0 0.000000 0 0 1 -999.000000 -999 0 0 0.000000 0 0 0 1.110000 0 0 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 0 2.220000 1 1 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 0 2.220000 1 1 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 0 2.220000 1 1 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 0 2.220000 1 1 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 2.220000 1 1 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 1 3.330000 0 2 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 1 3.330000 0 2 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 1 3.330000 0 2 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 1 3.330000 0 2 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 3.330000 0 2 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 0 4.440000 1 3 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 0 4.440000 1 3 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 0 4.440000 1 3 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 0 4.440000 1 3 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 4.440000 1 3 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 4.440000 1 3 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 4.440000 1 3 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 4.440000 1 3 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 4.440000 1 3 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 4.440000 1 3 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 4.440000 1 3 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 4.440000 1 3 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 4.440000 1 3 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 4.440000 1 3 +1 1.000000 1 1 1 5000000000.001000 2147483647 4294967295 1 -100.000000 -100 0 1 4294967295.000000 2147483647 4294967295 1 4.440000 1 3 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 1 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 1 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 1 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 1 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 +0 0.000000 0 0 0 0.000000 0 4294967295 1 -999.000000 -999 0 0 0.000000 0 0 0 5.550000 0 4 diff --git a/tests/runtests/mux/input-signals b/tests/runtests/mux/input-signals index 02451260e6..571b1841d7 100644 --- a/tests/runtests/mux/input-signals +++ b/tests/runtests/mux/input-signals @@ -99,4 +99,4 @@ 0 4 0 4 0 4 -1 4 \ No newline at end of file +1 4 diff --git a/tests/runtests/mux/test.hal b/tests/runtests/mux/test.hal index f285508d7b..9ac0b656f1 100644 --- a/tests/runtests/mux/test.hal +++ b/tests/runtests/mux/test.hal @@ -29,20 +29,20 @@ addf mux-gen.16 slow addf mux-gen.17 slow addf sampler.0 slow -net v0 mux-gen.00.in-bit-00 mux-gen.01.in-bit-00 mux-gen.02.in-bit-00 mux-gen.03.in-bit-00 mux-gen.16.in-bit-00 +net v0 mux-gen.00.in-bit-00 mux-gen.01.in-bit-00 mux-gen.02.in-bit-00 mux-gen.03.in-bit-00 mux-gen.16.in-bit-00 net v1 mux-gen.04.in-float-00 mux-gen.05.in-float-00 mux-gen.06.in-float-00 mux-gen.07.in-float-00 -net v2 mux-gen.08.in-s32-00 mux-gen.09.in-s32-00 mux-gen.10.in-s32-00 mux-gen.11.in-s32-00 -net v3 mux-gen.12.in-u32-00 mux-gen.13.in-u32-00 mux-gen.14.in-u32-00 mux-gen.15.in-u32-00 +net v2 mux-gen.08.in-s32-00 mux-gen.09.in-s32-00 mux-gen.10.in-s32-00 mux-gen.11.in-s32-00 +net v3 mux-gen.12.in-u32-00 mux-gen.13.in-u32-00 mux-gen.14.in-u32-00 mux-gen.15.in-u32-00 net v4 mux-gen.00.in-bit-01 mux-gen.01.in-bit-01 mux-gen.02.in-bit-01 mux-gen.03.in-bit-01 mux-gen.16.in-bit-01 net v5 mux-gen.04.in-float-01 mux-gen.05.in-float-01 mux-gen.06.in-float-01 mux-gen.07.in-float-01 -net v6 mux-gen.08.in-s32-01 mux-gen.09.in-s32-01 mux-gen.10.in-s32-01 mux-gen.11.in-s32-01 -net v7 mux-gen.12.in-u32-01 mux-gen.13.in-u32-01 mux-gen.14.in-u32-01 mux-gen.15.in-u32-01 +net v6 mux-gen.08.in-s32-01 mux-gen.09.in-s32-01 mux-gen.10.in-s32-01 mux-gen.11.in-s32-01 +net v7 mux-gen.12.in-u32-01 mux-gen.13.in-u32-01 mux-gen.14.in-u32-01 mux-gen.15.in-u32-01 -net sel mux-gen.00.sel-bit-00 mux-gen.01.sel-bit-00 mux-gen.02.sel-bit-00 mux-gen.03.sel-bit-00 -net sel mux-gen.04.sel-bit-00 mux-gen.05.sel-bit-00 mux-gen.06.sel-bit-00 mux-gen.07.sel-bit-00 -net sel mux-gen.08.sel-bit-00 mux-gen.09.sel-bit-00 mux-gen.10.sel-bit-00 mux-gen.11.sel-bit-00 -net sel mux-gen.12.sel-bit-00 mux-gen.13.sel-bit-00 mux-gen.14.sel-bit-00 mux-gen.15.sel-bit-00 +net sel mux-gen.00.sel-bit-00 mux-gen.01.sel-bit-00 mux-gen.02.sel-bit-00 mux-gen.03.sel-bit-00 +net sel mux-gen.04.sel-bit-00 mux-gen.05.sel-bit-00 mux-gen.06.sel-bit-00 mux-gen.07.sel-bit-00 +net sel mux-gen.08.sel-bit-00 mux-gen.09.sel-bit-00 mux-gen.10.sel-bit-00 mux-gen.11.sel-bit-00 +net sel mux-gen.12.sel-bit-00 mux-gen.13.sel-bit-00 mux-gen.14.sel-bit-00 mux-gen.15.sel-bit-00 net sel mux-gen.16.sel-bit-00 sets v0 0 @@ -89,5 +89,3 @@ start waitusr -i halstreamer waitusr -i halsampler - - diff --git a/tests/runtests/near.0/expected b/tests/runtests/near.0/expected index 5b4204ac46..82ace23ac2 100644 --- a/tests/runtests/near.0/expected +++ b/tests/runtests/near.0/expected @@ -1,122 +1,122 @@ --12.000000 -12.000000 1 1 --12.000000 -11.000000 1 1 --12.000000 -10.000000 1 0 --12.000000 -2.000000 0 0 --12.000000 -1.000000 0 0 --12.000000 0.000000 0 0 --12.000000 1.000000 0 0 --12.000000 2.000000 0 0 --12.000000 10.000000 0 0 --12.000000 11.000000 0 0 --12.000000 12.000000 0 0 --11.000000 -12.000000 1 1 --11.000000 -11.000000 1 1 --11.000000 -10.000000 1 1 --11.000000 -2.000000 0 0 --11.000000 -1.000000 0 0 --11.000000 0.000000 0 0 --11.000000 1.000000 0 0 --11.000000 2.000000 0 0 --11.000000 10.000000 0 0 --11.000000 11.000000 0 0 --11.000000 12.000000 0 0 --10.000000 -12.000000 1 0 --10.000000 -11.000000 1 1 --10.000000 -10.000000 1 1 --10.000000 -2.000000 0 0 --10.000000 -1.000000 0 0 --10.000000 0.000000 0 0 --10.000000 1.000000 0 0 --10.000000 2.000000 0 0 --10.000000 10.000000 0 0 --10.000000 11.000000 0 0 --10.000000 12.000000 0 0 --2.000000 -12.000000 0 0 --2.000000 -11.000000 0 0 --2.000000 -10.000000 0 0 --2.000000 -2.000000 1 1 --2.000000 -1.000000 0 1 --2.000000 0.000000 0 0 --2.000000 1.000000 0 0 --2.000000 2.000000 0 0 --2.000000 10.000000 0 0 --2.000000 11.000000 0 0 --2.000000 12.000000 0 0 --1.000000 -12.000000 0 0 --1.000000 -11.000000 0 0 --1.000000 -10.000000 0 0 --1.000000 -2.000000 0 1 --1.000000 -1.000000 1 1 --1.000000 0.000000 0 1 --1.000000 1.000000 0 0 --1.000000 2.000000 0 0 --1.000000 10.000000 0 0 --1.000000 11.000000 0 0 --1.000000 12.000000 0 0 -0.000000 -12.000000 0 0 -0.000000 -11.000000 0 0 -0.000000 -10.000000 0 0 -0.000000 -2.000000 0 0 -0.000000 -1.000000 0 1 -0.000000 0.000000 1 1 -0.000000 1.000000 0 1 -0.000000 2.000000 0 0 -0.000000 10.000000 0 0 -0.000000 11.000000 0 0 -0.000000 12.000000 0 0 -1.000000 -12.000000 0 0 -1.000000 -11.000000 0 0 -1.000000 -10.000000 0 0 -1.000000 -2.000000 0 0 -1.000000 -1.000000 0 0 -1.000000 0.000000 0 1 -1.000000 1.000000 1 1 -1.000000 2.000000 0 1 -1.000000 10.000000 0 0 -1.000000 11.000000 0 0 -1.000000 12.000000 0 0 -2.000000 -12.000000 0 0 -2.000000 -11.000000 0 0 -2.000000 -10.000000 0 0 -2.000000 -2.000000 0 0 -2.000000 -1.000000 0 0 -2.000000 0.000000 0 0 -2.000000 1.000000 0 1 -2.000000 2.000000 1 1 -2.000000 10.000000 0 0 -2.000000 11.000000 0 0 -2.000000 12.000000 0 0 -10.000000 -12.000000 0 0 -10.000000 -11.000000 0 0 -10.000000 -10.000000 0 0 -10.000000 -2.000000 0 0 -10.000000 -1.000000 0 0 -10.000000 0.000000 0 0 -10.000000 1.000000 0 0 -10.000000 2.000000 0 0 -10.000000 10.000000 1 1 -10.000000 11.000000 1 1 -10.000000 12.000000 1 0 -11.000000 -12.000000 0 0 -11.000000 -11.000000 0 0 -11.000000 -10.000000 0 0 -11.000000 -2.000000 0 0 -11.000000 -1.000000 0 0 -11.000000 0.000000 0 0 -11.000000 1.000000 0 0 -11.000000 2.000000 0 0 -11.000000 10.000000 1 1 -11.000000 11.000000 1 1 -11.000000 12.000000 1 1 -12.000000 -12.000000 0 0 -12.000000 -11.000000 0 0 -12.000000 -10.000000 0 0 -12.000000 -2.000000 0 0 -12.000000 -1.000000 0 0 -12.000000 0.000000 0 0 -12.000000 1.000000 0 0 -12.000000 2.000000 0 0 -12.000000 10.000000 1 0 -12.000000 11.000000 1 1 -12.000000 12.000000 1 1 -12.000000 12.000000 1 1 +-12.000000 -12.000000 1 1 +-12.000000 -11.000000 1 1 +-12.000000 -10.000000 1 0 +-12.000000 -2.000000 0 0 +-12.000000 -1.000000 0 0 +-12.000000 0.000000 0 0 +-12.000000 1.000000 0 0 +-12.000000 2.000000 0 0 +-12.000000 10.000000 0 0 +-12.000000 11.000000 0 0 +-12.000000 12.000000 0 0 +-11.000000 -12.000000 1 1 +-11.000000 -11.000000 1 1 +-11.000000 -10.000000 1 1 +-11.000000 -2.000000 0 0 +-11.000000 -1.000000 0 0 +-11.000000 0.000000 0 0 +-11.000000 1.000000 0 0 +-11.000000 2.000000 0 0 +-11.000000 10.000000 0 0 +-11.000000 11.000000 0 0 +-11.000000 12.000000 0 0 +-10.000000 -12.000000 1 0 +-10.000000 -11.000000 1 1 +-10.000000 -10.000000 1 1 +-10.000000 -2.000000 0 0 +-10.000000 -1.000000 0 0 +-10.000000 0.000000 0 0 +-10.000000 1.000000 0 0 +-10.000000 2.000000 0 0 +-10.000000 10.000000 0 0 +-10.000000 11.000000 0 0 +-10.000000 12.000000 0 0 +-2.000000 -12.000000 0 0 +-2.000000 -11.000000 0 0 +-2.000000 -10.000000 0 0 +-2.000000 -2.000000 1 1 +-2.000000 -1.000000 0 1 +-2.000000 0.000000 0 0 +-2.000000 1.000000 0 0 +-2.000000 2.000000 0 0 +-2.000000 10.000000 0 0 +-2.000000 11.000000 0 0 +-2.000000 12.000000 0 0 +-1.000000 -12.000000 0 0 +-1.000000 -11.000000 0 0 +-1.000000 -10.000000 0 0 +-1.000000 -2.000000 0 1 +-1.000000 -1.000000 1 1 +-1.000000 0.000000 0 1 +-1.000000 1.000000 0 0 +-1.000000 2.000000 0 0 +-1.000000 10.000000 0 0 +-1.000000 11.000000 0 0 +-1.000000 12.000000 0 0 +0.000000 -12.000000 0 0 +0.000000 -11.000000 0 0 +0.000000 -10.000000 0 0 +0.000000 -2.000000 0 0 +0.000000 -1.000000 0 1 +0.000000 0.000000 1 1 +0.000000 1.000000 0 1 +0.000000 2.000000 0 0 +0.000000 10.000000 0 0 +0.000000 11.000000 0 0 +0.000000 12.000000 0 0 +1.000000 -12.000000 0 0 +1.000000 -11.000000 0 0 +1.000000 -10.000000 0 0 +1.000000 -2.000000 0 0 +1.000000 -1.000000 0 0 +1.000000 0.000000 0 1 +1.000000 1.000000 1 1 +1.000000 2.000000 0 1 +1.000000 10.000000 0 0 +1.000000 11.000000 0 0 +1.000000 12.000000 0 0 +2.000000 -12.000000 0 0 +2.000000 -11.000000 0 0 +2.000000 -10.000000 0 0 +2.000000 -2.000000 0 0 +2.000000 -1.000000 0 0 +2.000000 0.000000 0 0 +2.000000 1.000000 0 1 +2.000000 2.000000 1 1 +2.000000 10.000000 0 0 +2.000000 11.000000 0 0 +2.000000 12.000000 0 0 +10.000000 -12.000000 0 0 +10.000000 -11.000000 0 0 +10.000000 -10.000000 0 0 +10.000000 -2.000000 0 0 +10.000000 -1.000000 0 0 +10.000000 0.000000 0 0 +10.000000 1.000000 0 0 +10.000000 2.000000 0 0 +10.000000 10.000000 1 1 +10.000000 11.000000 1 1 +10.000000 12.000000 1 0 +11.000000 -12.000000 0 0 +11.000000 -11.000000 0 0 +11.000000 -10.000000 0 0 +11.000000 -2.000000 0 0 +11.000000 -1.000000 0 0 +11.000000 0.000000 0 0 +11.000000 1.000000 0 0 +11.000000 2.000000 0 0 +11.000000 10.000000 1 1 +11.000000 11.000000 1 1 +11.000000 12.000000 1 1 +12.000000 -12.000000 0 0 +12.000000 -11.000000 0 0 +12.000000 -10.000000 0 0 +12.000000 -2.000000 0 0 +12.000000 -1.000000 0 0 +12.000000 0.000000 0 0 +12.000000 1.000000 0 0 +12.000000 2.000000 0 0 +12.000000 10.000000 1 0 +12.000000 11.000000 1 1 +12.000000 12.000000 1 1 +12.000000 12.000000 1 1 diff --git a/tests/runtests/near.0/runstreamer b/tests/runtests/near.0/runstreamer old mode 100644 new mode 100755 diff --git a/tests/runtests/near.0/test.hal b/tests/runtests/near.0/test.hal index 0541e1f0eb..dd7652e520 100644 --- a/tests/runtests/near.0/test.hal +++ b/tests/runtests/near.0/test.hal @@ -21,4 +21,3 @@ addf sampler.0 fast loadusr -w sh runstreamer start waitusr -i halsampler - diff --git a/tests/runtests/pll_correction/pll_correction.hal b/tests/runtests/pll_correction/pll_correction.hal index bebb2de4c9..ecfead88d6 100644 --- a/tests/runtests/pll_correction/pll_correction.hal +++ b/tests/runtests/pll_correction/pll_correction.hal @@ -27,4 +27,3 @@ start #loadusr -Wn halsampler halsampler -N halsampler -n 2000 # - Machinekit-HAL loadusr -w halsampler -n $(NUMSAMPS_X4) - diff --git a/tests/runtests/pll_correction/skip b/tests/runtests/pll_correction/skip old mode 100644 new mode 100755 diff --git a/tests/runtests/save.0/expected b/tests/runtests/save.0/expected index 496e279c29..fbf029b460 100644 --- a/tests/runtests/save.0/expected +++ b/tests/runtests/save.0/expected @@ -1,9 +1,9 @@ # components -loadrt sampler cfg=bb depth=4096 -loadrt stepgen step_type=0 +loadrt sampler cfg=bb depth=4096 +loadrt stepgen step_type=0 # signals -newsig unlinked bit +newsig unlinked bit # nets net dir => sampler.0.pin.0 @@ -25,4 +25,3 @@ addf stepgen.update-freq fast addf stepgen.make-pulses fast addf stepgen.capture-position fast addf sampler.0 fast - diff --git a/tests/runtests/save.0/test.hal b/tests/runtests/save.0/test.hal index 051cc795a9..eeeccf58f0 100644 --- a/tests/runtests/save.0/test.hal +++ b/tests/runtests/save.0/test.hal @@ -5,7 +5,7 @@ loadrt stepgen step_type=0 newthread fast 100000 fp newsig unlinked bit -net dir stepgen.0.dir sampler.0.pin.0 +net dir stepgen.0.dir sampler.0.pin.0 net step stepgen.0.step sampler.0.pin.1 addf stepgen.update-freq fast diff --git a/tests/runtests/save.1/expected b/tests/runtests/save.1/expected index a48c266a9c..6d4021a184 100644 --- a/tests/runtests/save.1/expected +++ b/tests/runtests/save.1/expected @@ -1,19 +1,19 @@ # components -loadrt wcomp count=1 -loadrt or2 count=1 +loadrt wcomp count=1 +loadrt or2 count=1 newinst or2 c newinst wcomp b newinst or2 a # signals # links # parameter values -setp a.tmax 0 +setp a.tmax 0 setp b.max 0.00000e+00 setp b.min 0.00000e+00 -setp b.tmax 0 -setp c.tmax 0 -setp or2.0.tmax 0 +setp b.tmax 0 +setp c.tmax 0 +setp or2.0.tmax 0 setp wcomp.0.max 0.00000e+00 setp wcomp.0.min 0.00000e+00 -setp wcomp.0.tmax 0 +setp wcomp.0.tmax 0 # realtime thread/function links diff --git a/tests/runtests/source.0/expected b/tests/runtests/source.0/expected index 0b053a5e6e..919c0ae227 100644 --- a/tests/runtests/source.0/expected +++ b/tests/runtests/source.0/expected @@ -1,10 +1,10 @@ -1 -1 -0 -0 -1 -1 -0 -0 -0 -1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 diff --git a/tests/runtests/source.0/runstreamer b/tests/runtests/source.0/runstreamer old mode 100644 new mode 100755 diff --git a/tests/runtests/source.0/sourced.hal b/tests/runtests/source.0/sourced.hal index 17fbcd35a9..c10934c39b 100644 --- a/tests/runtests/source.0/sourced.hal +++ b/tests/runtests/source.0/sourced.hal @@ -10,5 +10,3 @@ net c flipflop.0.reset net d flipflop.0.set net n0 flipflop.0.out sampler.0.pin.0 - - diff --git a/tests/runtests/stepgen.0/expected b/tests/runtests/stepgen.0/expected index 2427ae9119..ab3ec3d74b 100644 --- a/tests/runtests/stepgen.0/expected +++ b/tests/runtests/stepgen.0/expected @@ -1,3500 +1,3500 @@ -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 1 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 -0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 1 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 diff --git a/tests/runtests/stepgen.1/checkresult b/tests/runtests/stepgen.1/checkresult index d9a603ccbe..1c7d74763e 100755 --- a/tests/runtests/stepgen.1/checkresult +++ b/tests/runtests/stepgen.1/checkresult @@ -33,4 +33,4 @@ done < $1 # if the end position isn't 1280, it's an error if [ $count -ne 1280 ]; then exit 1; fi -exit 0 +exit 0 diff --git a/tests/runtests/stepgen.2/test.hal b/tests/runtests/stepgen.2/test.hal index 285bf07d96..c8f358e229 100644 --- a/tests/runtests/stepgen.2/test.hal +++ b/tests/runtests/stepgen.2/test.hal @@ -22,4 +22,3 @@ setp stepgen.0.position-scale 32000 start waitusr -i halsampler - diff --git a/tests/runtests/symbols.0/test.sh b/tests/runtests/symbols.0/test.sh old mode 100644 new mode 100755 diff --git a/tests/runtests/symbols.1/test.sh b/tests/runtests/symbols.1/test.sh old mode 100644 new mode 100755 diff --git a/tests/runtests/threads.0/README b/tests/runtests/threads.0/README index 3f8648ddd1..c72a589fee 100644 --- a/tests/runtests/threads.0/README +++ b/tests/runtests/threads.0/README @@ -4,5 +4,3 @@ This test will fail with Posix threads unless the rtapi_app_posix binary is given the right capabilities. See https://github.com/mhaberler/linuxcnc/commit/25b12625b347a2626b104348dcf24692e8bf6933 . - - diff --git a/tests/runtests/threads.0/checkresult b/tests/runtests/threads.0/checkresult index 760a80fbe0..b6ba1bde23 100755 --- a/tests/runtests/threads.0/checkresult +++ b/tests/runtests/threads.0/checkresult @@ -18,7 +18,7 @@ for i in l: continue if i != expected: - if expected == 1: + if expected == 1: print("line %d: got %d, expected %d" % (lineno, i, expected)) else: print("line %d: got %d, expected %d or 1" % (lineno, i, expected)) @@ -31,4 +31,3 @@ if got_reset: print("no reset in %d lines!" % (lineno-1)) raise SystemExit(1) # failure - diff --git a/tests/runtests/timedelay.0/expected b/tests/runtests/timedelay.0/expected index d791340f19..60e96eb0ec 100644 --- a/tests/runtests/timedelay.0/expected +++ b/tests/runtests/timedelay.0/expected @@ -1,64 +1,64 @@ -0 1 0 -1 1 0 -2 1 0 -3 1 0 -4 1 1 -5 0 1 -6 0 1 -7 0 1 -8 0 1 -9 0 1 -10 0 1 -11 0 1 -12 0 1 -13 0 0 -14 1 0 -15 1 0 -16 1 0 -17 1 0 -18 1 1 -19 0 1 -20 0 1 -21 0 1 -22 0 1 -23 0 1 -24 0 1 -25 0 1 -26 0 1 -27 0 0 -28 1 0 -29 1 0 -30 1 0 -31 1 0 -32 1 1 -33 0 1 -34 0 1 -35 0 1 -36 0 1 -37 0 1 -38 0 1 -39 0 1 -40 0 1 -41 0 0 -42 1 0 -43 1 0 -44 1 0 -45 1 0 -46 1 1 -47 0 1 -48 0 1 -49 0 1 -50 0 1 -51 0 1 -52 0 1 -53 0 1 -54 0 1 -55 0 0 -56 1 0 -57 1 0 -58 1 0 -59 1 0 -60 1 1 -61 0 1 -62 0 1 -63 0 1 +0 1 0 +1 1 0 +2 1 0 +3 1 0 +4 1 1 +5 0 1 +6 0 1 +7 0 1 +8 0 1 +9 0 1 +10 0 1 +11 0 1 +12 0 1 +13 0 0 +14 1 0 +15 1 0 +16 1 0 +17 1 0 +18 1 1 +19 0 1 +20 0 1 +21 0 1 +22 0 1 +23 0 1 +24 0 1 +25 0 1 +26 0 1 +27 0 0 +28 1 0 +29 1 0 +30 1 0 +31 1 0 +32 1 1 +33 0 1 +34 0 1 +35 0 1 +36 0 1 +37 0 1 +38 0 1 +39 0 1 +40 0 1 +41 0 0 +42 1 0 +43 1 0 +44 1 0 +45 1 0 +46 1 1 +47 0 1 +48 0 1 +49 0 1 +50 0 1 +51 0 1 +52 0 1 +53 0 1 +54 0 1 +55 0 0 +56 1 0 +57 1 0 +58 1 0 +59 1 0 +60 1 1 +61 0 1 +62 0 1 +63 0 1 diff --git a/tests/runtests/usercomp.0/rand.comp b/tests/runtests/usercomp.0/rand.comp index 4b0135e236..2a44ccb6e6 100644 --- a/tests/runtests/usercomp.0/rand.comp +++ b/tests/runtests/usercomp.0/rand.comp @@ -34,4 +34,3 @@ void user_mainloop(void) { FOR_ALL_INSTS() out = drand48(); } } -