merge
This commit is contained in:
commit
bd24f31a4e
9 changed files with 1878 additions and 813 deletions
261
LICENSE
261
LICENSE
|
@ -1,261 +0,0 @@
|
|||
The Plan 9 software is provided under the terms of the
|
||||
Lucent Public License, Version 1.02, reproduced below,
|
||||
with the following notable exceptions:
|
||||
|
||||
1. No right is granted to create derivative works of or
|
||||
to redistribute (other than with the Plan 9 Operating System)
|
||||
the screen imprinter fonts identified in subdirectory
|
||||
/lib/font/bit/lucida and printer fonts (Lucida Sans Unicode, Lucida
|
||||
Sans Italic, Lucida Sans Demibold, Lucida Typewriter, Lucida Sans
|
||||
Typewriter83), identified in subdirectory /sys/lib/postscript/font.
|
||||
These directories contain material copyrights by B&H Inc. and Y&Y Inc.
|
||||
|
||||
2. The printer fonts identified in subdirectory /sys/lib/ghostscript/font
|
||||
are subject to the GNU GPL, reproduced in the file /LICENSE.gpl.
|
||||
|
||||
3. The ghostscript program in the subdirectory /sys/src/cmd/gs is
|
||||
covered by the Aladdin Free Public License, reproduced in the file
|
||||
/LICENSE.afpl.
|
||||
|
||||
Other, less notable exceptions are marked in the file tree with
|
||||
COPYING, COPYRIGHT, or LICENSE files.
|
||||
|
||||
===================================================================
|
||||
|
||||
Lucent Public License Version 1.02
|
||||
|
||||
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS PUBLIC
|
||||
LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE
|
||||
PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
|
||||
|
||||
1. DEFINITIONS
|
||||
|
||||
"Contribution" means:
|
||||
|
||||
a. in the case of Lucent Technologies Inc. ("LUCENT"), the Original
|
||||
Program, and
|
||||
b. in the case of each Contributor,
|
||||
|
||||
i. changes to the Program, and
|
||||
ii. additions to the Program;
|
||||
|
||||
where such changes and/or additions to the Program were added to the
|
||||
Program by such Contributor itself or anyone acting on such
|
||||
Contributor's behalf, and the Contributor explicitly consents, in
|
||||
accordance with Section 3C, to characterization of the changes and/or
|
||||
additions as Contributions.
|
||||
|
||||
"Contributor" means LUCENT and any other entity that has Contributed a
|
||||
Contribution to the Program.
|
||||
|
||||
"Distributor" means a Recipient that distributes the Program,
|
||||
modifications to the Program, or any part thereof.
|
||||
|
||||
"Licensed Patents" mean patent claims licensable by a Contributor
|
||||
which are necessarily infringed by the use or sale of its Contribution
|
||||
alone or when combined with the Program.
|
||||
|
||||
"Original Program" means the original version of the software
|
||||
accompanying this Agreement as released by LUCENT, including source
|
||||
code, object code and documentation, if any.
|
||||
|
||||
"Program" means the Original Program and Contributions or any part
|
||||
thereof
|
||||
|
||||
"Recipient" means anyone who receives the Program under this
|
||||
Agreement, including all Contributors.
|
||||
|
||||
2. GRANT OF RIGHTS
|
||||
|
||||
a. Subject to the terms of this Agreement, each Contributor hereby
|
||||
grants Recipient a non-exclusive, worldwide, royalty-free copyright
|
||||
license to reproduce, prepare derivative works of, publicly display,
|
||||
publicly perform, distribute and sublicense the Contribution of such
|
||||
Contributor, if any, and such derivative works, in source code and
|
||||
object code form.
|
||||
|
||||
b. Subject to the terms of this Agreement, each Contributor hereby
|
||||
grants Recipient a non-exclusive, worldwide, royalty-free patent
|
||||
license under Licensed Patents to make, use, sell, offer to sell,
|
||||
import and otherwise transfer the Contribution of such Contributor, if
|
||||
any, in source code and object code form. The patent license granted
|
||||
by a Contributor shall also apply to the combination of the
|
||||
Contribution of that Contributor and the Program if, at the time the
|
||||
Contribution is added by the Contributor, such addition of the
|
||||
Contribution causes such combination to be covered by the Licensed
|
||||
Patents. The patent license granted by a Contributor shall not apply
|
||||
to (i) any other combinations which include the Contribution, nor to
|
||||
(ii) Contributions of other Contributors. No hardware per se is
|
||||
licensed hereunder.
|
||||
|
||||
c. Recipient understands that although each Contributor grants the
|
||||
licenses to its Contributions set forth herein, no assurances are
|
||||
provided by any Contributor that the Program does not infringe the
|
||||
patent or other intellectual property rights of any other entity. Each
|
||||
Contributor disclaims any liability to Recipient for claims brought by
|
||||
any other entity based on infringement of intellectual property rights
|
||||
or otherwise. As a condition to exercising the rights and licenses
|
||||
granted hereunder, each Recipient hereby assumes sole responsibility
|
||||
to secure any other intellectual property rights needed, if any. For
|
||||
example, if a third party patent license is required to allow
|
||||
Recipient to distribute the Program, it is Recipient's responsibility
|
||||
to acquire that license before distributing the Program.
|
||||
|
||||
d. Each Contributor represents that to its knowledge it has sufficient
|
||||
copyright rights in its Contribution, if any, to grant the copyright
|
||||
license set forth in this Agreement.
|
||||
|
||||
3. REQUIREMENTS
|
||||
|
||||
A. Distributor may choose to distribute the Program in any form under
|
||||
this Agreement or under its own license agreement, provided that:
|
||||
|
||||
a. it complies with the terms and conditions of this Agreement;
|
||||
|
||||
b. if the Program is distributed in source code or other tangible
|
||||
form, a copy of this Agreement or Distributor's own license agreement
|
||||
is included with each copy of the Program; and
|
||||
|
||||
c. if distributed under Distributor's own license agreement, such
|
||||
license agreement:
|
||||
|
||||
i. effectively disclaims on behalf of all Contributors all warranties
|
||||
and conditions, express and implied, including warranties or
|
||||
conditions of title and non-infringement, and implied warranties or
|
||||
conditions of merchantability and fitness for a particular purpose;
|
||||
ii. effectively excludes on behalf of all Contributors all liability
|
||||
for damages, including direct, indirect, special, incidental and
|
||||
consequential damages, such as lost profits; and
|
||||
iii. states that any provisions which differ from this Agreement are
|
||||
offered by that Contributor alone and not by any other party.
|
||||
|
||||
B. Each Distributor must include the following in a conspicuous
|
||||
location in the Program:
|
||||
|
||||
Copyright (C) 2003, Lucent Technologies Inc. and others. All Rights
|
||||
Reserved.
|
||||
|
||||
C. In addition, each Contributor must identify itself as the
|
||||
originator of its Contribution in a manner that reasonably allows
|
||||
subsequent Recipients to identify the originator of the Contribution.
|
||||
Also, each Contributor must agree that the additions and/or changes
|
||||
are intended to be a Contribution. Once a Contribution is contributed,
|
||||
it may not thereafter be revoked.
|
||||
|
||||
4. COMMERCIAL DISTRIBUTION
|
||||
|
||||
Commercial distributors of software may accept certain
|
||||
responsibilities with respect to end users, business partners and the
|
||||
like. While this license is intended to facilitate the commercial use
|
||||
of the Program, the Distributor who includes the Program in a
|
||||
commercial product offering should do so in a manner which does not
|
||||
create potential liability for Contributors. Therefore, if a
|
||||
Distributor includes the Program in a commercial product offering,
|
||||
such Distributor ("Commercial Distributor") hereby agrees to defend
|
||||
and indemnify every Contributor ("Indemnified Contributor") against
|
||||
any losses, damages and costs (collectively"Losses") arising from
|
||||
claims, lawsuits and other legal actions brought by a third party
|
||||
against the Indemnified Contributor to the extent caused by the acts
|
||||
or omissions of such Commercial Distributor in connection with its
|
||||
distribution of the Program in a commercial product offering. The
|
||||
obligations in this section do not apply to any claims or Losses
|
||||
relating to any actual or alleged intellectual property infringement.
|
||||
In order to qualify, an Indemnified Contributor must: a) promptly
|
||||
notify the Commercial Distributor in writing of such claim, and b)
|
||||
allow the Commercial Distributor to control, and cooperate with the
|
||||
Commercial Distributor in, the defense and any related settlement
|
||||
negotiations. The Indemnified Contributor may participate in any such
|
||||
claim at its own expense.
|
||||
|
||||
For example, a Distributor might include the Program in a commercial
|
||||
product offering, Product X. That Distributor is then a Commercial
|
||||
Distributor. If that Commercial Distributor then makes performance
|
||||
claims, or offers warranties related to Product X, those performance
|
||||
claims and warranties are such Commercial Distributor's responsibility
|
||||
alone. Under this section, the Commercial Distributor would have to
|
||||
defend claims against the Contributors related to those performance
|
||||
claims and warranties, and if a court requires any Contributor to pay
|
||||
any damages as a result, the Commercial Distributor must pay those
|
||||
damages.
|
||||
|
||||
5. NO WARRANTY
|
||||
|
||||
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
|
||||
PROVIDED ON AN"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY
|
||||
WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
|
||||
OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
|
||||
responsible for determining the appropriateness of using and
|
||||
distributing the Program and assumes all risks associated with its
|
||||
exercise of rights under this Agreement, including but not limited to
|
||||
the risks and costs of program errors, compliance with applicable
|
||||
laws, damage to or loss of data, programs or equipment, and
|
||||
unavailability or interruption of operations.
|
||||
|
||||
6. DISCLAIMER OF LIABILITY
|
||||
|
||||
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR
|
||||
ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
|
||||
WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
|
||||
DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
|
||||
HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
7. EXPORT CONTROL
|
||||
|
||||
Recipient agrees that Recipient alone is responsible for compliance
|
||||
with the United States export administration regulations (and the
|
||||
export control laws and regulation of any other countries).
|
||||
|
||||
8. GENERAL
|
||||
|
||||
If any provision of this Agreement is invalid or unenforceable under
|
||||
applicable law, it shall not affect the validity or enforceability of
|
||||
the remainder of the terms of this Agreement, and without further
|
||||
action by the parties hereto, such provision shall be reformed to the
|
||||
minimum extent necessary to make such provision valid and enforceable.
|
||||
|
||||
If Recipient institutes patent litigation against a Contributor with
|
||||
respect to a patent applicable to software (including a cross-claim or
|
||||
counterclaim in a lawsuit), then any patent licenses granted by that
|
||||
Contributor to such Recipient under this Agreement shall terminate as
|
||||
of the date such litigation is filed. In addition, if Recipient
|
||||
institutes patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Program
|
||||
itself (excluding combinations of the Program with other software or
|
||||
hardware) infringes such Recipient's patent(s), then such Recipient's
|
||||
rights granted under Section 2(b) shall terminate as of the date such
|
||||
litigation is filed.
|
||||
|
||||
All Recipient's rights under this Agreement shall terminate if it
|
||||
fails to comply with any of the material terms or conditions of this
|
||||
Agreement and does not cure such failure in a reasonable period of
|
||||
time after becoming aware of such noncompliance. If all Recipient's
|
||||
rights under this Agreement terminate, Recipient agrees to cease use
|
||||
and distribution of the Program as soon as reasonably practicable.
|
||||
However, Recipient's obligations under this Agreement and any licenses
|
||||
granted by Recipient relating to the Program shall continue and
|
||||
survive.
|
||||
|
||||
LUCENT may publish new versions (including revisions) of this
|
||||
Agreement from time to time. Each new version of the Agreement will be
|
||||
given a distinguishing version number. The Program (including
|
||||
Contributions) may always be distributed subject to the version of the
|
||||
Agreement under which it was received. In addition, after a new
|
||||
version of the Agreement is published, Contributor may elect to
|
||||
distribute the Program (including its Contributions) under the new
|
||||
version. No one other than LUCENT has the right to modify this
|
||||
Agreement. Except as expressly stated in Sections 2(a) and 2(b) above,
|
||||
Recipient receives no rights or licenses to the intellectual property
|
||||
of any Contributor under this Agreement, whether expressly, by
|
||||
implication, estoppel or otherwise. All rights in the Program not
|
||||
expressly granted under this Agreement are reserved.
|
||||
|
||||
This Agreement is governed by the laws of the State of New York and
|
||||
the intellectual property laws of the United States of America. No
|
||||
party to this Agreement will bring a legal action under this Agreement
|
||||
more than one year after the cause of action arose. Each party waives
|
||||
its rights to a jury trial in any resulting litigation.
|
||||
|
258
LICENSE.afpl
258
LICENSE.afpl
|
@ -1,258 +0,0 @@
|
|||
|
||||
Aladdin Free Public License
|
||||
(Version 9, September 18, 2000)
|
||||
|
||||
Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000 Aladdin Enterprises,
|
||||
Menlo Park, California, U.S.A. All rights reserved.
|
||||
|
||||
NOTE: This License is not the same as any of the GNU Licenses
|
||||
published by the Free Software Foundation. Its terms are
|
||||
substantially different from those of the GNU Licenses. If you are
|
||||
familiar with the GNU Licenses, please read this license with extra
|
||||
care.
|
||||
|
||||
Aladdin Enterprises hereby grants to anyone the permission to apply
|
||||
this License to their own work, as long as the entire License
|
||||
(including the above notices and this paragraph) is copied with no
|
||||
changes, additions, or deletions except for changing the first
|
||||
paragraph of Section 0 to include a suitable description of the work
|
||||
to which the license is being applied and of the person or entity that
|
||||
holds the copyright in the work, and, if the License is being applied
|
||||
to a work created in a country other than the United States, replacing
|
||||
the first paragraph of Section 6 with an appropriate reference to the
|
||||
laws of the appropriate country.
|
||||
|
||||
This License is not an Open Source license: among other things, it
|
||||
places restrictions on distribution of the Program, specifically
|
||||
including sale of the Program. While Aladdin Enterprises respects and
|
||||
supports the philosophy of the Open Source Definition, and shares the
|
||||
desire of the GNU project to keep licensed software freely
|
||||
redistributable in both source and object form, we feel that Open
|
||||
Source licenses unfairly prevent developers of useful software from
|
||||
being compensated proportionately when others profit financially from
|
||||
their work. This License attempts to ensure that those who receive,
|
||||
redistribute, and contribute to the licensed Program according to the
|
||||
Open Source and Free Software philosophies have the right to do so,
|
||||
while retaining for the developer(s) of the Program the power to make
|
||||
those who use the Program to enhance the value of commercial products
|
||||
pay for the privilege of doing so.
|
||||
|
||||
0. Subject Matter
|
||||
|
||||
This License applies to the computer program known as "AFPL
|
||||
Ghostscript." The "Program", below, refers to such program. The
|
||||
Program is a copyrighted work whose copyright is held by artofcode
|
||||
LLC, located in Benicia, California (the "Licensor"). Please note that
|
||||
AFPL Ghostscript is neither the program known as "GNU Ghostscript" nor
|
||||
the version of Ghostscript available for commercial licensing from
|
||||
Artifex Software Inc.
|
||||
|
||||
A "work based on the Program" means either the Program or any
|
||||
derivative work of the Program, as defined in the United States
|
||||
Copyright Act of 1976, such as a translation or a modification.
|
||||
|
||||
BY MODIFYING OR DISTRIBUTING THE PROGRAM (OR ANY WORK BASED ON THE
|
||||
PROGRAM), YOU INDICATE YOUR ACCEPTANCE OF THIS LICENSE TO DO SO, AND
|
||||
ALL ITS TERMS AND CONDITIONS FOR COPYING, DISTRIBUTING OR MODIFYING
|
||||
THE PROGRAM OR WORKS BASED ON IT. NOTHING OTHER THAN THIS LICENSE
|
||||
GRANTS YOU PERMISSION TO MODIFY OR DISTRIBUTE THE PROGRAM OR ITS
|
||||
DERIVATIVE WORKS. THESE ACTIONS ARE PROHIBITED BY LAW. IF YOU DO NOT
|
||||
ACCEPT THESE TERMS AND CONDITIONS, DO NOT MODIFY OR DISTRIBUTE THE
|
||||
PROGRAM.
|
||||
|
||||
1. Licenses.
|
||||
|
||||
Licensor hereby grants you the following rights, provided that you
|
||||
comply with all of the restrictions set forth in this License and
|
||||
provided, further, that you distribute an unmodified copy of this
|
||||
License with the Program:
|
||||
(a)
|
||||
You may copy and distribute literal (i.e., verbatim) copies of
|
||||
the Program's source code as you receive it throughout the
|
||||
world, in any medium.
|
||||
(b)
|
||||
You may modify the Program, create works based on the Program
|
||||
and distribute copies of such throughout the world, in any
|
||||
medium.
|
||||
|
||||
2. Restrictions.
|
||||
|
||||
This license is subject to the following restrictions:
|
||||
(a)
|
||||
Distribution of the Program or any work based on the Program by
|
||||
a commercial organization to any third party is prohibited if
|
||||
any payment is made in connection with such distribution,
|
||||
whether directly (as in payment for a copy of the Program) or
|
||||
indirectly (as in payment for some service related to the
|
||||
Program, or payment for some product or service that includes a
|
||||
copy of the Program "without charge"; these are only examples,
|
||||
and not an exhaustive enumeration of prohibited activities).
|
||||
The following methods of distribution involving payment shall
|
||||
not in and of themselves be a violation of this restriction:
|
||||
(i)
|
||||
Posting the Program on a public access information storage
|
||||
and retrieval service for which a fee is received for
|
||||
retrieving information (such as an on-line service),
|
||||
provided that the fee is not content-dependent (i.e., the
|
||||
fee would be the same for retrieving the same volume of
|
||||
information consisting of random data) and that access to
|
||||
the service and to the Program is available independent of
|
||||
any other product or service. An example of a service that
|
||||
does not fall under this section is an on-line service
|
||||
that is operated by a company and that is only available
|
||||
to customers of that company. (This is not an exhaustive
|
||||
enumeration.)
|
||||
(ii)
|
||||
Distributing the Program on removable computer-readable
|
||||
media, provided that the files containing the Program are
|
||||
reproduced entirely and verbatim on such media, that all
|
||||
information on such media be redistributable for
|
||||
non-commercial purposes without charge, and that such
|
||||
media are distributed by themselves (except for
|
||||
accompanying documentation) independent of any other
|
||||
product or service. Examples of such media include CD-ROM,
|
||||
magnetic tape, and optical storage media. (This is not
|
||||
intended to be an exhaustive list.) An example of a
|
||||
distribution that does not fall under this section is a
|
||||
CD-ROM included in a book or magazine. (This is not an
|
||||
exhaustive enumeration.)
|
||||
(b)
|
||||
Activities other than copying, distribution and modification of
|
||||
the Program are not subject to this License and they are
|
||||
outside its scope. Functional use (running) of the Program is
|
||||
not restricted, and any output produced through the use of the
|
||||
Program is subject to this license only if its contents
|
||||
constitute a work based on the Program (independent of having
|
||||
been made by running the Program).
|
||||
(c)
|
||||
You must meet all of the following conditions with respect to
|
||||
any work that you distribute or publish that in whole or in
|
||||
part contains or is derived from the Program or any part
|
||||
thereof ("the Work"):
|
||||
(i)
|
||||
If you have modified the Program, you must cause the Work
|
||||
to carry prominent notices stating that you have modified
|
||||
the Program's files and the date of any change. In each
|
||||
source file that you have modified, you must include a
|
||||
prominent notice that you have modified the file,
|
||||
including your name, your e-mail address (if any), and the
|
||||
date and purpose of the change;
|
||||
(ii)
|
||||
You must cause the Work to be licensed as a whole and at
|
||||
no charge to all third parties under the terms of this
|
||||
License;
|
||||
(iii)
|
||||
If the Work normally reads commands interactively when
|
||||
run, you must cause it, at each time the Work commences
|
||||
operation, to print or display an announcement including
|
||||
an appropriate copyright notice and a notice that there is
|
||||
no warranty (or else, saying that you provide a warranty).
|
||||
Such notice must also state that users may redistribute
|
||||
the Work only under the conditions of this License and
|
||||
tell the user how to view the copy of this License
|
||||
included with the Work. (Exceptions: if the Program is
|
||||
interactive but normally prints or displays such an
|
||||
announcement only at the request of a user, such as in an
|
||||
"About box", the Work is required to print or display the
|
||||
notice only under the same circumstances; if the Program
|
||||
itself is interactive but does not normally print such an
|
||||
announcement, the Work is not required to print an
|
||||
announcement.);
|
||||
(iv)
|
||||
You must accompany the Work with the complete
|
||||
corresponding machine-readable source code, delivered on a
|
||||
medium customarily used for software interchange. The
|
||||
source code for a work means the preferred form of the
|
||||
work for making modifications to it. For an executable
|
||||
work, complete source code means all the source code for
|
||||
all modules it contains, plus any associated interface
|
||||
definition files, plus the scripts used to control
|
||||
compilation and installation of the executable code. If
|
||||
you distribute with the Work any component 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, you
|
||||
must also distribute the source code of that component if
|
||||
you have it and are allowed to do so;
|
||||
(v)
|
||||
If you distribute any written or printed material at all
|
||||
with the Work, such material must include either a written
|
||||
copy of this License, or a prominent written indication
|
||||
that the Work is covered by this License and written
|
||||
instructions for printing and/or displaying the copy of
|
||||
the License on the distribution medium;
|
||||
(vi)
|
||||
You may not impose any further restrictions on the
|
||||
recipient's exercise of the rights granted herein.
|
||||
|
||||
If distribution of executable or object code is made by offering the
|
||||
equivalent ability to copy from a designated place, then offering
|
||||
equivalent ability 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 code along with the object code.
|
||||
|
||||
3. Reservation of Rights.
|
||||
|
||||
No rights are granted to the Program except as expressly set forth
|
||||
herein. You may not copy, modify, sublicense, or distribute the
|
||||
Program except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
4. Other Restrictions.
|
||||
|
||||
If the distribution and/or use of the Program is restricted in certain
|
||||
countries for any reason, Licensor may add an explicit geographical
|
||||
distribution limitation excluding those countries, so that
|
||||
distribution is permitted only in or among countries not thus
|
||||
excluded. In such case, this License incorporates the limitation as if
|
||||
written in the body of this License.
|
||||
|
||||
5. Limitations.
|
||||
|
||||
THE PROGRAM IS PROVIDED TO YOU "AS IS," WITHOUT WARRANTY. THERE IS NO
|
||||
WARRANTY FOR THE PROGRAM, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
|
||||
NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
|
||||
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS
|
||||
WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL LICENSOR, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
|
||||
ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
|
||||
NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
|
||||
LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
|
||||
TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
|
||||
PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
6. General.
|
||||
|
||||
This License is governed by the laws of the State of California,
|
||||
U.S.A., excluding choice of law rules.
|
||||
|
||||
If any part of this License is found to be in conflict with the law,
|
||||
that part shall be interpreted in its broadest meaning consistent with
|
||||
the law, and no other parts of the License shall be affected.
|
||||
|
||||
For United States Government users, the Program is provided with
|
||||
RESTRICTED RIGHTS. If you are a unit or agency of the United States
|
||||
Government or are acquiring the Program for any such unit or agency,
|
||||
the following apply:
|
||||
|
||||
If the unit or agency is the Department of Defense ("DOD"), the
|
||||
Program and its documentation are classified as "commercial
|
||||
computer software" and "commercial computer software documentation"
|
||||
respectively and, pursuant to DFAR Section 227.7202, the Government
|
||||
is acquiring the Program and its documentation in accordance with
|
||||
the terms of this License. If the unit or agency is other than DOD,
|
||||
the Program and its documentation are classified as "commercial
|
||||
computer software" and "commercial computer software documentation"
|
||||
respectively and, pursuant to FAR Section 12.212, the Government is
|
||||
acquiring the Program and its documentation in accordance with the
|
||||
terms of this License.
|
290
LICENSE.gpl
290
LICENSE.gpl
|
@ -1,290 +0,0 @@
|
|||
!! This license applies only to the printer fonts identified in
|
||||
!! subdirectory /sys/lib/ghostscript/font.
|
||||
|
||||
===================================================================
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. Everyone is permitted to copy and distribute
|
||||
verbatim copies of this license document, but changing it is not
|
||||
allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your freedom
|
||||
to share and change it. By contrast, the GNU General Public License
|
||||
is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if
|
||||
you distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on,
|
||||
we want its recipients to know that what they have is not the
|
||||
original, so that any problems introduced by others will not reflect
|
||||
on the original authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at
|
||||
all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains a
|
||||
notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the Program
|
||||
(independent of having been made by running the Program). Whether
|
||||
that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a
|
||||
fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any part
|
||||
thereof, to be licensed as a whole at no charge to all third parties
|
||||
under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively when
|
||||
run, you must cause it, when started running for such interactive use
|
||||
in the most ordinary way, to print or display an announcement
|
||||
including an appropriate copyright notice and a notice that there is
|
||||
no warranty (or else, saying that you provide a warranty) and that
|
||||
users may redistribute the program under these conditions, and telling
|
||||
the user how to view a copy of this License. (Exception: if the
|
||||
Program itself is interactive but does not normally print such an
|
||||
announcement, your work based on the Program is not required to print
|
||||
an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections 1
|
||||
and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three years,
|
||||
to give any third party, for a charge no more than your cost of
|
||||
physically performing source distribution, a complete machine-readable
|
||||
copy of the corresponding source code, to be distributed under the
|
||||
terms of Sections 1 and 2 above on a medium customarily used for
|
||||
software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer to
|
||||
distribute corresponding source code. (This alternative is allowed
|
||||
only for noncommercial distribution and only if you received the
|
||||
program in object code or executable form with such an offer, in
|
||||
accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new
|
||||
versions of the General Public License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and
|
||||
"any later version", you have the option of following the terms and
|
||||
conditions either of that version or of any later version published by
|
||||
the Free Software Foundation. If the Program does not specify a
|
||||
version number of this License, you may choose any version ever
|
||||
published by the Free Software Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the
|
||||
author to ask for permission. For software which is copyrighted by
|
||||
the Free Software Foundation, write to the Free Software Foundation;
|
||||
we sometimes make exceptions for this. Our decision will be guided by
|
||||
the two goals of preserving the free status of all derivatives of our
|
||||
free software and of promoting the sharing and reuse of software
|
||||
generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||
WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||
OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY
|
||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
||||
PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||
AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
|
||||
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
||||
PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
||||
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
||||
FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF
|
||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
2
NOTICE
2
NOTICE
|
@ -1,2 +0,0 @@
|
|||
Copyright © 2002 Lucent Technologies Inc.
|
||||
All Rights Reserved
|
1310
lib/human
Normal file
1310
lib/human
Normal file
File diff suppressed because one or more lines are too long
7
rc/bin/nietzsche
Normal file
7
rc/bin/nietzsche
Normal file
|
@ -0,0 +1,7 @@
|
|||
#!/bin/rc
|
||||
if(~ $#* 0)
|
||||
n=`{seq 1 638 | fortune /fd/0}
|
||||
if not
|
||||
n=$*
|
||||
for(i in $n)
|
||||
cat /lib/human | sed -n '/^'$i'\./,/^$/p' | nroff | grep .
|
16
sys/man/1/nietzsche
Normal file
16
sys/man/1/nietzsche
Normal file
|
@ -0,0 +1,16 @@
|
|||
.TH NIETZSCHE 1
|
||||
.SH NAME
|
||||
nietzsche \- print out Nietzsche quote
|
||||
.SH SYNOPSIS
|
||||
.B nietzsche
|
||||
[
|
||||
.I numbers
|
||||
]
|
||||
.SH DESCRIPTION
|
||||
.I Nietzsche
|
||||
cites ``Human, all too human'' by Friedrich Nietzsche.
|
||||
It prints the aphorisms with the numbers given as arguments, or a random one, if no argument is supplied.
|
||||
.SH FILES
|
||||
.B /lib/human
|
||||
.SH SOURCE
|
||||
.B /rc/bin/nietzsche
|
|
@ -1,6 +1,6 @@
|
|||
.TH BIO 2
|
||||
.SH NAME
|
||||
Bopen, Binit, Binits, Brdline, Brdstr, Bgetc, Bgetrune, Bgetd, Bungetc, Bungetrune, Bread, Bseek, Boffset, Bfildes, Blinelen, Bputc, Bputrune, Bprint, Bvprint, Bwrite, Bflush, Bterm, Bbuffered \- buffered input/output
|
||||
Bopen, Binit, Binits, Brdline, Brdstr, Bgetc, Bgetrune, Bgetd, Bungetc, Bungetrune, Bread, Bseek, Boffset, Bfildes, Blinelen, Bputc, Bputrune, Bprint, Bvprint, Bwrite, Bflush, Bterm, Bbuffered, Blethal \- buffered input/output
|
||||
.SH SYNOPSIS
|
||||
.ta \w'Biobuf* 'u
|
||||
.B #include <u.h>
|
||||
|
@ -79,7 +79,7 @@ int Bflush(Biobufhdr *bp)
|
|||
int Bbuffered(Biobufhdr *bp)
|
||||
.PP
|
||||
.B
|
||||
void Blethal(Biobufhdr *bp, void (*errorf)(char *));
|
||||
void Blethal(Biobufhdr *bp, void (*errorf)(char *))
|
||||
.PP
|
||||
.SH DESCRIPTION
|
||||
These routines implement fast buffered I/O.
|
||||
|
|
543
sys/src/cmd/fplot.c
Normal file
543
sys/src/cmd/fplot.c
Normal file
|
@ -0,0 +1,543 @@
|
|||
#include <u.h>
|
||||
#include <libc.h>
|
||||
#include <ctype.h>
|
||||
#include <draw.h>
|
||||
#include <event.h>
|
||||
|
||||
typedef struct Op Op;
|
||||
typedef struct Operator Operator;
|
||||
typedef struct Token Token;
|
||||
typedef struct Constant Constant;
|
||||
typedef struct Code Code;
|
||||
|
||||
enum {
|
||||
ONONE,
|
||||
ONUMBER,
|
||||
OVAR,
|
||||
OUNARY,
|
||||
OBINARY,
|
||||
};
|
||||
|
||||
struct Op {
|
||||
int type;
|
||||
union {
|
||||
void (*f)(void);
|
||||
double val;
|
||||
};
|
||||
};
|
||||
|
||||
enum {
|
||||
TNONE,
|
||||
TNUMBER,
|
||||
TVAR,
|
||||
TOP,
|
||||
TPARENL,
|
||||
TPARENR,
|
||||
};
|
||||
|
||||
struct Token {
|
||||
int type;
|
||||
union {
|
||||
Operator *op;
|
||||
double val;
|
||||
};
|
||||
Token *next;
|
||||
};
|
||||
|
||||
double *stack, *sp;
|
||||
void add(void) { sp--; *sp += *(sp+1); }
|
||||
void sub(void) { sp--; *sp -= *(sp+1); }
|
||||
void mul(void) { sp--; *sp *= *(sp+1); }
|
||||
void div(void) { sp--; *sp /= *(sp+1); }
|
||||
void pot(void) { sp--; *sp = pow(*sp, *(sp+1)); }
|
||||
void osin(void) { *sp = sin(*sp); }
|
||||
void ocos(void) { *sp = cos(*sp); }
|
||||
void otan(void) { *sp = tan(*sp); }
|
||||
void oasin(void) { *sp = asin(*sp); }
|
||||
void oacos(void) { *sp = acos(*sp); }
|
||||
void oatan(void) { *sp = atan(*sp); }
|
||||
void osqrt(void) { *sp = sqrt(*sp); }
|
||||
void olog(void) { *sp = log10(*sp); }
|
||||
void oln(void) { *sp = log(*sp); }
|
||||
|
||||
struct Operator {
|
||||
char *s;
|
||||
char type;
|
||||
char rassoc;
|
||||
short prec;
|
||||
void (*f)(void);
|
||||
} ops[] = {
|
||||
"+", OBINARY, 0, 0, add,
|
||||
"-", OBINARY, 0, 0, sub,
|
||||
"*", OBINARY, 0, 100, mul,
|
||||
"/", OBINARY, 0, 100, div,
|
||||
"^", OBINARY, 1, 200, pot,
|
||||
"sin", OUNARY, 0, 50, osin,
|
||||
"cos", OUNARY, 0, 50, ocos,
|
||||
"tan", OUNARY, 0, 50, otan,
|
||||
"asin", OUNARY, 0, 50, oasin,
|
||||
"acos", OUNARY, 0, 50, oacos,
|
||||
"atan", OUNARY, 0, 50, oatan,
|
||||
"sqrt", OUNARY, 0, 50, osqrt,
|
||||
"log", OUNARY, 0, 50, olog,
|
||||
"ln", OUNARY, 0, 50, oln,
|
||||
};
|
||||
|
||||
struct Constant {
|
||||
char *s;
|
||||
double val;
|
||||
} consts[] = {
|
||||
"pi", 3.14159265359,
|
||||
"π", 3.14159265359,
|
||||
"e", 2.71828182846,
|
||||
};
|
||||
|
||||
struct Code {
|
||||
Op* p;
|
||||
int len, cap;
|
||||
} *fns;
|
||||
int nfns;
|
||||
|
||||
Token *opstackbot;
|
||||
double xmin = -10, xmax = 10;
|
||||
double ymin = -10, ymax = 10;
|
||||
Image *color;
|
||||
int cflag;
|
||||
char *imagedata;
|
||||
int picx = 640, picy = 480;
|
||||
|
||||
void *
|
||||
emalloc(int size)
|
||||
{
|
||||
void *v;
|
||||
|
||||
v = mallocz(size, 1);
|
||||
if(v == nil)
|
||||
sysfatal("emalloc: %r");
|
||||
setmalloctag(v, getcallerpc(&size));
|
||||
return v;
|
||||
}
|
||||
|
||||
void
|
||||
addop(Code *c, Op o)
|
||||
{
|
||||
if(c->len >= c->cap) {
|
||||
c->cap += 32;
|
||||
c->p = realloc(c->p, sizeof(Op) * c->cap);
|
||||
if(c->p == nil)
|
||||
sysfatal("realloc: %r");
|
||||
}
|
||||
c->p[c->len++] = o;
|
||||
}
|
||||
|
||||
void
|
||||
push(Token *t)
|
||||
{
|
||||
t->next = opstackbot;
|
||||
opstackbot = t;
|
||||
}
|
||||
|
||||
void
|
||||
pop(Code *c)
|
||||
{
|
||||
Token *t;
|
||||
Op o;
|
||||
|
||||
t = opstackbot;
|
||||
if(t == nil)
|
||||
sysfatal("stack underflow");
|
||||
opstackbot = t->next;
|
||||
if(t->type != TOP)
|
||||
sysfatal("non-operator pop");
|
||||
o.type = t->op->type;
|
||||
o.f = t->op->f;
|
||||
addop(c, o);
|
||||
free(t);
|
||||
}
|
||||
|
||||
void
|
||||
popdel(void)
|
||||
{
|
||||
Token *t;
|
||||
|
||||
t = opstackbot;
|
||||
opstackbot = t->next;
|
||||
free(t);
|
||||
}
|
||||
|
||||
Token *
|
||||
lex(char **s)
|
||||
{
|
||||
Token *t;
|
||||
Operator *o;
|
||||
Constant *c;
|
||||
|
||||
while(isspace(**s))
|
||||
(*s)++;
|
||||
if(**s == 0)
|
||||
return nil;
|
||||
|
||||
t = emalloc(sizeof(*t));
|
||||
if(isdigit(**s)) {
|
||||
t->type = TNUMBER;
|
||||
t->val = strtod(*s, s);
|
||||
return t;
|
||||
}
|
||||
if(**s == '(') {
|
||||
t->type = TPARENL;
|
||||
(*s)++;
|
||||
return t;
|
||||
}
|
||||
if(**s == ')') {
|
||||
t->type = TPARENR;
|
||||
(*s)++;
|
||||
return t;
|
||||
}
|
||||
if(**s == 'x') {
|
||||
t->type = TVAR;
|
||||
(*s)++;
|
||||
return t;
|
||||
}
|
||||
for(o = ops; o < ops + nelem(ops); o++)
|
||||
if(strncmp(*s, o->s, strlen(o->s)) == 0) {
|
||||
t->type = TOP;
|
||||
t->op = o;
|
||||
*s += strlen(o->s);
|
||||
return t;
|
||||
}
|
||||
for(c = consts; c < consts + nelem(consts); c++)
|
||||
if(strncmp(*s, c->s, strlen(c->s)) == 0) {
|
||||
t->type = TNUMBER;
|
||||
t->val = c->val;
|
||||
*s += strlen(c->s);
|
||||
return t;
|
||||
}
|
||||
sysfatal("syntax error at %s", *s);
|
||||
return nil;
|
||||
}
|
||||
|
||||
void
|
||||
parse(Code *c, char *s)
|
||||
{
|
||||
Token *t;
|
||||
Op o;
|
||||
|
||||
while(t = lex(&s)) {
|
||||
switch(t->type) {
|
||||
case TNUMBER:
|
||||
o.type = ONUMBER;
|
||||
o.val = t->val;
|
||||
addop(c, o);
|
||||
free(t);
|
||||
break;
|
||||
case TVAR:
|
||||
o.type = OVAR;
|
||||
addop(c, o);
|
||||
free(t);
|
||||
break;
|
||||
case TOP:
|
||||
if(t->op->type == OBINARY)
|
||||
while(opstackbot != nil && opstackbot->type == TOP &&
|
||||
(opstackbot->op->prec > t->op->prec ||
|
||||
t->op->rassoc && opstackbot->op->prec == t->op->prec))
|
||||
pop(c);
|
||||
push(t);
|
||||
break;
|
||||
case TPARENL:
|
||||
push(t);
|
||||
break;
|
||||
case TPARENR:
|
||||
while(opstackbot != nil && opstackbot->type == TOP)
|
||||
pop(c);
|
||||
if(opstackbot == nil)
|
||||
sysfatal("mismatched parentheses");
|
||||
popdel();
|
||||
free(t);
|
||||
break;
|
||||
default:
|
||||
sysfatal("unknown token type %d", t->type);
|
||||
}
|
||||
}
|
||||
while(opstackbot != nil)
|
||||
switch(opstackbot->type) {
|
||||
case TOP:
|
||||
pop(c);
|
||||
break;
|
||||
case TPARENL:
|
||||
sysfatal("mismatched parentheses");
|
||||
default:
|
||||
sysfatal("syntax error");
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
calcstack(Code *c)
|
||||
{
|
||||
int cur, max;
|
||||
Op *o;
|
||||
|
||||
cur = 0;
|
||||
max = 0;
|
||||
for(o = c->p; o < c->p + c->len; o++)
|
||||
switch(o->type) {
|
||||
case ONUMBER: case OVAR:
|
||||
if(++cur > max)
|
||||
max = cur;
|
||||
break;
|
||||
case OUNARY:
|
||||
if(cur == 0)
|
||||
sysfatal("syntax error");
|
||||
break;
|
||||
case OBINARY:
|
||||
if(cur <= 1)
|
||||
sysfatal("syntax error");
|
||||
cur--;
|
||||
break;
|
||||
}
|
||||
|
||||
if(cur != 1)
|
||||
sysfatal("syntax error");
|
||||
return max;
|
||||
}
|
||||
|
||||
double
|
||||
calc(Code *c, double x)
|
||||
{
|
||||
Op *o;
|
||||
|
||||
sp = stack - 1;
|
||||
for(o = c->p; o < c->p + c->len; o++)
|
||||
switch(o->type) {
|
||||
case ONUMBER:
|
||||
*++sp = o->val;
|
||||
break;
|
||||
case OVAR:
|
||||
*++sp = x;
|
||||
break;
|
||||
case OUNARY: case OBINARY:
|
||||
o->f();
|
||||
}
|
||||
return *sp;
|
||||
}
|
||||
|
||||
double
|
||||
convx(Rectangle *r, int x)
|
||||
{
|
||||
return (xmax - xmin) * (x - r->min.x) / (r->max.x - r->min.x) + xmin;
|
||||
}
|
||||
|
||||
int
|
||||
deconvx(Rectangle *r, double dx)
|
||||
{
|
||||
return (dx - xmin) * (r->max.x - r->min.x) / (xmax - xmin) + r->min.x + 0.5;
|
||||
}
|
||||
|
||||
double
|
||||
convy(Rectangle *r, int y)
|
||||
{
|
||||
return (ymax - ymin) * (r->max.y - y) / (r->max.y - r->min.y) + ymin;
|
||||
}
|
||||
|
||||
int
|
||||
deconvy(Rectangle *r, double dy)
|
||||
{
|
||||
return (ymax - dy) * (r->max.y - r->min.y) / (ymax - ymin) + r->min.y + 0.5;
|
||||
}
|
||||
|
||||
void
|
||||
pixel(int x, int y)
|
||||
{
|
||||
char *p;
|
||||
|
||||
if(cflag) {
|
||||
if(x >= picx || y >= picy || x < 0 || y < 0)
|
||||
return;
|
||||
p = imagedata + (picx * y + x) * 3;
|
||||
p[0] = p[1] = p[2] = 0;
|
||||
} else
|
||||
draw(screen, Rect(x, y, x + 1, y + 1), color, nil, ZP);
|
||||
}
|
||||
|
||||
void
|
||||
drawinter(Code *co, Rectangle *r, double x1, double x2, int n)
|
||||
{
|
||||
double y1, y2;
|
||||
int iy1, iy2;
|
||||
int ix1, ix2;
|
||||
|
||||
ix1 = deconvx(r, x1);
|
||||
ix2 = deconvx(r, x2);
|
||||
iy1 = iy2 = 0;
|
||||
y1 = calc(co, x1);
|
||||
if(!isNaN(y1)) {
|
||||
iy1 = deconvy(r, y1);
|
||||
pixel(ix1, iy1);
|
||||
}
|
||||
y2 = calc(co, x2);
|
||||
if(!isNaN(y2)) {
|
||||
iy2 = deconvy(r, y2);
|
||||
pixel(ix2, iy2);
|
||||
}
|
||||
if(isNaN(y1) || isNaN(y2))
|
||||
return;
|
||||
if(n >= 10)
|
||||
return;
|
||||
if(iy2 >= iy1 - 1 && iy2 <= iy1 + 1)
|
||||
return;
|
||||
if(iy1 > r->max.y && iy2 > r->max.y)
|
||||
return;
|
||||
if(iy1 < r->min.y && iy2 < r->min.y)
|
||||
return;
|
||||
drawinter(co, r, x1, (x1 + x2) / 2, n + 1);
|
||||
drawinter(co, r, (x1 + x2) / 2, x2, n + 1);
|
||||
}
|
||||
|
||||
void
|
||||
drawgraph(Code *co, Rectangle *r)
|
||||
{
|
||||
int x;
|
||||
|
||||
for(x = r->min.x; x < r->max.x; x++)
|
||||
drawinter(co, r, convx(r, x), convx(r, x + 1), 0);
|
||||
}
|
||||
|
||||
void
|
||||
drawgraphs(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
color = display->black;
|
||||
for(i = 0; i < nfns; i++)
|
||||
drawgraph(&fns[i], &screen->r);
|
||||
flushimage(display, 1);
|
||||
}
|
||||
|
||||
void
|
||||
usage(void)
|
||||
{
|
||||
fprint(2, "usage: fplot [-c [-s size]] [-r range] functions ...\n");
|
||||
exits("usage");
|
||||
}
|
||||
|
||||
void
|
||||
zoom(void)
|
||||
{
|
||||
Mouse m;
|
||||
Rectangle r;
|
||||
double xmin_, xmax_, ymin_, ymax_;
|
||||
|
||||
m.buttons = 7;
|
||||
r = egetrect(1, &m);
|
||||
if(r.min.x == 0 && r.min.y == 0 && r.max.x == 0 && r.max.y == 0)
|
||||
return;
|
||||
xmin_ = convx(&screen->r, r.min.x);
|
||||
xmax_ = convx(&screen->r, r.max.x);
|
||||
ymin_ = convy(&screen->r, r.max.y);
|
||||
ymax_ = convy(&screen->r, r.min.y);
|
||||
xmin = xmin_;
|
||||
xmax = xmax_;
|
||||
ymin = ymin_;
|
||||
ymax = ymax_;
|
||||
draw(screen, screen->r, display->white, nil, ZP);
|
||||
drawgraphs();
|
||||
}
|
||||
|
||||
void
|
||||
parsefns(int n, char **s)
|
||||
{
|
||||
int i, max, cur;
|
||||
|
||||
max = 0;
|
||||
nfns = n;
|
||||
fns = emalloc(sizeof(*fns) * n);
|
||||
for(i = 0; i < nfns; i++) {
|
||||
parse(&fns[i], s[i]);
|
||||
cur = calcstack(&fns[i]);
|
||||
if(cur > max)
|
||||
max = cur;
|
||||
}
|
||||
stack = emalloc(sizeof(*stack) * max);
|
||||
}
|
||||
|
||||
void
|
||||
parserange(char *s)
|
||||
{
|
||||
while(*s && !isdigit(*s)) s++;
|
||||
if(*s == 0) return;
|
||||
xmin = strtod(s, &s);
|
||||
while(*s && !isdigit(*s)) s++;
|
||||
if(*s == 0) return;
|
||||
xmax = strtod(s, &s);
|
||||
while(*s && !isdigit(*s)) s++;
|
||||
if(*s == 0) return;
|
||||
ymin = strtod(s, &s);
|
||||
while(*s && !isdigit(*s)) s++;
|
||||
if(*s == 0) return;
|
||||
ymax = strtod(s, &s);
|
||||
}
|
||||
|
||||
void
|
||||
parsesize(char *s)
|
||||
{
|
||||
while(*s && !isdigit(*s)) s++;
|
||||
if(*s == 0) return;
|
||||
picx = strtol(s, &s, 0);
|
||||
while(*s && !isdigit(*s)) s++;
|
||||
if(*s == 0) return;
|
||||
picy = strtol(s, &s, 0);
|
||||
}
|
||||
|
||||
void
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
Event e;
|
||||
Rectangle r;
|
||||
int i;
|
||||
|
||||
ARGBEGIN {
|
||||
case 'r': parserange(EARGF(usage())); break;
|
||||
case 's': parsesize(EARGF(usage())); break;
|
||||
case 'c': cflag++; break;
|
||||
default: usage();
|
||||
} ARGEND;
|
||||
if(argc < 1)
|
||||
usage();
|
||||
setfcr(getfcr() & ~(FPZDIV | FPINVAL));
|
||||
parsefns(argc, argv);
|
||||
if(cflag) {
|
||||
imagedata = emalloc(picx * picy * 3);
|
||||
memset(imagedata, 0xFF, picx * picy * 3);
|
||||
print("%11s %11d %11d %11d %11d ", "r8g8b8", 0, 0, picx, picy);
|
||||
r.min.x = r.min.y = 0;
|
||||
r.max.x = picx;
|
||||
r.max.y = picy;
|
||||
for(i = 0; i < nfns; i++)
|
||||
drawgraph(&fns[i], &r);
|
||||
if(write(1, imagedata, picx * picy * 3) < picx * picy * 3)
|
||||
sysfatal("write: %r");
|
||||
} else {
|
||||
if(initdraw(nil, nil, "fplot") < 0)
|
||||
sysfatal("initdraw: %r");
|
||||
einit(Emouse | Ekeyboard);
|
||||
drawgraphs();
|
||||
for(;;) {
|
||||
switch(event(&e)) {
|
||||
case Ekeyboard:
|
||||
switch(e.kbdc) {
|
||||
case 'q': exits(nil);
|
||||
case 'z': zoom();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
eresized(int new)
|
||||
{
|
||||
if(new) {
|
||||
if(getwindow(display, Refnone) < 0)
|
||||
sysfatal("getwindow: %r");
|
||||
drawgraphs();
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue