From 2b05f90c7bd5ecc9edb8159c9775e5154c82d7a7 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sat, 13 Feb 2010 12:52:32 -0800 Subject: [PATCH 01/33] io.directories: add "directory-tree-files" and "with-directory-tree-files" words --- basis/io/directories/directories-docs.factor | 8 ++++++++ basis/io/directories/directories-tests.factor | 12 ++++++++++++ basis/io/directories/directories.factor | 17 ++++++++++++++--- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/basis/io/directories/directories-docs.factor b/basis/io/directories/directories-docs.factor index 4af5ee4592..a9dcea8a8f 100644 --- a/basis/io/directories/directories-docs.factor +++ b/basis/io/directories/directories-docs.factor @@ -46,10 +46,18 @@ HELP: directory-files { $values { "path" "a pathname string" } { "seq" "a sequence of filenames" } } { $description "Outputs the contents of a directory named by " { $snippet "path" } "." } ; +HELP: directory-tree-files +{ $values { "path" "a pathname string" } { "seq" "a sequence of filenames" } } +{ $description "Outputs a sequence of all non-directory files inside the directory named by " { $snippet "path" } " and its subdirectories." } ; + HELP: with-directory-files { $values { "path" "a pathname string" } { "quot" quotation } } { $description "Calls the quotation with the directory file names on the stack and with the directory set as the " { $link current-directory } ". Restores the current directory after the quotation is called." } ; +HELP: with-directory-tree-files +{ $values { "path" "a pathname string" } { "quot" quotation } } +{ $description "Calls the quotation with the recursive directory file names on the stack and with the directory set as the " { $link current-directory } ". Restores the current directory after the quotation is called." } ; + HELP: with-directory-entries { $values { "path" "a pathname string" } { "quot" quotation } } { $description "Calls the quotation with the directory entries on the stack and with the directory set as the " { $link current-directory } ". Restores the current directory after the quotation is called." } ; diff --git a/basis/io/directories/directories-tests.factor b/basis/io/directories/directories-tests.factor index b703421b45..92e35557e2 100644 --- a/basis/io/directories/directories-tests.factor +++ b/basis/io/directories/directories-tests.factor @@ -22,6 +22,18 @@ IN: io.directories.tests ] with-directory-files ] unit-test +[ { "classes/tuple/tuple.factor" } ] [ + "resource:core" [ + "." directory-tree-files [ "classes/tuple/tuple.factor" = ] filter + ] with-directory +] unit-test + +[ { "classes/tuple/tuple.factor" } ] [ + "resource:core" [ + [ "classes/tuple/tuple.factor" = ] filter + ] with-directory-tree-files +] unit-test + [ ] [ "blahblah" temp-file dup exists? [ delete-directory ] [ drop ] if ] unit-test [ ] [ "blahblah" temp-file make-directory ] unit-test [ t ] [ "blahblah" temp-file file-info directory? ] unit-test diff --git a/basis/io/directories/directories.factor b/basis/io/directories/directories.factor index 0524398304..3158f6ca41 100644 --- a/basis/io/directories/directories.factor +++ b/basis/io/directories/directories.factor @@ -1,8 +1,8 @@ ! Copyright (C) 2004, 2008 Slava Pestov, Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors combinators destructors io io.backend -io.encodings.binary io.files io.pathnames kernel namespaces -sequences system vocabs.loader fry ; +USING: accessors arrays combinators destructors io io.backend +io.encodings.binary io.files io.files.types io.pathnames +kernel namespaces sequences system vocabs.loader fry ; IN: io.directories : set-current-directory ( path -- ) @@ -41,12 +41,23 @@ HOOK: (directory-entries) os ( path -- seq ) : directory-files ( path -- seq ) directory-entries [ name>> ] map ; +: directory-tree-files ( path -- seq ) + dup directory-entries + [ + dup type>> +directory+ = + [ name>> [ append-path directory-tree-files ] [ [ prepend-path ] curry map ] bi ] + [ nip name>> 1array ] if + ] with map concat ; + : with-directory-entries ( path quot -- ) '[ "" directory-entries @ ] with-directory ; inline : with-directory-files ( path quot -- ) '[ "" directory-files @ ] with-directory ; inline +: with-directory-tree-files ( path quot -- ) + '[ "" directory-tree-files @ ] with-directory ; inline + ! Touching files HOOK: touch-file io-backend ( path -- ) From 72de727d0ec5319c28a00a24a2db245f354e0ae4 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sat, 13 Feb 2010 13:35:04 -0800 Subject: [PATCH 02/33] globs: * and ? should not match path-separator --- basis/globs/globs-tests.factor | 7 ++++++- basis/globs/globs.factor | 11 +++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/basis/globs/globs-tests.factor b/basis/globs/globs-tests.factor index bdc0623d54..eceb6bab7b 100644 --- a/basis/globs/globs-tests.factor +++ b/basis/globs/globs-tests.factor @@ -1,4 +1,4 @@ -USING: tools.test globs ; +USING: tools.test globs io.pathnames ; IN: globs.tests [ f ] [ "abd" "fdf" glob-matches? ] unit-test @@ -17,3 +17,8 @@ IN: globs.tests [ f ] [ "foo." "*.{xml,txt}" glob-matches? ] unit-test [ t ] [ "foo." "*.{,xml,txt}" glob-matches? ] unit-test [ t ] [ "foo.{" "*.{" glob-matches? ] unit-test + +[ f ] [ "foo" "bar" append-path "*" glob-matches? ] unit-test +[ t ] [ "foo" "bar" append-path "*" "*" append-path glob-matches? ] unit-test +[ f ] [ "foo" "bar" append-path "foo?bar" glob-matches? ] unit-test +[ t ] [ "foo" "bar" append-path "fo?" "bar" append-path glob-matches? ] unit-test diff --git a/basis/globs/globs.factor b/basis/globs/globs.factor index cac7fd9a2f..47c8fca528 100644 --- a/basis/globs/globs.factor +++ b/basis/globs/globs.factor @@ -1,9 +1,12 @@ ! Copyright (C) 2007, 2009 Slava Pestov, Daniel Ehrenberg. ! See http://factorcode.org/license.txt for BSD license. -USING: sequences kernel regexp.combinators strings unicode.case -peg.ebnf regexp arrays ; +USING: sequences io.pathnames kernel regexp.combinators +strings unicode.case peg.ebnf regexp arrays ; IN: globs +: not-path-separator ( -- sep ) + "[^" path-separator "]" 3append ; foldable + EBNF: Character = "\\" .:c => [[ c 1string ]] @@ -24,8 +27,8 @@ CharClass = "^"?:n Ranges:e => [[ e n [ ] when ]] AlternationBody = Concatenation:c "," AlternationBody:a => [[ a c prefix ]] | Concatenation => [[ 1array ]] -Element = "*" => [[ R/ .*/ ]] - | "?" => [[ R/ ./ ]] +Element = "*" => [[ not-path-separator ]] + | "?" => [[ not-path-separator ]] | "[" CharClass:c "]" => [[ c ]] | "{" AlternationBody:b "}" => [[ b ]] | Character From 1632fa64482c09be434bd1d086782b8e7d4f7a02 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sat, 13 Feb 2010 13:57:58 -0800 Subject: [PATCH 03/33] io.directories: directory-tree-files should include the directories too, not just their contents --- basis/io/directories/directories-docs.factor | 2 +- basis/io/directories/directories-tests.factor | 6 ++++++ basis/io/directories/directories.factor | 7 +++++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/basis/io/directories/directories-docs.factor b/basis/io/directories/directories-docs.factor index a9dcea8a8f..804a2f4a8d 100644 --- a/basis/io/directories/directories-docs.factor +++ b/basis/io/directories/directories-docs.factor @@ -48,7 +48,7 @@ HELP: directory-files HELP: directory-tree-files { $values { "path" "a pathname string" } { "seq" "a sequence of filenames" } } -{ $description "Outputs a sequence of all non-directory files inside the directory named by " { $snippet "path" } " and its subdirectories." } ; +{ $description "Outputs a sequence of all files and subdirectories inside the directory named by " { $snippet "path" } " or recursively inside its subdirectories." } ; HELP: with-directory-files { $values { "path" "a pathname string" } { "quot" quotation } } diff --git a/basis/io/directories/directories-tests.factor b/basis/io/directories/directories-tests.factor index 92e35557e2..742a927b4b 100644 --- a/basis/io/directories/directories-tests.factor +++ b/basis/io/directories/directories-tests.factor @@ -28,6 +28,12 @@ IN: io.directories.tests ] with-directory ] unit-test +[ { "classes/tuple" } ] [ + "resource:core" [ + "." directory-tree-files [ "classes/tuple" = ] filter + ] with-directory +] unit-test + [ { "classes/tuple/tuple.factor" } ] [ "resource:core" [ [ "classes/tuple/tuple.factor" = ] filter diff --git a/basis/io/directories/directories.factor b/basis/io/directories/directories.factor index 3158f6ca41..d12adc5f41 100644 --- a/basis/io/directories/directories.factor +++ b/basis/io/directories/directories.factor @@ -45,8 +45,11 @@ HOOK: (directory-entries) os ( path -- seq ) dup directory-entries [ dup type>> +directory+ = - [ name>> [ append-path directory-tree-files ] [ [ prepend-path ] curry map ] bi ] - [ nip name>> 1array ] if + [ name>> + [ append-path directory-tree-files ] + [ [ prepend-path ] curry map ] + [ prefix ] tri + ] [ nip name>> 1array ] if ] with map concat ; : with-directory-entries ( path quot -- ) From c0aee1908229c9fe7bda8aaaa46b09abe57fcb11 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sat, 13 Feb 2010 14:15:27 -0800 Subject: [PATCH 04/33] vocabs.metadata: add "vocab-resources" word to read list of deployable resource files from a "resources.txt" file in the vocab directory. add "vocabs.metadata.resources" subvocab that expands globs and directory names in resources.txt entries --- basis/vocabs/metadata/metadata-docs.factor | 13 ++++++++++ basis/vocabs/metadata/metadata.factor | 11 +++++++- .../metadata/resources/resources-docs.factor | 26 +++++++++++++++++++ .../metadata/resources/resources-tests.factor | 19 ++++++++++++++ .../metadata/resources/resources.factor | 24 +++++++++++++++++ .../vocabs/metadata/resources/test/1/1.factor | 6 +++++ basis/vocabs/metadata/resources/test/1/bar | 0 basis/vocabs/metadata/resources/test/1/bas | 0 basis/vocabs/metadata/resources/test/1/foo | 0 .../metadata/resources/test/1/resources.txt | 3 +++ .../vocabs/metadata/resources/test/2/2.factor | 6 +++++ .../vocabs/metadata/resources/test/2/bar.wtf | 0 .../vocabs/metadata/resources/test/2/bas.ftw | 0 .../vocabs/metadata/resources/test/2/foo.wtf | 0 .../test/2/no-resources-here/zim.wtf | 0 .../metadata/resources/test/2/resources.txt | 1 + .../vocabs/metadata/resources/test/3/3.factor | 6 +++++ .../resources/test/3/resource-dir/bar | 0 .../resources/test/3/resource-dir/bas/zang | 0 .../resources/test/3/resource-dir/bas/zim | 0 .../resources/test/3/resource-dir/foo | 0 .../metadata/resources/test/3/resources.txt | 1 + 22 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 basis/vocabs/metadata/resources/resources-docs.factor create mode 100644 basis/vocabs/metadata/resources/resources-tests.factor create mode 100644 basis/vocabs/metadata/resources/resources.factor create mode 100644 basis/vocabs/metadata/resources/test/1/1.factor create mode 100644 basis/vocabs/metadata/resources/test/1/bar create mode 100644 basis/vocabs/metadata/resources/test/1/bas create mode 100644 basis/vocabs/metadata/resources/test/1/foo create mode 100644 basis/vocabs/metadata/resources/test/1/resources.txt create mode 100644 basis/vocabs/metadata/resources/test/2/2.factor create mode 100644 basis/vocabs/metadata/resources/test/2/bar.wtf create mode 100644 basis/vocabs/metadata/resources/test/2/bas.ftw create mode 100644 basis/vocabs/metadata/resources/test/2/foo.wtf create mode 100644 basis/vocabs/metadata/resources/test/2/no-resources-here/zim.wtf create mode 100644 basis/vocabs/metadata/resources/test/2/resources.txt create mode 100644 basis/vocabs/metadata/resources/test/3/3.factor create mode 100644 basis/vocabs/metadata/resources/test/3/resource-dir/bar create mode 100644 basis/vocabs/metadata/resources/test/3/resource-dir/bas/zang create mode 100644 basis/vocabs/metadata/resources/test/3/resource-dir/bas/zim create mode 100644 basis/vocabs/metadata/resources/test/3/resource-dir/foo create mode 100644 basis/vocabs/metadata/resources/test/3/resources.txt diff --git a/basis/vocabs/metadata/metadata-docs.factor b/basis/vocabs/metadata/metadata-docs.factor index 66041e249c..95c8083e0f 100644 --- a/basis/vocabs/metadata/metadata-docs.factor +++ b/basis/vocabs/metadata/metadata-docs.factor @@ -18,6 +18,11 @@ ARTICLE: "vocabs.metadata" "Vocabulary metadata" set-vocab-tags add-vocab-tags } +"Vocabulary resources:" +{ $subsections + vocab-resources + set-vocab-resources +} "Getting and setting arbitrary vocabulary metadata:" { $subsections vocab-file-contents @@ -50,3 +55,11 @@ HELP: set-vocab-tags { $values { "tags" "a sequence of strings" } { "vocab" "a vocabulary specifier" } } { $description "Stores a list of short tags classifying the vocabulary to the " { $snippet "tags.txt" } " file in the vocabulary's directory." } ; +HELP: vocab-resources +{ $values { "vocab" "a vocabulary specifier" } { "patterns" "a sequence of glob patterns" } } +{ $description "Outputs a list of glob patterns matching files that will be deployed with an application that includes " { $snippet "vocab" } ", as specified by the " { $snippet "resources.txt" } " file in the vocabulary's directory. Outputs an empty array if the file doesn't exist." } +{ $notes "The " { $vocab-link "vocabs.metadata.resources" } " vocabulary contains words that will expand the glob patterns and directory names in " { $snippet "patterns" } " and return all the matching files." } ; + +HELP: set-vocab-resources +{ $values { "patterns" "a sequence of glob patterns" } { "vocab" "a vocabulary specifier" } } +{ $description "Stores a list of glob patterns matching files that will be deployed with an application that includes " { $snippet "vocab" } " to the " { $snippet "resources.txt" } " file in the vocabulary's directory." } ; diff --git a/basis/vocabs/metadata/metadata.factor b/basis/vocabs/metadata/metadata.factor index 85a503c7f0..43c7641577 100644 --- a/basis/vocabs/metadata/metadata.factor +++ b/basis/vocabs/metadata/metadata.factor @@ -19,6 +19,15 @@ MEMO: vocab-file-contents ( vocab name -- seq ) 3append throw ] ?if ; +: vocab-resources-path ( vocab -- string ) + vocab-dir "resources.txt" append-path ; + +: vocab-resources ( vocab -- patterns ) + dup vocab-resources-path vocab-file-contents harvest ; + +: set-vocab-resources ( patterns vocab -- ) + dup vocab-resources-path set-vocab-file-contents ; + : vocab-summary-path ( vocab -- string ) vocab-dir "summary.txt" append-path ; @@ -67,4 +76,4 @@ M: vocab-link summary vocab-summary ; dup vocab-authors-path set-vocab-file-contents ; : unportable? ( vocab -- ? ) - vocab-tags "unportable" swap member? ; \ No newline at end of file + vocab-tags "unportable" swap member? ; diff --git a/basis/vocabs/metadata/resources/resources-docs.factor b/basis/vocabs/metadata/resources/resources-docs.factor new file mode 100644 index 0000000000..b4289ff388 --- /dev/null +++ b/basis/vocabs/metadata/resources/resources-docs.factor @@ -0,0 +1,26 @@ +! (c)2010 Joe Groff bsd license +USING: help.markup help.syntax kernel ; +IN: vocabs.metadata.resources + +HELP: expand-vocab-resource-files +{ $values + { "vocab" "a vocabulary specifier" } { "resource-glob-strings" "a sequence of glob patterns" } + { "filenames" "a sequence of filenames" } +} +{ $description "Matches all the glob patterns in " { $snippet "resource-glob-strings" } " to the set of files inside " { $snippet "vocab" } "'s directory and outputs a sequence containing the individual files and directories that match. Any matching directories will also have their contents recursively included in the output. The paths in the output will be relative to " { $snippet "vocab" } "'s directory." } ; + +HELP: vocab-resource-files +{ $values + { "vocab" "a vocabulary specifier" } + { "filenames" "a sequence of filenames" } +} +{ $description "Outputs a sequence containing the individual resource files and directories that match the patterns specified in " { $snippet "vocab" } "'s " { $snippet "resources.txt" } " file. Any matching directories will also have their contents recursively included in the output. The paths in the output will be relative to " { $snippet "vocab" } "'s directory." } ; + +ARTICLE: "vocabs.metadata.resources" "vocabs.metadata.resources" +"The " { $vocab-link "vocabs.metadata.resources" } " vocabulary contains words to retrieve the full list of files that match the patterns specified in a vocabulary's " { $snippet "resources.txt" } " file." +{ $subsections + vocab-resource-files + expand-vocab-resource-files +} ; + +ABOUT: "vocabs.metadata.resources" diff --git a/basis/vocabs/metadata/resources/resources-tests.factor b/basis/vocabs/metadata/resources/resources-tests.factor new file mode 100644 index 0000000000..36fd13125e --- /dev/null +++ b/basis/vocabs/metadata/resources/resources-tests.factor @@ -0,0 +1,19 @@ +! (c)2010 Joe Groff bsd license +USING: sorting tools.test vocabs.metadata.resources ; +IN: vocabs.metadata.resources.tests + +[ { "bar" "bas" "foo" } ] +[ "vocabs.metadata.resources.test.1" vocab-resource-files natural-sort ] unit-test + +[ { "bar.wtf" "foo.wtf" } ] +[ "vocabs.metadata.resources.test.2" vocab-resource-files natural-sort ] unit-test + +[ { + "resource-dir" + "resource-dir/bar" + "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 diff --git a/basis/vocabs/metadata/resources/resources.factor b/basis/vocabs/metadata/resources/resources.factor new file mode 100644 index 0000000000..1da15f6b9e --- /dev/null +++ b/basis/vocabs/metadata/resources/resources.factor @@ -0,0 +1,24 @@ +! (c)2010 Joe Groff bsd license +USING: arrays fry globs io.directories io.files.info +io.pathnames kernel regexp sequences vocabs.loader +vocabs.metadata ; +IN: vocabs.metadata.resources + + + +: expand-vocab-resource-files ( vocab resource-glob-strings -- filenames ) + [ [ find-vocab-root ] [ vocab-dir ] bi append-path ] dip [ ] map '[ + _ filter-resources + [ (expand-vocab-resource) ] map concat + ] with-directory-tree-files ; + +: vocab-resource-files ( vocab -- filenames ) + dup vocab-resources expand-vocab-resource-files ; diff --git a/basis/vocabs/metadata/resources/test/1/1.factor b/basis/vocabs/metadata/resources/test/1/1.factor new file mode 100644 index 0000000000..dddc0ddd58 --- /dev/null +++ b/basis/vocabs/metadata/resources/test/1/1.factor @@ -0,0 +1,6 @@ +USING: io kernel ; +IN: vocabs.metadata.resources.test.1 + +: main ( -- ) "Resources test 1" print ; + +MAIN: main diff --git a/basis/vocabs/metadata/resources/test/1/bar b/basis/vocabs/metadata/resources/test/1/bar new file mode 100644 index 0000000000..e69de29bb2 diff --git a/basis/vocabs/metadata/resources/test/1/bas b/basis/vocabs/metadata/resources/test/1/bas new file mode 100644 index 0000000000..e69de29bb2 diff --git a/basis/vocabs/metadata/resources/test/1/foo b/basis/vocabs/metadata/resources/test/1/foo new file mode 100644 index 0000000000..e69de29bb2 diff --git a/basis/vocabs/metadata/resources/test/1/resources.txt b/basis/vocabs/metadata/resources/test/1/resources.txt new file mode 100644 index 0000000000..ce0f4c956c --- /dev/null +++ b/basis/vocabs/metadata/resources/test/1/resources.txt @@ -0,0 +1,3 @@ +foo +bar +bas diff --git a/basis/vocabs/metadata/resources/test/2/2.factor b/basis/vocabs/metadata/resources/test/2/2.factor new file mode 100644 index 0000000000..82a5a11d18 --- /dev/null +++ b/basis/vocabs/metadata/resources/test/2/2.factor @@ -0,0 +1,6 @@ +USING: io kernel ; +IN: vocabs.metadata.resources.test.2 + +: main ( -- ) "Resources test 2" print ; + +MAIN: main diff --git a/basis/vocabs/metadata/resources/test/2/bar.wtf b/basis/vocabs/metadata/resources/test/2/bar.wtf new file mode 100644 index 0000000000..e69de29bb2 diff --git a/basis/vocabs/metadata/resources/test/2/bas.ftw b/basis/vocabs/metadata/resources/test/2/bas.ftw new file mode 100644 index 0000000000..e69de29bb2 diff --git a/basis/vocabs/metadata/resources/test/2/foo.wtf b/basis/vocabs/metadata/resources/test/2/foo.wtf new file mode 100644 index 0000000000..e69de29bb2 diff --git a/basis/vocabs/metadata/resources/test/2/no-resources-here/zim.wtf b/basis/vocabs/metadata/resources/test/2/no-resources-here/zim.wtf new file mode 100644 index 0000000000..e69de29bb2 diff --git a/basis/vocabs/metadata/resources/test/2/resources.txt b/basis/vocabs/metadata/resources/test/2/resources.txt new file mode 100644 index 0000000000..8dfd81c911 --- /dev/null +++ b/basis/vocabs/metadata/resources/test/2/resources.txt @@ -0,0 +1 @@ +*.wtf diff --git a/basis/vocabs/metadata/resources/test/3/3.factor b/basis/vocabs/metadata/resources/test/3/3.factor new file mode 100644 index 0000000000..a81fd707c5 --- /dev/null +++ b/basis/vocabs/metadata/resources/test/3/3.factor @@ -0,0 +1,6 @@ +USING: io kernel ; +IN: vocabs.metadata.resources.test.3 + +: main ( -- ) "Resources test 3" print ; + +MAIN: main diff --git a/basis/vocabs/metadata/resources/test/3/resource-dir/bar b/basis/vocabs/metadata/resources/test/3/resource-dir/bar new file mode 100644 index 0000000000..e69de29bb2 diff --git a/basis/vocabs/metadata/resources/test/3/resource-dir/bas/zang b/basis/vocabs/metadata/resources/test/3/resource-dir/bas/zang new file mode 100644 index 0000000000..e69de29bb2 diff --git a/basis/vocabs/metadata/resources/test/3/resource-dir/bas/zim b/basis/vocabs/metadata/resources/test/3/resource-dir/bas/zim new file mode 100644 index 0000000000..e69de29bb2 diff --git a/basis/vocabs/metadata/resources/test/3/resource-dir/foo b/basis/vocabs/metadata/resources/test/3/resource-dir/foo new file mode 100644 index 0000000000..e69de29bb2 diff --git a/basis/vocabs/metadata/resources/test/3/resources.txt b/basis/vocabs/metadata/resources/test/3/resources.txt new file mode 100644 index 0000000000..c27d538826 --- /dev/null +++ b/basis/vocabs/metadata/resources/test/3/resources.txt @@ -0,0 +1 @@ +resource-dir From 8a4fb8cbcec5d28430e89ab7c6302366d21c81a5 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sat, 13 Feb 2010 18:06:48 -0800 Subject: [PATCH 05/33] gpu.textures: add symbolic constants for LATC compression --- extra/gpu/textures/textures-docs.factor | 6 +++++- extra/gpu/textures/textures.factor | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/extra/gpu/textures/textures-docs.factor b/extra/gpu/textures/textures-docs.factor index ffac0bc29b..09906d623a 100644 --- a/extra/gpu/textures/textures-docs.factor +++ b/extra/gpu/textures/textures-docs.factor @@ -335,12 +335,16 @@ HELP: compressed-texture-format { { $link DXT1-RGBA } } { { $link DXT3 } } { { $link DXT5 } } +{ { $link LATC1 } } +{ { $link LATC1-SIGNED } } +{ { $link LATC2 } } +{ { $link LATC2-SIGNED } } { { $link RGTC1 } } { { $link RGTC1-SIGNED } } { { $link RGTC2 } } { { $link RGTC2-SIGNED } } } } -{ $notes "The " { $snippet "DXT1" } " formats require either the " { $snippet "GL_EXT_texture_compression_s3tc" } " or " { $snippet "GL_EXT_texture_compression_dxt1" } " extension. The other " { $snippet "DXT" } " formats require the " { $snippet "GL_EXT_texture_compression_s3tc" } " extension. The " { $snippet "RGTC" } " formats require OpenGL 3.0 or later or the " { $snippet "GL_EXT_texture_compression_rgtc" } " extension." } ; +{ $notes "The " { $snippet "DXT1" } " formats require either the " { $snippet "GL_EXT_texture_compression_s3tc" } " or " { $snippet "GL_EXT_texture_compression_dxt1" } " extension. The other " { $snippet "DXT" } " formats require the " { $snippet "GL_EXT_texture_compression_s3tc" } " extension. The " { $snippet "LATC" } " formats require the " { $snippet "GL_EXT_texture_compression_latc" } " extension. The " { $snippet "RGTC" } " formats require OpenGL 3.0 or later or the " { $snippet "GL_EXT_texture_compression_rgtc" } " extension." } ; HELP: compressed-texture-data { $class-description { $snippet "compressed-texture-data" } " tuples are used to feed compressed texture data to " { $link allocate-compressed-texture } " and " { $link update-compressed-texture } "." diff --git a/extra/gpu/textures/textures.factor b/extra/gpu/textures/textures.factor index e1afc20f88..132e4303e7 100644 --- a/extra/gpu/textures/textures.factor +++ b/extra/gpu/textures/textures.factor @@ -51,6 +51,7 @@ UNION: ?float-array float-array POSTPONE: f ; VARIANT: compressed-texture-format DXT1-RGB DXT1-RGBA DXT3 DXT5 + LATC1 LATC1-SIGNED LATC2 LATC2-SIGNED RGTC1 RGTC1-SIGNED RGTC2 RGTC2-SIGNED ; TUPLE: compressed-texture-data From 072dd3b0d077b104e829709880f97976394bbd31 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sun, 14 Feb 2010 09:59:36 -0800 Subject: [PATCH 06/33] vocabs.metadata.resources: don't try to expand resource patterns for vocabs without a resources.txt --- basis/vocabs/metadata/resources/resources.factor | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/basis/vocabs/metadata/resources/resources.factor b/basis/vocabs/metadata/resources/resources.factor index 1da15f6b9e..e37bdc273f 100644 --- a/basis/vocabs/metadata/resources/resources.factor +++ b/basis/vocabs/metadata/resources/resources.factor @@ -21,4 +21,5 @@ PRIVATE> ] with-directory-tree-files ; : vocab-resource-files ( vocab -- filenames ) - dup vocab-resources expand-vocab-resource-files ; + dup vocab-resources + [ drop f ] [ expand-vocab-resource-files ] if-empty ; From 9c77d7bde8d4dbd4dc3950895efd0b106c18df72 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sun, 14 Feb 2010 11:29:37 -0800 Subject: [PATCH 07/33] have tools.deploy.shaker write a manifest of loaded vocabs to a file. have tools.deploy.backend read in this manifest. have tools.deploy.macosx copy resources for the manifest vocabs to the deployed bundle --- basis/tools/deploy/backend/backend.factor | 23 ++++++------ basis/tools/deploy/macosx/macosx.factor | 2 +- basis/tools/deploy/shaker/shaker.factor | 35 +++++++++++-------- .../metadata/resources/resources.factor | 22 +++++++++++- 4 files changed, 53 insertions(+), 29 deletions(-) diff --git a/basis/tools/deploy/backend/backend.factor b/basis/tools/deploy/backend/backend.factor index fe8049e9e3..9d6b8d4c08 100644 --- a/basis/tools/deploy/backend/backend.factor +++ b/basis/tools/deploy/backend/backend.factor @@ -7,21 +7,15 @@ summary layouts vocabs.loader prettyprint.config prettyprint debugger 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 ; +io.encodings.utf8 destructors accessors hashtables +vocabs.metadata.resources ; IN: tools.deploy.backend : copy-vm ( executable bundle-name -- vm ) prepend-path vm over copy-file ; -CONSTANT: theme-path "basis/ui/gadgets/theme/" - -: copy-theme ( name dir -- ) - deploy-ui? get [ - append-path - theme-path append-path - [ make-directories ] - [ theme-path "resource:" prepend swap copy-tree ] bi - ] [ 2drop ] if ; +: copy-resources ( manifest name dir -- ) + append-path swap [ copy-vocab-resources ] with each ; : image-name ( vocab bundle-name -- str ) prepend-path ".image" append ; @@ -89,7 +83,7 @@ DEFER: ?make-staging-image [ "deploy-config-" prepend temp-file ] bi [ utf8 set-file-contents ] keep ; -: deploy-command-line ( image vocab config -- flags ) +: deploy-command-line ( image vocab manifest-file config -- flags ) [ bootstrap-profile ?make-staging-image @@ -97,6 +91,7 @@ DEFER: ?make-staging-image "-i=" bootstrap-profile staging-image-name append , "-resource-path=" "" resource-path append , "-run=tools.deploy.shaker" , + "-vocab-manifest-out=" prepend , [ "-deploy-vocab=" prepend , ] [ make-deploy-config "-deploy-config=" prepend , ] bi "-output-image=" prepend , @@ -104,8 +99,10 @@ DEFER: ?make-staging-image ] { } make ] bind ; -: make-deploy-image ( vm image vocab config -- ) +: make-deploy-image ( vm image vocab config -- manifest ) make-boot-image - deploy-command-line run-factor ; + over "vocab-manifest-" prepend temp-file + [ swap deploy-command-line run-factor ] + [ utf8 file-lines ] bi ; HOOK: deploy* os ( vocab -- ) diff --git a/basis/tools/deploy/macosx/macosx.factor b/basis/tools/deploy/macosx/macosx.factor index f753e38fb2..bec3e78cbd 100644 --- a/basis/tools/deploy/macosx/macosx.factor +++ b/basis/tools/deploy/macosx/macosx.factor @@ -46,7 +46,6 @@ IN: tools.deploy.macosx [ copy-dll ] [ copy-nib ] [ "Contents/Resources" append-path make-directories ] - [ "Contents/Resources" copy-theme ] } cleave ] [ create-app-plist ] @@ -72,6 +71,7 @@ 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 show-in-finder ] bind ] with-directory ; diff --git a/basis/tools/deploy/shaker/shaker.factor b/basis/tools/deploy/shaker/shaker.factor index 5897712a02..e020980233 100755 --- a/basis/tools/deploy/shaker/shaker.factor +++ b/basis/tools/deploy/shaker/shaker.factor @@ -1,11 +1,11 @@ ! Copyright (C) 2007, 2010 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: arrays accessors io.backend 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 vocabs.loader -system strings sets vectors quotations byte-arrays sorting -compiler.units definitions generic generic.standard +USING: arrays 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 +vocabs.loader system strings sets vectors quotations byte-arrays +sorting compiler.units definitions generic generic.standard generic.single tools.deploy.config combinators classes classes.builtin slots.private grouping command-line ; QUALIFIED: bootstrap.stage2 @@ -465,7 +465,8 @@ SYMBOL: deploy-vocab : startup-stripper ( -- ) t "quiet" set-global - f output-stream set-global ; + f output-stream set-global + V{ "resource:" } clone vocab-roots set-global ; : next-method* ( method -- quot ) [ "method-class" word-prop ] @@ -501,7 +502,12 @@ SYMBOL: deploy-vocab "Clearing megamorphic caches" show [ clear-megamorphic-cache ] each ; -: strip ( -- ) +: write-vocab-manifest ( vocab-manifest-out -- ) + "Writing vocabulary manifest to " write dup print flush + vocabs swap utf8 set-file-lines ; + +: strip ( vocab-manifest-out -- ) + [ write-vocab-manifest ] when* startup-stripper strip-libc strip-destructors @@ -535,7 +541,7 @@ SYMBOL: deploy-vocab 1 exit ] recover ; inline -: (deploy) ( final-image vocab config -- ) +: (deploy) ( final-image vocab-manifest-out vocab config -- ) #! Does the actual work of a deployment in the slave #! stage2 image [ @@ -548,11 +554,11 @@ SYMBOL: deploy-vocab "ui.debugger" require ] when ] unless - deploy-vocab set - deploy-vocab get require - deploy-vocab get vocab-main [ - "Vocabulary has no MAIN: word." print flush 1 exit - ] unless + [ deploy-vocab set ] [ require ] [ + vocab-main [ + "Vocabulary has no MAIN: word." print flush 1 exit + ] unless + ] tri strip "Saving final image" show save-image-and-exit @@ -561,6 +567,7 @@ SYMBOL: deploy-vocab : do-deploy ( -- ) "output-image" get + "vocab-manifest-out" get "deploy-vocab" get "Deploying " write dup write "..." print "deploy-config" get parse-file first diff --git a/basis/vocabs/metadata/resources/resources.factor b/basis/vocabs/metadata/resources/resources.factor index e37bdc273f..62036be408 100644 --- a/basis/vocabs/metadata/resources/resources.factor +++ b/basis/vocabs/metadata/resources/resources.factor @@ -5,6 +5,7 @@ vocabs.metadata ; IN: vocabs.metadata.resources +: vocab-dir-in-root ( vocab -- dir ) + [ find-vocab-root ] [ vocab-dir ] bi append-path ; + : expand-vocab-resource-files ( vocab resource-glob-strings -- filenames ) - [ [ find-vocab-root ] [ vocab-dir ] bi append-path ] dip [ ] map '[ + [ vocab-dir-in-root ] dip [ ] map '[ _ filter-resources [ (expand-vocab-resource) ] map concat ] with-directory-tree-files ; @@ -23,3 +34,12 @@ PRIVATE> : vocab-resource-files ( vocab -- filenames ) dup vocab-resources [ drop f ] [ expand-vocab-resource-files ] if-empty ; + +: copy-vocab-resources ( dir vocab -- ) + dup vocab-resource-files + [ 2drop ] [ + [ [ vocab-dir append-path P ] [ vocab-dir-in-root P ] bi ] dip + [ 2drop make-directories ] + [ [ copy-vocab-resource ] with with each ] 3bi + ] if-empty ; + From 5f0855c5c25c59a59d67a4335df47f311f6dbe93 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sun, 14 Feb 2010 11:49:33 -0800 Subject: [PATCH 08/33] globs: add "glob-parent-directory" word that returns the deepest level of a path without glob symbols --- basis/globs/globs-tests.factor | 18 +++++++++++++++++- basis/globs/globs.factor | 7 +++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/basis/globs/globs-tests.factor b/basis/globs/globs-tests.factor index eceb6bab7b..c9903b1633 100644 --- a/basis/globs/globs-tests.factor +++ b/basis/globs/globs-tests.factor @@ -1,4 +1,4 @@ -USING: tools.test globs io.pathnames ; +USING: arrays tools.test globs io.pathnames sequences ; IN: globs.tests [ f ] [ "abd" "fdf" glob-matches? ] unit-test @@ -22,3 +22,19 @@ IN: globs.tests [ t ] [ "foo" "bar" append-path "*" "*" append-path glob-matches? ] unit-test [ f ] [ "foo" "bar" append-path "foo?bar" glob-matches? ] unit-test [ t ] [ "foo" "bar" append-path "fo?" "bar" append-path glob-matches? ] unit-test + +[ f ] [ "foo" glob-pattern? ] unit-test +[ t ] [ "fo?" glob-pattern? ] unit-test +[ t ] [ "fo*" glob-pattern? ] unit-test +[ t ] [ "fo[mno]" glob-pattern? ] unit-test +[ t ] [ "fo\\*" glob-pattern? ] unit-test +[ t ] [ "fo{o,bro}" glob-pattern? ] unit-test + +"foo" "bar" append-path 1array +[ { "foo" "bar" "ba?" } path-separator join glob-parent-directory ] unit-test + +[ "foo" ] +[ { "foo" "b?r" "bas" } path-separator join glob-parent-directory ] unit-test + +[ "" ] +[ { "f*" "bar" "bas" } path-separator join glob-parent-directory ] unit-test diff --git a/basis/globs/globs.factor b/basis/globs/globs.factor index 47c8fca528..72b686c3b1 100644 --- a/basis/globs/globs.factor +++ b/basis/globs/globs.factor @@ -43,3 +43,10 @@ Main = Concatenation End : glob-matches? ( input glob -- ? ) [ >case-fold ] bi@ matches? ; + +: glob-pattern? ( string -- ? ) + [ "\\*?[{" member? ] any? ; + +: glob-parent-directory ( glob -- parent-directory ) + path-components dup [ glob-pattern? ] find drop head + path-separator join ; From 281ddf5b27a0f00141f1c0b8499e4f885cca71c1 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sun, 14 Feb 2010 12:08:13 -0800 Subject: [PATCH 09/33] remove debug output from vocab.metadata.resources --- basis/vocabs/metadata/resources/resources.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basis/vocabs/metadata/resources/resources.factor b/basis/vocabs/metadata/resources/resources.factor index 62036be408..d8f9bdcffd 100644 --- a/basis/vocabs/metadata/resources/resources.factor +++ b/basis/vocabs/metadata/resources/resources.factor @@ -38,7 +38,7 @@ PRIVATE> : copy-vocab-resources ( dir vocab -- ) dup vocab-resource-files [ 2drop ] [ - [ [ vocab-dir append-path P ] [ vocab-dir-in-root P ] bi ] dip + [ [ vocab-dir append-path ] [ vocab-dir-in-root ] bi ] dip [ 2drop make-directories ] [ [ copy-vocab-resource ] with with each ] 3bi ] if-empty ; From eb875e1e7845831045ef60be208ef7b6205e7558 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sun, 14 Feb 2010 12:42:03 -0800 Subject: [PATCH 10/33] create a real "ui.gadgets.theme" vocab, move theme-image word into it, and add theme images to resources.txt --- basis/ui/gadgets/buttons/buttons.factor | 6 +++--- basis/ui/gadgets/corners/corners.factor | 4 ++-- basis/ui/gadgets/search-tables/search-tables.factor | 4 ++-- basis/ui/gadgets/sliders/sliders.factor | 2 +- basis/ui/gadgets/tabbed/tabbed.factor | 5 +++-- basis/ui/gadgets/theme/authors.txt | 1 + basis/ui/gadgets/theme/resources.txt | 1 + basis/ui/gadgets/theme/theme.factor | 6 ++++++ basis/ui/pens/image/image.factor | 2 -- 9 files changed, 19 insertions(+), 12 deletions(-) create mode 100644 basis/ui/gadgets/theme/resources.txt create mode 100644 basis/ui/gadgets/theme/theme.factor diff --git a/basis/ui/gadgets/buttons/buttons.factor b/basis/ui/gadgets/buttons/buttons.factor index 061fd8d364..d0d25a0630 100644 --- a/basis/ui/gadgets/buttons/buttons.factor +++ b/basis/ui/gadgets/buttons/buttons.factor @@ -5,9 +5,9 @@ colors.constants combinators combinators.short-circuit combinators.smart fry kernel locals math math.rectangles math.vectors models namespaces opengl opengl.gl quotations sequences strings ui.commands ui.gadgets ui.gadgets.borders -ui.gadgets.labels ui.gadgets.packs ui.gadgets.tracks -ui.gadgets.worlds ui.gestures ui.pens ui.pens.image -ui.pens.solid ui.pens.tile ; +ui.gadgets.labels ui.gadgets.packs ui.gadgets.theme +ui.gadgets.tracks ui.gadgets.worlds ui.gestures ui.pens +ui.pens.image ui.pens.solid ui.pens.tile ; FROM: models => change-model ; IN: ui.gadgets.buttons diff --git a/basis/ui/gadgets/corners/corners.factor b/basis/ui/gadgets/corners/corners.factor index 7f558fca19..31b7d5db2e 100644 --- a/basis/ui/gadgets/corners/corners.factor +++ b/basis/ui/gadgets/corners/corners.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: accessors kernel sequences namespaces ui.gadgets.frames -ui.pens.image ui.gadgets.icons ui.gadgets.grids ; +ui.pens.image ui.gadgets.icons ui.gadgets.grids ui.gadgets.theme ; IN: ui.gadgets.corners CONSTANT: @center { 1 1 } @@ -40,4 +40,4 @@ SYMBOL: name : make-corners ( class name quot -- corners ) [ [ [ 3 3 ] dip new-frame { 1 1 } >>filled-cell ] dip name ] dip - with-variable ; inline \ No newline at end of file + with-variable ; inline diff --git a/basis/ui/gadgets/search-tables/search-tables.factor b/basis/ui/gadgets/search-tables/search-tables.factor index dd2232df60..1da137270a 100644 --- a/basis/ui/gadgets/search-tables/search-tables.factor +++ b/basis/ui/gadgets/search-tables/search-tables.factor @@ -3,7 +3,7 @@ USING: accessors kernel delegate fry sequences models combinators.short-circuit models.search models.delay calendar locals ui.gestures ui.pens ui.pens.image ui.gadgets.editors ui.gadgets.labels -ui.gadgets.scrollers ui.gadgets.tables ui.gadgets.tracks +ui.gadgets.scrollers ui.gadgets.tables ui.gadgets.theme ui.gadgets.tracks ui.gadgets.borders ui.gadgets.buttons ui.baseline-alignment ui.gadgets ; IN: ui.gadgets.search-tables @@ -78,4 +78,4 @@ CONSULT: table-protocol search-table table>> ; M: search-table model-changed nip field>> clear-search-field ; -M: search-table focusable-child* field>> ; \ No newline at end of file +M: search-table focusable-child* field>> ; diff --git a/basis/ui/gadgets/sliders/sliders.factor b/basis/ui/gadgets/sliders/sliders.factor index b98a0d152e..6851ff4be7 100644 --- a/basis/ui/gadgets/sliders/sliders.factor +++ b/basis/ui/gadgets/sliders/sliders.factor @@ -4,7 +4,7 @@ USING: accessors arrays assocs kernel math namespaces sequences vectors models models.range math.vectors math.functions quotations colors colors.constants math.rectangles fry combinators ui.gestures ui.pens ui.gadgets ui.gadgets.buttons ui.gadgets.tracks math.order -ui.gadgets.icons ui.pens.tile ui.pens.image ; +ui.gadgets.icons ui.gadgets.theme ui.pens.tile ui.pens.image ; IN: ui.gadgets.sliders TUPLE: slider < track elevator thumb saved line ; diff --git a/basis/ui/gadgets/tabbed/tabbed.factor b/basis/ui/gadgets/tabbed/tabbed.factor index 23881103a9..77ddb90270 100644 --- a/basis/ui/gadgets/tabbed/tabbed.factor +++ b/basis/ui/gadgets/tabbed/tabbed.factor @@ -2,8 +2,9 @@ ! See http://factorcode.org/license.txt for BSD license. USING: ui.pens ui.gadgets.tracks ui.gadgets.buttons ui.gadgets.buttons.private ui.gadgets.books ui.gadgets.packs -ui.gadgets.borders ui.gadgets.icons ui.gadgets ui.pens.image -sequences models accessors kernel colors colors.constants ; +ui.gadgets.borders ui.gadgets.icons ui.gadgets ui.gadgets.theme +ui.pens.image sequences models accessors kernel colors +colors.constants ; IN: ui.gadgets.tabbed TUPLE: tabbed-gadget < track tabs book ; diff --git a/basis/ui/gadgets/theme/authors.txt b/basis/ui/gadgets/theme/authors.txt index 1901f27a24..580f882c8d 100644 --- a/basis/ui/gadgets/theme/authors.txt +++ b/basis/ui/gadgets/theme/authors.txt @@ -1 +1,2 @@ Slava Pestov +Joe Groff diff --git a/basis/ui/gadgets/theme/resources.txt b/basis/ui/gadgets/theme/resources.txt new file mode 100644 index 0000000000..72238b4d93 --- /dev/null +++ b/basis/ui/gadgets/theme/resources.txt @@ -0,0 +1 @@ +*.tiff diff --git a/basis/ui/gadgets/theme/theme.factor b/basis/ui/gadgets/theme/theme.factor new file mode 100644 index 0000000000..ab10999021 --- /dev/null +++ b/basis/ui/gadgets/theme/theme.factor @@ -0,0 +1,6 @@ +! (c)2009, 2010 Slava Pestov, Joe Groff bsd license +USING: io.pathnames sequences ui.images ; +IN: ui.gadgets.theme + +: theme-image ( name -- image-name ) + "vocab:ui/gadgets/theme/" prepend-path ".tiff" append ; diff --git a/basis/ui/pens/image/image.factor b/basis/ui/pens/image/image.factor index da253f8b0c..be37e6e129 100644 --- a/basis/ui/pens/image/image.factor +++ b/basis/ui/pens/image/image.factor @@ -18,5 +18,3 @@ M: image-pen draw-interior M: image-pen pen-pref-dim nip image>> image-dim ; -: theme-image ( name -- image-name ) - "vocab:ui/gadgets/theme/" prepend-path ".tiff" append ; \ No newline at end of file From ad63314a9e3da465762ae72b93824dc5df342e70 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sun, 14 Feb 2010 13:58:24 -0800 Subject: [PATCH 11/33] audio.chunked-file: inline "check-chunk" so heap-size call can be folded away and audio can be deployed --- extra/audio/chunked-file/chunked-file.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/audio/chunked-file/chunked-file.factor b/extra/audio/chunked-file/chunked-file.factor index a450790ec6..f5844a60d0 100644 --- a/extra/audio/chunked-file/chunked-file.factor +++ b/extra/audio/chunked-file/chunked-file.factor @@ -24,5 +24,5 @@ ERROR: invalid-audio-file ; } case ; : check-chunk ( chunk id class -- ? ) - heap-size [ id= ] [ [ length ] dip >= ] bi-curry* bi and ; + heap-size [ id= ] [ [ length ] dip >= ] bi-curry* bi and ; inline From 06f4a218159a4e08a0ef73180bba149cf51f41f3 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sun, 14 Feb 2010 14:01:07 -0800 Subject: [PATCH 12/33] gpu.demos.raytrace: add deploy config and resources.txt --- extra/gpu/demos/raytrace/deploy.factor | 14 ++++++++++++++ extra/gpu/demos/raytrace/resources.txt | 4 ++++ 2 files changed, 18 insertions(+) create mode 100644 extra/gpu/demos/raytrace/deploy.factor create mode 100644 extra/gpu/demos/raytrace/resources.txt diff --git a/extra/gpu/demos/raytrace/deploy.factor b/extra/gpu/demos/raytrace/deploy.factor new file mode 100644 index 0000000000..b01a64ccbc --- /dev/null +++ b/extra/gpu/demos/raytrace/deploy.factor @@ -0,0 +1,14 @@ +USING: tools.deploy.config ; +H{ + { deploy-name "Raytrace" } + { deploy-ui? t } + { deploy-c-types? f } + { deploy-unicode? f } + { "stop-after-last-window?" t } + { deploy-io 2 } + { deploy-reflection 2 } + { deploy-word-props? f } + { deploy-math? t } + { deploy-threads? t } + { deploy-word-defs? f } +} diff --git a/extra/gpu/demos/raytrace/resources.txt b/extra/gpu/demos/raytrace/resources.txt new file mode 100644 index 0000000000..24d3bb9b79 --- /dev/null +++ b/extra/gpu/demos/raytrace/resources.txt @@ -0,0 +1,4 @@ +green-ball.aiff +mirror-ball.aiff +red-ball.aiff +yellow-ball.aiff From f02fb684cdc3b4d1e74da44fcaf21ede47014e3a Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sun, 14 Feb 2010 14:03:19 -0800 Subject: [PATCH 13/33] add resources.txt for gpu.demos.bunny --- extra/gpu/demos/bunny/deploy.factor | 20 ++++++++++---------- extra/gpu/demos/bunny/resources.txt | 1 + 2 files changed, 11 insertions(+), 10 deletions(-) create mode 100644 extra/gpu/demos/bunny/resources.txt diff --git a/extra/gpu/demos/bunny/deploy.factor b/extra/gpu/demos/bunny/deploy.factor index fe80da122e..1289caadb6 100644 --- a/extra/gpu/demos/bunny/deploy.factor +++ b/extra/gpu/demos/bunny/deploy.factor @@ -1,14 +1,14 @@ USING: tools.deploy.config ; H{ - { deploy-name "gpu.demos.bunny" } - { deploy-word-defs? f } - { deploy-io 3 } - { "stop-after-last-window?" t } - { deploy-math? t } - { deploy-word-props? f } - { deploy-threads? t } - { deploy-c-types? f } - { deploy-reflection 2 } - { deploy-unicode? f } + { deploy-name "Bunny" } { deploy-ui? t } + { deploy-c-types? f } + { deploy-unicode? f } + { "stop-after-last-window?" t } + { deploy-io 3 } + { deploy-reflection 2 } + { deploy-word-props? f } + { deploy-math? t } + { deploy-threads? t } + { deploy-word-defs? f } } diff --git a/extra/gpu/demos/bunny/resources.txt b/extra/gpu/demos/bunny/resources.txt new file mode 100644 index 0000000000..7aa9238e48 --- /dev/null +++ b/extra/gpu/demos/bunny/resources.txt @@ -0,0 +1 @@ +loading.tiff From a6bbb6dca6583c353ea4797934245b4c76742b9c Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sun, 14 Feb 2010 23:10:05 -0800 Subject: [PATCH 14/33] update unix, windows, and test deploy backends --- basis/tools/deploy/test/test.factor | 2 +- basis/tools/deploy/unix/unix.factor | 4 ++-- basis/tools/deploy/windows/windows.factor | 14 ++++++-------- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/basis/tools/deploy/test/test.factor b/basis/tools/deploy/test/test.factor index d8414baba7..bc458dde36 100644 --- a/basis/tools/deploy/test/test.factor +++ b/basis/tools/deploy/test/test.factor @@ -7,7 +7,7 @@ IN: tools.deploy.test [ "test.image" temp-file delete-file ] ignore-errors "resource:" [ [ vm "test.image" temp-file ] dip - dup deploy-config make-deploy-image + dup deploy-config make-deploy-image drop ] with-directory ; ERROR: image-too-big actual-size max-size ; diff --git a/basis/tools/deploy/unix/unix.factor b/basis/tools/deploy/unix/unix.factor index f88cf06ef7..2646f2d5a4 100644 --- a/basis/tools/deploy/unix/unix.factor +++ b/basis/tools/deploy/unix/unix.factor @@ -7,7 +7,6 @@ tools.deploy.config.editor assocs hashtables prettyprint ; IN: tools.deploy.unix : create-app-dir ( vocab bundle-name -- vm ) - dup "" copy-theme copy-vm dup OCT: 755 set-file-permissions ; @@ -20,6 +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 normalize-path [ "Binary deployed to " % % "." % ] "" make print ] bind - ] with-directory ; \ No newline at end of file + ] with-directory ; diff --git a/basis/tools/deploy/windows/windows.factor b/basis/tools/deploy/windows/windows.factor index f21f4ac363..4dad875128 100644 --- a/basis/tools/deploy/windows/windows.factor +++ b/basis/tools/deploy/windows/windows.factor @@ -16,20 +16,18 @@ IN: tools.deploy.windows : create-exe-dir ( vocab bundle-name -- vm ) dup copy-dll - deploy-ui? get [ - [ "" copy-theme ] [ ".exe" copy-vm ] bi - ] [ ".com" copy-vm ] if ; + deploy-ui? get ".exe" ".com" ? copy-vm ; M: winnt deploy* "resource:" [ dup deploy-config [ deploy-name get - [ + { [ create-exe-dir ] [ image-name ] - [ drop ] - 2tri namespace make-deploy-image - ] - [ nip open-in-explorer ] 2bi + [ drop namespace make-deploy-image ] + [ nip "" copy-resources ] + [ nip open-in-explorer ] + } 2cleave ] bind ] with-directory ; From 642d48cd0592ab20046c7b07061b43dd2ce47208 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sun, 14 Feb 2010 23:27:48 -0800 Subject: [PATCH 15/33] gpu.demos.bunny: use images.tiff so that it's present in deployed bundle --- extra/gpu/demos/bunny/bunny.factor | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extra/gpu/demos/bunny/bunny.factor b/extra/gpu/demos/bunny/bunny.factor index 987d3d1507..bee94d302a 100644 --- a/extra/gpu/demos/bunny/bunny.factor +++ b/extra/gpu/demos/bunny/bunny.factor @@ -3,8 +3,8 @@ USING: accessors alien.c-types arrays classes.struct combinators combinators.short-circuit game.loop game.worlds gpu gpu.buffers gpu.util.wasd gpu.framebuffers gpu.render gpu.shaders gpu.state gpu.textures gpu.util grouping http.client images images.loader -io io.encodings.ascii io.files io.files.temp kernel locals math -math.matrices math.vectors.simd math.parser math.vectors +images.tiff io io.encodings.ascii io.files io.files.temp kernel +locals math math.matrices math.vectors.simd math.parser math.vectors method-chains namespaces sequences splitting threads ui ui.gadgets ui.gadgets.worlds ui.pixel-formats specialized-arrays specialized-vectors literals ; From 45c85d1851544225c5ffc8b9134b2a4e7e8406d0 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sun, 14 Feb 2010 23:55:38 -0800 Subject: [PATCH 16/33] update vocabs and deploy docs to mention resources.txt --- basis/tools/deploy/deploy-docs.factor | 4 ++++ core/vocabs/loader/loader-docs.factor | 9 +++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/basis/tools/deploy/deploy-docs.factor b/basis/tools/deploy/deploy-docs.factor index 948db1c833..2cbb2869de 100644 --- a/basis/tools/deploy/deploy-docs.factor +++ b/basis/tools/deploy/deploy-docs.factor @@ -7,8 +7,12 @@ ARTICLE: "prepare-deploy" "Preparing to deploy an application" { $subsections "deploy-config" "deploy-flags" + "deploy-resources" } ; +ARTICLE: "deploy-resources" "Deployed resource files" +"To include additional files in your deployed application, specify their names in a vocabulary's " { $snippet "resources.txt" } " file. The " { $snippet "resources.txt" } " file contains one glob pattern per line. These patterns are expanded relative to the vocabulary directory; files outside of the vocabulary directory cannot be referenced. If a file inside the vocabulary directory matches any of these patterns, it will be included in deployed applications that reference the vocabulary. If a subdirectory matches, its contents will be included recursively." ; + ARTICLE: "tools.deploy.usage" "Deploy tool usage" "Once the necessary deployment flags have been set, the application can be deployed:" { $subsections deploy } diff --git a/core/vocabs/loader/loader-docs.factor b/core/vocabs/loader/loader-docs.factor index 7d00cbe2ad..7db3cdd5c2 100644 --- a/core/vocabs/loader/loader-docs.factor +++ b/core/vocabs/loader/loader-docs.factor @@ -45,11 +45,12 @@ $nl { { $snippet "foo/bar/bar-docs.factor" } " - documentation, see " { $link "writing-help" } } { { $snippet "foo/bar/bar-tests.factor" } " - unit tests, see " { $link "tools.test" } } } -"Finally, optional three text files may contain meta-data:" +"Finally, four optional text files may contain metadata:" { $list - { { $snippet "foo/bar/authors.txt" } " - a series of lines, with one author name per line. These are listed under " { $link "vocab-authors" } } - { { $snippet "foo/bar/summary.txt" } " - a one-line description" } - { { $snippet "foo/bar/tags.txt" } " - a whitespace-separated list of tags which classify the vocabulary. Consult " { $link "vocab-tags" } " for a list of existing tags you can re-use" } + { { $snippet "foo/bar/authors.txt" } " - a series of lines, with one author name per line. These are listed under " { $link "vocab-authors" } "." } + { { $snippet "foo/bar/resources.txt" } " - a series of lines with one file glob pattern per line. Files inside the vocabulary directory whose names match any of these glob patterns will be included with the compiled application as " { $link "deploy-resources" } "." } + { { $snippet "foo/bar/summary.txt" } " - a one-line description." } + { { $snippet "foo/bar/tags.txt" } " - a whitespace-separated list of tags which classify the vocabulary. Consult " { $link "vocab-tags" } " for a list of existing tags you can reuse." } } "The " { $link POSTPONE: USE: } " and " { $link POSTPONE: USING: } " words load vocabularies which have not been loaded yet, as needed." $nl From f9d6ba0339815322cf1e42065841b5a2acedfde1 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 15 Feb 2010 10:56:23 -0800 Subject: [PATCH 17/33] tools.deploy.macosx: copy "icon.icns" from deployed vocab to app bundle as app icon --- basis/tools/deploy/macosx/macosx.factor | 34 ++++++++++++++++--------- basis/vocabs/metadata/metadata.factor | 6 +++++ 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/basis/tools/deploy/macosx/macosx.factor b/basis/tools/deploy/macosx/macosx.factor index bec3e78cbd..8bd3749093 100644 --- a/basis/tools/deploy/macosx/macosx.factor +++ b/basis/tools/deploy/macosx/macosx.factor @@ -6,7 +6,7 @@ sequences system tools.deploy.backend tools.deploy.config tools.deploy.config.editor assocs hashtables prettyprint io.backend.unix cocoa io.encodings.utf8 io.backend cocoa.application cocoa.classes cocoa.plists -combinators ; +combinators vocabs.metadata vocabs.loader ; IN: tools.deploy.macosx : bundle-dir ( -- dir ) @@ -16,7 +16,7 @@ IN: tools.deploy.macosx [ bundle-dir prepend-path swap ] keep "Contents" prepend-path append-path copy-tree ; -: app-plist ( executable bundle-name -- assoc ) +: app-plist ( icon? executable bundle-name -- assoc ) [ "6.0" "CFBundleInfoDictionaryVersion" set "APPL" "CFBundlePackageType" set @@ -25,9 +25,11 @@ IN: tools.deploy.macosx [ "CFBundleExecutable" set ] [ "org.factor." prepend "CFBundleIdentifier" set ] bi + + [ "Icon.icns" "CFBundleIconFile" set ] when ] H{ } make-assoc ; -: create-app-plist ( executable bundle-name -- ) +: create-app-plist ( icon? executable bundle-name -- ) [ app-plist ] keep "Contents/Info.plist" append-path write-plist ; @@ -40,16 +42,24 @@ IN: tools.deploy.macosx "Resources/English.lproj/MiniFactor.nib" copy-bundle-dir ] [ drop ] if ; +: copy-icns ( vocab bundle-name -- icon? ) + swap dup vocab-mac-icon-path vocab-append-path dup exists? + [ swap "Contents/Resources/Icon.icns" append-path copy-file t ] + [ 2drop f ] if ; + : create-app-dir ( vocab bundle-name -- vm ) - [ - nip { - [ copy-dll ] - [ copy-nib ] - [ "Contents/Resources" append-path make-directories ] - } cleave - ] - [ create-app-plist ] - [ "Contents/MacOS/" append-path copy-vm ] 2tri + { + [ + nip { + [ copy-dll ] + [ copy-nib ] + [ "Contents/Resources" append-path make-directories ] + } cleave + ] + [ copy-icns ] + [ create-app-plist ] + [ "Contents/MacOS/" append-path copy-vm ] + } 2cleave dup OCT: 755 set-file-permissions ; : deploy.app-image ( vocab bundle-name -- str ) diff --git a/basis/vocabs/metadata/metadata.factor b/basis/vocabs/metadata/metadata.factor index 43c7641577..04a0ea7546 100644 --- a/basis/vocabs/metadata/metadata.factor +++ b/basis/vocabs/metadata/metadata.factor @@ -19,6 +19,12 @@ MEMO: vocab-file-contents ( vocab name -- seq ) 3append throw ] ?if ; +: vocab-windows-icon-path ( vocab -- string ) + vocab-dir "icon.ico" append-path ; + +: vocab-mac-icon-path ( vocab -- string ) + vocab-dir "icon.icns" append-path ; + : vocab-resources-path ( vocab -- string ) vocab-dir "resources.txt" append-path ; From bfa5f5ad9b2037c8dc012212bf207754cd16920b Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 15 Feb 2010 10:58:26 -0800 Subject: [PATCH 18/33] icon for gpu.demos.bunny --- extra/gpu/demos/bunny/icon.icns | Bin 0 -> 30278 bytes extra/gpu/demos/bunny/icon.ico | Bin 0 -> 9854 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 extra/gpu/demos/bunny/icon.icns create mode 100644 extra/gpu/demos/bunny/icon.ico diff --git a/extra/gpu/demos/bunny/icon.icns b/extra/gpu/demos/bunny/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..ef7ed0af6ff9a8871d8203be227168da6be3b9d1 GIT binary patch literal 30278 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 literal 0 HcmV?d00001 diff --git a/extra/gpu/demos/bunny/icon.ico b/extra/gpu/demos/bunny/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..0fd376bc5134def5ad574135895ea9f1608d5b66 GIT binary patch literal 9854 zcmeI0TWlOx8ONu#V|y>Nvv=?Mw!2>M#n)V%=4L0cRim+=G9cHW~OoYn&+>M$#~hG8%@AN6|R0f3bjJu<4&t%DCI^ z>fo*q+&LdWtliVp+IauJs&lf<&dzqQ;kr$8^4iPI`<0cIb~g7}+j--B+lsN$F7F$S z@9TB$R1b#ssi~XiEPa_9O>lbKBMV6iy*sbX>L`H}ME#d3M#nNn%u zD}g}r66U{O`-5C*&Zz zUO$)1W%9Z52Z!?`FAn8OS8~~+8X4KB3d3V6ozAGi!C^HtG@|amZ$*9liKo=Qy$fn` zbV@z?@G14&m%gk{pZbv6JF~17_dlR!cOOzSI~U%*ck}emvOU=y`Wx)=YtWVV+09&g z*)zSlv-w={jZ$GuWith}Z*EDQJn;zFM{B!w&Q{+0&|~(};?e5F_>}$F`_5F(zW>Aa zXnC^Qm(JFvw(O{#e*A3p$xnQ`IyZaJp5C=sJ$mF}b#U>7wEgqPuFURUzBILQdQS7* z4jHh9*fteQJ(7p6!K$Ep8+x~=w(P9#-Lp_l^$gYyE#0r4dh)zFa`?C!AKj$Y_YXma!%vg*{Q2{@xAA;#-+9oTBH z`OPlh6Jao*+2L?hg~Jg=J~EZ4N9xn%r%rS5335AgqjF7IXcPL5!%Z7N7To9aW#OjZ z@7TT%J~gaznL=e6v9PfJfy?XV_0FU3=zGfyy%YgA^jHx&z%P0Yg^@1@MBkKy{z0B> zW?1B-oKACOpgi<3&LO*Q)c5GfCh?!cjDx+0)!69f%H~Zw)c(2qUiPwRrW^HmM`8xO z88$<&@Y~>r{>2V;u0SBD;_;-gP`6~GziYo)mBFzYWs`XE@KcTg>^A}#W~LV6e+c})ZP34$U)ZSIkcvj*DwXO}@mR7Y zKVv2qOF-A75;x-ikfBs^W14;iAH=>;ou50Zrgtt>!Lj#7tgW8oy}JL0{DGe~`@h#O zygp7H(;f}aT^VVUNTe|aBo~n%P2{2f3-3D-Cvs6VVf#*aerU-ulR0}Z1~k{>$O;0jpMy~ z-C_FtKP0ymcJ~06$?@qJa%himJN|FA^q~;sWWA&FXG0F+{>N4vzseqd_I=F+j(RNW zvGw%i*Rq@4{%^Ycb^Vi_ycy(l`Y!SYYL_A8n55Wa)z6q?EtO2B9pB+zr}fTW*rlGT za-91#zPpc%`ujKH#XLD%alYFcWDaz8evvT@CgG>AFqaIXKI1o~j$mF#V{MvF^}8}S z{zN&Q`T@0G1H0yT;+C=`6Y1}2UUKQ{=H6xI*}J8GxpEAlKN;xq|62I1NLA{%U`VBU z`s($JFyY%|r!0BY2~N&+>LBv>p>EZ_Z`4AT; zhUEIJX{08|7HZ)T;#c^QTOb3O=tHa@MX$mGor0Zpbbo(V;v*7?sbJ7t=5I6FKI^jA^B(VY)9mPb z0-e5JIq@j*RbyPj29-p-$3~v0!f&A4nCLhJ-({{5X4CDtchz%fLp0d$tWRkp#>FZ(^*&mIj;`i&C1nQ9m%-&*iyzPGaU9&xb-`u7iaf&ol>EXP3b_hs**ymDqltgxo%Ugh`uC8v^|^(B0~hE|0f@b@u$ z7&$i@j{gRHDVP14xb%((4PzWZY^wv zE8;`AclTPJ3n+`MqvL}2)C=sudZt2N9kbjk2K#d=7LHTzQlp`7>GLkXJPWpWK4>BC zobN_!{1&fy7UbUym;>18%dExeN0g28(46xlxI(@lTHrP4;vF}yk`;EOOz!!NK8Jhi zgXb+eF ze!P{PQKRldjjAlLV_pq9K@C}ku6zH4`J-N5ea&^yTIL!(NB4T3y|7%zy<5^GkZH#qt%x4(=@TEV~ci=NN{Lf|%N~QYi ze?P!nU7PUTdOp!>Ua!~lQOCTHjHmeb37g!ksUS}kjlRuRgZ`*P?zeB5LF-$1ccWh0 zWvJ_n>*}>p<2}!uit|?m`j<0EB9Z<)-@RRbZ;zVRO9Q=G=0@AYE&Hf^+l0@W)?b4D z;5VAM$=T9RF)q2m?C|ZfOzR!ySMJ~Z8&o))*h79jN9*BMdaMzTS+Q3mVcD1d&3rA) zsKv}c@b`Y7|HZBiT_3@`f_Hs>8*NQ{ce?VGta z+x Date: Mon, 15 Feb 2010 11:26:26 -0800 Subject: [PATCH 19/33] windows.kernel32: bindings for BeginUpdateResource, UpdateResource, EndUpdateResource --- basis/windows/kernel32/kernel32.factor | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/basis/windows/kernel32/kernel32.factor b/basis/windows/kernel32/kernel32.factor index 80f50ef2b0..1e9a387646 100644 --- a/basis/windows/kernel32/kernel32.factor +++ b/basis/windows/kernel32/kernel32.factor @@ -826,7 +826,8 @@ FUNCTION: BOOL AllocConsole ( ) ; ! FUNCTION: BaseUpdateAppcompatCache ! FUNCTION: Beep ! FUNCTION: BeginUpdateResourceA -! FUNCTION: BeginUpdateResourceW +FUNCTION: HANDLE BeginUpdateResource ( LPCTSTR pFileName, BOOL bDeleteExistingResources ) ; +ALIAS: BeginUpdateResource BeginUpdateResourceW ! FUNCTION: BindIoCompletionCallback ! FUNCTION: BuildCommDCBA ! FUNCTION: BuildCommDCBAndTimeoutsA @@ -1013,7 +1014,8 @@ CONSTANT: DUPLICATE_SAME_ACCESS 2 ! FUNCTION: EncodePointer ! FUNCTION: EncodeSystemPointer ! FUNCTION: EndUpdateResourceA -! FUNCTION: EndUpdateResourceW +FUNCTION: BOOL EndUpdateResourceW ( HANDLE hUpdate, BOOL fDiscard ) ; +ALIAS: EndUpdateResource EndUpdateResourceW ! FUNCTION: EnterCriticalSection ! FUNCTION: EnumCalendarInfoA ! FUNCTION: EnumCalendarInfoExA @@ -1831,7 +1833,8 @@ FUNCTION: BOOL UnmapViewOfFile ( LPCVOID lpBaseAddress ) ; ! FUNCTION: UnregisterWait ! FUNCTION: UnregisterWaitEx ! FUNCTION: UpdateResourceA -! FUNCTION: UpdateResourceW +FUNCTION: BOOL UpdateResourceW ( HANDLE hUpdate, LPCTSTR lpType, LPCTSTR lpName, WORD wLanguage, LPVOID lpData, DWORD cbData ) ; +ALIAS: UpdateResource UpdateResourceW ! FUNCTION: UTRegister ! FUNCTION: UTUnRegister ! FUNCTION: ValidateLCType From c3e60fc9c3fa8abedd12e9f63c8e67e989ed030f Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 15 Feb 2010 11:26:56 -0800 Subject: [PATCH 20/33] vm: change id of windows app icon resource to more standard "APPICON" --- vm/factor.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vm/factor.rs b/vm/factor.rs index 47f899fef6..a36ef297f1 100644 --- a/vm/factor.rs +++ b/vm/factor.rs @@ -1,2 +1,2 @@ -fraptor ICON "misc/icons/Factor.ico" +APPICON ICON "misc/icons/Factor.ico" From f1d60827389004d4ce60e5d8dbc600dd7f977e96 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 15 Feb 2010 11:43:30 -0800 Subject: [PATCH 21/33] windows.kernel32: add MAKEINTRESOURCE, standard resource types --- basis/windows/kernel32/kernel32.factor | 28 ++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/basis/windows/kernel32/kernel32.factor b/basis/windows/kernel32/kernel32.factor index 1e9a387646..576fac3a06 100644 --- a/basis/windows/kernel32/kernel32.factor +++ b/basis/windows/kernel32/kernel32.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2005, 2006 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. USING: alien alien.c-types alien.syntax kernel windows.types -multiline classes.struct ; +math multiline classes.struct ; IN: windows.kernel32 CONSTANT: MAX_PATH 260 @@ -787,6 +787,30 @@ CONSTANT: STATUS_CONTROL_C_EXIT HEX: C000013A CONSTANT: STATUS_FLOAT_MULTIPLE_FAULTS HEX: C00002B4 CONSTANT: STATUS_FLOAT_MULTIPLE_TRAPS HEX: C00002B5 +! Resource IDs +: MAKEINTRESOURCE ( int -- resource ) HEX: ffff bitand ; inline + +: RT_CURSOR ( -- id ) 1 MAKEINTRESOURCE ; inline +: RT_BITMAP ( -- id ) 2 MAKEINTRESOURCE ; inline +: RT_ICON ( -- id ) 3 MAKEINTRESOURCE ; inline +: RT_MENU ( -- id ) 4 MAKEINTRESOURCE ; inline +: RT_DIALOG ( -- id ) 5 MAKEINTRESOURCE ; inline +: RT_STRING ( -- id ) 6 MAKEINTRESOURCE ; inline +: RT_FONTDIR ( -- id ) 7 MAKEINTRESOURCE ; inline +: RT_FONT ( -- id ) 8 MAKEINTRESOURCE ; inline +: RT_ACCELERATOR ( -- id ) 9 MAKEINTRESOURCE ; inline +: RT_RCDATA ( -- id ) 10 MAKEINTRESOURCE ; inline +: RT_MESSAGETABLE ( -- id ) 11 MAKEINTRESOURCE ; inline +: RT_GROUP_CURSOR ( -- id ) 12 MAKEINTRESOURCE ; inline +: RT_GROUP_ICON ( -- id ) 14 MAKEINTRESOURCE ; inline +: RT_VERSION ( -- id ) 16 MAKEINTRESOURCE ; inline +: RT_DLGINCLUDE ( -- id ) 17 MAKEINTRESOURCE ; inline +: RT_PLUGPLAY ( -- id ) 19 MAKEINTRESOURCE ; inline +: RT_VXD ( -- id ) 20 MAKEINTRESOURCE ; inline +: RT_ANICURSOR ( -- id ) 21 MAKEINTRESOURCE ; inline +: RT_ANIICON ( -- id ) 22 MAKEINTRESOURCE ; inline +: RT_MANIFEST ( -- id ) 24 MAKEINTRESOURCE ; inline + LIBRARY: kernel32 ! FUNCTION: _hread ! FUNCTION: _hwrite @@ -826,7 +850,7 @@ FUNCTION: BOOL AllocConsole ( ) ; ! FUNCTION: BaseUpdateAppcompatCache ! FUNCTION: Beep ! FUNCTION: BeginUpdateResourceA -FUNCTION: HANDLE BeginUpdateResource ( LPCTSTR pFileName, BOOL bDeleteExistingResources ) ; +FUNCTION: HANDLE BeginUpdateResourceW ( LPCTSTR pFileName, BOOL bDeleteExistingResources ) ; ALIAS: BeginUpdateResource BeginUpdateResourceW ! FUNCTION: BindIoCompletionCallback ! FUNCTION: BuildCommDCBA From b1160f6b36aac54d743d5a7cd76906aa74804132 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 15 Feb 2010 11:49:03 -0800 Subject: [PATCH 22/33] tools.deploy.windows: embed icon.ico from deployed vocab dir into deployed exe --- basis/tools/deploy/windows/windows.factor | 24 ++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/basis/tools/deploy/windows/windows.factor b/basis/tools/deploy/windows/windows.factor index 4dad875128..9df13a9cdd 100644 --- a/basis/tools/deploy/windows/windows.factor +++ b/basis/tools/deploy/windows/windows.factor @@ -1,11 +1,15 @@ ! Copyright (C) 2007, 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: io io.files io.pathnames io.directories io.encodings.ascii kernel namespaces +USING: io io.encodings.binary io.files io.pathnames io.directories +io.encodings.ascii kernel namespaces sequences locals system splitting tools.deploy.backend tools.deploy.config tools.deploy.config.editor assocs hashtables -prettyprint combinators windows.shell32 windows.user32 ; +prettyprint combinators windows.kernel32 windows.shell32 windows.user32 +alien.c-types vocabs.metadata vocabs.loader ; IN: tools.deploy.windows +CONSTANT: app-icon-resource-id "APPICON" + : copy-dll ( bundle-name -- ) "resource:factor.dll" swap copy-file-into ; @@ -18,12 +22,26 @@ IN: tools.deploy.windows dup copy-dll deploy-ui? get ".exe" ".com" ? copy-vm ; +:: (embed-ico) ( vm ico-bytes -- ) + vm 0 BeginUpdateResource :> hUpdate + hUpdate [ + hUpdate RT_ICON app-icon-resource-id 0 ico-bytes dup byte-length + UpdateResource drop + hUpdate 0 EndUpdateResource drop + ] when ; + +: embed-ico ( vm vocab -- ) + dup vocab-windows-icon-path vocab-append-path dup exists? + [ binary file-contents (embed-ico) ] + [ 2drop ] if ; + M: winnt deploy* "resource:" [ dup deploy-config [ deploy-name get { - [ create-exe-dir ] + [ create-exe-dir dup ] + [ drop embed-ico ] [ image-name ] [ drop namespace make-deploy-image ] [ nip "" copy-resources ] From 4ebfd1ef3a84e9788a85d4b4386c2b6b0fb83305 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 15 Feb 2010 14:04:11 -0800 Subject: [PATCH 23/33] you have to parse the .ico file yourself and update individual RT_ICON and RT_GROUP_ICON resources. lame --- basis/tools/deploy/windows/ico/ico.factor | 72 +++++++++++++++++++++++ basis/tools/deploy/windows/windows.factor | 12 +--- 2 files changed, 74 insertions(+), 10 deletions(-) create mode 100755 basis/tools/deploy/windows/ico/ico.factor mode change 100644 => 100755 basis/tools/deploy/windows/windows.factor diff --git a/basis/tools/deploy/windows/ico/ico.factor b/basis/tools/deploy/windows/ico/ico.factor new file mode 100755 index 0000000000..8ea7af348d --- /dev/null +++ b/basis/tools/deploy/windows/ico/ico.factor @@ -0,0 +1,72 @@ +USING: accessors alien alien.c-types arrays classes.struct combinators +io.backend kernel locals math sequences specialized-arrays +tools.deploy.windows windows.kernel32 windows.types ; +IN: tools.deploy.windows.ico + +group-directory-entry ( ico i -- group ) + [ { + [ Width>> ] [ Height>> ] [ Colors>> ] [ Reserved>> ] + [ Planes>> ] [ BitsPerPixel>> ] [ ImageSize>> ] + } cleave ] [ 1 + ] bi* group-directory-entry >c-ptr ; inline + +: ico-icon ( directory-entry bytes -- subbytes ) + [ [ ImageOffset>> dup ] [ ImageSize>> + ] bi ] dip subseq ; inline + +:: ico-group-and-icons ( bytes -- group-bytes icon-bytes ) + bytes ico-header memory>struct :> header + + ico-header heap-size bytes + header ImageCount>> :> directory + + directory dup length iota [ ico>group-directory-entry ] { } 2map-as + :> group-directory + directory [ bytes ico-icon ] { } map-as :> icon-bytes + + header clone >c-ptr group-directory concat append + icon-bytes ; inline + +PRIVATE> + +:: embed-icon-resource ( exe ico-bytes id -- ) + exe normalize-path 1 BeginUpdateResource :> hUpdate + hUpdate [ + ico-bytes ico-group-and-icons :> ( group icons ) + hUpdate RT_GROUP_ICON id 0 group dup byte-length + UpdateResource drop + + icons [| icon i | + hUpdate RT_ICON i 1 + MAKEINTRESOURCE 0 icon dup byte-length + UpdateResource drop + ] each-index + + hUpdate 0 EndUpdateResource drop + ] when ; + diff --git a/basis/tools/deploy/windows/windows.factor b/basis/tools/deploy/windows/windows.factor old mode 100644 new mode 100755 index 9df13a9cdd..9f0b22847b --- a/basis/tools/deploy/windows/windows.factor +++ b/basis/tools/deploy/windows/windows.factor @@ -5,7 +5,7 @@ io.encodings.ascii kernel namespaces sequences locals system splitting tools.deploy.backend tools.deploy.config tools.deploy.config.editor assocs hashtables prettyprint combinators windows.kernel32 windows.shell32 windows.user32 -alien.c-types vocabs.metadata vocabs.loader ; +alien.c-types vocabs.metadata vocabs.loader tools.deploy.windows.ico ; IN: tools.deploy.windows CONSTANT: app-icon-resource-id "APPICON" @@ -22,17 +22,9 @@ CONSTANT: app-icon-resource-id "APPICON" dup copy-dll deploy-ui? get ".exe" ".com" ? copy-vm ; -:: (embed-ico) ( vm ico-bytes -- ) - vm 0 BeginUpdateResource :> hUpdate - hUpdate [ - hUpdate RT_ICON app-icon-resource-id 0 ico-bytes dup byte-length - UpdateResource drop - hUpdate 0 EndUpdateResource drop - ] when ; - : embed-ico ( vm vocab -- ) dup vocab-windows-icon-path vocab-append-path dup exists? - [ binary file-contents (embed-ico) ] + [ binary file-contents app-icon-resource-id embed-icon-resource ] [ 2drop ] if ; M: winnt deploy* From bd2b72ad08348337e4d04f830f7d09c2abea1f21 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 15 Feb 2010 14:18:26 -0800 Subject: [PATCH 24/33] update vocabs and tools.deploy docs to mention icon files --- basis/tools/deploy/deploy-docs.factor | 4 +++- core/vocabs/loader/loader-docs.factor | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) mode change 100644 => 100755 basis/tools/deploy/deploy-docs.factor mode change 100644 => 100755 core/vocabs/loader/loader-docs.factor diff --git a/basis/tools/deploy/deploy-docs.factor b/basis/tools/deploy/deploy-docs.factor old mode 100644 new mode 100755 index 2cbb2869de..a552bd04fb --- a/basis/tools/deploy/deploy-docs.factor +++ b/basis/tools/deploy/deploy-docs.factor @@ -11,7 +11,9 @@ ARTICLE: "prepare-deploy" "Preparing to deploy an application" } ; ARTICLE: "deploy-resources" "Deployed resource files" -"To include additional files in your deployed application, specify their names in a vocabulary's " { $snippet "resources.txt" } " file. The " { $snippet "resources.txt" } " file contains one glob pattern per line. These patterns are expanded relative to the vocabulary directory; files outside of the vocabulary directory cannot be referenced. If a file inside the vocabulary directory matches any of these patterns, it will be included in deployed applications that reference the vocabulary. If a subdirectory matches, its contents will be included recursively." ; +"To include additional files in your deployed application, specify their names in a vocabulary's " { $snippet "resources.txt" } " file. The " { $snippet "resources.txt" } " file contains one glob pattern per line. These patterns are expanded relative to the vocabulary directory; files outside of the vocabulary directory cannot be referenced. If a file inside the vocabulary directory matches any of these patterns, it will be included in deployed applications that reference the vocabulary. If a subdirectory matches, its contents will be included recursively." +$nl +"If the deployed vocabulary includes an icon file for the current platform (" { $snippet "icon.ico" } " on Windows, or " { $snippet "icon.icns" } " on MacOS X), it will be embedded in the deployed application as its GUI icon." ; ARTICLE: "tools.deploy.usage" "Deploy tool usage" "Once the necessary deployment flags have been set, the application can be deployed:" diff --git a/core/vocabs/loader/loader-docs.factor b/core/vocabs/loader/loader-docs.factor old mode 100644 new mode 100755 index 7db3cdd5c2..ce4a319a42 --- a/core/vocabs/loader/loader-docs.factor +++ b/core/vocabs/loader/loader-docs.factor @@ -52,6 +52,8 @@ $nl { { $snippet "foo/bar/summary.txt" } " - a one-line description." } { { $snippet "foo/bar/tags.txt" } " - a whitespace-separated list of tags which classify the vocabulary. Consult " { $link "vocab-tags" } " for a list of existing tags you can reuse." } } +"An icon file representing the vocabulary can also be provided. A file named " { $snippet "icon.ico" } " will be used as the application icon when the application is deployed on Windows. A file named " { $snippet "icon.icns" } " will be used when the application is deployed on MacOS X." +$nl "The " { $link POSTPONE: USE: } " and " { $link POSTPONE: USING: } " words load vocabularies which have not been loaded yet, as needed." $nl "Vocabularies can also be loaded at run time, without altering the vocabulary search path. This is done by calling a word which loads a vocabulary if it is not in the image, doing nothing if it is:" From f37fcf7eb73f004fdcef8f35dd6248748855200f Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 15 Feb 2010 14:29:36 -0800 Subject: [PATCH 25/33] add icons for gpu.demos.raytrace --- extra/gpu/demos/raytrace/icon.icns | Bin 0 -> 44630 bytes extra/gpu/demos/raytrace/icon.ico | Bin 0 -> 9854 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 extra/gpu/demos/raytrace/icon.icns create mode 100644 extra/gpu/demos/raytrace/icon.ico diff --git a/extra/gpu/demos/raytrace/icon.icns b/extra/gpu/demos/raytrace/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..38288036baa024af238df95e765878622f7e625e GIT binary patch literal 44630 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 (h)`8}IkJNKW6fH!u68{%Cl8ZHlnuI# zTNbBcs}fT9tc`%JdI2XDpzr*-^DC_7Cw!;mKlx5J`^4V9V+v3k9-+R5;#G9Gg{&tJ zl^)hT^2pY)VTydmBY=f>tGG~j&g>B5mm1&Jgqv8 zXi$8znygXQD(h-CT_&we1jAzxia;iRVsG? z9_Kpd(2&A6a6I+=GP0aNKzUW|!!u*CWvKp)Sk;Hzr*&^nS5Jw<8?2v_vXVa`Wua(( zUXMcWjP35}nMKc@oW_R$vXnqTc}4BYhpq}QO~|p-%;k#~QioLUrlqG#W*5!QpL4d7 zKjUm!oi}yOtlmjWy)$d}X#uc+EGCdpUZz{VV)bxoNkR@^yb7mXC^jy>1$alt?6c^r zjGuA3l0WBkS=|#lXDa^`a9RR7`o%Hr}8-O?3H&Im6`MCHag3+K}N0%!HYE%a{O zStHHh%>116mHZ#1FUECa=gfaffDKgd>8f zrn945?j3>GRsWF}7CFTWGrO;?%$U(917U`vsz-R>t2tz@GQYAwzi{D_g+s#gaMMNf z+C`@X^j+>-=^Snbx8{E`$CCexImTGes?3~TwdB+d!QIptGKB0d73bhCfwL~Tv(i(+C-`_~XvXxJ z9TOYuxRK}Iv)SVRfz8I4A{R|nrcHq~m^VYg@h^J*tG80q+0#op^xZgerod&988fC& zpINzgsKGrE8$FKu89mNwHrZoCubeb} z=Cmo3?Q)W*sPf1UmF>}VmU$pa9GxPtSE{DsO4Ax-bjLYwuJOjt`CQmNk-#OV& z@8?Euo%Vm*yZ)G}syKf6&5PfX3W}98VIXOf@aGJDjLa2C3bHj7!&xm8tSlyqBI#N- zEq^d`*xaz$m`S3wM9nPCV7fMZ1|c9S#z0%(2(%FByr1XX_s+fdoO{o?ⓈFaPB$Z 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 literal 0 HcmV?d00001 From f01487eb8351fba796ca65a821df8ad89eeb3415 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 16 Feb 2010 23:52:38 +1300 Subject: [PATCH 26/33] A few documentation fixes --- basis/math/vectors/simd/simd-docs.factor | 24 ++++++++++++++++--- basis/stack-checker/errors/errors-docs.factor | 6 ++--- core/combinators/combinators-docs.factor | 6 ++--- core/sequences/sequences-docs.factor | 4 +--- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/basis/math/vectors/simd/simd-docs.factor b/basis/math/vectors/simd/simd-docs.factor index 540838bdd5..bcc05564fc 100644 --- a/basis/math/vectors/simd/simd-docs.factor +++ b/basis/math/vectors/simd/simd-docs.factor @@ -8,7 +8,7 @@ ARTICLE: "math.vectors.simd.intro" "Introduction to SIMD support" $nl "SIMD support in the processor takes the form of instruction sets which operate on vector registers. By operating on multiple scalar values at the same time, code which operates on points, colors, and other vector data can be sped up." $nl -"In Factor, SIMD support is exposed in the form of special-purpose SIMD " { $link "sequence-protocol" } " implementations. These are fixed-length, homogeneous sequences. They are referred to as vectors, but should not be confused with Factor's " { $link "vectors" } ", which can hold any type of object and can be resized.)." +"In Factor, SIMD support is exposed in the form of special-purpose SIMD " { $link "sequence-protocol" } " implementations. These are fixed-length, homogeneous sequences. They are referred to as vectors, but should not be confused with Factor's " { $link "vectors" } ", which can hold any type of object and can be resized." $nl "The words in the " { $vocab-link "math.vectors" } " vocabulary, which can be used with any sequence of numbers, are special-cased by the compiler. If the compiler can prove that only SIMD vectors are used, it expands " { $link "math-vectors" } " into " { $link "math.vectors.simd.intrinsics" } ". While in the general case, SIMD intrinsics operate on heap-allocated SIMD vectors, that too can be optimized since in many cases the compiler unbox SIMD vectors, storing them directly in registers." $nl @@ -36,7 +36,7 @@ $nl ARTICLE: "math.vectors.simd.types" "SIMD vector types" "Each SIMD vector type is named " { $snippet "scalar-count" } ", where " { $snippet "scalar" } " is a scalar C type and " { $snippet "count" } " is a vector dimension." $nl -"The following vector types are available:" +"The following 128-bit vector types are defined in the " { $vocab-link "math.vectors.simd" } " vocabulary:" { $code "char-16" "uchar-16" @@ -48,6 +48,19 @@ $nl "ulonglong-2" "float-4" "double-2" +} +"Double-width 256-bit vector types are defined in the " { $vocab-link "math.vectors.simd.cords" } " vocabulary:" +{ $code + "char-32" + "uchar-32" + "short-16" + "ushort-16" + "int-8" + "uint-8" + "longlong-4" + "ulonglong-4" + "float-8" + "double-4" } ; ARTICLE: "math.vectors.simd.words" "SIMD vector words" @@ -142,7 +155,12 @@ M\\ actor advance optimized.""" """USE: compiler.tree.debugger M\\ actor advance test-mr mr.""" } -"An example of a high-performance algorithm that uses SIMD primitives can be found in the " { $vocab-link "benchmark.nbody-simd" } " vocabulary." ; +"Example of a high-performance algorithms that use SIMD primitives can be found in the following vocabularies:" +{ $list + { $vocab-link "benchmark.nbody-simd" } + { $vocab-link "benchmark.raytracer-simd" } + { $vocab-link "random.sfmt" } +} ; ARTICLE: "math.vectors.simd.intrinsics" "Low-level SIMD primitives" "The words in the " { $vocab-link "math.vectors.simd.intrinsics" } " vocabulary are used to implement SIMD support. These words have three disadvantages compared to the higher-level " { $link "math-vectors" } " words:" diff --git a/basis/stack-checker/errors/errors-docs.factor b/basis/stack-checker/errors/errors-docs.factor index 4b432e733f..9aa7ed0d14 100644 --- a/basis/stack-checker/errors/errors-docs.factor +++ b/basis/stack-checker/errors/errors-docs.factor @@ -134,10 +134,10 @@ HELP: inconsistent-recursive-call-error } ; ARTICLE: "inference-errors" "Stack checker errors" -"These " { $link "inference" } " failure conditions are reported in one of two ways:" +"Stack effect checking failure conditions are reported in one of two ways:" { $list - { { $link "tools.inference" } " throws them as errors" } - { "The " { $link "compiler" } " reports them via " { $link "tools.errors" } } + { { $link "tools.inference" } " report them when fed quotations interactively" } + { "The " { $link "compiler" } " reports them while compiling words, via the " { $link "tools.errors" } " mechanism" } } "Errors thrown when insufficient information is available to calculate the stack effect of a call to a combinator or macro (see " { $link "inference-combinators" } "):" { $subsections diff --git a/core/combinators/combinators-docs.factor b/core/combinators/combinators-docs.factor index 02114496f4..31183a629e 100644 --- a/core/combinators/combinators-docs.factor +++ b/core/combinators/combinators-docs.factor @@ -176,15 +176,15 @@ ARTICLE: "conditionals" "Conditional combinators" { $subsections "conditionals-boolean-equivalence" } { $see-also "booleans" "bitwise-arithmetic" both? either? } ; -ARTICLE: "dataflow-combinators" "Data flow combinators" -"Data flow combinators express common dataflow patterns such as performing a operation while preserving its inputs, applying multiple operations to a single value, applying a set of operations to a set of values, or applying a single operation to multiple values." +ARTICLE: "dataflow-combinators" "Dataflow combinators" +"Dataflow combinators express common dataflow patterns such as performing a operation while preserving its inputs, applying multiple operations to a single value, applying a set of operations to a set of values, or applying a single operation to multiple values." { $subsections "dip-keep-combinators" "cleave-combinators" "spread-combinators" "apply-combinators" } -"More intricate data flow can be constructed by composing " { $link "curried-dataflow" } "." ; +"More intricate dataflow can be constructed by composing " { $link "curried-dataflow" } "." ; ARTICLE: "combinators-quot" "Quotation construction utilities" "Some words for creating quotations which can be useful for implementing method combinations and compiler transforms:" diff --git a/core/sequences/sequences-docs.factor b/core/sequences/sequences-docs.factor index 819b5b2115..02dadb323c 100644 --- a/core/sequences/sequences-docs.factor +++ b/core/sequences/sequences-docs.factor @@ -1416,9 +1416,7 @@ $nl ARTICLE: "sequences-integers" "Counted loops" "A virtual sequence is defined for iterating over integers from zero." { $subsection iota } -"For example, calling " { $link iota } " on the integer 3 produces a sequence containing the elements 0, 1, and 2. This is very useful for performing counted loops." -$nl -"This means the " { $link each } " combinator, given an integer, simply calls a quotation that number of times, pushing a counter on each iteration that ranges from 0 up to that integer:" +"For example, calling " { $link iota } " on the integer 3 produces a sequence containing the elements 0, 1, and 2. This is very useful for performing counted loops using words such as " { $link each } ":" { $example "3 iota [ . ] each" "0\n1\n2" } "A common idiom is to iterate over a sequence, while also maintaining a loop counter. This can be done using " { $link each-index } ", " { $link map-index } " and " { $link reduce-index } "." $nl From bd0ca0e2aa61db6c1d966e2e7979f23136dd3627 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 17 Feb 2010 00:12:55 +1300 Subject: [PATCH 27/33] Clean up some tags --- basis/cocoa/tags.txt | 1 + basis/images/tags.txt | 2 +- basis/windows/com/tags.txt | 1 + core/alien/tags.txt | 1 + extra/annotations/tags.txt | 3 +-- extra/gpu/demos/bunny/tags.txt | 1 + extra/gpu/demos/raytrace/tags.txt | 1 + extra/svg/tags.txt | 1 - extra/terrain/tags.txt | 1 + extra/trees/splay/tags.txt | 1 - extra/trees/tags.txt | 1 - extra/tty-server/tags.txt | 2 +- extra/webapps/fjsc/tags.txt | 3 ++- 13 files changed, 11 insertions(+), 8 deletions(-) create mode 100644 extra/gpu/demos/bunny/tags.txt create mode 100644 extra/gpu/demos/raytrace/tags.txt create mode 100644 extra/terrain/tags.txt diff --git a/basis/cocoa/tags.txt b/basis/cocoa/tags.txt index 2320bdd648..86dd9eeb91 100644 --- a/basis/cocoa/tags.txt +++ b/basis/cocoa/tags.txt @@ -1,2 +1,3 @@ unportable bindings +ffi diff --git a/basis/images/tags.txt b/basis/images/tags.txt index 04b54a06f4..9347bd326b 100644 --- a/basis/images/tags.txt +++ b/basis/images/tags.txt @@ -1 +1 @@ -bitmap graphics +graphics diff --git a/basis/windows/com/tags.txt b/basis/windows/com/tags.txt index 2320bdd648..86dd9eeb91 100755 --- a/basis/windows/com/tags.txt +++ b/basis/windows/com/tags.txt @@ -1,2 +1,3 @@ unportable bindings +ffi diff --git a/core/alien/tags.txt b/core/alien/tags.txt index 86a7c8e637..7ea420feed 100644 --- a/core/alien/tags.txt +++ b/core/alien/tags.txt @@ -1 +1,2 @@ compiler +ffi diff --git a/extra/annotations/tags.txt b/extra/annotations/tags.txt index 278296de5e..ef1aab0d0e 100644 --- a/extra/annotations/tags.txt +++ b/extra/annotations/tags.txt @@ -1,2 +1 @@ -comments -annotation +tools diff --git a/extra/gpu/demos/bunny/tags.txt b/extra/gpu/demos/bunny/tags.txt new file mode 100644 index 0000000000..cb5fc203e1 --- /dev/null +++ b/extra/gpu/demos/bunny/tags.txt @@ -0,0 +1 @@ +demos diff --git a/extra/gpu/demos/raytrace/tags.txt b/extra/gpu/demos/raytrace/tags.txt new file mode 100644 index 0000000000..cb5fc203e1 --- /dev/null +++ b/extra/gpu/demos/raytrace/tags.txt @@ -0,0 +1 @@ +demos diff --git a/extra/svg/tags.txt b/extra/svg/tags.txt index 0cf061a252..65e8f3eddb 100644 --- a/extra/svg/tags.txt +++ b/extra/svg/tags.txt @@ -1,3 +1,2 @@ xml graphics -svg diff --git a/extra/terrain/tags.txt b/extra/terrain/tags.txt new file mode 100644 index 0000000000..cb5fc203e1 --- /dev/null +++ b/extra/terrain/tags.txt @@ -0,0 +1 @@ +demos diff --git a/extra/trees/splay/tags.txt b/extra/trees/splay/tags.txt index fb6cea7147..42d711b32b 100644 --- a/extra/trees/splay/tags.txt +++ b/extra/trees/splay/tags.txt @@ -1,2 +1 @@ collections -trees diff --git a/extra/trees/tags.txt b/extra/trees/tags.txt index fb6cea7147..42d711b32b 100644 --- a/extra/trees/tags.txt +++ b/extra/trees/tags.txt @@ -1,2 +1 @@ collections -trees diff --git a/extra/tty-server/tags.txt b/extra/tty-server/tags.txt index 587fb228f3..8dfb43b578 100644 --- a/extra/tty-server/tags.txt +++ b/extra/tty-server/tags.txt @@ -1,4 +1,4 @@ tools applications demos -networking +network diff --git a/extra/webapps/fjsc/tags.txt b/extra/webapps/fjsc/tags.txt index 1b93c9eb4d..14d6b62728 100644 --- a/extra/webapps/fjsc/tags.txt +++ b/extra/webapps/fjsc/tags.txt @@ -1 +1,2 @@ -webapp +web +examples From 59bd725c378f4bff12affd8177deb9dddbe4c685 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 17 Feb 2010 00:13:08 +1300 Subject: [PATCH 28/33] websites.concatenative: fix mason web app invocation --- extra/websites/concatenative/concatenative.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/websites/concatenative/concatenative.factor b/extra/websites/concatenative/concatenative.factor index fd4fb7515f..92a4942fe6 100644 --- a/extra/websites/concatenative/concatenative.factor +++ b/extra/websites/concatenative/concatenative.factor @@ -98,7 +98,7 @@ SYMBOL: dh-file test-db "concatenative.org" add-responder test-db "paste.factorcode.org" add-responder test-db "planet.factorcode.org" add-responder - "builds.factorcode.org" add-responder + test-db "builds.factorcode.org" add-responder home "docs" append-path "docs.factorcode.org" add-responder home "cgi" append-path "gitweb.factorcode.org" add-responder main-responder set-global ; From 4c1cd406c909b967caa61ca31a92f966b64654b1 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 17 Feb 2010 00:16:08 +1300 Subject: [PATCH 29/33] Bump version number to 0.93 --- Factor.app/Contents/Info.plist | 4 +++- GNUmakefile | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Factor.app/Contents/Info.plist b/Factor.app/Contents/Info.plist index c87520d0fd..1c07f95643 100644 --- a/Factor.app/Contents/Info.plist +++ b/Factor.app/Contents/Info.plist @@ -31,8 +31,10 @@ Factor CFBundlePackageType APPL + CFBundleVersion + 0.93 NSHumanReadableCopyright - Copyright © 2003-2009, Slava Pestov and friends + Copyright © 2003-2010 Factor developers NSServices diff --git a/GNUmakefile b/GNUmakefile index c4796de63b..eac1c696df 100755 --- a/GNUmakefile +++ b/GNUmakefile @@ -4,7 +4,7 @@ ifdef CONFIG AR = ar LD = ld - VERSION = 0.92 + VERSION = 0.93 BUNDLE = Factor.app LIBPATH = -L/usr/X11R6/lib From 55cf38163f1b9cc3ce5368b90f96a9041240398a Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 17 Feb 2010 00:32:53 +1300 Subject: [PATCH 30/33] inverse: remove unnecessary dependency on debugger --- basis/inverse/inverse.factor | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/basis/inverse/inverse.factor b/basis/inverse/inverse.factor index d112e4e6eb..3485b3efa7 100644 --- a/basis/inverse/inverse.factor +++ b/basis/inverse/inverse.factor @@ -1,10 +1,10 @@ ! Copyright (C) 2007, 2009 Daniel Ehrenberg. ! See http://factorcode.org/license.txt for BSD license. USING: accessors kernel locals words summary slots quotations -sequences assocs math arrays stack-checker effects -continuations debugger classes.tuple namespaces make vectors -bit-arrays byte-arrays strings sbufs math.functions macros -sequences.private combinators mirrors splitting combinators.smart +sequences assocs math arrays stack-checker effects continuations +classes.tuple namespaces make vectors bit-arrays byte-arrays +strings sbufs math.functions macros sequences.private +combinators mirrors splitting combinators.smart combinators.short-circuit fry words.symbol generalizations classes ; IN: inverse From 177e741ea073b0c4982f5317224284ba7394f94d Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 17 Feb 2010 00:33:08 +1300 Subject: [PATCH 31/33] tools.deploy: add deploy tests for gpu.demos.raytrace and gpu.demos.bunny --- basis/tools/deploy/deploy-tests.factor | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/basis/tools/deploy/deploy-tests.factor b/basis/tools/deploy/deploy-tests.factor index 987b4aa8a1..8e25afdcfe 100644 --- a/basis/tools/deploy/deploy-tests.factor +++ b/basis/tools/deploy/deploy-tests.factor @@ -24,8 +24,12 @@ IN: tools.deploy.tests [ ] [ "terrain" shake-and-bake 1700000 small-enough? ] unit-test +[ ] [ "gpu.demos.raytrace" shake-and-bake 2500000 small-enough? ] unit-test + [ ] [ "bunny" shake-and-bake 2500000 small-enough? ] unit-test +[ ] [ "gpu.demos.bunny" shake-and-bake 3500000 small-enough? ] unit-test + os macosx? [ [ ] [ "webkit-demo" shake-and-bake 500000 small-enough? ] unit-test ] when From 5557353f97a67b5791d149f0b20d7584e0023857 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 17 Feb 2010 01:52:09 +1300 Subject: [PATCH 32/33] tools.deploy.windows.ico: add unportable tag so that load-all doesn't load Win32 bindings on non-Windows platforms --- basis/tools/deploy/windows/ico/tags.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 basis/tools/deploy/windows/ico/tags.txt diff --git a/basis/tools/deploy/windows/ico/tags.txt b/basis/tools/deploy/windows/ico/tags.txt new file mode 100644 index 0000000000..6bf68304bb --- /dev/null +++ b/basis/tools/deploy/windows/ico/tags.txt @@ -0,0 +1 @@ +unportable From 4b41d8e83e93807439749ae9c8d6c42755cd2217 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 17 Feb 2010 01:52:16 +1300 Subject: [PATCH 33/33] vocabs.metadata.resources: fix help lint --- basis/vocabs/metadata/resources/resources-docs.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basis/vocabs/metadata/resources/resources-docs.factor b/basis/vocabs/metadata/resources/resources-docs.factor index b4289ff388..a20775e937 100644 --- a/basis/vocabs/metadata/resources/resources-docs.factor +++ b/basis/vocabs/metadata/resources/resources-docs.factor @@ -16,7 +16,7 @@ HELP: vocab-resource-files } { $description "Outputs a sequence containing the individual resource files and directories that match the patterns specified in " { $snippet "vocab" } "'s " { $snippet "resources.txt" } " file. Any matching directories will also have their contents recursively included in the output. The paths in the output will be relative to " { $snippet "vocab" } "'s directory." } ; -ARTICLE: "vocabs.metadata.resources" "vocabs.metadata.resources" +ARTICLE: "vocabs.metadata.resources" "Vocabulary resource metadata" "The " { $vocab-link "vocabs.metadata.resources" } " vocabulary contains words to retrieve the full list of files that match the patterns specified in a vocabulary's " { $snippet "resources.txt" } " file." { $subsections vocab-resource-files