@@ -0,0 +1,502 @@ | |||||
GNU LESSER GENERAL PUBLIC LICENSE | |||||
Version 2.1, February 1999 | |||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc. | |||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |||||
Everyone is permitted to copy and distribute verbatim copies | |||||
of this license document, but changing it is not allowed. | |||||
[This is the first released version of the Lesser GPL. It also counts | |||||
as the successor of the GNU Library Public License, version 2, hence | |||||
the version number 2.1.] | |||||
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. | |||||
This license, the Lesser General Public License, applies to some | |||||
specially 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 in new free programs; and that you are informed that you can do | |||||
these 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. | |||||
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. 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 after making changes to the library and recompiling | |||||
it. And you must show 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. | |||||
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 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. | |||||
Finally, software patents pose a constant threat to the existence of | |||||
any 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 obtained for a version of the library must be | |||||
consistent with the full 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. | |||||
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 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. | |||||
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. | |||||
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 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. | |||||
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. | |||||
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. | |||||
The precise terms and conditions for copying, distribution and | |||||
modification 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. | |||||
GNU LESSER GENERAL PUBLIC LICENSE | |||||
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 Public License (also called "this License"). | |||||
Each licensee is addressed as "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. | |||||
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 another language. (Hereinafter, translation is | |||||
included without limitation 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. | |||||
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 (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. | |||||
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. | |||||
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: | |||||
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 | |||||
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. | |||||
(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.) | |||||
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 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 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 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. | |||||
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. (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. | |||||
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. | |||||
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. | |||||
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. | |||||
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. | |||||
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. | |||||
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 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.) | |||||
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. | |||||
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 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. | |||||
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 | |||||
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: | |||||
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.) | |||||
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 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 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. | |||||
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. | |||||
e) Verify that the user has already received a copy of these | |||||
materials or 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 executable from it. However, as a special exception, | |||||
the materials to be 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. | |||||
It may happen that this requirement contradicts the license | |||||
restrictions of 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. | |||||
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: | |||||
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. | |||||
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. | |||||
8. You may not copy, modify, sublicense, link with, or distribute | |||||
the Library 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. | |||||
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 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. | |||||
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' exercise of the rights granted herein. | |||||
You are not responsible for enforcing 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 | |||||
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 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. | |||||
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. | |||||
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 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. | |||||
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. | |||||
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. | |||||
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 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 | |||||
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, 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 | |||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, 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 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 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. | |||||
END OF TERMS AND CONDITIONS | |||||
How to Apply These Terms to Your New Libraries | |||||
If you develop a new library, and you want it to be of the greatest | |||||
possible use to the public, we recommend making it free software that | |||||
everyone can redistribute and change. You can do so by permitting | |||||
redistribution under these terms (or, alternatively, under the terms of the | |||||
ordinary General Public License). | |||||
To apply these terms, attach the following notices to the library. It is | |||||
safest to attach them to the start of each source file to most effectively | |||||
convey the exclusion of warranty; and each file should have at least the | |||||
"copyright" line and a pointer to where the full notice is found. | |||||
<one line to give the library's name and a brief idea of what it does.> | |||||
Copyright (C) <year> <name of author> | |||||
This library 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 library 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 | |||||
Also add information on how to contact you by electronic and paper mail. | |||||
You should also get your employer (if you work as a programmer) or your | |||||
school, if any, to sign a "copyright disclaimer" for the library, if | |||||
necessary. Here is a sample; alter the names: | |||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the | |||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker. | |||||
<signature of Ty Coon>, 1 April 1990 | |||||
Ty Coon, President of Vice | |||||
That's all there is to it! |
@@ -1,11 +1,6 @@ | |||||
### Generated by Winemaker | ### Generated by Winemaker | ||||
# Check (with pkgconfig) for existance of these packages | |||||
PACKAGES = jack | |||||
# Usually '/usr' or '/usr/local' | |||||
PREFIX = /usr | PREFIX = /usr | ||||
LIBDIR = $(subst $(PREFIX)/,,$(firstword $(wildcard $(addsuffix /wine/, $(PREFIX)/lib32 $(PREFIX)/lib)))) | |||||
SRCDIR = . | SRCDIR = . | ||||
SUBDIRS = | SUBDIRS = | ||||
DLLS = wineasio.dll | DLLS = wineasio.dll | ||||
@@ -32,17 +27,16 @@ wineasio_dll_C_SRCS = asio.c \ | |||||
regsvr.c | regsvr.c | ||||
wineasio_dll_CXX_SRCS = | wineasio_dll_CXX_SRCS = | ||||
wineasio_dll_RC_SRCS = | wineasio_dll_RC_SRCS = | ||||
wineasio_dll_LDFLAGS = -m32 -shared \ | |||||
wineasio_dll_LDFLAGS = -shared \ | |||||
-m32 \ | |||||
$(wineasio_dll_MODULE:%=%.spec) \ | $(wineasio_dll_MODULE:%=%.spec) \ | ||||
-mnocygwin | |||||
-mnocygwin \ | |||||
-L/usr/lib32/wine \ | |||||
-L/usr/lib32 | |||||
wineasio_dll_DLL_PATH = | wineasio_dll_DLL_PATH = | ||||
wineasio_dll_DLLS = odbc32 \ | wineasio_dll_DLLS = odbc32 \ | ||||
ole32 \ | ole32 \ | ||||
oleaut32 \ | |||||
winspool \ | |||||
winmm \ | |||||
psapi \ | |||||
pthread | |||||
winmm | |||||
wineasio_dll_LIBRARY_PATH= | wineasio_dll_LIBRARY_PATH= | ||||
wineasio_dll_LIBRARIES= uuid | wineasio_dll_LIBRARIES= uuid | ||||
@@ -69,14 +63,11 @@ RC = wrc | |||||
### Generic targets | ### Generic targets | ||||
all: asio.h $(PACKAGES) $(SUBDIRS) $(DLLS:%=%.so) $(EXES:%=%.so) | |||||
$(PACKAGES): dummy | |||||
pkg-config --exists $@ | |||||
all: asio.h $(SUBDIRS) $(DLLS:%=%.so) $(EXES:%=%.so) | |||||
### Build rules | ### Build rules | ||||
.PHONY: all clean dummy $(PACKAGES) | |||||
.PHONY: all clean dummy | |||||
$(SUBDIRS): dummy | $(SUBDIRS): dummy | ||||
@cd $@ && $(MAKE) | @cd $@ && $(MAKE) | ||||
@@ -123,4 +114,4 @@ $(wineasio_dll_MODULE).so: $(wineasio_dll_OBJS) | |||||
$(WINECC) $(wineasio_dll_LDFLAGS) -o $@ $(wineasio_dll_OBJS) $(wineasio_dll_LIBRARY_PATH) $(DEFLIB) $(wineasio_dll_DLLS:%=-l%) $(wineasio_dll_LIBRARIES:%=-l%) | $(WINECC) $(wineasio_dll_LDFLAGS) -o $@ $(wineasio_dll_OBJS) $(wineasio_dll_LIBRARY_PATH) $(DEFLIB) $(wineasio_dll_DLLS:%=-l%) $(wineasio_dll_LIBRARIES:%=-l%) | ||||
install: | install: | ||||
cp wineasio.dll.so $(PREFIX)/$(LIBDIR) | |||||
if [ -d /usr/lib32/wine ]; then cp wineasio.dll.so /usr/lib32/wine; else cp wineasio.dll.so /usr/lib/wine; fi |
@@ -1,127 +0,0 @@ | |||||
### Generated by Winemaker | |||||
# Check (with pkgconfig) for existance of these packages | |||||
PACKAGES = jack | |||||
# Usually '/usr' or '/usr/local' | |||||
PREFIX = /usr | |||||
LIBDIR = $(subst $(PREFIX)/,,$(firstword $(wildcard $(addsuffix /wine/, $(PREFIX)/lib32 $(PREFIX)/lib)))) | |||||
SRCDIR = . | |||||
SUBDIRS = | |||||
DLLS = wineasio.dll | |||||
EXES = | |||||
### Common settings | |||||
CEXTRA = -m32 -g -O2 -DJackWASIO -D__WINESRC__ -D_REENTRANT -fPIC -Wall -pipe -fno-strict-aliasing -Wdeclaration-after-statement -Wwrite-strings -Wpointer-arith | |||||
CXXEXTRA = -m32 -DJackWASIO -D__WINESRC__ -D_REENTRANT -fPIC -Wall -pipe -fno-strict-aliasing -Wdeclaration-after-statement -Wwrite-strings -Wpointer-arith | |||||
RCEXTRA = | |||||
INCLUDE_PATH = -I. -I/usr/include -I$(PREFIX)/include -I$(PREFIX)/include/wine -I$(PREFIX)/include/wine/windows | |||||
DLL_PATH = | |||||
LIBRARY_PATH = | |||||
LIBRARIES = -ljack | |||||
### wineasio.dll sources and settings | |||||
wineasio_dll_MODULE = wineasio.dll | |||||
wineasio_dll_C_SRCS = asio.c \ | |||||
main.c \ | |||||
regsvr.c | |||||
wineasio_dll_CXX_SRCS = | |||||
wineasio_dll_RC_SRCS = | |||||
wineasio_dll_LDFLAGS = -m32 -shared \ | |||||
$(wineasio_dll_MODULE:%=%.spec) \ | |||||
-mnocygwin \ | |||||
-framework CoreAudio | |||||
wineasio_dll_DLL_PATH = | |||||
wineasio_dll_DLLS = odbc32 \ | |||||
ole32 \ | |||||
oleaut32 \ | |||||
winspool \ | |||||
winmm \ | |||||
psapi \ | |||||
pthread | |||||
wineasio_dll_LIBRARY_PATH= | |||||
wineasio_dll_LIBRARIES= uuid | |||||
wineasio_dll_OBJS = $(wineasio_dll_C_SRCS:.c=.o) \ | |||||
$(wineasio_dll_CXX_SRCS:.cpp=.o) \ | |||||
$(wineasio_dll_RC_SRCS:.rc=.res) | |||||
### Global source lists | |||||
C_SRCS = $(wineasio_dll_C_SRCS) | |||||
CXX_SRCS = $(wineasio_dll_CXX_SRCS) | |||||
RC_SRCS = $(wineasio_dll_RC_SRCS) | |||||
### Tools | |||||
CC = gcc | |||||
CXX = g++ | |||||
WINECC = winegcc | |||||
RC = wrc | |||||
### Generic targets | |||||
all: asio.h $(PACKAGES) $(SUBDIRS) $(DLLS:%=%.so) $(EXES:%=%.so) | |||||
$(PACKAGES): dummy | |||||
pkg-config --exists $@ | |||||
### Build rules | |||||
.PHONY: all clean dummy $(PACKAGES) | |||||
$(SUBDIRS): dummy | |||||
@cd $@ && $(MAKE) | |||||
# Implicit rules | |||||
.SUFFIXES: .cpp .rc .res | |||||
DEFINCL = $(INCLUDE_PATH) $(DEFINES) $(OPTIONS) | |||||
.c.o: | |||||
$(CC) -c $(DEFINCL) $(CFLAGS) $(CEXTRA) -o $@ $< | |||||
.cpp.o: | |||||
$(CXX) -c $(CXXFLAGS) $(CXXEXTRA) $(DEFINCL) -o $@ $< | |||||
.cxx.o: | |||||
$(CXX) -c $(CXXFLAGS) $(CXXEXTRA) $(DEFINCL) -o $@ $< | |||||
.rc.res: | |||||
$(RC) $(RCFLAGS) $(RCEXTRA) $(DEFINCL) -fo$@ $< | |||||
# Rules for cleaning | |||||
CLEAN_FILES = y.tab.c y.tab.h lex.yy.c core *.orig *.rej \ | |||||
\\\#*\\\# *~ *% .\\\#* | |||||
clean:: $(SUBDIRS:%=%/__clean__) $(EXTRASUBDIRS:%=%/__clean__) | |||||
$(RM) $(CLEAN_FILES) $(RC_SRCS:.rc=.res) $(C_SRCS:.c=.o) $(CXX_SRCS:.cpp=.o) | |||||
$(RM) $(DLLS:%=%.so) $(EXES:%=%.so) $(EXES:%.exe=%) | |||||
$(SUBDIRS:%=%/__clean__): dummy | |||||
cd `dirname $@` && $(MAKE) clean | |||||
$(EXTRASUBDIRS:%=%/__clean__): dummy | |||||
-cd `dirname $@` && $(RM) $(CLEAN_FILES) | |||||
distclean:: clean | |||||
$(RM) asio.h | |||||
### Target specific build rules | |||||
DEFLIB = $(LIBRARY_PATH) $(LIBRARIES) $(DLL_PATH) | |||||
$(wineasio_dll_MODULE).so: $(wineasio_dll_OBJS) | |||||
$(WINECC) $(wineasio_dll_LDFLAGS) -o $@ $(wineasio_dll_OBJS) $(wineasio_dll_LIBRARY_PATH) $(DEFLIB) $(wineasio_dll_DLLS:%=-l%) $(wineasio_dll_LIBRARIES:%=-l%) | |||||
install: | |||||
cp wineasio.dll.so $(PREFIX)/$(LIBDIR) |
@@ -0,0 +1,180 @@ | |||||
CONTENTS | |||||
======== | |||||
1. Installation | |||||
2. General Information | |||||
3. Change Log | |||||
4. Legal Stuff | |||||
1. INSTALLATION | |||||
--------------- | |||||
Copy the file asio.h from Steinberg's ASIO SDK to the wineasio source | |||||
directory. | |||||
Due to a bug in winegcc, and the confusion regarding where 32bit wine dlls go | |||||
on the various 64bit linux distributions, I've hardcoded support for | |||||
/usr/lib/wine and /usr/lib32/wine into the makefile. If your distro uses | |||||
another path edit the makefile and replace /usr/lib32/wine with the correct | |||||
path. Look at the last line of the makefile. This wineasio should compile and | |||||
install 32 bit wineasio on all 64 bit linux'. | |||||
To build, type (as a normal user): make | |||||
To install, type (as root): make install | |||||
To register the wineasio object, type (as a normal user): regsvr32 wineasio.dll | |||||
The last command registers the ASIO COM object in the default prefix "~/.wine". | |||||
If you use another prefix you will have to explicitly specify it, | |||||
like "env WINEPREFIX=~/asioapp regsvr32 wineasio.dll" | |||||
2. GENERAL INFORMATION | |||||
---------------------- | |||||
The wineasio driver has been almost completely refactored, so the changes are | |||||
far too many to explain in detail. These are some of the more obvious changes: | |||||
Wineasio takes advantage of a new function in the jack api, which lets jack | |||||
create the wine callback thread. This results in a much cleaner callback | |||||
without having to wait on semaphores, requires jack1 (0.117.0) or jack2 (1.9.4) | |||||
or later. | |||||
The default sample type has been changed to use ASIOSTFloat32LSB, which is the | |||||
native format of jack, and allows the removal of the sample rate conversion | |||||
from the processing callback. | |||||
Wineasio can now slave to the jack transport. | |||||
Support has been added for jack's xrun_callback() and bufsize_callback(), the | |||||
latter means that asio apps get notified if the jack buffersize changes. | |||||
CreateBuffers() can now change jack's buffersize if so desired. Must be | |||||
enabled in the registry, see below. | |||||
The old configuration file has been removed and been replaced by a registry key | |||||
(HKEY_CURRENT_USER\Software\Wine\WineASIO). All these options can be overriden | |||||
by an environment variable. The key is automatically created with default | |||||
values if it doesn't exist when the driver initializes. It contains the | |||||
following values: | |||||
[Number of inputs] & [Number of outputs] | |||||
These two settings control the number of jack ports that wineasio will try to | |||||
open. Defaults are 16 in and 16 out. Environment variables are | |||||
WINEASIO_NUMBER_INPUTS and WINEASIO_NUMBER_OUTPUTS | |||||
[Autostart server] | |||||
Defaults to off (0), setting it to 1 enables wineasio to launch the jack | |||||
server. See the jack documentation for further details. The environment | |||||
variable is WINEASIO_AUTOSTART_SERVER, and it can be set to on or off. | |||||
[Connect to hardware] | |||||
Defaults to on (1), makes wineasio try to connect the asio channels to the | |||||
physical I/O ports on your hardware. Setting it to 0 disables it. The | |||||
environment variable is WINEASIO_CONNECT_TO_HARDWARE, and it can be set to on | |||||
or off. | |||||
[Fixed buffersize] | |||||
Defaults to on (1) and is the old behaviour where the buffer size is controlled | |||||
by jack and wineasio has no say in the matter. When set to 0, an asio app will | |||||
be able to change the jack buffer size when calling CreateBuffers(). The | |||||
environment variable is WINEASIO_FIXED_BUFFERSIZE and it can be set to on or | |||||
off. | |||||
[Preferred buffersize] | |||||
Defaults to 1024, and is one of the sizes returned by GetBufferSize(), see the | |||||
ASIO documentation for details. Must be a power of 2. The other values | |||||
returned by the driver are hardcoded in the source, see ASIO_MINIMUM_BUFFERSIZE | |||||
which is set at 16, and ASIO_MAXIMUM_BUFFERSIZE which is set to 8192. The | |||||
environment variable is WINEASIO_PREFERRED_BUFFERSIZE. Be careful, if you set | |||||
a size that isn't supported by the backend, the jack server will most likely | |||||
shut down, might be a good idea to change ASIO_MINIMUM_BUFFERSIZE and | |||||
ASIO_MAXIMUM_BUFFERSIZE to values you know work on your system before building. | |||||
[Sample type] | |||||
Defaults to 19 (decimal) which is ASIOSTFloat32LSB, setting it to 18 (dec) | |||||
makes wineasio use ASIOSTIntt32LSB (the old default). Needed for some apps | |||||
that don't properly implement the ASIO specification. The environment variable | |||||
is WINEASIO_SAMPLE_TYPE. | |||||
In addition there is a WINEASIO_CLIENT_NAME environment variable, that | |||||
overrides the JACK client name derrived from the program name. | |||||
3. CHANGE LOG | |||||
------------- | |||||
0.9.0 | |||||
19-FEB-2011: Nearly complete refactoring of the wineasio codebase (asio.c) (JH) | |||||
0.8.1: | |||||
05-OCT-2010: Code from Win32 callback thread moved to JACK process callback, except for bufferSwitch() call. | |||||
05-OCT-2010: Switch from int to float for samples. | |||||
0.8.0: | |||||
08-AUG-2010: Forward port JackWASIO changes... needs testing hard. (PLJ) | |||||
0.7.6: | |||||
27-DEC-2009: Fixes for compilation on 64bit platform. (PLJ) | |||||
0.7.5: | |||||
29-Oct-2009: Added fork with call to qjackctl from ASIOControlPanel(). (JH) | |||||
29-Oct-2009: Changed the SCHED_FIFO priority of the win32 callback thread. (JH) | |||||
28-Oct-2009: Fixed wrongly reported output latency. (JH) | |||||
0.7.4: | |||||
08-APR-2008: Updates to the README.TXT (PLJ) | |||||
02-APR-2008: Move update to "toggle" to hopefully better place (PLJ) | |||||
24-MCH-2008: Don't trace in win32_callback. Set patch-level to 4. (PLJ) | |||||
09-JAN-2008: Nedko Arnaudov supplied a fix for Nuendo under WINE. | |||||
0.7.3: | |||||
27-DEC-2007: Make slaving to jack transport work, correct port allocation bug. (RB) | |||||
0.7: | |||||
01-DEC-2007: In a fit of insanity, I merged JackLab and Robert Reif code bases. (PLJ) | |||||
0.6: | |||||
21-NOV-2007: add dynamic client naming (PLJ) | |||||
0.0.3: | |||||
17-NOV-2007: Unique port name code (RR) | |||||
0.5: | |||||
03-SEP-2007: port mapping and config file (PLJ) | |||||
0.3: | |||||
30-APR-2007: corrected connection of in/outputs (RB) | |||||
0.1: | |||||
???????????: Initial RB release (RB) | |||||
0.0.2: | |||||
12-SEP-2006: Fix thread bug, tidy up code (RR) | |||||
0.0.1: | |||||
31-AUG-2006: Initial version (RR) | |||||
4. LEGAL STUFF | |||||
-------------- | |||||
Copyright (C) 2006 Robert Reif | |||||
Portions copyright (C) 2007 Ralf Beck | |||||
Portions copyright (C) 2007 Johnny Petrantoni | |||||
Portions copyright (C) 2007 Stephane Letz | |||||
Portions copyright (C) 2008 William Steidtmann | |||||
Portions copyright (C) 2010 Peter L Jones | |||||
Portions copyright (C) 2010 Torben Hohn | |||||
Portions copyright (C) 2010 Nedko Arnaudov | |||||
Portions copyright (C) 2010 Joakim Hernberg | |||||
This library 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 library 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 St, Fifth Floor, Boston, MA 02110-1301, USA | |||||
@@ -1,179 +0,0 @@ | |||||
CONTENTS | |||||
======== | |||||
1. Installation | |||||
2. User Instruction | |||||
3. Credits | |||||
4. Change Log | |||||
1. INSTALLATION | |||||
--------------- | |||||
Before installation edit the prefix path in the Makefile | |||||
PREFIX = <root path you use> | |||||
usually this will either be | |||||
PREFIX = /usr | |||||
or | |||||
PREFIX = /usr/local | |||||
wineasio is currently 32bit only and must live in the lib32 library on | |||||
64bit systems. The Makefile tries to autodetect this. But if it fails, | |||||
set LIBDIR. | |||||
Copy the file asio.h from Steinberg's asio-sdk to the wineasio directory | |||||
then execute: make | |||||
and as root: make install | |||||
then, again as normal user: regsvr32 wineasio.dll | |||||
Notes: | |||||
The asio.c file uses 32 bit integer buffers, which is supported by most asio | |||||
applications. | |||||
2. USER INSTRUCTIONS | |||||
-------------------- | |||||
The driver can be configured in two ways: either using environment variables or | |||||
using a configuration file. | |||||
The configuration file can be set per user in ".wineasiocfg". As a fallback, a | |||||
site-wide file can be provided in "/etc/default/wineasiocfg" if desired. | |||||
The format for the configuration file is simply "var=val". | |||||
If using the shell, either include the assignment on the command line: | |||||
ASIO_INPUTS=0 ~/bin/reaper.exe | |||||
or ensure the variable has been exported: | |||||
export ASIO_INPUTS=0 | |||||
~/bin/reaper.exe | |||||
The available variables are as follows: | |||||
ASIO_INPUTS | |||||
ASIO_OUTPUTS | |||||
ASIO_INPORTNAME<n> | |||||
ASIO_OUTPORTNAME<n> | |||||
ASIO_INPORT<n> | |||||
ASIO_OUTPORT<n> | |||||
ASIO_AUTOCONNECT | |||||
<clientname> | |||||
The last entry allows you to change the client name from the default, which is | |||||
constructed from the program name prefixed by "ASIO_". For example, | |||||
ASIO_reaper=REAPER | |||||
All of the entries beginning ASIO_ can also have entries specific to a client, | |||||
using the assigned client name. For example, | |||||
ASIO_reaper_INPUTS=0 | |||||
or (if the client name has been re-assigned as above), | |||||
REAPER_INPUTS=0 | |||||
INPUTS and OUTPUTS | |||||
------------------ | |||||
These let you limit the number of JACK ports allocated to this client. The | |||||
default value for both is 2. | |||||
INPORTNAME and OUTPORTNAME | |||||
-------------------------- | |||||
These allow you to rename the input and output ports for the client. The | |||||
default names are "input_<n>" and "output_<n>". For example, | |||||
REAPER_OUTPORTNAME0=left | |||||
REAPER_OUTPORTNAME1=right | |||||
INPORT and OUTPORT | |||||
------------------ | |||||
These allow you to connect the client to JACK ports of your choice. The | |||||
default is to connect JACK's "hardware" inputs to your client's inputs and your | |||||
client's outputs to JACK's "hardware" outputs. You might be running some other | |||||
application, e.g. an icecast server, and want to send output to that. For | |||||
example, | |||||
ASIO_OUTPORT0=idjc-mx:aux_lt | |||||
ASIO_OUTPORT1=idjc-mx:aux_rt | |||||
AUTOCONNECT | |||||
----------- | |||||
This enables you to control whether a client automatically connects to JACK or | |||||
whether you will do the wiring up yourself. The default is to connect. To turn | |||||
it off, use, for example, | |||||
ASIO_reaper_AUTOCONNECT=false | |||||
(where "false" is anything other than "true" (case independent)). | |||||
3. CREDITS | |||||
---------- | |||||
original code: Robert Reif posted to the wine mailinglist | |||||
see also http://bugs.winehq.org/show_bug.cgi?id=2161 | |||||
modified by: Ralf Beck (musical_snake@gmx.de) | |||||
port mapping, config file, dynamic client naming, bringing back in line with | |||||
Robert Reif's code, merging JackWASIO: | |||||
Peter L Jones (pljones@users.sf.net) | |||||
fix for windows-style path handling: William Steidtmann | |||||
todo: | |||||
- make timecode sync to jack transport | |||||
- are we leaving memory allocated? | |||||
4. CHANGE LOG | |||||
------------- | |||||
0.8.1.0: | |||||
05-OCT-2010: Code from Win32 callback thread moved to JACK process callback, except for bufferSwitch() call. | |||||
05-OCT-2010: Switch from int to float for samples. | |||||
0.8: | |||||
08-AUG-2010: Forward port JackWASIO changes... needs testing hard. (PLJ) | |||||
0.7.6: | |||||
27-DEC-2009: Fixes for compilation on 64bit platform. (PLJ) | |||||
0.7.5: | |||||
29-Oct-2009: Added fork with call to qjackctl from ASIOControlPanel(). (JH) | |||||
29-Oct-2009: Changed the SCHED_FIFO priority of the win32 callback thread. (JH) | |||||
28-Oct-2009: Fixed wrongly reported output latency. (JH) | |||||
0.7.4: | |||||
08-APR-2008: Updates to the README.TXT (PLJ) | |||||
02-APR-2008: Move update to "toggle" to hopefully better place (PLJ) | |||||
24-MCH-2008: Don't trace in win32_callback. Set patch-level to 4. (PLJ) | |||||
09-JAN-2008: Nedko Arnaudov supplied a fix for Nuendo under WINE. | |||||
0.7.3: | |||||
27-DEC-2007: Make slaving to jack transport work, correct port allocation bug. (RB) | |||||
0.7: | |||||
01-DEC-2007: In a fit of insanity, I merged JackLab and Robert Reif code bases. (PLJ) | |||||
0.6: | |||||
21-NOV-2007: add dynamic client naming (PLJ) | |||||
0.0.3: | |||||
17-NOV-2007: Unique port name code (RR) | |||||
JackWASIO (branched from 0.5-ish): | |||||
02-OCT-2007: Johnny Petrantoni - added more Linux compatibility code, it should compile now on a linux box (still need edit makefile) | |||||
30-SEP-2007: Johnny Petrantoni - added JackPilot preferences for virtual-ports and auto connect, added some macros for linux compilation, | |||||
removed prepath from libjack. | |||||
29-SEP-2007: Johnny Petrantoni - added mutex and condition code to synch IT IS WORKING NOW!!! tested down to 256 buffersize using reaper. | |||||
28-SEP-2007: Johnny Petrantoni - Added pThreadUtilities.h code... but the cracks are still there.. | |||||
28-SEP-2007: Johnny Petrantoni - Minor fixes, added TODO and this changes log. | |||||
28-SEP-2007: Johnny Petrantoni - Added Stephane GetEXEName() and code cleanup. | |||||
28-SEP-2007: Johnny Petrantoni - First Import. | |||||
0.5: | |||||
03-SEP-2007: port mapping and config file (PLJ) | |||||
0.3: | |||||
30-APR-2007: corrected connection of in/outputs (RB) | |||||
0.1: | |||||
???????????: Initial RB release (RB) | |||||
0.0.2: | |||||
12-SEP-2006: Fix thread bug, tidy up code (RR) | |||||
0.0.1: | |||||
31-AUG-2006: Initial version (RR) |
@@ -25,10 +25,9 @@ | |||||
#include "objbase.h" | #include "objbase.h" | ||||
#include "wine/debug.h" | #include "wine/debug.h" | ||||
WINE_DEFAULT_DEBUG_CHANNEL(asio); | WINE_DEFAULT_DEBUG_CHANNEL(asio); | ||||
// {48D0C522-BFCC-45cc-8B84-17F25F33E6E8} | |||||
/* {48D0C522-BFCC-45cc-8B84-17F25F33E6E8} */ | |||||
static GUID const CLSID_WineASIO = { | static GUID const CLSID_WineASIO = { | ||||
0x48d0c522, 0xbfcc, 0x45cc, { 0x8b, 0x84, 0x17, 0xf2, 0x5f, 0x33, 0xe6, 0xe8 } }; | 0x48d0c522, 0xbfcc, 0x45cc, { 0x8b, 0x84, 0x17, 0xf2, 0x5f, 0x33, 0xe6, 0xe8 } }; | ||||
@@ -37,14 +36,13 @@ typedef struct { | |||||
LONG ref; | LONG ref; | ||||
} IClassFactoryImpl; | } IClassFactoryImpl; | ||||
extern HRESULT asioCreateInstance(REFIID riid, LPVOID *ppobj); | |||||
extern HRESULT WINAPI WineASIOCreateInstance(REFIID riid, LPVOID *ppobj); | |||||
/******************************************************************************* | /******************************************************************************* | ||||
* ClassFactory | * ClassFactory | ||||
*/ | */ | ||||
static HRESULT WINAPI | |||||
CF_QueryInterface(LPCLASSFACTORY iface, REFIID riid, LPVOID *ppobj) | |||||
static HRESULT WINAPI CF_QueryInterface(LPCLASSFACTORY iface, REFIID riid, LPVOID *ppobj) | |||||
{ | { | ||||
IClassFactoryImpl *This = (IClassFactoryImpl *)iface; | IClassFactoryImpl *This = (IClassFactoryImpl *)iface; | ||||
FIXME("(%p, %s, %p) stub!\n", This, debugstr_guid(riid), ppobj); | FIXME("(%p, %s, %p) stub!\n", This, debugstr_guid(riid), ppobj); | ||||
@@ -57,7 +55,7 @@ static ULONG WINAPI CF_AddRef(LPCLASSFACTORY iface) | |||||
{ | { | ||||
IClassFactoryImpl *This = (IClassFactoryImpl *)iface; | IClassFactoryImpl *This = (IClassFactoryImpl *)iface; | ||||
ULONG ref = InterlockedIncrement(&(This->ref)); | ULONG ref = InterlockedIncrement(&(This->ref)); | ||||
TRACE("(%p) ref was %x\n", This, ref - 1); | |||||
TRACE("iface: %p, ref has been set to %x\n", This, ref); | |||||
return ref; | return ref; | ||||
} | } | ||||
@@ -65,19 +63,15 @@ static ULONG WINAPI CF_Release(LPCLASSFACTORY iface) | |||||
{ | { | ||||
IClassFactoryImpl *This = (IClassFactoryImpl *)iface; | IClassFactoryImpl *This = (IClassFactoryImpl *)iface; | ||||
ULONG ref = InterlockedDecrement(&(This->ref)); | ULONG ref = InterlockedDecrement(&(This->ref)); | ||||
TRACE("(%p) ref was %x\n", This, ref + 1); | |||||
TRACE("iface %p, ref has been set to %x\n", This, ref); | |||||
/* static class, won't be freed */ | /* static class, won't be freed */ | ||||
return ref; | return ref; | ||||
} | } | ||||
static HRESULT WINAPI CF_CreateInstance( | |||||
LPCLASSFACTORY iface, | |||||
LPUNKNOWN pOuter, | |||||
REFIID riid, | |||||
LPVOID *ppobj) | |||||
static HRESULT WINAPI CF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) | |||||
{ | { | ||||
IClassFactoryImpl *This = (IClassFactoryImpl *)iface; | IClassFactoryImpl *This = (IClassFactoryImpl *)iface; | ||||
TRACE("(%p, %p, %s, %p)\n", This, pOuter, debugstr_guid(riid), ppobj); | |||||
TRACE("iface: %p, pOuter: %p, riid: %s, ppobj: %p)\n", This, pOuter, debugstr_guid(riid), ppobj); | |||||
if (pOuter) | if (pOuter) | ||||
return CLASS_E_NOAGGREGATION; | return CLASS_E_NOAGGREGATION; | ||||
@@ -86,14 +80,16 @@ static HRESULT WINAPI CF_CreateInstance( | |||||
WARN("invalid parameter\n"); | WARN("invalid parameter\n"); | ||||
return E_INVALIDARG; | return E_INVALIDARG; | ||||
} | } | ||||
*ppobj = NULL; | *ppobj = NULL; | ||||
return asioCreateInstance(riid, ppobj); | |||||
TRACE("Creating the WineASIO object\n"); | |||||
return WineASIOCreateInstance(riid, ppobj); | |||||
} | } | ||||
static HRESULT WINAPI CF_LockServer(LPCLASSFACTORY iface, BOOL dolock) | static HRESULT WINAPI CF_LockServer(LPCLASSFACTORY iface, BOOL dolock) | ||||
{ | { | ||||
IClassFactoryImpl *This = (IClassFactoryImpl *)iface; | IClassFactoryImpl *This = (IClassFactoryImpl *)iface; | ||||
FIXME("(%p, %d) stub!\n", This, dolock); | |||||
FIXME("iface: %p, dolock: %d) stub!\n", This, dolock); | |||||
return S_OK; | return S_OK; | ||||
} | } | ||||
@@ -126,7 +122,7 @@ static IClassFactoryImpl WINEASIO_CF = { &CF_Vtbl, 1 }; | |||||
*/ | */ | ||||
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) | HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) | ||||
{ | { | ||||
TRACE("(%s, %s, %p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv); | |||||
TRACE("rclsid: %s, riid: %s, ppv: %p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv); | |||||
if (ppv == NULL) { | if (ppv == NULL) { | ||||
WARN("invalid parameter\n"); | WARN("invalid parameter\n"); | ||||
@@ -135,20 +131,20 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) | |||||
*ppv = NULL; | *ppv = NULL; | ||||
if (!IsEqualIID(riid, &IID_IClassFactory) && | |||||
!IsEqualIID(riid, &IID_IUnknown)) { | |||||
if (!IsEqualIID(riid, &IID_IClassFactory) && !IsEqualIID(riid, &IID_IUnknown)) | |||||
{ | |||||
WARN("no interface for %s\n", debugstr_guid(riid)); | WARN("no interface for %s\n", debugstr_guid(riid)); | ||||
return E_NOINTERFACE; | return E_NOINTERFACE; | ||||
} | } | ||||
if (IsEqualGUID(rclsid, &CLSID_WineASIO)) { | |||||
if (IsEqualGUID(rclsid, &CLSID_WineASIO)) | |||||
{ | |||||
CF_AddRef((IClassFactory*) &WINEASIO_CF); | CF_AddRef((IClassFactory*) &WINEASIO_CF); | ||||
*ppv = &WINEASIO_CF; | *ppv = &WINEASIO_CF; | ||||
return S_OK; | return S_OK; | ||||
} | } | ||||
WARN("(%s, %s, %p): no class found.\n", debugstr_guid(rclsid), | |||||
debugstr_guid(riid), ppv); | |||||
WARN("rclsid: %s, riid: %s, ppv: %p): no class found.\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv); | |||||
return CLASS_E_CLASSNOTAVAILABLE; | return CLASS_E_CLASSNOTAVAILABLE; | ||||
} | } | ||||
@@ -172,25 +168,24 @@ HRESULT WINAPI DllCanUnloadNow(void) | |||||
*/ | */ | ||||
BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpvReserved) | BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpvReserved) | ||||
{ | { | ||||
TRACE("(%p %x %p)\n", hInstDLL, fdwReason, lpvReserved); | |||||
TRACE("hInstDLL: %p, fdwReason: %x lpvReserved: %p)\n", hInstDLL, fdwReason, lpvReserved); | |||||
switch (fdwReason) { | switch (fdwReason) { | ||||
case DLL_PROCESS_ATTACH: | case DLL_PROCESS_ATTACH: | ||||
TRACE("DLL_PROCESS_ATTACH\n"); | |||||
/* TRACE("DLL_PROCESS_ATTACH\n"); */ | |||||
break; | break; | ||||
case DLL_PROCESS_DETACH: | case DLL_PROCESS_DETACH: | ||||
TRACE("DLL_PROCESS_DETACH\n"); | |||||
/* TRACE("DLL_PROCESS_DETACH\n"); */ | |||||
break; | break; | ||||
case DLL_THREAD_ATTACH: | case DLL_THREAD_ATTACH: | ||||
TRACE("DLL_THREAD_ATTACH\n"); | |||||
/* TRACE("DLL_THREAD_ATTACH\n"); */ | |||||
break; | break; | ||||
case DLL_THREAD_DETACH: | case DLL_THREAD_DETACH: | ||||
TRACE("DLL_THREAD_DETACH\n"); | |||||
/* TRACE("DLL_THREAD_DETACH\n"); */ | |||||
break; | break; | ||||
default: | default: | ||||
TRACE("UNKNOWN REASON\n"); | |||||
/* TRACE("UNKNOWN REASON\n"); */ | |||||
break; | break; | ||||
} | } | ||||
return TRUE; | return TRUE; | ||||
} | } | ||||
@@ -1,203 +0,0 @@ | |||||
/* | |||||
Copyright: © Copyright 2002 Apple Computer, Inc. All rights | |||||
reserved. | |||||
Disclaimer: IMPORTANT: This Apple software is supplied to | |||||
you by Apple Computer, Inc. ("Apple") in | |||||
consideration of your agreement to the | |||||
following terms, and your use, installation, | |||||
modification or redistribution of this Apple | |||||
software constitutes acceptance of these | |||||
terms. If you do not agree with these terms, | |||||
please do not use, install, modify or | |||||
redistribute this Apple software. | |||||
In consideration of your agreement to abide by | |||||
the following terms, and subject to these | |||||
terms, Apple grants you a personal, | |||||
non-exclusive license, under AppleÕs | |||||
copyrights in this original Apple software | |||||
(the "Apple Software"), to use, reproduce, | |||||
modify and redistribute the Apple Software, | |||||
with or without modifications, in source | |||||
and/or binary forms; provided that if you | |||||
redistribute the Apple Software in its | |||||
entirety and without modifications, you must | |||||
retain this notice and the following text and | |||||
disclaimers in all such redistributions of the | |||||
Apple Software. Neither the name, trademarks, | |||||
service marks or logos of Apple Computer, | |||||
Inc. may be used to endorse or promote | |||||
products derived from the Apple Software | |||||
without specific prior written permission from | |||||
Apple. Except as expressly stated in this | |||||
notice, no other rights or licenses, express | |||||
or implied, are granted by Apple herein, | |||||
including but not limited to any patent rights | |||||
that may be infringed by your derivative works | |||||
or by other works in which the Apple Software | |||||
may be incorporated. | |||||
The Apple Software is provided by Apple on an | |||||
"AS IS" basis. APPLE MAKES NO WARRANTIES, | |||||
EXPRESS OR IMPLIED, INCLUDING WITHOUT | |||||
LIMITATION THE IMPLIED WARRANTIES OF | |||||
NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS | |||||
FOR A PARTICULAR PURPOSE, REGARDING THE APPLE | |||||
SOFTWARE OR ITS USE AND OPERATION ALONE OR IN | |||||
COMBINATION WITH YOUR PRODUCTS. | |||||
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY | |||||
SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL | |||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, | |||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |||||
INTERRUPTION) ARISING IN ANY WAY OUT OF THE | |||||
USE, REPRODUCTION, MODIFICATION AND/OR | |||||
DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER | |||||
CAUSED AND WHETHER UNDER THEORY OF CONTRACT, | |||||
TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY | |||||
OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED | |||||
OF THE POSSIBILITY OF SUCH DAMAGE. | |||||
*/ | |||||
/* pThreadUtilities.h */ | |||||
#ifndef __PTHREADUTILITIES_H__ | |||||
#define __PTHREADUTILITIES_H__ | |||||
#import "pthread.h" | |||||
#import <CoreServices/../Frameworks/CarbonCore.framework/Headers/MacTypes.h> | |||||
#define THREAD_SET_PRIORITY 0 | |||||
#define THREAD_SCHEDULED_PRIORITY 1 | |||||
#include <mach/mach_error.h> | |||||
#include <mach/thread_policy.h> | |||||
#include <mach/thread_act.h> | |||||
#include <CoreAudio/HostTime.h> | |||||
static inline UInt32 | |||||
_getThreadPriority(pthread_t inThread, int inWhichPriority) | |||||
{ | |||||
thread_basic_info_data_t threadInfo; | |||||
policy_info_data_t thePolicyInfo; | |||||
unsigned int count; | |||||
// get basic info | |||||
count = THREAD_BASIC_INFO_COUNT; | |||||
thread_info (pthread_mach_thread_np (inThread), THREAD_BASIC_INFO, | |||||
(thread_info_t)&threadInfo, &count); | |||||
switch (threadInfo.policy) { | |||||
case POLICY_TIMESHARE: | |||||
count = POLICY_TIMESHARE_INFO_COUNT; | |||||
thread_info(pthread_mach_thread_np (inThread), | |||||
THREAD_SCHED_TIMESHARE_INFO, | |||||
(thread_info_t)&(thePolicyInfo.ts), &count); | |||||
if (inWhichPriority == THREAD_SCHEDULED_PRIORITY) { | |||||
return thePolicyInfo.ts.cur_priority; | |||||
} else { | |||||
return thePolicyInfo.ts.base_priority; | |||||
} | |||||
break; | |||||
case POLICY_FIFO: | |||||
count = POLICY_FIFO_INFO_COUNT; | |||||
thread_info(pthread_mach_thread_np (inThread), | |||||
THREAD_SCHED_FIFO_INFO, | |||||
(thread_info_t)&(thePolicyInfo.fifo), &count); | |||||
if ( (thePolicyInfo.fifo.depressed) | |||||
&& (inWhichPriority == THREAD_SCHEDULED_PRIORITY) ) { | |||||
return thePolicyInfo.fifo.depress_priority; | |||||
} | |||||
return thePolicyInfo.fifo.base_priority; | |||||
break; | |||||
case POLICY_RR: | |||||
count = POLICY_RR_INFO_COUNT; | |||||
thread_info(pthread_mach_thread_np (inThread), | |||||
THREAD_SCHED_RR_INFO, | |||||
(thread_info_t)&(thePolicyInfo.rr), &count); | |||||
if ( (thePolicyInfo.rr.depressed) | |||||
&& (inWhichPriority == THREAD_SCHEDULED_PRIORITY) ) { | |||||
return thePolicyInfo.rr.depress_priority; | |||||
} | |||||
return thePolicyInfo.rr.base_priority; | |||||
break; | |||||
} | |||||
return 0; | |||||
} | |||||
// returns the thread's priority as it was last set by the API | |||||
static inline UInt32 | |||||
getThreadSetPriority(pthread_t inThread) | |||||
{ | |||||
return _getThreadPriority (inThread, THREAD_SET_PRIORITY); | |||||
} | |||||
// returns the thread's priority as it was last scheduled by the Kernel | |||||
static inline UInt32 | |||||
getThreadScheduledPriority(pthread_t inThread) | |||||
{ | |||||
return _getThreadPriority (inThread, THREAD_SCHEDULED_PRIORITY); | |||||
} | |||||
static inline void | |||||
setThreadToPriority(pthread_t inThread, UInt32 inPriority, Boolean inIsFixed, | |||||
UInt64 inHALIOProcCycleDurationInNanoseconds) | |||||
{ | |||||
if (inPriority == 96) | |||||
{ | |||||
// REAL-TIME / TIME-CONSTRAINT THREAD | |||||
thread_time_constraint_policy_data_t theTCPolicy; | |||||
UInt64 theComputeQuanta; | |||||
UInt64 thePeriod; | |||||
UInt64 thePeriodNanos; | |||||
thePeriodNanos = inHALIOProcCycleDurationInNanoseconds; | |||||
theComputeQuanta = AudioConvertNanosToHostTime ( thePeriodNanos * 0.15 ); | |||||
thePeriod = AudioConvertNanosToHostTime (thePeriodNanos); | |||||
theTCPolicy.period = thePeriod; | |||||
theTCPolicy.computation = theComputeQuanta; | |||||
theTCPolicy.constraint = thePeriod; | |||||
theTCPolicy.preemptible = true; | |||||
thread_policy_set (pthread_mach_thread_np(inThread), | |||||
THREAD_TIME_CONSTRAINT_POLICY, | |||||
(thread_policy_t)&theTCPolicy, | |||||
THREAD_TIME_CONSTRAINT_POLICY_COUNT); | |||||
} else { | |||||
// OTHER THREADS | |||||
thread_extended_policy_data_t theFixedPolicy; | |||||
thread_precedence_policy_data_t thePrecedencePolicy; | |||||
SInt32 relativePriority; | |||||
// [1] SET FIXED / NOT FIXED | |||||
theFixedPolicy.timeshare = !inIsFixed; | |||||
thread_policy_set (pthread_mach_thread_np(inThread), | |||||
THREAD_EXTENDED_POLICY, | |||||
(thread_policy_t)&theFixedPolicy, | |||||
THREAD_EXTENDED_POLICY_COUNT); | |||||
// [2] SET PRECEDENCE N.B.: We expect that if thread A | |||||
// created thread B, and the program wishes to change the | |||||
// priority of thread B, then the call to change the | |||||
// priority of thread B must be made by thread A. This | |||||
// assumption allows us to use pthread_self() to correctly | |||||
// calculate the priority of the feeder thread (since | |||||
// precedency policy's importance is relative to the | |||||
// spawning thread's priority.) | |||||
relativePriority = inPriority - | |||||
getThreadSetPriority (pthread_self()); | |||||
thePrecedencePolicy.importance = relativePriority; | |||||
thread_policy_set (pthread_mach_thread_np(inThread), | |||||
THREAD_PRECEDENCE_POLICY, | |||||
(thread_policy_t)&thePrecedencePolicy, | |||||
THREAD_PRECEDENCE_POLICY_COUNT); | |||||
} | |||||
} | |||||
#endif /* __PTHREADUTILITIES_H__ */ |
@@ -1,456 +0,0 @@ | |||||
/* | |||||
* Wine porting definitions | |||||
* | |||||
* Copyright 1996 Alexandre Julliard | |||||
* | |||||
* This library 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 library 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 St, Fifth Floor, Boston, MA 02110-1301, USA | |||||
*/ | |||||
#ifndef __WINE_WINE_PORT_H | |||||
#define __WINE_WINE_PORT_H | |||||
#ifndef __WINE_CONFIG_H | |||||
# error You must include config.h to use this header | |||||
#endif | |||||
#define _FILE_OFFSET_BITS 64 | |||||
#define _GNU_SOURCE /* for pread/pwrite */ | |||||
#include <fcntl.h> | |||||
#include <math.h> | |||||
#include <sys/types.h> | |||||
#include <sys/stat.h> | |||||
#ifdef HAVE_DIRECT_H | |||||
# include <direct.h> | |||||
#endif | |||||
#ifdef HAVE_IO_H | |||||
# include <io.h> | |||||
#endif | |||||
#ifdef HAVE_PROCESS_H | |||||
# include <process.h> | |||||
#endif | |||||
#include <string.h> | |||||
#ifdef HAVE_UNISTD_H | |||||
# include <unistd.h> | |||||
#endif | |||||
/**************************************************************** | |||||
* Type definitions | |||||
*/ | |||||
#if !defined(_MSC_VER) && !defined(__int64) | |||||
# if defined(__x86_64__) || defined(_WIN64) | |||||
# define __int64 long | |||||
# else | |||||
# define __int64 long long | |||||
# endif | |||||
#endif | |||||
#ifndef HAVE_MODE_T | |||||
typedef int mode_t; | |||||
#endif | |||||
#ifndef HAVE_OFF_T | |||||
typedef long off_t; | |||||
#endif | |||||
#ifndef HAVE_PID_T | |||||
typedef int pid_t; | |||||
#endif | |||||
#ifndef HAVE_SIZE_T | |||||
typedef unsigned int size_t; | |||||
#endif | |||||
#ifndef HAVE_SSIZE_T | |||||
typedef int ssize_t; | |||||
#endif | |||||
#ifndef HAVE_FSBLKCNT_T | |||||
typedef unsigned long fsblkcnt_t; | |||||
#endif | |||||
#ifndef HAVE_FSFILCNT_T | |||||
typedef unsigned long fsfilcnt_t; | |||||
#endif | |||||
#ifndef HAVE_STRUCT_STATVFS_F_BLOCKS | |||||
struct statvfs | |||||
{ | |||||
unsigned long f_bsize; | |||||
unsigned long f_frsize; | |||||
fsblkcnt_t f_blocks; | |||||
fsblkcnt_t f_bfree; | |||||
fsblkcnt_t f_bavail; | |||||
fsfilcnt_t f_files; | |||||
fsfilcnt_t f_ffree; | |||||
fsfilcnt_t f_favail; | |||||
unsigned long f_fsid; | |||||
unsigned long f_flag; | |||||
unsigned long f_namemax; | |||||
}; | |||||
#endif /* HAVE_STRUCT_STATVFS_F_BLOCKS */ | |||||
/**************************************************************** | |||||
* Macro definitions | |||||
*/ | |||||
#ifdef HAVE_DLFCN_H | |||||
#include <dlfcn.h> | |||||
#else | |||||
#define RTLD_LAZY 0x001 | |||||
#define RTLD_NOW 0x002 | |||||
#define RTLD_GLOBAL 0x100 | |||||
#endif | |||||
#if !defined(HAVE_FTRUNCATE) && defined(HAVE_CHSIZE) | |||||
#define ftruncate chsize | |||||
#endif | |||||
#if !defined(HAVE_POPEN) && defined(HAVE__POPEN) | |||||
#define popen _popen | |||||
#endif | |||||
#if !defined(HAVE_PCLOSE) && defined(HAVE__PCLOSE) | |||||
#define pclose _pclose | |||||
#endif | |||||
#if !defined(HAVE_SNPRINTF) && defined(HAVE__SNPRINTF) | |||||
#define snprintf _snprintf | |||||
#endif | |||||
#if !defined(HAVE_VSNPRINTF) && defined(HAVE__VSNPRINTF) | |||||
#define vsnprintf _vsnprintf | |||||
#endif | |||||
#ifndef S_ISLNK | |||||
# define S_ISLNK(mod) (0) | |||||
#endif | |||||
#ifndef S_ISSOCK | |||||
# define S_ISSOCK(mod) (0) | |||||
#endif | |||||
#ifndef S_ISDIR | |||||
# define S_ISDIR(mod) (((mod) & _S_IFMT) == _S_IFDIR) | |||||
#endif | |||||
#ifndef S_ISCHR | |||||
# define S_ISCHR(mod) (((mod) & _S_IFMT) == _S_IFCHR) | |||||
#endif | |||||
#ifndef S_ISFIFO | |||||
# define S_ISFIFO(mod) (((mod) & _S_IFMT) == _S_IFIFO) | |||||
#endif | |||||
#ifndef S_ISREG | |||||
# define S_ISREG(mod) (((mod) & _S_IFMT) == _S_IFREG) | |||||
#endif | |||||
#ifndef S_IWUSR | |||||
# define S_IWUSR 0 | |||||
#endif | |||||
/* So we open files in 64 bit access mode on Linux */ | |||||
#ifndef O_LARGEFILE | |||||
# define O_LARGEFILE 0 | |||||
#endif | |||||
#ifndef O_NONBLOCK | |||||
# define O_NONBLOCK 0 | |||||
#endif | |||||
#ifndef O_BINARY | |||||
# define O_BINARY 0 | |||||
#endif | |||||
#if !defined(S_IXUSR) && defined(S_IEXEC) | |||||
# define S_IXUSR S_IEXEC | |||||
#endif | |||||
#if !defined(S_IXGRP) && defined(S_IEXEC) | |||||
# define S_IXGRP S_IEXEC | |||||
#endif | |||||
#if !defined(S_IXOTH) && defined(S_IEXEC) | |||||
# define S_IXOTH S_IEXEC | |||||
#endif | |||||
/**************************************************************** | |||||
* Constants | |||||
*/ | |||||
#ifndef M_PI | |||||
#define M_PI 3.14159265358979323846 | |||||
#endif | |||||
#ifndef M_PI_2 | |||||
#define M_PI_2 1.570796326794896619 | |||||
#endif | |||||
/* Macros to define assembler functions somewhat portably */ | |||||
#if defined(__GNUC__) && !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(__APPLE__) | |||||
# define __ASM_GLOBAL_FUNC(name,code) \ | |||||
__asm__( ".text\n\t" \ | |||||
".align 4\n\t" \ | |||||
".globl " __ASM_NAME(#name) "\n\t" \ | |||||
__ASM_FUNC(#name) "\n" \ | |||||
__ASM_NAME(#name) ":\n\t" \ | |||||
code \ | |||||
"\n\t.previous" ); | |||||
#else /* defined(__GNUC__) && !defined(__MINGW32__) && !defined(__APPLE__) */ | |||||
# define __ASM_GLOBAL_FUNC(name,code) \ | |||||
void __asm_dummy_##name(void) { \ | |||||
asm( ".align 4\n\t" \ | |||||
".globl " __ASM_NAME(#name) "\n\t" \ | |||||
__ASM_FUNC(#name) "\n" \ | |||||
__ASM_NAME(#name) ":\n\t" \ | |||||
code ); \ | |||||
} | |||||
#endif /* __GNUC__ */ | |||||
/* Register functions */ | |||||
#ifdef __i386__ | |||||
#define DEFINE_REGS_ENTRYPOINT( name, args, pop_args ) \ | |||||
__ASM_GLOBAL_FUNC( name, \ | |||||
"pushl %eax\n\t" \ | |||||
"call " __ASM_NAME("__wine_call_from_32_regs") "\n\t" \ | |||||
".long " __ASM_NAME("__regs_") #name "-.\n\t" \ | |||||
".byte " #args "," #pop_args ) | |||||
/* FIXME: add support for other CPUs */ | |||||
#endif /* __i386__ */ | |||||
/**************************************************************** | |||||
* Function definitions (only when using libwine_port) | |||||
*/ | |||||
#ifndef NO_LIBWINE_PORT | |||||
#ifndef HAVE_FSTATVFS | |||||
int fstatvfs( int fd, struct statvfs *buf ); | |||||
#endif | |||||
#ifndef HAVE_GETOPT_LONG | |||||
extern char *optarg; | |||||
extern int optind; | |||||
extern int opterr; | |||||
extern int optopt; | |||||
struct option; | |||||
#ifndef HAVE_STRUCT_OPTION_NAME | |||||
struct option | |||||
{ | |||||
const char *name; | |||||
int has_arg; | |||||
int *flag; | |||||
int val; | |||||
}; | |||||
#endif | |||||
extern int getopt_long (int ___argc, char *const *___argv, | |||||
const char *__shortopts, | |||||
const struct option *__longopts, int *__longind); | |||||
extern int getopt_long_only (int ___argc, char *const *___argv, | |||||
const char *__shortopts, | |||||
const struct option *__longopts, int *__longind); | |||||
#endif /* HAVE_GETOPT_LONG */ | |||||
#ifndef HAVE_FFS | |||||
int ffs( int x ); | |||||
#endif | |||||
#ifndef HAVE_FUTIMES | |||||
struct timeval; | |||||
int futimes(int fd, const struct timeval tv[2]); | |||||
#endif | |||||
#ifndef HAVE_GETPAGESIZE | |||||
size_t getpagesize(void); | |||||
#endif /* HAVE_GETPAGESIZE */ | |||||
#ifndef HAVE_GETTID | |||||
pid_t gettid(void); | |||||
#endif /* HAVE_GETTID */ | |||||
#ifndef HAVE_LSTAT | |||||
int lstat(const char *file_name, struct stat *buf); | |||||
#endif /* HAVE_LSTAT */ | |||||
#ifndef HAVE_MEMMOVE | |||||
void *memmove(void *dest, const void *src, size_t len); | |||||
#endif /* !defined(HAVE_MEMMOVE) */ | |||||
#ifndef HAVE_PREAD | |||||
ssize_t pread( int fd, void *buf, size_t count, off_t offset ); | |||||
#endif /* HAVE_PREAD */ | |||||
#ifndef HAVE_PWRITE | |||||
ssize_t pwrite( int fd, const void *buf, size_t count, off_t offset ); | |||||
#endif /* HAVE_PWRITE */ | |||||
#ifndef HAVE_READLINK | |||||
int readlink( const char *path, char *buf, size_t size ); | |||||
#endif /* HAVE_READLINK */ | |||||
#ifndef HAVE_SIGSETJMP | |||||
# include <setjmp.h> | |||||
typedef jmp_buf sigjmp_buf; | |||||
int sigsetjmp( sigjmp_buf buf, int savesigs ); | |||||
void siglongjmp( sigjmp_buf buf, int val ); | |||||
#endif /* HAVE_SIGSETJMP */ | |||||
#ifndef HAVE_STATVFS | |||||
int statvfs( const char *path, struct statvfs *buf ); | |||||
#endif | |||||
#ifndef HAVE_STRNCASECMP | |||||
# ifndef HAVE__STRNICMP | |||||
int strncasecmp(const char *str1, const char *str2, size_t n); | |||||
# else | |||||
# define strncasecmp _strnicmp | |||||
# endif | |||||
#endif /* !defined(HAVE_STRNCASECMP) */ | |||||
#ifndef HAVE_STRERROR | |||||
const char *strerror(int err); | |||||
#endif /* !defined(HAVE_STRERROR) */ | |||||
#ifndef HAVE_STRCASECMP | |||||
# ifndef HAVE__STRICMP | |||||
int strcasecmp(const char *str1, const char *str2); | |||||
# else | |||||
# define strcasecmp _stricmp | |||||
# endif | |||||
#endif /* !defined(HAVE_STRCASECMP) */ | |||||
#ifndef HAVE_USLEEP | |||||
int usleep (unsigned int useconds); | |||||
#endif /* !defined(HAVE_USLEEP) */ | |||||
#ifdef __i386__ | |||||
static inline void *memcpy_unaligned( void *dst, const void *src, size_t size ) | |||||
{ | |||||
return memcpy( dst, src, size ); | |||||
} | |||||
#else | |||||
extern void *memcpy_unaligned( void *dst, const void *src, size_t size ); | |||||
#endif /* __i386__ */ | |||||
extern int mkstemps(char *template, int suffix_len); | |||||
/* Process creation flags */ | |||||
#ifndef _P_WAIT | |||||
# define _P_WAIT 0 | |||||
# define _P_NOWAIT 1 | |||||
# define _P_OVERLAY 2 | |||||
# define _P_NOWAITO 3 | |||||
# define _P_DETACH 4 | |||||
#endif | |||||
#ifndef HAVE_SPAWNVP | |||||
extern int spawnvp(int mode, const char *cmdname, const char * const argv[]); | |||||
#endif | |||||
/* Interlocked functions */ | |||||
#if defined(__i386__) && defined(__GNUC__) | |||||
extern inline int interlocked_cmpxchg( int *dest, int xchg, int compare ); | |||||
extern inline void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare ); | |||||
extern __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare ); | |||||
extern inline int interlocked_xchg( int *dest, int val ); | |||||
extern inline void *interlocked_xchg_ptr( void **dest, void *val ); | |||||
extern inline int interlocked_xchg_add( int *dest, int incr ); | |||||
extern inline int interlocked_cmpxchg( int *dest, int xchg, int compare ) | |||||
{ | |||||
int ret; | |||||
__asm__ __volatile__( "lock; cmpxchgl %2,(%1)" | |||||
: "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" ); | |||||
return ret; | |||||
} | |||||
extern inline void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare ) | |||||
{ | |||||
void *ret; | |||||
__asm__ __volatile__( "lock; cmpxchgl %2,(%1)" | |||||
: "=a" (ret) : "r" (dest), "r" (xchg), "0" (compare) : "memory" ); | |||||
return ret; | |||||
} | |||||
extern inline int interlocked_xchg( int *dest, int val ) | |||||
{ | |||||
int ret; | |||||
__asm__ __volatile__( "lock; xchgl %0,(%1)" | |||||
: "=r" (ret) : "r" (dest), "0" (val) : "memory" ); | |||||
return ret; | |||||
} | |||||
extern inline void *interlocked_xchg_ptr( void **dest, void *val ) | |||||
{ | |||||
void *ret; | |||||
__asm__ __volatile__( "lock; xchgl %0,(%1)" | |||||
: "=r" (ret) : "r" (dest), "0" (val) : "memory" ); | |||||
return ret; | |||||
} | |||||
extern inline int interlocked_xchg_add( int *dest, int incr ) | |||||
{ | |||||
int ret; | |||||
__asm__ __volatile__( "lock; xaddl %0,(%1)" | |||||
: "=r" (ret) : "r" (dest), "0" (incr) : "memory" ); | |||||
return ret; | |||||
} | |||||
#else /* __i386___ && __GNUC__ */ | |||||
extern int interlocked_cmpxchg( int *dest, int xchg, int compare ); | |||||
extern void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare ); | |||||
extern __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare ); | |||||
extern int interlocked_xchg( int *dest, int val ); | |||||
extern void *interlocked_xchg_ptr( void **dest, void *val ); | |||||
extern int interlocked_xchg_add( int *dest, int incr ); | |||||
#endif /* __i386___ && __GNUC__ */ | |||||
#else /* NO_LIBWINE_PORT */ | |||||
#define __WINE_NOT_PORTABLE(func) func##_is_not_portable func##_is_not_portable | |||||
#define ffs __WINE_NOT_PORTABLE(ffs) | |||||
#define fstatvfs __WINE_NOT_PORTABLE(fstatvfs) | |||||
#define futimes __WINE_NOT_PORTABLE(futimes) | |||||
#define getopt_long __WINE_NOT_PORTABLE(getopt_long) | |||||
#define getopt_long_only __WINE_NOT_PORTABLE(getopt_long_only) | |||||
#define getpagesize __WINE_NOT_PORTABLE(getpagesize) | |||||
#define interlocked_cmpxchg __WINE_NOT_PORTABLE(interlocked_cmpxchg) | |||||
#define interlocked_cmpxchg_ptr __WINE_NOT_PORTABLE(interlocked_cmpxchg_ptr) | |||||
#define interlocked_xchg __WINE_NOT_PORTABLE(interlocked_xchg) | |||||
#define interlocked_xchg_ptr __WINE_NOT_PORTABLE(interlocked_xchg_ptr) | |||||
#define interlocked_xchg_add __WINE_NOT_PORTABLE(interlocked_xchg_add) | |||||
#define lstat __WINE_NOT_PORTABLE(lstat) | |||||
#define memcpy_unaligned __WINE_NOT_PORTABLE(memcpy_unaligned) | |||||
#undef memmove | |||||
#define memmove __WINE_NOT_PORTABLE(memmove) | |||||
#define pread __WINE_NOT_PORTABLE(pread) | |||||
#define pwrite __WINE_NOT_PORTABLE(pwrite) | |||||
#define spawnvp __WINE_NOT_PORTABLE(spawnvp) | |||||
#define statvfs __WINE_NOT_PORTABLE(statvfs) | |||||
#define strcasecmp __WINE_NOT_PORTABLE(strcasecmp) | |||||
#define strerror __WINE_NOT_PORTABLE(strerror) | |||||
#define strncasecmp __WINE_NOT_PORTABLE(strncasecmp) | |||||
#define usleep __WINE_NOT_PORTABLE(usleep) | |||||
#endif /* NO_LIBWINE_PORT */ | |||||
#endif /* !defined(__WINE_WINE_PORT_H) */ |
@@ -506,7 +506,7 @@ static GUID const CLSID_WineASIO = { | |||||
static struct regsvr_coclass const coclass_list[] = { | static struct regsvr_coclass const coclass_list[] = { | ||||
{ &CLSID_WineASIO, | { &CLSID_WineASIO, | ||||
"Wine ASIO Object", | |||||
"WineASIO Object", | |||||
NULL, | NULL, | ||||
"wineasio.dll", | "wineasio.dll", | ||||
"Apartment" | "Apartment" | ||||
@@ -527,11 +527,11 @@ static struct regsvr_interface const interface_list[] = { | |||||
*/ | */ | ||||
static HRESULT register_driver(void) | static HRESULT register_driver(void) | ||||
{ | { | ||||
LPCSTR asio_key = "Software\\ASIO\\Wine ASIO"; | |||||
LPCSTR asio_key = "Software\\ASIO\\WineASIO"; | |||||
LPCSTR clsid = "CLSID"; | LPCSTR clsid = "CLSID"; | ||||
LPCSTR wine_clsid = "{48D0C522-BFCC-45CC-8B84-17F25F33E6E8}"; | LPCSTR wine_clsid = "{48D0C522-BFCC-45CC-8B84-17F25F33E6E8}"; | ||||
LPCSTR desc = "Description"; | LPCSTR desc = "Description"; | ||||
LPCSTR wine_desc = "Wine ASIO Driver"; | |||||
LPCSTR wine_desc = "WineASIO Driver"; | |||||
HKEY key; | HKEY key; | ||||
LONG rc; | LONG rc; | ||||
@@ -577,7 +577,7 @@ HRESULT WINAPI DllRegisterServer(void) | |||||
*/ | */ | ||||
static HRESULT unregister_driver(void) | static HRESULT unregister_driver(void) | ||||
{ | { | ||||
LPCSTR asio_key = "Software\\ASIO\\Wine ASIO"; | |||||
LPCSTR asio_key = "Software\\ASIO\\WineASIO"; | |||||
/* FIXME */ | /* FIXME */ | ||||
return recursive_delete_keyA(HKEY_LOCAL_MACHINE, asio_key); | return recursive_delete_keyA(HKEY_LOCAL_MACHINE, asio_key); | ||||
@@ -1,33 +0,0 @@ | |||||
/* | |||||
* Copyright (C) 2010 Peter L Jones | |||||
* | |||||
* This library 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 library 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 St, Fifth Floor, Boston, MA 02110-1301, USA | |||||
*/ | |||||
static const char* ENVVAR_INPUTS = "_INPUTS"; | |||||
static const char* ENVVAR_OUTPUTS = "_OUTPUTS"; | |||||
static const char* ENVVAR_INPORTNAMEPREFIX = "INPORTNAME"; | |||||
static const char* ENVVAR_OUTPORTNAMEPREFIX = "OUTPORTNAME"; | |||||
static const char* ENVVAR_INMAP = "_INPORT"; | |||||
static const char* ENVVAR_OUTMAP = "_OUTPORT"; | |||||
static const char* ENVVAR_AUTOCONNECT = "_AUTOCONNECT"; | |||||
static const char* DEFAULT_PREFIX = "ASIO"; | |||||
static const char* DEFAULT_INPORT = "input_"; | |||||
static const char* DEFAULT_OUTPORT = "output_"; | |||||
static const int DEFAULT_NUMINPUTS = 2; | |||||
static const int DEFAULT_NUMOUTPUTS = 2; | |||||
static const int DEFAULT_AUTOCONNECT = -1; | |||||
static const char* USERCFG = ".wineasiocfg"; | |||||
static const char* SITECFG = "/etc/default/wineasiocfg"; |