Merge branch 'master' of git://github.com/slavapestov/factor
commit
08f65189d3
|
@ -60,6 +60,10 @@ $nl
|
|||
}
|
||||
"Note the parse time evaluation with " { $link POSTPONE: << } "." } ;
|
||||
|
||||
HELP: deploy-library
|
||||
{ $values { "name" string } }
|
||||
{ $description "Specifies that the logical library named " { $snippet "name" } " should be included during " { $link "tools.deploy" } ". " { $snippet "name" } " must be the name of a library previously loaded with " { $link add-library } "." } ;
|
||||
|
||||
HELP: remove-library
|
||||
{ $values { "name" string } }
|
||||
{ $description "Unloads a library and removes it from the internal list of libraries. The " { $snippet "name" } " parameter should be a name that was previously passed to " { $link add-library } ". If no library with that name exists, this word does nothing." } ;
|
||||
|
@ -72,4 +76,9 @@ ARTICLE: "loading-libs" "Loading native libraries"
|
|||
}
|
||||
"Once a library has been defined, you can try loading it to see if the path name is correct:"
|
||||
{ $subsections load-library }
|
||||
"If the compiler cannot load a library, or cannot resolve a symbol in a library, a linkage error is reported using the compiler error mechanism (see " { $link "compiler-errors" } "). Once you install the right library, reload the source file containing the " { $link add-library } " form to force the compiler to try loading the library again." ;
|
||||
"If the compiler cannot load a library, or cannot resolve a symbol in a library, a linkage error is reported using the compiler error mechanism (see " { $link "compiler-errors" } "). Once you install the right library, reload the source file containing the " { $link add-library } " form to force the compiler to try loading the library again."
|
||||
$nl
|
||||
"Libraries that do not come standard with the operating system need to be included with deployed applications that use them. A word is provided to instruct " { $link "tools.deploy" } " that a library must be so deployed:"
|
||||
{ $subsections
|
||||
deploy-library
|
||||
} ;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
! Copyright (C) 2009 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors alien alien.strings assocs io.backend
|
||||
kernel namespaces destructors ;
|
||||
kernel namespaces destructors sequences system io.pathnames ;
|
||||
IN: alien.libraries
|
||||
|
||||
: dlopen ( path -- dll ) native-string>alien (dlopen) ;
|
||||
|
@ -9,11 +9,15 @@ IN: alien.libraries
|
|||
: dlsym ( name dll -- alien ) [ string>symbol ] dip (dlsym) ;
|
||||
|
||||
SYMBOL: libraries
|
||||
SYMBOL: deploy-libraries
|
||||
|
||||
libraries [ H{ } clone ] initialize
|
||||
deploy-libraries [ V{ } clone ] initialize
|
||||
|
||||
TUPLE: library path abi dll ;
|
||||
|
||||
ERROR: no-library name ;
|
||||
|
||||
: library ( name -- library ) libraries get at ;
|
||||
|
||||
: <library> ( path abi -- library )
|
||||
|
@ -31,4 +35,20 @@ M: library dispose dll>> [ dispose ] when* ;
|
|||
|
||||
: add-library ( name path abi -- )
|
||||
[ 2drop remove-library ]
|
||||
[ <library> swap libraries get set-at ] 3bi ;
|
||||
[ <library> swap libraries get set-at ] 3bi ;
|
||||
|
||||
: deploy-library ( name -- )
|
||||
dup libraries get key?
|
||||
[ deploy-libraries get 2dup member? [ 2drop ] [ push ] if ]
|
||||
[ no-library ] if ;
|
||||
|
||||
<PRIVATE
|
||||
HOOK: >deployed-library-path os ( path -- path' )
|
||||
|
||||
M: windows >deployed-library-path
|
||||
file-name ;
|
||||
M: unix >deployed-library-path
|
||||
file-name "$ORIGIN" prepend-path ;
|
||||
M: macosx >deployed-library-path
|
||||
file-name "@executable_path/../Frameworks" prepend-path ;
|
||||
PRIVATE>
|
||||
|
|
|
@ -30,7 +30,7 @@ IN: globs.tests
|
|||
[ t ] [ "fo\\*" glob-pattern? ] unit-test
|
||||
[ t ] [ "fo{o,bro}" glob-pattern? ] unit-test
|
||||
|
||||
"foo" "bar" append-path 1array
|
||||
{ "foo" "bar" } path-separator join 1array
|
||||
[ { "foo" "bar" "ba?" } path-separator join glob-parent-directory ] unit-test
|
||||
|
||||
[ "foo" ]
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
! Copyright (C) 2007, 2009 Slava Pestov, Daniel Ehrenberg.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: sequences io.pathnames kernel regexp.combinators
|
||||
strings unicode.case peg.ebnf regexp arrays ;
|
||||
strings splitting system unicode.case peg.ebnf regexp arrays ;
|
||||
IN: globs
|
||||
|
||||
: not-path-separator ( -- sep )
|
||||
"[^" path-separator "]" 3append <regexp> ; foldable
|
||||
os windows? R! [^/\\]! R! [^/]! ? ; foldable
|
||||
|
||||
EBNF: <glob>
|
||||
|
||||
|
@ -48,5 +48,5 @@ Main = Concatenation End
|
|||
[ "\\*?[{" member? ] any? ;
|
||||
|
||||
: glob-parent-directory ( glob -- parent-directory )
|
||||
path-components dup [ glob-pattern? ] find drop head
|
||||
path-separator split harvest dup [ glob-pattern? ] find drop head
|
||||
path-separator join ;
|
||||
|
|
|
@ -6,20 +6,25 @@ ARTICLE: "math.blas.config" "Configuring the BLAS interface"
|
|||
{ $subsections
|
||||
blas-library
|
||||
blas-fortran-abi
|
||||
deploy-blas?
|
||||
}
|
||||
"The interface attempts to set default values based on the ones encountered on the Factor project's build machines. If these settings don't work with your system's BLAS, or you wish to use a commercial BLAS, you may change the global values of those variables in your " { $link "factor-rc" } ". For example, to use AMD's ACML library on Windows with " { $snippet "math.blas" } ", your " { $snippet "factor-rc" } " would look like this:"
|
||||
{ $code """
|
||||
USING: math.blas.config namespaces ;
|
||||
"X:\\path\\to\\acml.dll" blas-library set-global
|
||||
intel-windows-abi blas-fortran-abi set-global
|
||||
t deploy-blas? set-global
|
||||
""" }
|
||||
"To take effect, the " { $snippet "blas-library" } " and " { $snippet "blas-fortran-abi" } " variables must be set before any other " { $snippet "math.blas" } " vocabularies are loaded."
|
||||
;
|
||||
|
||||
HELP: blas-library
|
||||
{ $description "The name of the shared library containing the BLAS interface to load. The value of this variable must be a valid shared library name that can be passed to " { $link add-fortran-library } ". To take effect, this variable must be set before any other " { $snippet "math.blas" } " vocabularies are loaded. See " { $link "math.blas.config" } " for details and examples." } ;
|
||||
{ $var-description "The name of the shared library containing the BLAS interface to load. The value of this variable must be a valid shared library name that can be passed to " { $link add-fortran-library } ". To take effect, this variable must be set before any other " { $snippet "math.blas" } " vocabularies are loaded. See " { $link "math.blas.config" } " for details and examples." } ;
|
||||
|
||||
HELP: blas-fortran-abi
|
||||
{ $description "The Fortran ABI used by the BLAS interface specified in the " { $link blas-library } " variable. The value of " { $snippet "blas-fortran-abi" } " must be one of the " { $link "alien.fortran-abis" } " that can be passed to " { $link add-fortran-library } ". To take effect, this variable must be set before any other " { $snippet "math.blas" } " vocabularies are loaded. See " { $link "math.blas.config" } " for details and examples." } ;
|
||||
{ $var-description "The Fortran ABI used by the BLAS interface specified in the " { $link blas-library } " variable. The value of " { $snippet "blas-fortran-abi" } " must be one of the " { $link "alien.fortran-abis" } " that can be passed to " { $link add-fortran-library } ". To take effect, this variable must be set before any other " { $snippet "math.blas" } " vocabularies are loaded. See " { $link "math.blas.config" } " for details and examples." } ;
|
||||
|
||||
HELP: deploy-blas?
|
||||
{ $var-description "If set to a true value, the BLAS library will be configured to deploy with applications that use it. To take effect, this variable must be set before any other " { $snippet "math.blas" } " vocabularies are loaded. See " { $link "math.blas.config" } " for details and examples." } ;
|
||||
|
||||
ABOUT: "math.blas.config"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
USING: alien.fortran combinators kernel namespaces system ;
|
||||
IN: math.blas.config
|
||||
|
||||
SYMBOLS: blas-library blas-fortran-abi ;
|
||||
SYMBOLS: blas-library blas-fortran-abi deploy-blas? ;
|
||||
|
||||
blas-library [
|
||||
{
|
||||
|
@ -21,3 +21,5 @@ blas-fortran-abi [
|
|||
[ f2c-abi ]
|
||||
} cond
|
||||
] initialize
|
||||
|
||||
deploy-blas? [ os macosx? not ] initialize
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
USING: alien.fortran kernel math.blas.config namespaces ;
|
||||
FROM: alien.libraries => deploy-library ;
|
||||
IN: math.blas.ffi
|
||||
|
||||
<<
|
||||
"blas" blas-library blas-fortran-abi [ get ] bi@
|
||||
add-fortran-library
|
||||
|
||||
deploy-blas? get [ "blas" deploy-library ] when
|
||||
>>
|
||||
|
||||
LIBRARY: blas
|
||||
|
|
|
@ -8,14 +8,27 @@ io.streams.c io.files io.files.temp io.pathnames io.directories
|
|||
io.directories.hierarchy io.backend quotations io.launcher
|
||||
tools.deploy.config tools.deploy.config.editor bootstrap.image
|
||||
io.encodings.utf8 destructors accessors hashtables
|
||||
vocabs.metadata.resources ;
|
||||
tools.deploy.libraries vocabs.metadata.resources ;
|
||||
IN: tools.deploy.backend
|
||||
|
||||
: copy-vm ( executable bundle-name -- vm )
|
||||
prepend-path vm over copy-file ;
|
||||
|
||||
TUPLE: vocab-manifest vocabs libraries ;
|
||||
|
||||
: copy-resources ( manifest name dir -- )
|
||||
append-path swap [ copy-vocab-resources ] with each ;
|
||||
append-path swap vocabs>> [ copy-vocab-resources ] with each ;
|
||||
|
||||
ERROR: cant-deploy-library-file library ;
|
||||
<PRIVATE
|
||||
: copy-library ( dir library -- )
|
||||
dup find-library-file
|
||||
[ nip swap over file-name append-path copy-file ]
|
||||
[ cant-deploy-library-file ] if* ;
|
||||
PRIVATE>
|
||||
|
||||
: copy-libraries ( manifest name dir -- )
|
||||
append-path swap libraries>> [ copy-library ] with each ;
|
||||
|
||||
: image-name ( vocab bundle-name -- str )
|
||||
prepend-path ".image" append ;
|
||||
|
@ -99,10 +112,16 @@ DEFER: ?make-staging-image
|
|||
] { } make
|
||||
] bind ;
|
||||
|
||||
: parse-vocab-manifest-file ( path -- vocab-manifest )
|
||||
utf8 file-lines
|
||||
dup first "VOCABS:" =
|
||||
[ { "LIBRARIES:" } split1 vocab-manifest boa ]
|
||||
[ "invalid vocab manifest!" throw ] if ;
|
||||
|
||||
: make-deploy-image ( vm image vocab config -- manifest )
|
||||
make-boot-image
|
||||
over "vocab-manifest-" prepend temp-file
|
||||
[ swap deploy-command-line run-factor ]
|
||||
[ utf8 file-lines ] bi ;
|
||||
[ parse-vocab-manifest-file ] bi ;
|
||||
|
||||
HOOK: deploy* os ( vocab -- )
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
! (c)2010 Joe Groff bsd license
|
||||
USING: alien.libraries io.pathnames io.pathnames.private kernel
|
||||
system vocabs.loader ;
|
||||
IN: tools.deploy.libraries
|
||||
|
||||
HOOK: find-library-file os ( file -- path )
|
||||
|
||||
os windows?
|
||||
"tools.deploy.libraries.windows"
|
||||
"tools.deploy.libraries.unix" ? require
|
||||
|
|
@ -0,0 +1 @@
|
|||
unportable
|
|
@ -0,0 +1,16 @@
|
|||
! (c)2010 Joe Groff bsd license
|
||||
USING: io.files io.pathnames io.pathnames.private kernel
|
||||
sequences system tools.deploy.libraries ;
|
||||
IN: tools.deploy.libraries.unix
|
||||
|
||||
! stupid hack. better ways to find the library name would be open the library,
|
||||
! note a symbol address found in the library, then call dladdr (or use
|
||||
: ?exists ( path -- path/f )
|
||||
dup exists? [ drop f ] unless ; inline
|
||||
|
||||
M: unix find-library-file
|
||||
dup absolute-path? [ ?exists ] [
|
||||
{ "/lib" "/usr/lib" "/usr/local/lib" "/opt/local/lib" "resource:" }
|
||||
[ prepend-path ?exists ] with map-find drop
|
||||
] if ;
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
! (c)2010 Joe Groff bsd license
|
||||
USING: alien.strings byte-arrays io.encodings.utf16n kernel
|
||||
specialized-arrays system tools.deploy.libraries windows.kernel32
|
||||
windows.types ;
|
||||
FROM: alien.c-types => ushort ;
|
||||
SPECIALIZED-ARRAY: ushort
|
||||
IN: tools.deploy.libraries.windows
|
||||
|
||||
M: windows find-library-file
|
||||
f DONT_RESOLVE_DLL_REFERENCES LoadLibraryEx [
|
||||
[
|
||||
32768 (ushort-array) [ 32768 GetModuleFileName drop ] keep
|
||||
utf16n alien>string
|
||||
] [ FreeLibrary drop ] bi
|
||||
] [ f ] if* ;
|
||||
|
|
@ -81,7 +81,9 @@ M: macosx deploy* ( vocab -- )
|
|||
[ bundle-name create-app-dir ] keep
|
||||
[ bundle-name deploy.app-image ] keep
|
||||
namespace make-deploy-image
|
||||
bundle-name "Contents/Resources" copy-resources
|
||||
bundle-name
|
||||
[ "Contents/Resources" copy-resources ]
|
||||
[ "Contents/Frameworks" copy-libraries ] 2bi
|
||||
bundle-name show-in-finder
|
||||
] bind
|
||||
] with-directory ;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
! Copyright (C) 2007, 2010 Slava Pestov.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: arrays accessors io.backend io.encodings.utf8 io.files
|
||||
USING: arrays alien.libraries accessors io.backend io.encodings.utf8 io.files
|
||||
io.streams.c init fry namespaces math make assocs kernel parser
|
||||
parser.notes lexer strings.parser vocabs sequences sequences.deep
|
||||
sequences.private words memory kernel.private continuations io
|
||||
|
@ -19,6 +19,7 @@ QUALIFIED: layouts
|
|||
QUALIFIED: source-files
|
||||
QUALIFIED: source-files.errors
|
||||
QUALIFIED: vocabs
|
||||
FROM: alien.libraries.private => >deployed-library-path ;
|
||||
IN: tools.deploy.shaker
|
||||
|
||||
! This file is some hairy shit.
|
||||
|
@ -505,11 +506,28 @@ SYMBOL: deploy-vocab
|
|||
|
||||
: write-vocab-manifest ( vocab-manifest-out -- )
|
||||
"Writing vocabulary manifest to " write dup print flush
|
||||
vocabs swap utf8 set-file-lines ;
|
||||
vocabs "VOCABS:" prefix
|
||||
deploy-libraries get [ libraries get at path>> ] map prune "LIBRARIES:" prefix append
|
||||
swap utf8 set-file-lines ;
|
||||
|
||||
: prepare-deploy-libraries ( -- )
|
||||
"Preparing deployed libraries" show
|
||||
deploy-libraries get [
|
||||
libraries get [
|
||||
[ path>> >deployed-library-path ] [ abi>> ] bi <library>
|
||||
] change-at
|
||||
] each
|
||||
|
||||
[
|
||||
"deploy-libraries" "alien.libraries" lookup forget
|
||||
"deploy-library" "alien.libraries" lookup forget
|
||||
">deployed-library-path" "alien.libraries.private" lookup forget
|
||||
] with-compilation-unit ;
|
||||
|
||||
: strip ( vocab-manifest-out -- )
|
||||
[ write-vocab-manifest ] when*
|
||||
startup-stripper
|
||||
prepare-deploy-libraries
|
||||
strip-libc
|
||||
strip-destructors
|
||||
strip-call
|
||||
|
|
|
@ -19,7 +19,7 @@ M: unix deploy* ( vocab -- )
|
|||
[ bundle-name create-app-dir ] keep
|
||||
[ bundle-name image-name ] keep
|
||||
namespace make-deploy-image
|
||||
bundle-name "" copy-resources
|
||||
bundle-name "" [ copy-resources ] [ copy-libraries ] 3bi
|
||||
bundle-name normalize-path [ "Binary deployed to " % % "." % ] "" make print
|
||||
] bind
|
||||
] with-directory ;
|
||||
|
|
|
@ -36,7 +36,7 @@ M: winnt deploy*
|
|||
[ drop embed-ico ]
|
||||
[ image-name ]
|
||||
[ drop namespace make-deploy-image ]
|
||||
[ nip "" copy-resources ]
|
||||
[ nip "" [ copy-resources ] [ copy-libraries ] 3bi ]
|
||||
[ nip open-in-explorer ]
|
||||
} 2cleave
|
||||
] bind
|
||||
|
|
|
@ -14,6 +14,5 @@ IN: vocabs.metadata.resources.tests
|
|||
"resource-dir/bas"
|
||||
"resource-dir/bas/zang"
|
||||
"resource-dir/bas/zim"
|
||||
"resource-dir/buh"
|
||||
"resource-dir/foo"
|
||||
} ] [ "vocabs.metadata.resources.test.3" vocab-resource-files natural-sort ] unit-test
|
||||
|
|
|
@ -90,6 +90,8 @@ CONSTANT: FILE_ACTION_MODIFIED 3
|
|||
CONSTANT: FILE_ACTION_RENAMED_OLD_NAME 4
|
||||
CONSTANT: FILE_ACTION_RENAMED_NEW_NAME 5
|
||||
|
||||
CONSTANT: DONT_RESOLVE_DLL_REFERENCES 1
|
||||
|
||||
STRUCT: FILE_NOTIFY_INFORMATION
|
||||
{ NextEntryOffset DWORD }
|
||||
{ Action DWORD }
|
||||
|
@ -1167,7 +1169,7 @@ FUNCTION: BOOL FreeConsole ( ) ;
|
|||
! FUNCTION: FreeEnvironmentStringsA
|
||||
FUNCTION: BOOL FreeEnvironmentStringsW ( LPTCH lpszEnvironmentBlock ) ;
|
||||
ALIAS: FreeEnvironmentStrings FreeEnvironmentStringsW
|
||||
! FUNCTION: FreeLibrary
|
||||
FUNCTION: BOOL FreeLibrary ( HMODULE hModule ) ;
|
||||
! FUNCTION: FreeLibraryAndExitThread
|
||||
! FUNCTION: FreeResource
|
||||
! FUNCTION: FreeUserPhysicalPages
|
||||
|
@ -1314,7 +1316,8 @@ FUNCTION: DWORD GetLogicalDrives ( ) ;
|
|||
! FUNCTION: GetLongPathNameW
|
||||
! FUNCTION: GetMailslotInfo
|
||||
! FUNCTION: GetModuleFileNameA
|
||||
! FUNCTION: GetModuleFileNameW
|
||||
FUNCTION: DWORD GetModuleFileNameW ( HMODULE hModule, LPTSTR lpFilename, DWORD nSize ) ;
|
||||
ALIAS: GetModuleFileName GetModuleFileNameW
|
||||
FUNCTION: HMODULE GetModuleHandleW ( LPCWSTR lpModuleName ) ;
|
||||
ALIAS: GetModuleHandle GetModuleHandleW
|
||||
! FUNCTION: GetModuleHandleExA
|
||||
|
|
|
@ -6,7 +6,7 @@ H{
|
|||
{ deploy-unicode? f }
|
||||
{ "stop-after-last-window?" t }
|
||||
{ deploy-io 3 }
|
||||
{ deploy-reflection 2 }
|
||||
{ deploy-reflection 1 }
|
||||
{ deploy-word-props? f }
|
||||
{ deploy-math? t }
|
||||
{ deploy-threads? t }
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
! Copyright (C) 2007, 2008, 2009 Alex Chapman, 2009 Diego Martinelli
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors ascii assocs biassocs combinators hashtables kernel lists literals math namespaces make multiline openal parser sequences splitting strings synth synth.buffers ;
|
||||
USING: accessors ascii assocs biassocs combinators hashtables kernel lists literals math namespaces make multiline openal openal.alut parser sequences splitting strings synth synth.buffers ;
|
||||
IN: morse
|
||||
|
||||
ERROR: no-morse-ch ch ;
|
||||
|
|
|
@ -19,6 +19,8 @@ IN: ogg
|
|||
{ [ os macosx? ] [ "libogg.0.dylib" ] }
|
||||
{ [ os unix? ] [ "libogg.so" ] }
|
||||
} cond "cdecl" add-library
|
||||
|
||||
"ogg" deploy-library
|
||||
>>
|
||||
|
||||
LIBRARY: ogg
|
||||
|
|
|
@ -20,6 +20,8 @@ IN: ogg.vorbis
|
|||
{ [ os macosx? ] [ "libvorbis.0.dylib" ] }
|
||||
{ [ os unix? ] [ "libvorbis.so" ] }
|
||||
} cond "cdecl" add-library
|
||||
|
||||
"vorbis" deploy-library
|
||||
>>
|
||||
|
||||
LIBRARY: vorbis
|
||||
|
|
|
@ -0,0 +1,103 @@
|
|||
! Copyright (C) 2007 Chris Double.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: kernel accessors arrays alien system combinators
|
||||
alien.syntax namespaces alien.c-types sequences vocabs.loader
|
||||
shuffle openal openal.alut.backend alien.libraries generalizations
|
||||
specialized-arrays alien.destructors ;
|
||||
FROM: alien.c-types => float short ;
|
||||
SPECIALIZED-ARRAY: uint
|
||||
IN: openal.alut
|
||||
|
||||
<< "alut" {
|
||||
{ [ os windows? ] [ "alut.dll" ] }
|
||||
{ [ os macosx? ] [
|
||||
"/System/Library/Frameworks/OpenAL.framework/OpenAL"
|
||||
] }
|
||||
{ [ os unix? ] [ "libalut.so" ] }
|
||||
} cond "cdecl" add-library >>
|
||||
|
||||
<< os macosx? [ "alut" deploy-library ] unless >>
|
||||
|
||||
LIBRARY: alut
|
||||
|
||||
CONSTANT: ALUT_API_MAJOR_VERSION 1
|
||||
CONSTANT: ALUT_API_MINOR_VERSION 1
|
||||
CONSTANT: ALUT_ERROR_NO_ERROR 0
|
||||
CONSTANT: ALUT_ERROR_OUT_OF_MEMORY HEX: 200
|
||||
CONSTANT: ALUT_ERROR_INVALID_ENUM HEX: 201
|
||||
CONSTANT: ALUT_ERROR_INVALID_VALUE HEX: 202
|
||||
CONSTANT: ALUT_ERROR_INVALID_OPERATION HEX: 203
|
||||
CONSTANT: ALUT_ERROR_NO_CURRENT_CONTEXT HEX: 204
|
||||
CONSTANT: ALUT_ERROR_AL_ERROR_ON_ENTRY HEX: 205
|
||||
CONSTANT: ALUT_ERROR_ALC_ERROR_ON_ENTRY HEX: 206
|
||||
CONSTANT: ALUT_ERROR_OPEN_DEVICE HEX: 207
|
||||
CONSTANT: ALUT_ERROR_CLOSE_DEVICE HEX: 208
|
||||
CONSTANT: ALUT_ERROR_CREATE_CONTEXT HEX: 209
|
||||
CONSTANT: ALUT_ERROR_MAKE_CONTEXT_CURRENT HEX: 20A
|
||||
CONSTANT: ALUT_ERROR_DESTRY_CONTEXT HEX: 20B
|
||||
CONSTANT: ALUT_ERROR_GEN_BUFFERS HEX: 20C
|
||||
CONSTANT: ALUT_ERROR_BUFFER_DATA HEX: 20D
|
||||
CONSTANT: ALUT_ERROR_IO_ERROR HEX: 20E
|
||||
CONSTANT: ALUT_ERROR_UNSUPPORTED_FILE_TYPE HEX: 20F
|
||||
CONSTANT: ALUT_ERROR_UNSUPPORTED_FILE_SUBTYPE HEX: 210
|
||||
CONSTANT: ALUT_ERROR_CORRUPT_OR_TRUNCATED_DATA HEX: 211
|
||||
CONSTANT: ALUT_WAVEFORM_SINE HEX: 100
|
||||
CONSTANT: ALUT_WAVEFORM_SQUARE HEX: 101
|
||||
CONSTANT: ALUT_WAVEFORM_SAWTOOTH HEX: 102
|
||||
CONSTANT: ALUT_WAVEFORM_WHITENOISE HEX: 103
|
||||
CONSTANT: ALUT_WAVEFORM_IMPULSE HEX: 104
|
||||
CONSTANT: ALUT_LOADER_BUFFER HEX: 300
|
||||
CONSTANT: ALUT_LOADER_MEMORY HEX: 301
|
||||
|
||||
FUNCTION: ALboolean alutInit ( int* argcp, char** argv ) ;
|
||||
FUNCTION: ALboolean alutInitWithoutContext ( int* argcp, char** argv ) ;
|
||||
FUNCTION: ALboolean alutExit ( ) ;
|
||||
FUNCTION: ALenum alutGetError ( ) ;
|
||||
FUNCTION: char* alutGetErrorString ( ALenum error ) ;
|
||||
FUNCTION: ALuint alutCreateBufferFromFile ( char* fileName ) ;
|
||||
FUNCTION: ALuint alutCreateBufferFromFileImage ( void* data, ALsizei length ) ;
|
||||
FUNCTION: ALuint alutCreateBufferHelloWorld ( ) ;
|
||||
FUNCTION: ALuint alutCreateBufferWaveform ( ALenum waveshape, ALfloat frequency, ALfloat phase, ALfloat duration ) ;
|
||||
FUNCTION: void* alutLoadMemoryFromFile ( char* fileName, ALenum* format, ALsizei* size, ALfloat* frequency ) ;
|
||||
FUNCTION: void* alutLoadMemoryFromFileImage ( void* data, ALsizei length, ALenum* format, ALsizei* size, ALfloat* frequency ) ;
|
||||
FUNCTION: void* alutLoadMemoryHelloWorld ( ALenum* format, ALsizei* size, ALfloat* frequency ) ;
|
||||
FUNCTION: void* alutLoadMemoryWaveform ( ALenum waveshape, ALfloat frequency, ALfloat phase, ALfloat duration, ALenum* format, ALsizei* size, ALfloat* freq ) ;
|
||||
FUNCTION: char* alutGetMIMETypes ( ALenum loader ) ;
|
||||
FUNCTION: ALint alutGetMajorVersion ( ) ;
|
||||
FUNCTION: ALint alutGetMinorVersion ( ) ;
|
||||
FUNCTION: ALboolean alutSleep ( ALfloat duration ) ;
|
||||
|
||||
FUNCTION: void alutUnloadWAV ( ALenum format, void* data, ALsizei size, ALsizei frequency ) ;
|
||||
|
||||
SYMBOL: init
|
||||
|
||||
: init-openal ( -- )
|
||||
init get-global expired? [
|
||||
f f alutInit 0 = [ "Could not initialize OpenAL" throw ] when
|
||||
1337 <alien> init set-global
|
||||
] when ;
|
||||
|
||||
: exit-openal ( -- )
|
||||
init get-global expired? [
|
||||
alutExit 0 = [ "Could not close OpenAL" throw ] when
|
||||
f init set-global
|
||||
] unless ;
|
||||
|
||||
: create-buffer-from-file ( filename -- buffer )
|
||||
alutCreateBufferFromFile dup AL_NONE = [
|
||||
"create-buffer-from-file failed" throw
|
||||
] when ;
|
||||
|
||||
os macosx? "openal.alut.macosx" "openal.alut.other" ? require
|
||||
|
||||
: create-buffer-from-wav ( filename -- buffer )
|
||||
gen-buffer dup rot load-wav-file
|
||||
[ alBufferData ] 4 nkeep alutUnloadWAV ;
|
||||
|
||||
: check-error ( -- )
|
||||
alGetError dup ALUT_ERROR_NO_ERROR = [
|
||||
drop
|
||||
] [
|
||||
alGetString throw
|
||||
] if ;
|
||||
|
2
extra/openal/backend/backend.factor → extra/openal/alut/backend/backend.factor
Normal file → Executable file
2
extra/openal/backend/backend.factor → extra/openal/alut/backend/backend.factor
Normal file → Executable file
|
@ -1,4 +1,4 @@
|
|||
USING: namespaces system ;
|
||||
IN: openal.backend
|
||||
IN: openal.alut.backend
|
||||
|
||||
HOOK: load-wav-file os ( filename -- format data size frequency )
|
4
extra/openal/macosx/macosx.factor → extra/openal/alut/macosx/macosx.factor
Normal file → Executable file
4
extra/openal/macosx/macosx.factor → extra/openal/alut/macosx/macosx.factor
Normal file → Executable file
|
@ -1,8 +1,8 @@
|
|||
! Copyright (C) 2007 Chris Double.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: alien.c-types kernel alien alien.syntax shuffle
|
||||
openal openal.backend namespaces system generalizations ;
|
||||
IN: openal.macosx
|
||||
openal openal.alut.backend namespaces system generalizations ;
|
||||
IN: openal.alut.macosx
|
||||
|
||||
LIBRARY: alut
|
||||
|
|
@ -0,0 +1 @@
|
|||
unportable
|
4
extra/openal/other/other.factor → extra/openal/alut/other/other.factor
Normal file → Executable file
4
extra/openal/other/other.factor → extra/openal/alut/other/other.factor
Normal file → Executable file
|
@ -1,8 +1,8 @@
|
|||
! Copyright (C) 2007 Chris Double.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: alien.c-types alien.syntax combinators generalizations
|
||||
kernel openal openal.backend ;
|
||||
IN: openal.other
|
||||
kernel openal openal.alut.backend ;
|
||||
IN: openal.alut.other
|
||||
|
||||
LIBRARY: alut
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
! Copyright (C) 2007 Chris Double.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: calendar kernel openal sequences threads ;
|
||||
USING: calendar kernel openal openal.alut sequences threads ;
|
||||
IN: openal.example
|
||||
|
||||
: play-hello ( -- )
|
||||
|
|
|
@ -2,20 +2,12 @@
|
|||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: kernel accessors arrays alien system combinators
|
||||
alien.syntax namespaces alien.c-types sequences vocabs.loader
|
||||
shuffle openal.backend alien.libraries generalizations
|
||||
shuffle alien.libraries generalizations
|
||||
specialized-arrays alien.destructors ;
|
||||
FROM: alien.c-types => float short ;
|
||||
SPECIALIZED-ARRAY: uint
|
||||
IN: openal
|
||||
|
||||
<< "alut" {
|
||||
{ [ os windows? ] [ "alut.dll" ] }
|
||||
{ [ os macosx? ] [
|
||||
"/System/Library/Frameworks/OpenAL.framework/OpenAL"
|
||||
] }
|
||||
{ [ os unix? ] [ "libalut.so" ] }
|
||||
} cond "cdecl" add-library >>
|
||||
|
||||
<< "openal" {
|
||||
{ [ os windows? ] [ "OpenAL32.dll" ] }
|
||||
{ [ os macosx? ] [
|
||||
|
@ -24,6 +16,8 @@ IN: openal
|
|||
{ [ os unix? ] [ "libopenal.so" ] }
|
||||
} cond "cdecl" add-library >>
|
||||
|
||||
<< os macosx? [ "openal" deploy-library ] unless >>
|
||||
|
||||
LIBRARY: openal
|
||||
|
||||
TYPEDEF: char ALboolean
|
||||
|
@ -252,71 +246,6 @@ FUNCTION: void alcCaptureSamples ( ALCdevice* device, void* buf, ALCsizei samps
|
|||
DESTRUCTOR: alcCloseDevice*
|
||||
DESTRUCTOR: alcDestroyContext
|
||||
|
||||
LIBRARY: alut
|
||||
|
||||
CONSTANT: ALUT_API_MAJOR_VERSION 1
|
||||
CONSTANT: ALUT_API_MINOR_VERSION 1
|
||||
CONSTANT: ALUT_ERROR_NO_ERROR 0
|
||||
CONSTANT: ALUT_ERROR_OUT_OF_MEMORY HEX: 200
|
||||
CONSTANT: ALUT_ERROR_INVALID_ENUM HEX: 201
|
||||
CONSTANT: ALUT_ERROR_INVALID_VALUE HEX: 202
|
||||
CONSTANT: ALUT_ERROR_INVALID_OPERATION HEX: 203
|
||||
CONSTANT: ALUT_ERROR_NO_CURRENT_CONTEXT HEX: 204
|
||||
CONSTANT: ALUT_ERROR_AL_ERROR_ON_ENTRY HEX: 205
|
||||
CONSTANT: ALUT_ERROR_ALC_ERROR_ON_ENTRY HEX: 206
|
||||
CONSTANT: ALUT_ERROR_OPEN_DEVICE HEX: 207
|
||||
CONSTANT: ALUT_ERROR_CLOSE_DEVICE HEX: 208
|
||||
CONSTANT: ALUT_ERROR_CREATE_CONTEXT HEX: 209
|
||||
CONSTANT: ALUT_ERROR_MAKE_CONTEXT_CURRENT HEX: 20A
|
||||
CONSTANT: ALUT_ERROR_DESTRY_CONTEXT HEX: 20B
|
||||
CONSTANT: ALUT_ERROR_GEN_BUFFERS HEX: 20C
|
||||
CONSTANT: ALUT_ERROR_BUFFER_DATA HEX: 20D
|
||||
CONSTANT: ALUT_ERROR_IO_ERROR HEX: 20E
|
||||
CONSTANT: ALUT_ERROR_UNSUPPORTED_FILE_TYPE HEX: 20F
|
||||
CONSTANT: ALUT_ERROR_UNSUPPORTED_FILE_SUBTYPE HEX: 210
|
||||
CONSTANT: ALUT_ERROR_CORRUPT_OR_TRUNCATED_DATA HEX: 211
|
||||
CONSTANT: ALUT_WAVEFORM_SINE HEX: 100
|
||||
CONSTANT: ALUT_WAVEFORM_SQUARE HEX: 101
|
||||
CONSTANT: ALUT_WAVEFORM_SAWTOOTH HEX: 102
|
||||
CONSTANT: ALUT_WAVEFORM_WHITENOISE HEX: 103
|
||||
CONSTANT: ALUT_WAVEFORM_IMPULSE HEX: 104
|
||||
CONSTANT: ALUT_LOADER_BUFFER HEX: 300
|
||||
CONSTANT: ALUT_LOADER_MEMORY HEX: 301
|
||||
|
||||
FUNCTION: ALboolean alutInit ( int* argcp, char** argv ) ;
|
||||
FUNCTION: ALboolean alutInitWithoutContext ( int* argcp, char** argv ) ;
|
||||
FUNCTION: ALboolean alutExit ( ) ;
|
||||
FUNCTION: ALenum alutGetError ( ) ;
|
||||
FUNCTION: char* alutGetErrorString ( ALenum error ) ;
|
||||
FUNCTION: ALuint alutCreateBufferFromFile ( char* fileName ) ;
|
||||
FUNCTION: ALuint alutCreateBufferFromFileImage ( void* data, ALsizei length ) ;
|
||||
FUNCTION: ALuint alutCreateBufferHelloWorld ( ) ;
|
||||
FUNCTION: ALuint alutCreateBufferWaveform ( ALenum waveshape, ALfloat frequency, ALfloat phase, ALfloat duration ) ;
|
||||
FUNCTION: void* alutLoadMemoryFromFile ( char* fileName, ALenum* format, ALsizei* size, ALfloat* frequency ) ;
|
||||
FUNCTION: void* alutLoadMemoryFromFileImage ( void* data, ALsizei length, ALenum* format, ALsizei* size, ALfloat* frequency ) ;
|
||||
FUNCTION: void* alutLoadMemoryHelloWorld ( ALenum* format, ALsizei* size, ALfloat* frequency ) ;
|
||||
FUNCTION: void* alutLoadMemoryWaveform ( ALenum waveshape, ALfloat frequency, ALfloat phase, ALfloat duration, ALenum* format, ALsizei* size, ALfloat* freq ) ;
|
||||
FUNCTION: char* alutGetMIMETypes ( ALenum loader ) ;
|
||||
FUNCTION: ALint alutGetMajorVersion ( ) ;
|
||||
FUNCTION: ALint alutGetMinorVersion ( ) ;
|
||||
FUNCTION: ALboolean alutSleep ( ALfloat duration ) ;
|
||||
|
||||
FUNCTION: void alutUnloadWAV ( ALenum format, void* data, ALsizei size, ALsizei frequency ) ;
|
||||
|
||||
SYMBOL: init
|
||||
|
||||
: init-openal ( -- )
|
||||
init get-global expired? [
|
||||
f f alutInit 0 = [ "Could not initialize OpenAL" throw ] when
|
||||
1337 <alien> init set-global
|
||||
] when ;
|
||||
|
||||
: exit-openal ( -- )
|
||||
init get-global expired? [
|
||||
alutExit 0 = [ "Could not close OpenAL" throw ] when
|
||||
f init set-global
|
||||
] unless ;
|
||||
|
||||
: gen-sources ( size -- seq )
|
||||
dup <uint-array> [ alGenSources ] keep ;
|
||||
|
||||
|
@ -325,17 +254,6 @@ SYMBOL: init
|
|||
|
||||
: gen-buffer ( -- buffer ) 1 gen-buffers first ;
|
||||
|
||||
: create-buffer-from-file ( filename -- buffer )
|
||||
alutCreateBufferFromFile dup AL_NONE = [
|
||||
"create-buffer-from-file failed" throw
|
||||
] when ;
|
||||
|
||||
os macosx? "openal.macosx" "openal.other" ? require
|
||||
|
||||
: create-buffer-from-wav ( filename -- buffer )
|
||||
gen-buffer dup rot load-wav-file
|
||||
[ alBufferData ] 4 nkeep alutUnloadWAV ;
|
||||
|
||||
: queue-buffers ( source buffers -- )
|
||||
[ length ] [ >uint-array ] bi alSourceQueueBuffers ;
|
||||
|
||||
|
@ -358,12 +276,5 @@ os macosx? "openal.macosx" "openal.other" ? require
|
|||
|
||||
: source-stop ( source -- ) alSourceStop ;
|
||||
|
||||
: check-error ( -- )
|
||||
alGetError dup ALUT_ERROR_NO_ERROR = [
|
||||
drop
|
||||
] [
|
||||
alGetString throw
|
||||
] if ;
|
||||
|
||||
: source-playing? ( source -- bool )
|
||||
AL_SOURCE_STATE get-source-param AL_PLAYING = ;
|
||||
|
|
|
@ -18,6 +18,7 @@ USING:
|
|||
math
|
||||
math.order
|
||||
openal
|
||||
openal.alut
|
||||
opengl.gl
|
||||
sequences
|
||||
ui
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
! Copyright (C) 2008 Alex Chapman
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors arrays kernel namespaces make openal sequences
|
||||
USING: accessors arrays kernel namespaces make openal openal.alut sequences
|
||||
synth synth.buffers ;
|
||||
IN: synth.example
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
! Copyright (C) 2008 Alex Chapman
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors kernel locals math math.constants math.functions memoize openal synth.buffers sequences sequences.modified sequences.repeating ;
|
||||
USING: accessors kernel locals math math.constants math.functions memoize openal openal.alut synth.buffers sequences sequences.modified sequences.repeating ;
|
||||
IN: synth
|
||||
|
||||
MEMO: single-sine-wave ( samples/wave -- seq )
|
||||
|
|
Loading…
Reference in New Issue