From 76e6ede2ecc6518dc7fb90e4dedd64b9e9b20653 Mon Sep 17 00:00:00 2001 From: nomennescio Date: Fri, 18 Oct 2019 15:05:04 +0200 Subject: [PATCH] Imported https://downloads.factorcode.org/releases/0.87/Factor-0.87.tar.gz --- Makefile | 22 +- README.txt | 23 +- TODO.FACTOR.txt => TODO.txt | 110 ++-- apps/README.txt | 29 + apps/all.factor | 14 + {contrib => apps}/automata.factor | 6 +- {contrib => apps}/benchmarks/ack.factor | 0 .../benchmarks/continuations.factor | 0 .../benchmarks/empty-loop.factor | 0 {contrib => apps}/benchmarks/fac.factor | 0 {contrib => apps}/benchmarks/fib.factor | 0 .../benchmarks/hashtables.factor | 0 {contrib => apps}/benchmarks/help.factor | 2 +- {contrib => apps}/benchmarks/iteration.factor | 0 {contrib => apps}/benchmarks/load.factor | 2 +- .../benchmarks/prettyprint.factor | 0 .../benchmarks/reverse-complement-test-in.txt | 0 .../reverse-complement-test-out.txt | 0 .../benchmarks/reverse-complement.factor | 0 {contrib => apps}/benchmarks/sort.factor | 0 {contrib => apps}/benchmarks/strings.factor | 0 {contrib => apps}/benchmarks/vectors.factor | 0 {contrib => apps}/boids.factor | 12 +- {examples => apps}/factorbot.factor | 18 +- {contrib => apps}/factory/README.txt | 10 +- {contrib => apps}/factory/factory.factor | 0 apps/factory/load.factor | 7 + apps/furnace-fjsc/furnace-fjsc.factor | 76 +++ apps/furnace-fjsc/load.factor | 14 + apps/furnace-fjsc/repl.furnace | 41 ++ apps/furnace-onigiri/load.factor | 11 + apps/furnace-onigiri/onigiri.factor | 278 ++++++++ .../furnace-onigiri/onigiri.facts | 0 apps/furnace-onigiri/onigiri.todo | 38 ++ .../resources/onigirihouse.css | 7 + .../templates/admin-footer.furnace | 3 + .../templates/admin-header.furnace | 15 + .../templates/analytics.furnace | 8 + apps/furnace-onigiri/templates/atom.furnace | 24 + apps/furnace-onigiri/templates/edit.furnace | 9 + apps/furnace-onigiri/templates/entry.furnace | 10 + apps/furnace-onigiri/templates/front.furnace | 25 + .../templates/meta-list.furnace | 22 + .../templates/no-entry.furnace | 5 + .../templates/user-edit.furnace | 15 + .../templates/user-list.furnace | 15 + .../furnace-pastebin/annotate-paste.furnace | 0 .../furnace-pastebin/annotation.furnace | 0 apps/furnace-pastebin/load.factor | 4 + .../furnace-pastebin/new-paste.furnace | 0 .../furnace-pastebin/paste-list.furnace | 0 .../furnace-pastebin/paste-summary.furnace | 0 .../furnace-pastebin/pastebin.factor | 2 +- .../furnace-pastebin/show-paste.furnace | 0 apps/help-lint.factor | 115 ++++ {contrib => apps}/hexdump/hexdump.factor | 5 +- {contrib => apps}/hexdump/load.factor | 2 +- {contrib => apps}/hexdump/test/hexdump.factor | 0 .../lindenmayer/camera-slate.factor | 0 {contrib => apps}/lindenmayer/camera.factor | 0 .../lindenmayer/lindenmayer.factor | 16 +- apps/lindenmayer/load.factor | 2 + {contrib => apps}/lindenmayer/opengl.factor | 2 +- {contrib => apps}/lindenmayer/turtle.factor | 2 +- apps/lisppaste.factor | 15 + {examples => apps}/mandel/load.factor | 4 +- {examples => apps}/mandel/mandel.factor | 0 {examples => apps}/mandel/tests.factor | 0 apps/random-tester/load.factor | 9 + .../random-tester/random-tester.factor | 47 +- apps/random-tester/random-tester2.factor | 163 +++++ {contrib => apps}/random-tester/random.factor | 6 +- apps/random-tester/type.factor | 88 +++ apps/random-tester/utils.factor | 73 +++ {examples => apps}/raytracer.factor | 4 +- apps/rss/atom.xml | 45 ++ apps/rss/load.factor | 10 + {contrib => apps}/rss/readme.txt | 0 {contrib => apps}/rss/rss-reader.factor | 14 +- apps/rss/rss.factor | 89 +++ apps/rss/rss1.xml | 67 ++ apps/rss/test.factor | 37 ++ apps/show-dataflow/load.factor | 3 + .../show-dataflow}/print-dataflow.factor | 12 +- .../show-dataflow/show-dataflow.factor | 65 +- apps/show-dataflow/tests.factor | 9 + .../space-invaders/cpu-8080.factor | 2 +- apps/space-invaders/load.factor | 11 + {contrib => apps}/space-invaders/readme.txt | 0 .../space-invaders/space-invaders.factor | 4 +- {contrib => apps}/space-invaders/tests.factor | 0 {contrib => apps}/tetris/README.txt | 0 {contrib => apps}/tetris/load.factor | 6 +- .../tetris/test/tetris-board.factor | 0 .../tetris/test/tetris-piece.factor | 0 {contrib => apps}/tetris/test/tetris.factor | 0 {contrib => apps}/tetris/tetris-board.factor | 0 .../tetris/tetris-colours.factor | 0 {contrib => apps}/tetris/tetris-gadget.factor | 2 +- {contrib => apps}/tetris/tetris-gl.factor | 0 {contrib => apps}/tetris/tetris-piece.factor | 0 {contrib => apps}/tetris/tetris.factor | 0 {contrib => apps}/tetris/tetromino.factor | 0 {examples => apps}/turing.factor | 2 +- apps/wee-url/load.factor | 4 + apps/wee-url/responder.factor | 99 +++ apps/wee-url/store.factor | 20 + contrib/all.factor | 28 - contrib/cairo/cairo_sdl.factor | 40 -- contrib/cairo/cairo_simple.factor | 57 -- contrib/cairo/cairo_text.factor | 102 --- contrib/cairo/load.factor | 1 - contrib/factory/load.factor | 8 - contrib/furnace-pastebin/load.factor | 4 - contrib/furnace/tools/search.fhtml | 15 - contrib/httpd/embedded.factor | 68 -- contrib/httpd/examples/load.factor | 8 - contrib/jedit/jedit.facts | 7 - contrib/jedit/load.factor | 2 - contrib/json/json.facts | 39 -- contrib/lindenmayer/load.factor | 2 - contrib/parser-combinators/load.factor | 8 - contrib/random-tester/load.factor | 6 - contrib/random-tester/utils.factor | 13 - contrib/rss/load.factor | 6 - contrib/rss/rss.factor | 107 ---- contrib/slate/load.factor | 1 - contrib/space-invaders/load.factor | 11 - contrib/textmate/load.factor | 2 - contrib/vim/generate-vim-syntax.factor | 10 - contrib/vim/load.factor | 4 - contrib/xml/parser.factor | 265 -------- contrib/xml/test.factor | 19 - contrib/xml/tokenizer.factor | 219 ------- contrib/xml/utilities.factor | 50 -- contrib/xml/writer.factor | 69 -- contrib/xml/xml.facts | 28 - .../bootstrap/boot-stage1.factor | 25 +- .../bootstrap/boot-stage2.factor | 50 +- {library => core}/bootstrap/init.factor | 5 +- {library => core}/bootstrap/init.facts | 0 {library => core}/bootstrap/primitives.factor | 6 +- .../bootstrap/profile-amd64.factor | 0 .../bootstrap/profile-pentium4.factor | 0 .../bootstrap/profile-ppc.factor | 0 .../bootstrap/profile-x86.factor | 0 {library => core}/cli.factor | 13 +- {library => core}/collections/arrays.factor | 2 + {library => core}/collections/arrays.facts | 9 +- {library => core}/collections/flatten.factor | 0 {library => core}/collections/flatten.facts | 0 {library => core}/collections/graphs.factor | 0 {library => core}/collections/graphs.facts | 0 {library => core}/collections/growable.factor | 0 {library => core}/collections/growable.facts | 0 .../collections/hashtables.factor | 27 +- .../collections/hashtables.facts | 21 +- .../collections/namespaces.factor | 11 +- .../collections/namespaces.facts | 10 - {library => core}/collections/queues.factor | 5 + {library => core}/collections/queues.facts | 0 {library => core}/collections/sbuf.factor | 2 +- {library => core}/collections/sbuf.facts | 0 .../collections/sequence-combinators.factor | 24 +- .../collections/sequence-combinators.facts | 35 +- .../collections/sequence-sort.factor | 8 +- .../collections/sequence-sort.facts | 8 + .../collections/sequences-epilogue.factor | 42 +- .../collections/sequences-epilogue.facts | 25 +- .../collections/sequences.factor | 6 +- {library => core}/collections/sequences.facts | 7 +- {library => core}/collections/slicing.factor | 8 +- {library => core}/collections/slicing.facts | 0 {library => core}/collections/strings.factor | 4 +- {library => core}/collections/strings.facts | 0 {library => core}/collections/vectors.factor | 4 +- {library => core}/collections/vectors.facts | 2 +- .../collections/virtual-sequences.factor | 6 +- .../collections/virtual-sequences.facts | 0 .../compiler/alien/alien-callback.factor | 27 +- .../compiler/alien/alien-callback.facts | 0 .../compiler/alien/alien-indirect.factor | 2 +- .../compiler/alien/alien-indirect.facts | 2 +- .../compiler/alien/alien-invoke.factor | 0 .../compiler/alien/alien-invoke.facts | 2 +- .../compiler/alien/aliens.factor | 0 {library => core}/compiler/alien/aliens.facts | 0 .../compiler/alien/c-types.factor | 2 +- .../compiler/alien/c-types.facts | 0 .../compiler/alien/compiler.factor | 0 .../compiler/alien/malloc.factor | 0 {library => core}/compiler/alien/malloc.facts | 0 .../compiler/alien/objc/load.factor | 2 +- .../compiler/alien/objc/objc-ppc.factor | 0 .../compiler/alien/objc/objc-x86.factor | 0 .../compiler/alien/objc/runtime.factor | 0 .../compiler/alien/objc/subclassing.factor | 0 .../compiler/alien/objc/utilities.factor | 0 core/compiler/alien/prettyprint.factor | 14 + .../compiler/alien/primitive-types.factor | 0 .../compiler/alien/structs.factor | 2 +- .../compiler/alien/structs.facts | 0 .../compiler/alien/syntax.factor | 0 {library => core}/compiler/alien/syntax.facts | 8 +- {library => core}/compiler/amd64/alien.factor | 0 .../compiler/amd64/architecture.factor | 3 +- .../compiler/amd64/intrinsics.factor | 0 core/compiler/amd64/load.factor | 7 + {library => core}/compiler/compiler.factor | 22 +- {library => core}/compiler/compiler.facts | 13 +- .../compiler/generator/architecture.factor | 8 +- .../compiler/generator/generator.factor | 11 +- .../compiler/generator/templates.factor | 0 .../compiler/generator/xt.factor | 0 .../compiler/inference/branches.factor | 0 .../compiler/inference/branches.facts | 0 .../compiler/inference/dataflow.factor | 7 +- .../compiler/inference/dataflow.facts | 2 +- .../compiler/inference/errors.factor | 0 .../compiler/inference/inference.factor | 8 +- .../compiler/inference/inference.facts | 4 +- .../compiler/inference/known-words.factor | 6 +- .../compiler/inference/shuffle.factor | 4 +- core/compiler/inference/shuffle.facts | 10 + .../compiler/inference/stack.factor | 0 .../compiler/inference/stack.facts | 0 .../compiler/inference/variables.factor | 13 +- .../compiler/inference/words.factor | 18 +- .../compiler/inference/words.facts | 0 {library => core}/compiler/load.factor | 4 +- .../compiler/optimizer/call-optimizers.factor | 0 .../compiler/optimizer/class-infer.factor | 0 .../compiler/optimizer/inline-methods.factor | 0 .../compiler/optimizer/kill-literals.factor | 0 .../compiler/optimizer/optimizer.factor | 0 .../compiler/optimizer/specializers.factor | 0 .../compiler/pentium4/intrinsics.factor | 18 + core/compiler/pentium4/load.factor | 4 + {library => core}/compiler/ppc/allot.factor | 0 .../compiler/ppc/architecture.factor | 16 +- .../compiler/ppc/assembler.factor | 2 +- .../compiler/ppc/intrinsics.factor | 11 + {library => core}/compiler/ppc/load.factor | 2 +- .../compiler/test/alien-objects.factor | 0 {library => core}/compiler/test/alien.factor | 0 .../compiler/test/bail-out.factor | 0 .../compiler/test/callbacks.factor | 15 + {library => core}/compiler/test/float.factor | 0 .../compiler/test/generic.factor | 0 .../compiler/test/identities.factor | 0 {library => core}/compiler/test/ifte.factor | 0 .../compiler/test/inference.factor | 11 + .../compiler/test/intrinsics.factor | 0 .../compiler/test/optimizer.factor | 0 {library => core}/compiler/test/simple.factor | 10 + core/compiler/test/stack-trace.factor | 28 + {library => core}/compiler/test/stack.factor | 0 .../compiler/test/templates.factor | 0 .../compiler/x86/alien-macosx.factor | 11 +- {library => core}/compiler/x86/alien.factor | 4 +- {library => core}/compiler/x86/allot.factor | 0 .../compiler/x86/architecture.factor | 8 + .../compiler/x86/assembler.factor | 17 +- .../compiler/x86/intrinsics.factor | 0 {library => core}/compiler/x86/load.factor | 2 +- {library => core}/continuations.factor | 0 {library => core}/continuations.facts | 0 core/debugger.factor | 109 ++++ {library/tools => core}/debugger.facts | 22 +- {library => core}/definitions.factor | 4 +- {library => core}/definitions.facts | 0 core/documentation.factor | 77 +++ {library => core}/effects.factor | 0 {library => core}/effects.facts | 2 +- {library => core}/errors.factor | 33 +- {library => core}/errors.facts | 20 +- {library => core}/generic/classes.factor | 0 {library => core}/generic/classes.facts | 5 +- .../generic/early-generic.factor | 0 {library => core}/generic/early-generic.facts | 0 {library => core}/generic/generic.factor | 0 {library => core}/generic/generic.facts | 0 .../generic/math-combination.factor | 0 .../generic/math-combination.facts | 0 {library => core}/generic/methods.factor | 18 +- {library => core}/generic/methods.facts | 6 +- {library => core}/generic/slots.factor | 2 +- {library => core}/generic/slots.facts | 2 +- .../generic/standard-combination.factor | 0 .../generic/standard-combination.facts | 0 {library => core}/generic/tuple.factor | 4 +- {library => core}/generic/tuple.facts | 9 +- {doc => core}/handbook/alien.facts | 22 +- {doc => core}/handbook/changes.facts | 86 ++- {doc => core}/handbook/cli.facts | 8 +- {doc => core}/handbook/collections.facts | 0 {doc => core}/handbook/compiler.facts | 7 +- {doc => core}/handbook/conventions.facts | 6 + {doc => core}/handbook/cookbook.facts | 28 +- {doc => core}/handbook/dataflow.facts | 32 +- core/handbook/handbook.facts | 58 ++ {doc => core}/handbook/hashtables.facts | 41 +- {doc => core}/handbook/help.facts | 45 +- {doc => core}/handbook/inference.facts | 11 +- {doc => core}/handbook/load.factor | 8 +- {doc => core}/handbook/math.facts | 26 +- {doc => core}/handbook/modules.facts | 35 +- {doc => core}/handbook/objects.facts | 51 +- core/handbook/os.facts | 21 + {doc => core}/handbook/parser.facts | 0 {doc => core}/handbook/prettyprinter.facts | 0 {doc => core}/handbook/sequences.facts | 10 +- {doc => core}/handbook/streams.facts | 22 +- {doc => core}/handbook/syntax.facts | 0 {doc => core}/handbook/tools.facts | 42 +- {doc => core}/handbook/words.facts | 0 {library => core}/help/help.factor | 47 +- {library => core}/help/help.facts | 13 +- core/help/load.factor | 11 + {library => core}/help/markup.factor | 86 ++- {library => core}/help/markup.facts | 11 +- core/help/stylesheet.factor | 102 +++ {library => core}/help/syntax.factor | 4 +- {library => core}/help/syntax.facts | 0 .../help => core/help/test}/search.factor | 0 .../help => core/help/test}/topics.factor | 12 +- {library => core}/help/topics.factor | 44 +- {library => core}/help/topics.facts | 0 {library => core}/io/binary.factor | 0 {library => core}/io/binary.facts | 0 {library => core}/io/buffer/buffer.factor | 0 {library => core}/io/buffer/buffer.facts | 0 {library => core}/io/buffer/load.factor | 2 +- .../io/buffer/test/buffer.factor | 0 {library => core}/io/c-streams.factor | 2 +- {library => core}/io/c-streams.facts | 8 +- {library => core}/io/duplex-stream.factor | 0 {library => core}/io/duplex-stream.facts | 0 {library => core}/io/files.factor | 26 +- {library => core}/io/files.facts | 15 +- {library => core}/io/lines.factor | 2 +- {library => core}/io/lines.facts | 0 {library => core}/io/nested-style.factor | 0 {library => core}/io/nested-style.facts | 0 {library => core}/io/null-stream.factor | 0 {library => core}/io/plain-stream.factor | 2 +- {library => core}/io/plain-stream.facts | 0 {library => core}/io/server.factor | 0 {library => core}/io/server.facts | 0 {library => core}/io/stdio.factor | 10 - {library => core}/io/stdio.facts | 2 +- {library => core}/io/stream.factor | 0 {library => core}/io/stream.facts | 5 +- {library => core}/io/string-streams.factor | 3 + {library => core}/io/string-streams.facts | 0 {library => core}/io/styles.factor | 0 {library => core}/io/styles.facts | 4 +- {library => core}/io/unix/files.factor | 0 {library => core}/io/unix/io.factor | 8 +- {library => core}/io/unix/load.factor | 4 +- {library => core}/io/unix/sockets.factor | 0 .../io/unix/syscalls-freebsd.factor | 0 .../io/unix/syscalls-linux.factor | 0 .../io/unix/syscalls-macosx.factor | 0 .../io/unix/syscalls-solaris.factor | 0 {library => core}/io/unix/syscalls.factor | 0 {library => core}/io/unix/types.factor | 0 {library => core}/io/windows/errors.factor | 0 .../io/windows/io-internals.factor | 0 {library => core}/io/windows/io.factor | 0 {library => core}/io/windows/load.factor | 4 +- {library => core}/io/windows/server.factor | 0 {library => core}/io/windows/stream.factor | 1 + {library => core}/kernel.factor | 2 +- {library => core}/kernel.facts | 20 +- core/listener.factor | 55 ++ core/listener.facts | 29 + {library => core}/load.factor | 121 +--- {library => core}/math/arc-trig-hyp.factor | 0 {library => core}/math/arc-trig-hyp.facts | 0 {library => core}/math/complex.factor | 0 {library => core}/math/complex.facts | 0 {library => core}/math/constants.factor | 0 {library => core}/math/constants.facts | 0 {library => core}/math/float.factor | 0 {library => core}/math/float.facts | 0 {library => core}/math/integer.factor | 5 +- {library => core}/math/integer.facts | 4 - {library => core}/math/libm.factor | 0 {library => core}/math/math.factor | 2 - {library => core}/math/math.facts | 0 {library => core}/math/parse-numbers.factor | 5 + {library => core}/math/parse-numbers.facts | 6 +- {library => core}/math/pow.factor | 0 {library => core}/math/pow.facts | 0 {library => core}/math/random.factor | 0 {library => core}/math/random.facts | 0 {library => core}/math/ratio.factor | 0 {library => core}/math/ratio.facts | 0 {library => core}/math/trig-hyp.factor | 0 {library => core}/math/trig-hyp.facts | 0 {library => core}/math/vectors.factor | 0 {library => core}/math/vectors.facts | 2 +- {library => core}/modules.factor | 104 ++- {library => core}/modules.facts | 25 +- {library => core}/prettyprint/backend.factor | 22 +- {library => core}/prettyprint/backend.facts | 0 {library => core}/prettyprint/core.factor | 0 {library => core}/prettyprint/core.facts | 0 .../prettyprint}/describe.factor | 6 +- .../tools => core/prettyprint}/describe.facts | 0 {library => core}/prettyprint/frontend.factor | 2 +- {library => core}/prettyprint/frontend.facts | 10 +- {library => core}/prettyprint/sections.factor | 0 {library => core}/prettyprint/sections.facts | 17 +- {library => core}/quotations.factor | 5 +- {library => core}/quotations.facts | 2 +- {library => core}/syntax/early-parser.factor | 3 +- {library => core}/syntax/early-parser.facts | 0 {library => core}/syntax/parse-stream.factor | 192 +++--- {library => core}/syntax/parse-stream.facts | 9 +- {library => core}/syntax/parse-syntax.factor | 1 + {library => core}/syntax/parse-syntax.facts | 16 +- {library => core}/syntax/parser.factor | 10 +- {library => core}/syntax/parser.facts | 8 +- {library => core}/test/binary.factor | 0 .../test/collections/arrays.factor | 2 +- .../test/collections/hashtables.factor | 13 + .../test/collections/namespaces.factor | 0 .../test/collections/queues.factor | 0 .../test/collections/sbuf.factor | 0 .../test/collections/sequences.factor | 12 +- .../test/collections/strings.factor | 6 +- .../test/collections/vectors.factor | 0 {library => core}/test/combinators.factor | 0 {library => core}/test/continuations.factor | 0 {library => core}/test/errors.factor | 3 + {library => core}/test/generic.factor | 4 + {library => core}/test/init.factor | 0 {library => core}/test/io/binary.txt | 0 core/test/io/empty-file.txt | 0 core/test/io/io.factor | 91 +++ {library => core}/test/io/mac-os-eol.txt | 0 {library => core}/test/io/nested-style.factor | 0 core/test/io/no-trailing-eol.factor | 4 + {library => core}/test/io/unix-eol.txt | 0 {library => core}/test/io/windows-eol.txt | 0 {library => core}/test/kernel.factor | 14 +- {library => core}/test/math/bitops.factor | 0 {library => core}/test/math/complex.factor | 0 {library => core}/test/math/float.factor | 8 + {library => core}/test/math/integer.factor | 8 +- {library => core}/test/math/irrational.factor | 0 .../test/math/math-combinators.factor | 0 {library => core}/test/math/random.factor | 0 {library => core}/test/math/rational.factor | 0 {library => core}/test/parse-number.factor | 4 + {library => core}/test/parser.factor | 22 +- {library => core}/test/parsing-word.factor | 0 {library => core}/test/prettyprint.factor | 0 {library => core}/test/random.factor | 0 {library => core}/test/redefine.factor | 0 {library => core}/test/threads.factor | 0 {library => core}/test/tuple.factor | 6 + {library => core}/test/words.factor | 0 {library => core}/threads.factor | 5 +- {library => core}/threads.facts | 12 +- {library => core}/tools/completion.factor | 29 +- core/tools/debugger.factor | 27 + core/tools/debugger.facts | 8 + {library => core}/tools/definitions.factor | 35 +- {library => core}/tools/definitions.facts | 26 +- {library => core}/tools/errors.factor | 20 +- .../bootstrap => core/tools}/image.factor | 15 +- {library/bootstrap => core/tools}/image.facts | 0 {library => core}/tools/inspector.factor | 4 +- {library => core}/tools/inspector.facts | 3 +- {library => core}/tools/interpreter.factor | 6 +- core/tools/load.factor | 30 + {library => core}/tools/memory.factor | 0 {library => core}/tools/memory.facts | 3 + core/tools/modules.factor | 69 ++ core/tools/modules.facts | 17 + {library => core}/tools/test.factor | 8 - {library => core}/tools/test.facts | 12 +- {library => core/tools}/test/annotate.factor | 0 {library => core/tools}/test/inspector.factor | 0 .../tools}/test/interpreter.factor | 52 ++ {library => core/tools}/test/memory.factor | 0 {library => core/tools}/test/tools.factor | 2 +- {library => core}/tools/word-tools.factor | 11 +- {library => core}/tools/word-tools.facts | 0 {library => core}/ui/backend.factor | 4 +- core/ui/backend.facts | 42 ++ .../ui/cocoa/application-utils.factor | 0 .../ui/cocoa/core-foundation.factor | 0 {library => core}/ui/cocoa/dialogs.factor | 0 {library => core}/ui/cocoa/init-cocoa.factor | 2 + {library => core}/ui/cocoa/load.factor | 4 +- .../ui/cocoa/pasteboard-utils.factor | 0 {library => core}/ui/cocoa/services.factor | 0 {library => core}/ui/cocoa/test/cocoa.factor | 0 {library => core}/ui/cocoa/types.factor | 0 {library => core}/ui/cocoa/ui.factor | 17 +- {library => core}/ui/cocoa/view-utils.factor | 17 +- .../ui/cocoa/window-utils.factor | 0 {library => core}/ui/commands.factor | 44 +- core/ui/commands.facts | 42 ++ core/ui/debugger.factor | 44 ++ core/ui/debugger.facts | 20 + .../ui/freetype/freetype-gl.factor | 31 +- {library => core}/ui/freetype/freetype.factor | 0 {library => core}/ui/freetype/load.factor | 4 +- {library => core}/ui/gadgets.factor | 43 +- core/ui/gadgets.facts | 171 +++++ {library => core}/ui/gadgets/books.factor | 0 core/ui/gadgets/books.facts | 11 + {library => core}/ui/gadgets/borders.factor | 3 - core/ui/gadgets/borders.facts | 15 + {library => core}/ui/gadgets/buttons.factor | 45 +- core/ui/gadgets/buttons.facts | 70 ++ {library => core}/ui/gadgets/controls.factor | 19 +- core/ui/gadgets/controls.facts | 47 ++ {library => core}/ui/gadgets/frames.factor | 4 +- core/ui/gadgets/frames.facts | 42 ++ .../ui/gadgets/grid-lines.factor | 3 - core/ui/gadgets/grid-lines.facts | 5 + {library => core}/ui/gadgets/grids.factor | 9 +- core/ui/gadgets/grids.facts | 41 ++ .../ui/gadgets/incremental.factor | 0 core/ui/gadgets/incremental.facts | 28 + core/ui/gadgets/labelled-gadget.factor | 44 ++ core/ui/gadgets/labelled-gadget.facts | 22 + core/ui/gadgets/labels.factor | 34 + core/ui/gadgets/labels.facts | 23 + {library => core}/ui/gadgets/lists.factor | 59 +- core/ui/gadgets/lists.facts | 22 + {library => core}/ui/gadgets/menus.factor | 23 +- core/ui/gadgets/menus.facts | 7 + {library => core}/ui/gadgets/outliner.factor | 20 +- core/ui/gadgets/outliner.facts | 25 + .../ui/gadgets/panes.factor | 144 +++-- core/ui/gadgets/panes.facts | 62 ++ .../ui/gadgets/paragraphs.factor | 0 core/ui/gadgets/presentations.factor | 57 ++ core/ui/gadgets/presentations.facts | 40 ++ {library => core}/ui/gadgets/scrolling.factor | 81 +-- core/ui/gadgets/scrolling.facts | 44 ++ {library => core}/ui/gadgets/sliders.factor | 64 +- core/ui/gadgets/sliders.facts | 70 ++ {library => core}/ui/gadgets/theme.factor | 45 +- core/ui/gadgets/tracks.factor | 39 ++ core/ui/gadgets/tracks.facts | 36 ++ {library => core}/ui/gadgets/viewports.factor | 15 +- core/ui/gadgets/viewports.facts | 10 + {library => core}/ui/gestures.factor | 52 +- core/ui/gestures.facts | 198 ++++++ core/ui/handbook/existing-gadgets.facts | 200 ++++++ core/ui/handbook/gestures.facts | 139 ++++ core/ui/handbook/layouts.facts | 145 +++++ core/ui/handbook/load.factor | 10 + core/ui/handbook/models.facts | 56 ++ core/ui/handbook/new-gadgets.facts | 138 ++++ .../ui => core/ui/handbook}/tools.facts | 76 ++- core/ui/handbook/ui.facts | 125 ++++ {library => core}/ui/hierarchy.factor | 32 +- core/ui/hierarchy.facts | 92 +++ {library => core}/ui/layouts.factor | 24 +- core/ui/layouts.facts | 112 ++++ {library => core}/ui/load.factor | 66 +- {library => core}/ui/models.factor | 52 +- core/ui/models.facts | 163 +++++ {library => core}/ui/opengl/gl.factor | 2 - {library => core}/ui/opengl/glu.factor | 1 - core/ui/opengl/load.factor | 7 + .../ui/opengl/utilities.factor | 24 +- core/ui/opengl/utilities.facts | 96 +++ {library => core}/ui/paint.factor | 3 +- core/ui/paint.facts | 40 ++ {library => core}/ui/test/commands.factor | 0 {library => core}/ui/test/document.factor | 33 +- {library => core}/ui/test/editor.factor | 6 +- core/ui/test/gadgets.factor | 27 + core/ui/test/lists.factor | 4 + {library => core}/ui/test/models.factor | 11 + {library => core}/ui/test/panes.factor | 5 +- .../ui/test/presentations.factor | 0 {library => core}/ui/test/rectangles.factor | 0 core/ui/test/scrolling.factor | 35 + core/ui/test/search.factor | 19 + {library => core}/ui/test/sliders.factor | 2 +- core/ui/text.factor | 40 ++ core/ui/text.facts | 82 +++ {library => core}/ui/text/commands.factor | 13 +- {library => core}/ui/text/document.factor | 57 +- core/ui/text/document.facts | 94 +++ {library => core}/ui/text/editor.factor | 44 +- core/ui/text/editor.facts | 83 +++ {library => core}/ui/text/elements.factor | 19 +- core/ui/text/elements.facts | 34 + {library => core}/ui/timers.factor | 0 core/ui/timers.facts | 27 + {library => core}/ui/tools/browser.factor | 70 +- {library => core}/ui/tools/help.factor | 22 +- core/ui/tools/interactor.factor | 151 +++++ core/ui/tools/interactor.facts | 9 + core/ui/tools/listener.factor | 146 +++++ core/ui/tools/load.factor | 20 + {library => core}/ui/tools/messages.factor | 2 +- {library => core}/ui/tools/operations.factor | 216 ++++--- core/ui/tools/search.factor | 183 ++++++ core/ui/tools/test/listener.factor | 18 + core/ui/tools/test/workspace.factor | 13 + {library => core}/ui/tools/tools.factor | 20 +- {library => core}/ui/tools/walker.factor | 2 +- {library => core}/ui/tools/workspace.factor | 96 ++- core/ui/ui.factor | 79 +++ core/ui/ui.facts | 14 + core/ui/windows.factor | 73 +++ core/ui/windows.facts | 35 + {library => core}/ui/windows/clipboard.factor | 0 {library => core}/ui/windows/load.factor | 4 +- {library => core}/ui/windows/ui.factor | 19 +- {library => core}/ui/world.factor | 51 +- core/ui/world.facts | 32 + {library => core}/ui/x11/clipboard.factor | 0 {library => core}/ui/x11/constants.factor | 0 {library => core}/ui/x11/events.factor | 0 {library => core}/ui/x11/glx-utils.factor | 0 {library => core}/ui/x11/glx.factor | 0 {library => core}/ui/x11/load.factor | 4 +- {library => core}/ui/x11/ui.factor | 15 +- {library => core}/ui/x11/utilities.factor | 0 {library => core}/ui/x11/windows.factor | 6 +- {library => core}/ui/x11/xlib.factor | 0 core/version.factor | 2 + {library => core}/windows/dlls.factor | 0 .../windows/gdi32-constants.factor | 0 {library => core}/windows/gdi32.factor | 0 {library => core}/windows/io.factor | 0 .../windows/kernel32-constants.factor | 0 .../windows/kernel32-structs.factor | 0 .../windows/kernel32-types.factor | 0 {library => core}/windows/kernel32.factor | 0 {library => core}/windows/load.factor | 2 +- {library => core}/windows/opengl32.factor | 0 {library => core}/windows/types.factor | 0 .../windows/user32-constants.factor | 0 .../windows/user32-structs.factor | 0 {library => core}/windows/user32-types.factor | 0 {library => core}/windows/user32.factor | 0 {library => core}/windows/utils.factor | 0 .../windows/windows-messages.factor | 0 {library => core}/windows/winsock.factor | 0 {library => core}/words.factor | 17 +- {library => core}/words.facts | 14 +- debian/architecture.sh | 8 - debian/changelog | 30 - debian/compat | 1 - debian/control | 23 - debian/copyright | 33 - debian/dirs | 3 - debian/docs | 6 - debian/rules | 77 --- debian/scripts/factor-export | 38 -- debian/scripts/factor-import | 38 -- debian/scripts/factor-init | 47 -- debian/scripts/factor-run | 72 --- demos/all.factor | 5 + demos/cocoa/speech.factor | 15 + demos/color-picker.factor | 39 ++ demos/gesture-logger.factor | 32 + demos/haar.factor | 17 + demos/hello-world.factor | 11 + {examples => demos}/lcd.factor | 4 +- demos/mslug-talk.factor | 288 +++++++++ demos/nehe/load.factor | 19 + demos/nehe/nehe-utils.factor | 5 + demos/nehe/nehe2.factor | 45 ++ demos/nehe/nehe3.factor | 49 ++ demos/nehe/nehe4.factor | 73 +++ {examples => demos}/numbers-game.factor | 4 +- demos/rot13.factor | 17 + doc/comparison.tex | 284 --------- doc/cont-responder-tutorial.txt | 562 ---------------- doc/handbook/handbook.facts | 112 ---- examples/print-dataflow/load.factor | 3 - examples/print-dataflow/tests.factor | 9 - library/compiler/amd64/load.factor | 7 - library/compiler/inference/shuffle.facts | 10 - library/compiler/pentium4/load.factor | 4 - library/help/search.factor | 85 --- library/help/search.facts | 39 -- library/help/stylesheet.factor | 99 --- library/test/io/io.factor | 72 --- library/test/io/no-trailing-eol.factor | 2 - library/test/stream.factor | 8 - library/tools/debugger.factor | 115 ---- library/tools/listener.factor | 51 -- library/tools/listener.facts | 29 - library/ui/gadgets/labels.factor | 26 - library/ui/gadgets/panes.factor | 112 ---- library/ui/gadgets/tracks.factor | 147 ----- library/ui/opengl/load.factor | 6 - library/ui/test/gadgets.factor | 7 - library/ui/test/listener.factor | 13 - library/ui/test/lists.factor | 4 - library/ui/test/search.factor | 22 - library/ui/test/titled-gadget.factor | 7 - library/ui/test/tracks.factor | 55 -- library/ui/text/editor.facts | 13 - library/ui/text/interactor.factor | 69 -- library/ui/tools/listener.factor | 209 ------ library/ui/tools/search.factor | 92 --- library/ui/ui.factor | 193 ------ library/version.factor | 2 - {contrib => libs}/README.txt | 21 +- {contrib => libs}/alien.factor | 10 +- libs/all.factor | 23 + {contrib => libs}/base64/base64.factor | 2 +- {contrib => libs}/base64/load.factor | 2 +- {contrib => libs}/base64/test.factor | 0 .../basic-authentication.factor | 64 ++ .../basic-authentication.facts | 64 ++ libs/basic-authentication/load.factor | 20 + libs/basic-authentication/tests.factor | 66 ++ {contrib/cairo => libs}/cairo.factor | 1 + {contrib => libs}/calendar/calendar.factor | 14 +- {contrib => libs}/calendar/load.factor | 2 +- {contrib => libs}/calendar/os-unix.factor | 0 {contrib => libs}/calendar/os-win32.factor | 0 .../calendar/test/calendar.factor | 0 {contrib => libs}/cocoa-callbacks.factor | 2 +- .../concurrency/concurrency-tests.factor | 0 .../concurrency/concurrency.factor | 2 +- .../concurrency/concurrency.facts | 4 +- {contrib => libs}/concurrency/load.factor | 4 +- .../coroutines/coroutines.factor | 0 {contrib => libs}/coroutines/load.factor | 2 +- {contrib => libs}/coroutines/tests.factor | 0 {contrib => libs}/crypto/barrett.factor | 0 .../crypto/blum-blum-shub.factor | 0 {contrib => libs}/crypto/common.factor | 0 {contrib => libs}/crypto/crc32.factor | 0 {contrib => libs}/crypto/load.factor | 4 +- {contrib => libs}/crypto/md5.factor | 0 {contrib => libs}/crypto/miller-rabin.factor | 0 {contrib => libs}/crypto/montgomery.factor | 0 {contrib => libs}/crypto/random.factor | 0 {contrib => libs}/crypto/rc4.factor | 0 {contrib => libs}/crypto/rsa.factor | 0 {contrib => libs}/crypto/sha1.factor | 10 +- {contrib => libs}/crypto/sha2.factor | 0 {contrib => libs}/crypto/test/barrett.factor | 0 .../crypto/test/blum-blum-shub.factor | 0 {contrib => libs}/crypto/test/common.factor | 0 {contrib => libs}/crypto/test/crc32.factor | 0 {contrib => libs}/crypto/test/md5.factor | 0 .../crypto/test/miller-rabin.factor | 0 .../crypto/test/montgomery.factor | 0 {contrib => libs}/crypto/test/rsa.factor | 0 {contrib => libs}/crypto/test/sha1.factor | 5 +- {contrib => libs}/crypto/test/sha2.factor | 0 {contrib => libs}/crypto/timing.factor | 0 {contrib => libs}/dlists.factor | 2 +- {contrib => libs}/emacs.factor | 6 +- {contrib => libs}/factor.el | 0 libs/farkup/farkup.factor | 86 +++ libs/farkup/farkup.facts | 0 libs/farkup/farkup.list | 20 + libs/farkup/load.factor | 12 + libs/fjsc/fjsc.factor | 271 ++++++++ libs/fjsc/load.factor | 15 + libs/fjsc/resources/bootstrap.factor | 35 + libs/fjsc/resources/bootstrap.js | 599 ++++++++++++++++++ libs/fjsc/resources/jquery.js | 1 + libs/fjsc/tests.factor | 42 ++ {contrib => libs}/furnace/load.factor | 4 +- {contrib => libs}/furnace/responder.factor | 12 +- .../furnace/test/responder.factor | 0 .../furnace/test/validator.factor | 0 .../furnace/tools/browser.factor | 2 +- .../furnace/tools/browser.furnace | 2 +- {contrib => libs}/furnace/tools/help.factor | 13 +- .../furnace/tools/list.furnace | 0 {contrib => libs}/furnace/validator.factor | 0 .../gap-buffer/circular-tests.factor | 0 {contrib => libs}/gap-buffer/circular.factor | 0 .../gap-buffer/gap-buffer-tests.factor | 0 .../gap-buffer/gap-buffer.factor | 0 {contrib => libs}/gap-buffer/load.factor | 2 +- .../hardware-info/cpuinfo.factor | 0 {contrib => libs}/hardware-info/load.factor | 2 +- libs/hardware-info/os-unix.factor | 0 .../hardware-info/os-windows.factor | 0 .../http-client}/http-client.factor | 6 +- libs/http-client/load.factor | 5 + .../http-client/test.factor | 0 {contrib => libs}/http.factor | 2 + .../httpd/callback-responder.factor | 2 +- {contrib => libs}/httpd/cont-responder.factor | 0 .../httpd/default-responders.factor | 2 +- {contrib => libs}/httpd/documentation.tex | 0 libs/httpd/embedded.factor | 36 ++ .../httpd/examples/cont-examples.factor | 0 .../httpd/examples/cont-numbers-game.factor | 0 libs/httpd/examples/load.factor | 8 + {contrib => libs}/httpd/file-responder.factor | 12 +- {contrib => libs}/httpd/html-tags.factor | 2 +- {contrib => libs}/httpd/html.factor | 15 +- {contrib => libs}/httpd/httpd.factor | 2 +- {contrib => libs}/httpd/load.factor | 8 +- {contrib => libs}/httpd/mime.factor | 2 +- {contrib => libs}/httpd/prototype-js.factor | 0 .../httpd/resources/prototype.js | 0 .../httpd/resources/stylesheet.css | 0 {contrib => libs}/httpd/responder.factor | 28 +- libs/httpd/test/bug.fhtml | 5 + libs/httpd/test/bug.html | 1 + libs/httpd/test/embedded.factor | 18 + libs/httpd/test/example.fhtml | 8 + libs/httpd/test/example.html | 8 + {contrib => libs}/httpd/test/html.factor | 10 +- {contrib => libs}/httpd/test/httpd.factor | 0 libs/httpd/test/stack.fhtml | 1 + libs/httpd/test/stack.html | 1 + .../httpd/test/url-encoding.factor | 0 {contrib => libs}/jedit/jedit.factor | 3 - libs/jedit/load.factor | 2 + {contrib => libs}/jni/jni-internals.factor | 0 {contrib => libs}/jni/jni.factor | 0 {contrib => libs}/jni/load.factor | 2 +- {contrib => libs}/json/json-reader.factor | 40 +- {contrib => libs}/json/json-writer.factor | 23 +- libs/json/json.facts | 18 + {contrib => libs}/json/load.factor | 4 +- {contrib => libs}/lazy-lists/examples.factor | 0 {contrib => libs}/lazy-lists/lazy-io.factor | 0 {contrib => libs}/lazy-lists/lazy-io.facts | 0 {contrib => libs}/lazy-lists/lazy.factor | 5 +- {contrib => libs}/lazy-lists/lazy.facts | 0 {contrib => libs}/lazy-lists/lists.factor | 14 +- {contrib => libs}/lazy-lists/lists.facts | 7 +- {contrib => libs}/lazy-lists/load.factor | 2 +- {contrib => libs}/lazy-lists/old-doc.html | 0 .../lazy-lists/test/examples.factor | 0 .../lazy-lists/test/lists.factor | 0 .../levenshtein/levenshtein.factor | 0 {examples => libs}/levenshtein/load.factor | 2 +- {examples => libs}/levenshtein/tests.factor | 0 {contrib => libs}/match/load.factor | 2 +- {contrib => libs}/match/match.factor | 19 +- {contrib => libs}/match/match.facts | 36 +- {contrib => libs}/match/tests.factor | 0 {contrib => libs}/math/TODO.txt | 0 {contrib => libs}/math/analysis.factor | 0 {contrib => libs}/math/combinatorics.factor | 0 {contrib => libs}/math/load.factor | 4 +- {contrib => libs}/math/matrices.factor | 7 + .../math/numerical-integration.factor | 23 +- {contrib => libs}/math/polynomials.factor | 0 {contrib => libs}/math/primes.factor | 0 {contrib => libs}/math/quaternions.factor | 0 {contrib => libs}/math/statistics.factor | 0 {contrib => libs}/math/test.factor | 0 {contrib => libs}/math/utils.factor | 29 +- libs/parser-combinators/load.factor | 13 + .../parser-combinators.factor | 115 +++- .../parser-combinators.facts | 16 + .../parser-combinators.html | 0 libs/parser-combinators/search-replace.factor | 36 ++ libs/parser-combinators/search-replace.facts | 75 +++ libs/parser-combinators/simple-parsers.factor | 31 + libs/parser-combinators/simple-parsers.facts | 77 +++ .../parser-combinators/tests.factor | 4 +- .../partial-continuations.factor | 0 libs/porter-stemmer/load.factor | 4 + .../porter-stemmer}/porter-stemmer.factor | 0 .../porter-stemmer}/porter-stemmer.facts | 18 + .../porter-stemmer/test}/output.txt | 0 .../test}/porter-stemmer.factor | 4 +- .../help => libs/porter-stemmer/test}/voc.txt | 0 {contrib => libs}/postgresql/libpq.factor | 0 {contrib => libs}/postgresql/load.factor | 2 +- .../postgresql/postgresql-test.factor | 0 .../postgresql/postgresql.factor | 0 {contrib => libs}/process/load.factor | 2 +- {contrib => libs}/process/os-unix.factor | 0 {contrib => libs}/process/os-windows.factor | 0 {contrib => libs}/sequences.factor | 2 +- {contrib => libs}/serialize/load.factor | 2 +- {contrib => libs}/serialize/serialize.factor | 2 +- {contrib => libs}/serialize/serialize.facts | 0 {contrib => libs}/serialize/tests.factor | 0 libs/shuffle/load.factor | 7 + libs/shuffle/shuffle.factor | 36 ++ libs/shuffle/test/shuffle.factor | 7 + libs/slate/load.factor | 1 + {contrib => libs}/slate/slate.factor | 6 +- {contrib => libs}/splay-trees/load.factor | 2 +- .../splay-trees/splay-trees.factor | 3 +- {contrib => libs}/splay-trees/tests.factor | 0 {contrib => libs}/sqlite/libsqlite.factor | 72 +-- {contrib => libs}/sqlite/load.factor | 2 +- {contrib => libs}/sqlite/sqlite.factor | 0 {contrib => libs}/sqlite/sqlite.facts | 0 {contrib => libs}/sqlite/test.factor | 2 +- {contrib => libs}/sqlite/test.txt | 0 .../sqlite/tuple-db-tests.factor | 2 +- {contrib => libs}/sqlite/tuple-db.factor | 2 +- {contrib => libs}/sqlite/tuple-db.facts | 4 +- .../Syntaxes/Factor.tmLanguage | 2 +- .../Syntaxes/HTML (Factor).tmLanguage | 0 .../textmate/Factor.tmbundle/info.plist | 0 libs/textmate/load.factor | 2 + {contrib => libs}/textmate/textmate.factor | 0 {contrib => libs}/topology/hopf.factor | 0 {contrib => libs}/topology/laplacian.factor | 0 {contrib => libs}/topology/linear.factor | 0 {contrib => libs}/topology/load.factor | 2 +- {contrib => libs}/topology/matrix.factor | 0 {contrib => libs}/topology/simplex.factor | 0 {contrib => libs}/topology/test/hopf.factor | 0 .../topology/test/laplacian.factor | 0 {contrib => libs}/topology/test/matrix.factor | 0 .../topology/test/simplex.factor | 0 {contrib => libs}/units/constants.factor | 0 {contrib => libs}/units/dimensioned.factor | 1 + {contrib => libs}/units/load.factor | 2 +- {contrib => libs}/units/si-units.factor | 0 {contrib => libs}/units/test/units.factor | 0 {contrib => libs}/usb/load.factor | 2 +- {contrib => libs}/usb/usb-common.factor | 2 +- {contrib => libs}/usb/usb-macosx.factor | 0 {contrib => libs}/usb/usb-unix.factor | 0 {contrib => libs}/usb/usb-win32.factor | 0 {contrib => libs}/usb/usb.factor | 0 {contrib => libs}/usb/usb.facts | 0 {contrib => libs}/vars.factor | 2 +- {contrib => libs}/vim/factor.vim | 0 {contrib => libs}/vim/factor.vim.fgen | 0 libs/vim/generate-vim-syntax.factor | 10 + libs/vim/gvim7.factor | 8 + libs/vim/load.factor | 7 + {contrib => libs}/vim/vim.factor | 3 - {contrib => libs}/vim/vim.facts | 2 +- .../x11/concurrent-widgets.factor | 0 {contrib => libs}/x11/draw-string.factor | 0 {contrib => libs}/x11/load.factor | 4 +- {contrib => libs}/x11/rectangle.factor | 0 {contrib => libs}/x11/x.factor | 0 libs/xml-rpc/example.factor | 27 + {contrib/xml => libs/xml-rpc}/load.factor | 25 +- libs/xml-rpc/test.factor | 5 + libs/xml-rpc/xml-rpc.factor | 157 +++++ libs/xml-rpc/xml-rpc.facts | 71 +++ libs/xml/char-class.factor | 387 +++++++++++ libs/xml/data.factor | 41 ++ libs/xml/errors.factor | 135 ++++ libs/xml/load.factor | 21 + libs/xml/presentation.factor | 222 +++++++ libs/xml/state-parser.factor | 110 ++++ libs/xml/test/arithmetic.factor | 30 + libs/xml/test/soap.factor | 15 + libs/xml/test/soap.xml | 168 +++++ libs/xml/test/templating.factor | 49 ++ libs/xml/test/test.factor | 39 ++ {contrib/xml => libs/xml/test}/test.xml | 6 +- libs/xml/tokenize.factor | 174 +++++ libs/xml/utilities.factor | 166 +++++ libs/xml/writer.factor | 91 +++ libs/xml/xml.facts | 510 +++++++++++++++ libs/yahoo.factor | 30 + license.txt | 2 +- {contrib => unmaintained}/lambda/TODO.txt | 0 {contrib => unmaintained}/lambda/core.factor | 5 +- .../lambda/lambda.factor | 0 {contrib => unmaintained}/lambda/load.factor | 6 +- {contrib => unmaintained}/lambda/nodes.factor | 0 .../lambda/parser.factor | 0 .../lambda/test/lambda.factor | 0 vm/Config.amd64 | 1 + vm/Config.freebsd | 2 +- vm/Config.freebsd.amd64 | 2 + vm/Config.freebsd.x86 | 2 + vm/Config.linux.amd64 | 1 + vm/Config.linux.x86 | 2 + vm/Config.macosx.x86 | 3 + vm/Config.windows | 1 + vm/Config.x86 | 1 + vm/alien.c | 382 +++++------ vm/bignum.c | 23 +- vm/bignum.h | 1 - vm/bignumint.h | 2 +- vm/code_gc.c | 84 ++- vm/compiler.c | 53 +- vm/compiler.h | 1 + vm/cpu-amd64.S | 12 + vm/cpu-amd64.h | 7 + vm/cpu-ppc.S | 19 +- vm/cpu-ppc.h | 5 + vm/cpu-x86.S | 12 + vm/cpu-x86.h | 7 + vm/data_gc.c | 7 +- vm/data_gc.h | 7 + vm/debug.c | 34 +- vm/debug.h | 1 + vm/factor.c | 2 - vm/image.c | 9 - vm/io.c | 2 +- vm/mach_signal.c | 29 +- vm/os-linux-ppc.h | 4 + vm/os-macosx-ppc.h | 7 + vm/os-macosx.m | 5 +- vm/os-unix.c | 77 ++- vm/os-unix.h | 1 + vm/os-windows.c | 25 +- vm/platform.h | 6 +- vm/primitives.c | 3 +- vm/run.c | 105 ++- vm/run.h | 53 +- vm/stack.c | 18 +- vm/stack.h | 16 +- vm/types.c | 43 +- vm/types.h | 27 + 1025 files changed, 14740 insertions(+), 6858 deletions(-) rename TODO.FACTOR.txt => TODO.txt (55%) create mode 100644 apps/README.txt create mode 100644 apps/all.factor rename {contrib => apps}/automata.factor (96%) rename {contrib => apps}/benchmarks/ack.factor (100%) rename {contrib => apps}/benchmarks/continuations.factor (100%) rename {contrib => apps}/benchmarks/empty-loop.factor (100%) rename {contrib => apps}/benchmarks/fac.factor (100%) rename {contrib => apps}/benchmarks/fib.factor (100%) rename {contrib => apps}/benchmarks/hashtables.factor (100%) rename {contrib => apps}/benchmarks/help.factor (83%) rename {contrib => apps}/benchmarks/iteration.factor (100%) rename {contrib => apps}/benchmarks/load.factor (90%) rename {contrib => apps}/benchmarks/prettyprint.factor (100%) rename {contrib => apps}/benchmarks/reverse-complement-test-in.txt (100%) rename {contrib => apps}/benchmarks/reverse-complement-test-out.txt (100%) rename {contrib => apps}/benchmarks/reverse-complement.factor (100%) rename {contrib => apps}/benchmarks/sort.factor (100%) rename {contrib => apps}/benchmarks/strings.factor (100%) rename {contrib => apps}/benchmarks/vectors.factor (100%) rename {contrib => apps}/boids.factor (97%) rename {examples => apps}/factorbot.factor (86%) rename {contrib => apps}/factory/README.txt (74%) rename {contrib => apps}/factory/factory.factor (100%) create mode 100644 apps/factory/load.factor create mode 100644 apps/furnace-fjsc/furnace-fjsc.factor create mode 100644 apps/furnace-fjsc/load.factor create mode 100644 apps/furnace-fjsc/repl.furnace create mode 100644 apps/furnace-onigiri/load.factor create mode 100644 apps/furnace-onigiri/onigiri.factor rename contrib/hardware-info/os-unix.factor => apps/furnace-onigiri/onigiri.facts (100%) create mode 100644 apps/furnace-onigiri/onigiri.todo create mode 100644 apps/furnace-onigiri/resources/onigirihouse.css create mode 100644 apps/furnace-onigiri/templates/admin-footer.furnace create mode 100644 apps/furnace-onigiri/templates/admin-header.furnace create mode 100644 apps/furnace-onigiri/templates/analytics.furnace create mode 100644 apps/furnace-onigiri/templates/atom.furnace create mode 100644 apps/furnace-onigiri/templates/edit.furnace create mode 100644 apps/furnace-onigiri/templates/entry.furnace create mode 100644 apps/furnace-onigiri/templates/front.furnace create mode 100644 apps/furnace-onigiri/templates/meta-list.furnace create mode 100644 apps/furnace-onigiri/templates/no-entry.furnace create mode 100644 apps/furnace-onigiri/templates/user-edit.furnace create mode 100644 apps/furnace-onigiri/templates/user-list.furnace rename contrib/furnace-pastebin/annotate-paste.fhtml => apps/furnace-pastebin/annotate-paste.furnace (100%) rename contrib/furnace-pastebin/annotation.fhtml => apps/furnace-pastebin/annotation.furnace (100%) create mode 100644 apps/furnace-pastebin/load.factor rename contrib/furnace-pastebin/new-paste.fhtml => apps/furnace-pastebin/new-paste.furnace (100%) rename contrib/furnace-pastebin/paste-list.fhtml => apps/furnace-pastebin/paste-list.furnace (100%) rename contrib/furnace-pastebin/paste-summary.fhtml => apps/furnace-pastebin/paste-summary.furnace (100%) rename {contrib => apps}/furnace-pastebin/pastebin.factor (96%) rename contrib/furnace-pastebin/show-paste.fhtml => apps/furnace-pastebin/show-paste.furnace (100%) create mode 100644 apps/help-lint.factor rename {contrib => apps}/hexdump/hexdump.factor (84%) rename {contrib => apps}/hexdump/load.factor (75%) rename {contrib => apps}/hexdump/test/hexdump.factor (100%) rename {contrib => apps}/lindenmayer/camera-slate.factor (100%) rename {contrib => apps}/lindenmayer/camera.factor (100%) rename {contrib => apps}/lindenmayer/lindenmayer.factor (98%) create mode 100644 apps/lindenmayer/load.factor rename {contrib => apps}/lindenmayer/opengl.factor (97%) rename {contrib => apps}/lindenmayer/turtle.factor (98%) create mode 100644 apps/lisppaste.factor rename {examples => apps}/mandel/load.factor (52%) rename {examples => apps}/mandel/mandel.factor (100%) rename {examples => apps}/mandel/tests.factor (100%) create mode 100644 apps/random-tester/load.factor rename {contrib => apps}/random-tester/random-tester.factor (87%) create mode 100644 apps/random-tester/random-tester2.factor rename {contrib => apps}/random-tester/random.factor (94%) create mode 100644 apps/random-tester/type.factor create mode 100644 apps/random-tester/utils.factor rename {examples => apps}/raytracer.factor (97%) create mode 100644 apps/rss/atom.xml create mode 100644 apps/rss/load.factor rename {contrib => apps}/rss/readme.txt (100%) rename {contrib => apps}/rss/rss-reader.factor (94%) create mode 100644 apps/rss/rss.factor create mode 100644 apps/rss/rss1.xml create mode 100644 apps/rss/test.factor create mode 100644 apps/show-dataflow/load.factor rename {examples/print-dataflow => apps/show-dataflow}/print-dataflow.factor (87%) rename library/ui/tools/dataflow.factor => apps/show-dataflow/show-dataflow.factor (80%) create mode 100644 apps/show-dataflow/tests.factor rename {contrib => apps}/space-invaders/cpu-8080.factor (99%) create mode 100644 apps/space-invaders/load.factor rename {contrib => apps}/space-invaders/readme.txt (100%) rename {contrib => apps}/space-invaders/space-invaders.factor (98%) rename {contrib => apps}/space-invaders/tests.factor (100%) rename {contrib => apps}/tetris/README.txt (100%) rename {contrib => apps}/tetris/load.factor (81%) rename {contrib => apps}/tetris/test/tetris-board.factor (100%) rename {contrib => apps}/tetris/test/tetris-piece.factor (100%) rename {contrib => apps}/tetris/test/tetris.factor (100%) rename {contrib => apps}/tetris/tetris-board.factor (100%) rename {contrib => apps}/tetris/tetris-colours.factor (100%) rename {contrib => apps}/tetris/tetris-gadget.factor (98%) rename {contrib => apps}/tetris/tetris-gl.factor (100%) rename {contrib => apps}/tetris/tetris-piece.factor (100%) rename {contrib => apps}/tetris/tetris.factor (100%) rename {contrib => apps}/tetris/tetromino.factor (100%) rename {examples => apps}/turing.factor (98%) create mode 100644 apps/wee-url/load.factor create mode 100644 apps/wee-url/responder.factor create mode 100644 apps/wee-url/store.factor delete mode 100644 contrib/all.factor delete mode 100644 contrib/cairo/cairo_sdl.factor delete mode 100644 contrib/cairo/cairo_simple.factor delete mode 100644 contrib/cairo/cairo_text.factor delete mode 100644 contrib/cairo/load.factor delete mode 100644 contrib/factory/load.factor delete mode 100644 contrib/furnace-pastebin/load.factor delete mode 100644 contrib/furnace/tools/search.fhtml delete mode 100644 contrib/httpd/embedded.factor delete mode 100644 contrib/httpd/examples/load.factor delete mode 100644 contrib/jedit/jedit.facts delete mode 100644 contrib/jedit/load.factor delete mode 100644 contrib/json/json.facts delete mode 100644 contrib/lindenmayer/load.factor delete mode 100644 contrib/parser-combinators/load.factor delete mode 100644 contrib/random-tester/load.factor delete mode 100644 contrib/random-tester/utils.factor delete mode 100644 contrib/rss/load.factor delete mode 100644 contrib/rss/rss.factor delete mode 100644 contrib/slate/load.factor delete mode 100644 contrib/space-invaders/load.factor delete mode 100644 contrib/textmate/load.factor delete mode 100644 contrib/vim/generate-vim-syntax.factor delete mode 100644 contrib/vim/load.factor delete mode 100644 contrib/xml/parser.factor delete mode 100644 contrib/xml/test.factor delete mode 100644 contrib/xml/tokenizer.factor delete mode 100644 contrib/xml/utilities.factor delete mode 100644 contrib/xml/writer.factor delete mode 100644 contrib/xml/xml.facts rename {library => core}/bootstrap/boot-stage1.factor (58%) rename {library => core}/bootstrap/boot-stage2.factor (63%) rename {library => core}/bootstrap/init.factor (77%) rename {library => core}/bootstrap/init.facts (100%) rename {library => core}/bootstrap/primitives.factor (98%) rename {library => core}/bootstrap/profile-amd64.factor (100%) rename {library => core}/bootstrap/profile-pentium4.factor (100%) rename {library => core}/bootstrap/profile-ppc.factor (100%) rename {library => core}/bootstrap/profile-x86.factor (100%) rename {library => core}/cli.factor (89%) rename {library => core}/collections/arrays.factor (96%) rename {library => core}/collections/arrays.facts (80%) rename {library => core}/collections/flatten.factor (100%) rename {library => core}/collections/flatten.facts (100%) rename {library => core}/collections/graphs.factor (100%) rename {library => core}/collections/graphs.facts (100%) rename {library => core}/collections/growable.factor (100%) rename {library => core}/collections/growable.facts (100%) rename {library => core}/collections/hashtables.factor (92%) rename {library => core}/collections/hashtables.facts (93%) rename {library => core}/collections/namespaces.factor (89%) rename {library => core}/collections/namespaces.facts (90%) rename {library => core}/collections/queues.factor (88%) rename {library => core}/collections/queues.facts (100%) rename {library => core}/collections/sbuf.factor (95%) rename {library => core}/collections/sbuf.facts (100%) rename {library => core}/collections/sequence-combinators.factor (90%) rename {library => core}/collections/sequence-combinators.facts (90%) rename {library => core}/collections/sequence-sort.factor (93%) rename {library => core}/collections/sequence-sort.facts (79%) rename {library => core}/collections/sequences-epilogue.factor (81%) rename {library => core}/collections/sequences-epilogue.facts (93%) rename {library => core}/collections/sequences.factor (95%) rename {library => core}/collections/sequences.facts (95%) rename {library => core}/collections/slicing.factor (93%) rename {library => core}/collections/slicing.facts (100%) rename {library => core}/collections/strings.factor (97%) rename {library => core}/collections/strings.facts (100%) rename {library => core}/collections/vectors.factor (96%) rename {library => core}/collections/vectors.facts (95%) rename {library => core}/collections/virtual-sequences.factor (94%) rename {library => core}/collections/virtual-sequences.facts (100%) rename {library => core}/compiler/alien/alien-callback.factor (80%) rename {library => core}/compiler/alien/alien-callback.facts (100%) rename {library => core}/compiler/alien/alien-indirect.factor (96%) rename {library => core}/compiler/alien/alien-indirect.facts (75%) rename {library => core}/compiler/alien/alien-invoke.factor (100%) rename {library => core}/compiler/alien/alien-invoke.facts (84%) rename {library => core}/compiler/alien/aliens.factor (100%) rename {library => core}/compiler/alien/aliens.facts (100%) rename {library => core}/compiler/alien/c-types.factor (98%) rename {library => core}/compiler/alien/c-types.facts (100%) rename {library => core}/compiler/alien/compiler.factor (100%) rename {library => core}/compiler/alien/malloc.factor (100%) rename {library => core}/compiler/alien/malloc.facts (100%) rename {library => core}/compiler/alien/objc/load.factor (83%) rename {library => core}/compiler/alien/objc/objc-ppc.factor (100%) rename {library => core}/compiler/alien/objc/objc-x86.factor (100%) rename {library => core}/compiler/alien/objc/runtime.factor (100%) rename {library => core}/compiler/alien/objc/subclassing.factor (100%) rename {library => core}/compiler/alien/objc/utilities.factor (100%) create mode 100644 core/compiler/alien/prettyprint.factor rename {library => core}/compiler/alien/primitive-types.factor (100%) rename {library => core}/compiler/alien/structs.factor (97%) rename {library => core}/compiler/alien/structs.facts (100%) rename {library => core}/compiler/alien/syntax.factor (100%) rename {library => core}/compiler/alien/syntax.facts (94%) rename {library => core}/compiler/amd64/alien.factor (100%) rename {library => core}/compiler/amd64/architecture.factor (96%) rename {library => core}/compiler/amd64/intrinsics.factor (100%) create mode 100644 core/compiler/amd64/load.factor rename {library => core}/compiler/compiler.factor (87%) rename {library => core}/compiler/compiler.facts (80%) rename {library => core}/compiler/generator/architecture.factor (95%) rename {library => core}/compiler/generator/generator.factor (95%) rename {library => core}/compiler/generator/templates.factor (100%) rename {library => core}/compiler/generator/xt.factor (100%) rename {library => core}/compiler/inference/branches.factor (100%) rename {library => core}/compiler/inference/branches.facts (100%) rename {library => core}/compiler/inference/dataflow.factor (97%) rename {library => core}/compiler/inference/dataflow.facts (92%) rename {library => core}/compiler/inference/errors.factor (100%) rename {library => core}/compiler/inference/inference.factor (95%) rename {library => core}/compiler/inference/inference.facts (96%) rename {library => core}/compiler/inference/known-words.factor (99%) rename {library => core}/compiler/inference/shuffle.factor (91%) create mode 100644 core/compiler/inference/shuffle.facts rename {library => core}/compiler/inference/stack.factor (100%) rename {library => core}/compiler/inference/stack.facts (100%) rename {library => core}/compiler/inference/variables.factor (83%) rename {library => core}/compiler/inference/words.factor (92%) rename {library => core}/compiler/inference/words.facts (100%) rename {library => core}/compiler/load.factor (95%) rename {library => core}/compiler/optimizer/call-optimizers.factor (100%) rename {library => core}/compiler/optimizer/class-infer.factor (100%) rename {library => core}/compiler/optimizer/inline-methods.factor (100%) rename {library => core}/compiler/optimizer/kill-literals.factor (100%) rename {library => core}/compiler/optimizer/optimizer.factor (100%) rename {library => core}/compiler/optimizer/specializers.factor (100%) rename {library => core}/compiler/pentium4/intrinsics.factor (69%) create mode 100644 core/compiler/pentium4/load.factor rename {library => core}/compiler/ppc/allot.factor (100%) rename {library => core}/compiler/ppc/architecture.factor (98%) rename {library => core}/compiler/ppc/assembler.factor (99%) rename {library => core}/compiler/ppc/intrinsics.factor (96%) rename {library => core}/compiler/ppc/load.factor (78%) rename {library => core}/compiler/test/alien-objects.factor (100%) rename {library => core}/compiler/test/alien.factor (100%) rename {library => core}/compiler/test/bail-out.factor (100%) rename {library => core}/compiler/test/callbacks.factor (91%) rename {library => core}/compiler/test/float.factor (100%) rename {library => core}/compiler/test/generic.factor (100%) rename {library => core}/compiler/test/identities.factor (100%) rename {library => core}/compiler/test/ifte.factor (100%) rename {library => core}/compiler/test/inference.factor (97%) rename {library => core}/compiler/test/intrinsics.factor (100%) rename {library => core}/compiler/test/optimizer.factor (100%) rename {library => core}/compiler/test/simple.factor (78%) create mode 100644 core/compiler/test/stack-trace.factor rename {library => core}/compiler/test/stack.factor (100%) rename {library => core}/compiler/test/templates.factor (100%) rename {library => core}/compiler/x86/alien-macosx.factor (93%) rename {library => core}/compiler/x86/alien.factor (95%) rename {library => core}/compiler/x86/allot.factor (100%) rename {library => core}/compiler/x86/architecture.factor (98%) rename {library => core}/compiler/x86/assembler.factor (97%) rename {library => core}/compiler/x86/intrinsics.factor (100%) rename {library => core}/compiler/x86/load.factor (78%) rename {library => core}/continuations.factor (100%) rename {library => core}/continuations.facts (100%) create mode 100644 core/debugger.factor rename {library/tools => core}/debugger.facts (87%) rename {library => core}/definitions.factor (78%) rename {library => core}/definitions.facts (100%) create mode 100644 core/documentation.factor rename {library => core}/effects.factor (100%) rename {library => core}/effects.facts (94%) rename {library => core}/errors.factor (57%) rename {library => core}/errors.facts (77%) rename {library => core}/generic/classes.factor (100%) rename {library => core}/generic/classes.facts (98%) rename {library => core}/generic/early-generic.factor (100%) rename {library => core}/generic/early-generic.facts (100%) rename {library => core}/generic/generic.factor (100%) rename {library => core}/generic/generic.facts (100%) rename {library => core}/generic/math-combination.factor (100%) rename {library => core}/generic/math-combination.facts (100%) rename {library => core}/generic/methods.factor (84%) rename {library => core}/generic/methods.facts (91%) rename {library => core}/generic/slots.factor (97%) rename {library => core}/generic/slots.facts (97%) rename {library => core}/generic/standard-combination.factor (100%) rename {library => core}/generic/standard-combination.facts (100%) rename {library => core}/generic/tuple.factor (96%) rename {library => core}/generic/tuple.facts (91%) rename {doc => core}/handbook/alien.facts (96%) rename {doc => core}/handbook/changes.facts (73%) rename {doc => core}/handbook/cli.facts (86%) rename {doc => core}/handbook/collections.facts (100%) rename {doc => core}/handbook/compiler.facts (88%) rename {doc => core}/handbook/conventions.facts (79%) rename {doc => core}/handbook/cookbook.facts (87%) rename {doc => core}/handbook/dataflow.facts (89%) create mode 100644 core/handbook/handbook.facts rename {doc => core}/handbook/hashtables.facts (85%) rename {doc => core}/handbook/help.facts (64%) rename {doc => core}/handbook/inference.facts (93%) rename {doc => core}/handbook/load.factor (91%) rename {doc => core}/handbook/math.facts (94%) rename {doc => core}/handbook/modules.facts (79%) rename {doc => core}/handbook/objects.facts (81%) create mode 100644 core/handbook/os.facts rename {doc => core}/handbook/parser.facts (100%) rename {doc => core}/handbook/prettyprinter.facts (100%) rename {doc => core}/handbook/sequences.facts (98%) rename {doc => core}/handbook/streams.facts (90%) rename {doc => core}/handbook/syntax.facts (100%) rename {doc => core}/handbook/tools.facts (79%) rename {doc => core}/handbook/words.facts (100%) rename {library => core}/help/help.factor (55%) rename {library => core}/help/help.facts (87%) create mode 100644 core/help/load.factor rename {library => core}/help/markup.factor (73%) rename {library => core}/help/markup.facts (96%) create mode 100644 core/help/stylesheet.factor rename {library => core}/help/syntax.factor (84%) rename {library => core}/help/syntax.facts (100%) rename {library/test/help => core/help/test}/search.factor (100%) rename {library/test/help => core/help/test}/topics.factor (65%) rename {library => core}/help/topics.factor (74%) rename {library => core}/help/topics.facts (100%) rename {library => core}/io/binary.factor (100%) rename {library => core}/io/binary.facts (100%) rename {library => core}/io/buffer/buffer.factor (100%) rename {library => core}/io/buffer/buffer.facts (100%) rename {library => core}/io/buffer/load.factor (78%) rename {library => core}/io/buffer/test/buffer.factor (100%) rename {library => core}/io/c-streams.factor (96%) rename {library => core}/io/c-streams.facts (91%) rename {library => core}/io/duplex-stream.factor (100%) rename {library => core}/io/duplex-stream.facts (100%) rename {library => core}/io/files.factor (59%) rename {library => core}/io/files.facts (85%) rename {library => core}/io/lines.factor (96%) rename {library => core}/io/lines.facts (100%) rename {library => core}/io/nested-style.factor (100%) rename {library => core}/io/nested-style.facts (100%) rename {library => core}/io/null-stream.factor (100%) rename {library => core}/io/plain-stream.factor (88%) rename {library => core}/io/plain-stream.facts (100%) rename {library => core}/io/server.factor (100%) rename {library => core}/io/server.facts (100%) rename {library => core}/io/stdio.factor (84%) rename {library => core}/io/stdio.facts (98%) rename {library => core}/io/stream.factor (100%) rename {library => core}/io/stream.facts (93%) rename {library => core}/io/string-streams.factor (94%) rename {library => core}/io/string-streams.facts (100%) rename {library => core}/io/styles.factor (100%) rename {library => core}/io/styles.facts (95%) rename {library => core}/io/unix/files.factor (100%) rename {library => core}/io/unix/io.factor (98%) rename {library => core}/io/unix/load.factor (85%) rename {library => core}/io/unix/sockets.factor (100%) rename {library => core}/io/unix/syscalls-freebsd.factor (100%) rename {library => core}/io/unix/syscalls-linux.factor (100%) rename {library => core}/io/unix/syscalls-macosx.factor (100%) rename {library => core}/io/unix/syscalls-solaris.factor (100%) rename {library => core}/io/unix/syscalls.factor (100%) rename {library => core}/io/unix/types.factor (100%) rename {library => core}/io/windows/errors.factor (100%) rename {library => core}/io/windows/io-internals.factor (100%) rename {library => core}/io/windows/io.factor (100%) rename {library => core}/io/windows/load.factor (62%) rename {library => core}/io/windows/server.factor (100%) rename {library => core}/io/windows/stream.factor (98%) rename {library => core}/kernel.factor (98%) rename {library => core}/kernel.facts (96%) create mode 100644 core/listener.factor create mode 100644 core/listener.facts rename {library => core}/load.factor (50%) rename {library => core}/math/arc-trig-hyp.factor (100%) rename {library => core}/math/arc-trig-hyp.facts (100%) rename {library => core}/math/complex.factor (100%) rename {library => core}/math/complex.facts (100%) rename {library => core}/math/constants.factor (100%) rename {library => core}/math/constants.facts (100%) rename {library => core}/math/float.factor (100%) rename {library => core}/math/float.facts (100%) rename {library => core}/math/integer.factor (97%) rename {library => core}/math/integer.facts (97%) rename {library => core}/math/libm.factor (100%) rename {library => core}/math/math.factor (97%) rename {library => core}/math/math.facts (100%) rename {library => core}/math/parse-numbers.factor (95%) rename {library => core}/math/parse-numbers.facts (92%) rename {library => core}/math/pow.factor (100%) rename {library => core}/math/pow.facts (100%) rename {library => core}/math/random.factor (100%) rename {library => core}/math/random.facts (100%) rename {library => core}/math/ratio.factor (100%) rename {library => core}/math/ratio.facts (100%) rename {library => core}/math/trig-hyp.factor (100%) rename {library => core}/math/trig-hyp.facts (100%) rename {library => core}/math/vectors.factor (100%) rename {library => core}/math/vectors.facts (97%) rename {library => core}/modules.factor (51%) rename {library => core}/modules.facts (63%) rename {library => core}/prettyprint/backend.factor (89%) rename {library => core}/prettyprint/backend.facts (100%) rename {library => core}/prettyprint/core.factor (100%) rename {library => core}/prettyprint/core.facts (100%) rename {library/tools => core/prettyprint}/describe.factor (91%) rename {library/tools => core/prettyprint}/describe.facts (100%) rename {library => core}/prettyprint/frontend.factor (95%) rename {library => core}/prettyprint/frontend.facts (65%) rename {library => core}/prettyprint/sections.factor (100%) rename {library => core}/prettyprint/sections.facts (86%) rename {library => core}/quotations.factor (88%) rename {library => core}/quotations.facts (98%) rename {library => core}/syntax/early-parser.factor (94%) rename {library => core}/syntax/early-parser.facts (100%) rename {library => core}/syntax/parse-stream.factor (69%) rename {library => core}/syntax/parse-stream.facts (91%) rename {library => core}/syntax/parse-syntax.factor (99%) rename {library => core}/syntax/parse-syntax.facts (97%) rename {library => core}/syntax/parser.factor (92%) rename {library => core}/syntax/parser.facts (93%) rename {library => core}/test/binary.factor (100%) rename {library => core}/test/collections/arrays.factor (93%) rename {library => core}/test/collections/hashtables.factor (94%) rename {library => core}/test/collections/namespaces.factor (100%) rename {library => core}/test/collections/queues.factor (100%) rename {library => core}/test/collections/sbuf.factor (100%) rename {library => core}/test/collections/sequences.factor (96%) rename {library => core}/test/collections/strings.factor (95%) rename {library => core}/test/collections/vectors.factor (100%) rename {library => core}/test/combinators.factor (100%) rename {library => core}/test/continuations.factor (100%) rename {library => core}/test/errors.factor (90%) rename {library => core}/test/generic.factor (97%) rename {library => core}/test/init.factor (100%) rename {library => core}/test/io/binary.txt (100%) create mode 100644 core/test/io/empty-file.txt create mode 100644 core/test/io/io.factor rename {library => core}/test/io/mac-os-eol.txt (100%) rename {library => core}/test/io/nested-style.factor (100%) create mode 100644 core/test/io/no-trailing-eol.factor rename {library => core}/test/io/unix-eol.txt (100%) rename {library => core}/test/io/windows-eol.txt (100%) rename {library => core}/test/kernel.factor (63%) rename {library => core}/test/math/bitops.factor (100%) rename {library => core}/test/math/complex.factor (100%) rename {library => core}/test/math/float.factor (89%) rename {library => core}/test/math/integer.factor (93%) rename {library => core}/test/math/irrational.factor (100%) rename {library => core}/test/math/math-combinators.factor (100%) rename {library => core}/test/math/random.factor (100%) rename {library => core}/test/math/rational.factor (100%) rename {library => core}/test/parse-number.factor (94%) rename {library => core}/test/parser.factor (79%) rename {library => core}/test/parsing-word.factor (100%) rename {library => core}/test/prettyprint.factor (100%) rename {library => core}/test/random.factor (100%) rename {library => core}/test/redefine.factor (100%) rename {library => core}/test/threads.factor (100%) rename {library => core}/test/tuple.factor (95%) rename {library => core}/test/words.factor (100%) rename {library => core}/threads.factor (96%) rename {library => core}/threads.facts (80%) rename {library => core}/tools/completion.factor (78%) create mode 100644 core/tools/debugger.factor create mode 100644 core/tools/debugger.facts rename {library => core}/tools/definitions.factor (81%) rename {library => core}/tools/definitions.facts (64%) rename {library => core}/tools/errors.factor (93%) rename {library/bootstrap => core/tools}/image.factor (96%) rename {library/bootstrap => core/tools}/image.facts (100%) rename {library => core}/tools/inspector.factor (89%) rename {library => core}/tools/inspector.facts (95%) rename {library => core}/tools/interpreter.factor (97%) create mode 100644 core/tools/load.factor rename {library => core}/tools/memory.factor (100%) rename {library => core}/tools/memory.facts (97%) create mode 100644 core/tools/modules.factor create mode 100644 core/tools/modules.facts rename {library => core}/tools/test.factor (88%) rename {library => core}/tools/test.facts (70%) rename {library => core/tools}/test/annotate.factor (100%) rename {library => core/tools}/test/inspector.factor (100%) rename {library => core/tools}/test/interpreter.factor (66%) rename {library => core/tools}/test/memory.factor (100%) rename {library => core/tools}/test/tools.factor (66%) rename {library => core}/tools/word-tools.factor (84%) rename {library => core}/tools/word-tools.facts (100%) rename {library => core}/ui/backend.factor (87%) create mode 100644 core/ui/backend.facts rename {library => core}/ui/cocoa/application-utils.factor (100%) rename {library => core}/ui/cocoa/core-foundation.factor (100%) rename {library => core}/ui/cocoa/dialogs.factor (100%) rename {library => core}/ui/cocoa/init-cocoa.factor (95%) rename {library => core}/ui/cocoa/load.factor (85%) rename {library => core}/ui/cocoa/pasteboard-utils.factor (100%) rename {library => core}/ui/cocoa/services.factor (100%) rename {library => core}/ui/cocoa/test/cocoa.factor (100%) rename {library => core}/ui/cocoa/types.factor (100%) rename {library => core}/ui/cocoa/ui.factor (93%) rename {library => core}/ui/cocoa/view-utils.factor (94%) rename {library => core}/ui/cocoa/window-utils.factor (100%) rename {library => core}/ui/commands.factor (67%) create mode 100644 core/ui/commands.facts create mode 100644 core/ui/debugger.factor create mode 100644 core/ui/debugger.facts rename {library => core}/ui/freetype/freetype-gl.factor (83%) rename {library => core}/ui/freetype/freetype.factor (100%) rename {library => core}/ui/freetype/load.factor (53%) rename {library => core}/ui/gadgets.factor (74%) create mode 100644 core/ui/gadgets.facts rename {library => core}/ui/gadgets/books.factor (100%) create mode 100644 core/ui/gadgets/books.facts rename {library => core}/ui/gadgets/borders.factor (90%) create mode 100644 core/ui/gadgets/borders.facts rename {library => core}/ui/gadgets/buttons.factor (67%) create mode 100644 core/ui/gadgets/buttons.facts rename {library => core}/ui/gadgets/controls.factor (60%) create mode 100644 core/ui/gadgets/controls.facts rename {library => core}/ui/gadgets/frames.factor (92%) create mode 100644 core/ui/gadgets/frames.facts rename {library => core}/ui/gadgets/grid-lines.factor (88%) create mode 100644 core/ui/gadgets/grid-lines.facts rename {library => core}/ui/gadgets/grids.factor (86%) create mode 100644 core/ui/gadgets/grids.facts rename {library => core}/ui/gadgets/incremental.factor (100%) create mode 100644 core/ui/gadgets/incremental.facts create mode 100644 core/ui/gadgets/labelled-gadget.factor create mode 100644 core/ui/gadgets/labelled-gadget.facts create mode 100644 core/ui/gadgets/labels.factor create mode 100644 core/ui/gadgets/labels.facts rename {library => core}/ui/gadgets/lists.factor (54%) create mode 100644 core/ui/gadgets/lists.facts rename {library => core}/ui/gadgets/menus.factor (65%) create mode 100644 core/ui/gadgets/menus.facts rename {library => core}/ui/gadgets/outliner.factor (72%) create mode 100644 core/ui/gadgets/outliner.facts rename library/ui/gadgets/presentations.factor => core/ui/gadgets/panes.factor (57%) create mode 100644 core/ui/gadgets/panes.facts rename {library => core}/ui/gadgets/paragraphs.factor (100%) create mode 100644 core/ui/gadgets/presentations.factor create mode 100644 core/ui/gadgets/presentations.facts rename {library => core}/ui/gadgets/scrolling.factor (52%) create mode 100644 core/ui/gadgets/scrolling.facts rename {library => core}/ui/gadgets/sliders.factor (74%) create mode 100644 core/ui/gadgets/sliders.facts rename {library => core}/ui/gadgets/theme.factor (68%) create mode 100644 core/ui/gadgets/tracks.factor create mode 100644 core/ui/gadgets/tracks.facts rename {library => core}/ui/gadgets/viewports.factor (65%) create mode 100644 core/ui/gadgets/viewports.facts rename {library => core}/ui/gestures.factor (74%) create mode 100644 core/ui/gestures.facts create mode 100644 core/ui/handbook/existing-gadgets.facts create mode 100644 core/ui/handbook/gestures.facts create mode 100644 core/ui/handbook/layouts.facts create mode 100644 core/ui/handbook/load.factor create mode 100644 core/ui/handbook/models.facts create mode 100644 core/ui/handbook/new-gadgets.facts rename {doc/handbook/ui => core/ui/handbook}/tools.facts (62%) create mode 100644 core/ui/handbook/ui.facts rename {library => core}/ui/hierarchy.factor (79%) create mode 100644 core/ui/hierarchy.facts rename {library => core}/ui/layouts.factor (80%) create mode 100644 core/ui/layouts.facts rename {library => core}/ui/load.factor (54%) rename {library => core}/ui/models.factor (77%) create mode 100644 core/ui/models.facts rename {library => core}/ui/opengl/gl.factor (99%) rename {library => core}/ui/opengl/glu.factor (99%) create mode 100644 core/ui/opengl/load.factor rename library/ui/opengl/opengl-utils.factor => core/ui/opengl/utilities.factor (84%) create mode 100644 core/ui/opengl/utilities.facts rename {library => core}/ui/paint.factor (97%) create mode 100644 core/ui/paint.facts rename {library => core}/ui/test/commands.factor (100%) rename {library => core}/ui/test/document.factor (70%) rename {library => core}/ui/test/editor.factor (79%) create mode 100644 core/ui/test/gadgets.factor create mode 100644 core/ui/test/lists.factor rename {library => core}/ui/test/models.factor (89%) rename {library => core}/ui/test/panes.factor (75%) rename {library => core}/ui/test/presentations.factor (100%) rename {library => core}/ui/test/rectangles.factor (100%) create mode 100644 core/ui/test/scrolling.factor create mode 100644 core/ui/test/search.factor rename {library => core}/ui/test/sliders.factor (76%) create mode 100644 core/ui/text.factor create mode 100644 core/ui/text.facts rename {library => core}/ui/text/commands.factor (94%) rename {library => core}/ui/text/document.factor (63%) create mode 100644 core/ui/text/document.facts rename {library => core}/ui/text/editor.factor (85%) create mode 100644 core/ui/text/editor.facts rename {library => core}/ui/text/elements.factor (75%) create mode 100644 core/ui/text/elements.facts rename {library => core}/ui/timers.factor (100%) create mode 100644 core/ui/timers.facts rename {library => core}/ui/tools/browser.factor (54%) rename {library => core}/ui/tools/help.factor (62%) create mode 100644 core/ui/tools/interactor.factor create mode 100644 core/ui/tools/interactor.facts create mode 100644 core/ui/tools/listener.factor create mode 100644 core/ui/tools/load.factor rename {library => core}/ui/tools/messages.factor (97%) rename {library => core}/ui/tools/operations.factor (52%) create mode 100644 core/ui/tools/search.factor create mode 100644 core/ui/tools/test/listener.factor create mode 100644 core/ui/tools/test/workspace.factor rename {library => core}/ui/tools/tools.factor (64%) rename {library => core}/ui/tools/walker.factor (98%) rename {library => core}/ui/tools/workspace.factor (53%) create mode 100644 core/ui/ui.factor create mode 100644 core/ui/ui.facts create mode 100644 core/ui/windows.factor create mode 100644 core/ui/windows.facts rename {library => core}/ui/windows/clipboard.factor (100%) rename {library => core}/ui/windows/load.factor (53%) rename {library => core}/ui/windows/ui.factor (96%) rename {library => core}/ui/world.factor (50%) create mode 100644 core/ui/world.facts rename {library => core}/ui/x11/clipboard.factor (100%) rename {library => core}/ui/x11/constants.factor (100%) rename {library => core}/ui/x11/events.factor (100%) rename {library => core}/ui/x11/glx-utils.factor (100%) rename {library => core}/ui/x11/glx.factor (100%) rename {library => core}/ui/x11/load.factor (84%) rename {library => core}/ui/x11/ui.factor (94%) rename {library => core}/ui/x11/utilities.factor (100%) rename {library => core}/ui/x11/windows.factor (94%) rename {library => core}/ui/x11/xlib.factor (100%) create mode 100644 core/version.factor rename {library => core}/windows/dlls.factor (100%) rename {library => core}/windows/gdi32-constants.factor (100%) rename {library => core}/windows/gdi32.factor (100%) rename {library => core}/windows/io.factor (100%) rename {library => core}/windows/kernel32-constants.factor (100%) rename {library => core}/windows/kernel32-structs.factor (100%) rename {library => core}/windows/kernel32-types.factor (100%) rename {library => core}/windows/kernel32.factor (100%) rename {library => core}/windows/load.factor (95%) rename {library => core}/windows/opengl32.factor (100%) rename {library => core}/windows/types.factor (100%) rename {library => core}/windows/user32-constants.factor (100%) rename {library => core}/windows/user32-structs.factor (100%) rename {library => core}/windows/user32-types.factor (100%) rename {library => core}/windows/user32.factor (100%) rename {library => core}/windows/utils.factor (100%) rename {library => core}/windows/windows-messages.factor (100%) rename {library => core}/windows/winsock.factor (100%) rename {library => core}/words.factor (92%) rename {library => core}/words.facts (95%) delete mode 100644 debian/architecture.sh delete mode 100644 debian/changelog delete mode 100644 debian/compat delete mode 100644 debian/control delete mode 100644 debian/copyright delete mode 100644 debian/dirs delete mode 100644 debian/docs delete mode 100644 debian/rules delete mode 100644 debian/scripts/factor-export delete mode 100644 debian/scripts/factor-import delete mode 100644 debian/scripts/factor-init delete mode 100644 debian/scripts/factor-run create mode 100644 demos/all.factor create mode 100644 demos/cocoa/speech.factor create mode 100644 demos/color-picker.factor create mode 100644 demos/gesture-logger.factor create mode 100644 demos/haar.factor create mode 100644 demos/hello-world.factor rename {examples => demos}/lcd.factor (88%) create mode 100644 demos/mslug-talk.factor create mode 100644 demos/nehe/load.factor create mode 100644 demos/nehe/nehe-utils.factor create mode 100644 demos/nehe/nehe2.factor create mode 100644 demos/nehe/nehe3.factor create mode 100644 demos/nehe/nehe4.factor rename {examples => demos}/numbers-game.factor (90%) create mode 100644 demos/rot13.factor delete mode 100644 doc/comparison.tex delete mode 100644 doc/cont-responder-tutorial.txt delete mode 100644 doc/handbook/handbook.facts delete mode 100644 examples/print-dataflow/load.factor delete mode 100644 examples/print-dataflow/tests.factor delete mode 100644 library/compiler/amd64/load.factor delete mode 100644 library/compiler/inference/shuffle.facts delete mode 100644 library/compiler/pentium4/load.factor delete mode 100644 library/help/search.factor delete mode 100644 library/help/search.facts delete mode 100644 library/help/stylesheet.factor delete mode 100644 library/test/io/io.factor delete mode 100644 library/test/io/no-trailing-eol.factor delete mode 100644 library/test/stream.factor delete mode 100644 library/tools/debugger.factor delete mode 100644 library/tools/listener.factor delete mode 100644 library/tools/listener.facts delete mode 100644 library/ui/gadgets/labels.factor delete mode 100644 library/ui/gadgets/panes.factor delete mode 100644 library/ui/gadgets/tracks.factor delete mode 100644 library/ui/opengl/load.factor delete mode 100644 library/ui/test/gadgets.factor delete mode 100644 library/ui/test/listener.factor delete mode 100644 library/ui/test/lists.factor delete mode 100644 library/ui/test/search.factor delete mode 100644 library/ui/test/titled-gadget.factor delete mode 100644 library/ui/test/tracks.factor delete mode 100644 library/ui/text/editor.facts delete mode 100644 library/ui/text/interactor.factor delete mode 100644 library/ui/tools/listener.factor delete mode 100644 library/ui/tools/search.factor delete mode 100644 library/ui/ui.factor delete mode 100644 library/version.factor rename {contrib => libs}/README.txt (76%) rename {contrib => libs}/alien.factor (54%) create mode 100644 libs/all.factor rename {contrib => libs}/base64/base64.factor (96%) rename {contrib => libs}/base64/load.factor (75%) rename {contrib => libs}/base64/test.factor (100%) create mode 100644 libs/basic-authentication/basic-authentication.factor create mode 100644 libs/basic-authentication/basic-authentication.facts create mode 100644 libs/basic-authentication/load.factor create mode 100644 libs/basic-authentication/tests.factor rename {contrib/cairo => libs}/cairo.factor (99%) rename {contrib => libs}/calendar/calendar.factor (94%) rename {contrib => libs}/calendar/load.factor (86%) rename {contrib => libs}/calendar/os-unix.factor (100%) rename {contrib => libs}/calendar/os-win32.factor (100%) rename {contrib => libs}/calendar/test/calendar.factor (100%) rename {contrib => libs}/cocoa-callbacks.factor (95%) rename {contrib => libs}/concurrency/concurrency-tests.factor (100%) rename {contrib => libs}/concurrency/concurrency.factor (99%) rename {contrib => libs}/concurrency/concurrency.facts (99%) rename {contrib => libs}/concurrency/load.factor (75%) rename {contrib => libs}/coroutines/coroutines.factor (100%) rename {contrib => libs}/coroutines/load.factor (71%) rename {contrib => libs}/coroutines/tests.factor (100%) rename {contrib => libs}/crypto/barrett.factor (100%) rename {contrib => libs}/crypto/blum-blum-shub.factor (100%) rename {contrib => libs}/crypto/common.factor (100%) rename {contrib => libs}/crypto/crc32.factor (100%) rename {contrib => libs}/crypto/load.factor (92%) rename {contrib => libs}/crypto/md5.factor (100%) rename {contrib => libs}/crypto/miller-rabin.factor (100%) rename {contrib => libs}/crypto/montgomery.factor (100%) rename {contrib => libs}/crypto/random.factor (100%) rename {contrib => libs}/crypto/rc4.factor (100%) rename {contrib => libs}/crypto/rsa.factor (100%) rename {contrib => libs}/crypto/sha1.factor (93%) rename {contrib => libs}/crypto/sha2.factor (100%) rename {contrib => libs}/crypto/test/barrett.factor (100%) rename {contrib => libs}/crypto/test/blum-blum-shub.factor (100%) rename {contrib => libs}/crypto/test/common.factor (100%) rename {contrib => libs}/crypto/test/crc32.factor (100%) rename {contrib => libs}/crypto/test/md5.factor (100%) rename {contrib => libs}/crypto/test/miller-rabin.factor (100%) rename {contrib => libs}/crypto/test/montgomery.factor (100%) rename {contrib => libs}/crypto/test/rsa.factor (100%) rename {contrib => libs}/crypto/test/sha1.factor (71%) rename {contrib => libs}/crypto/test/sha2.factor (100%) rename {contrib => libs}/crypto/timing.factor (100%) rename {contrib => libs}/dlists.factor (98%) rename {contrib => libs}/emacs.factor (60%) rename {contrib => libs}/factor.el (100%) create mode 100644 libs/farkup/farkup.factor create mode 100644 libs/farkup/farkup.facts create mode 100644 libs/farkup/farkup.list create mode 100644 libs/farkup/load.factor create mode 100644 libs/fjsc/fjsc.factor create mode 100644 libs/fjsc/load.factor create mode 100644 libs/fjsc/resources/bootstrap.factor create mode 100644 libs/fjsc/resources/bootstrap.js create mode 100644 libs/fjsc/resources/jquery.js create mode 100644 libs/fjsc/tests.factor rename {contrib => libs}/furnace/load.factor (78%) rename {contrib => libs}/furnace/responder.factor (91%) rename {contrib => libs}/furnace/test/responder.factor (100%) rename {contrib => libs}/furnace/test/validator.factor (100%) rename {contrib => libs}/furnace/tools/browser.factor (95%) rename contrib/furnace/tools/browser.fhtml => libs/furnace/tools/browser.furnace (92%) rename {contrib => libs}/furnace/tools/help.factor (72%) rename contrib/furnace/tools/list.fhtml => libs/furnace/tools/list.furnace (100%) rename {contrib => libs}/furnace/validator.factor (100%) rename {contrib => libs}/gap-buffer/circular-tests.factor (100%) rename {contrib => libs}/gap-buffer/circular.factor (100%) rename {contrib => libs}/gap-buffer/gap-buffer-tests.factor (100%) rename {contrib => libs}/gap-buffer/gap-buffer.factor (100%) rename {contrib => libs}/gap-buffer/load.factor (81%) rename {contrib => libs}/hardware-info/cpuinfo.factor (100%) rename {contrib => libs}/hardware-info/load.factor (86%) create mode 100644 libs/hardware-info/os-unix.factor rename {contrib => libs}/hardware-info/os-windows.factor (100%) rename {contrib => libs/http-client}/http-client.factor (96%) create mode 100644 libs/http-client/load.factor rename contrib/httpd/test/http-client.factor => libs/http-client/test.factor (100%) rename {contrib => libs}/http.factor (98%) rename {contrib => libs}/httpd/callback-responder.factor (98%) rename {contrib => libs}/httpd/cont-responder.factor (100%) rename {contrib => libs}/httpd/default-responders.factor (93%) rename {contrib => libs}/httpd/documentation.tex (100%) create mode 100644 libs/httpd/embedded.factor rename {contrib => libs}/httpd/examples/cont-examples.factor (100%) rename {contrib => libs}/httpd/examples/cont-numbers-game.factor (100%) create mode 100644 libs/httpd/examples/load.factor rename {contrib => libs}/httpd/file-responder.factor (90%) rename {contrib => libs}/httpd/html-tags.factor (99%) rename {contrib => libs}/httpd/html.factor (93%) rename {contrib => libs}/httpd/httpd.factor (97%) rename {contrib => libs}/httpd/load.factor (74%) rename {contrib => libs}/httpd/mime.factor (97%) rename {contrib => libs}/httpd/prototype-js.factor (100%) rename {contrib => libs}/httpd/resources/prototype.js (100%) rename {contrib => libs}/httpd/resources/stylesheet.css (100%) rename {contrib => libs}/httpd/responder.factor (85%) create mode 100644 libs/httpd/test/bug.fhtml create mode 100644 libs/httpd/test/bug.html create mode 100644 libs/httpd/test/embedded.factor create mode 100644 libs/httpd/test/example.fhtml create mode 100644 libs/httpd/test/example.html rename {contrib => libs}/httpd/test/html.factor (77%) rename {contrib => libs}/httpd/test/httpd.factor (100%) create mode 100644 libs/httpd/test/stack.fhtml create mode 100644 libs/httpd/test/stack.html rename {contrib => libs}/httpd/test/url-encoding.factor (100%) rename {contrib => libs}/jedit/jedit.factor (94%) create mode 100644 libs/jedit/load.factor rename {contrib => libs}/jni/jni-internals.factor (100%) rename {contrib => libs}/jni/jni.factor (100%) rename {contrib => libs}/jni/load.factor (87%) rename {contrib => libs}/json/json-reader.factor (68%) rename {contrib => libs}/json/json-writer.factor (61%) create mode 100644 libs/json/json.facts rename {contrib => libs}/json/load.factor (95%) rename {contrib => libs}/lazy-lists/examples.factor (100%) rename {contrib => libs}/lazy-lists/lazy-io.factor (100%) rename {contrib => libs}/lazy-lists/lazy-io.facts (100%) rename {contrib => libs}/lazy-lists/lazy.factor (75%) rename {contrib => libs}/lazy-lists/lazy.facts (100%) rename {contrib => libs}/lazy-lists/lists.factor (97%) rename {contrib => libs}/lazy-lists/lists.facts (98%) rename {contrib => libs}/lazy-lists/load.factor (89%) rename {contrib => libs}/lazy-lists/old-doc.html (100%) rename {contrib => libs}/lazy-lists/test/examples.factor (100%) rename {contrib => libs}/lazy-lists/test/lists.factor (100%) rename {examples => libs}/levenshtein/levenshtein.factor (100%) rename {examples => libs}/levenshtein/load.factor (70%) rename {examples => libs}/levenshtein/tests.factor (100%) rename {contrib => libs}/match/load.factor (88%) rename {contrib => libs}/match/match.factor (62%) rename {contrib => libs}/match/match.facts (61%) rename {contrib => libs}/match/tests.factor (100%) rename {contrib => libs}/math/TODO.txt (100%) rename {contrib => libs}/math/analysis.factor (100%) rename {contrib => libs}/math/combinatorics.factor (100%) rename {contrib => libs}/math/load.factor (82%) rename {contrib => libs}/math/matrices.factor (79%) rename {contrib => libs}/math/numerical-integration.factor (52%) rename {contrib => libs}/math/polynomials.factor (100%) rename {contrib => libs}/math/primes.factor (100%) rename {contrib => libs}/math/quaternions.factor (100%) rename {contrib => libs}/math/statistics.factor (100%) rename {contrib => libs}/math/test.factor (100%) rename {contrib => libs}/math/utils.factor (77%) create mode 100644 libs/parser-combinators/load.factor rename {contrib => libs}/parser-combinators/parser-combinators.factor (64%) create mode 100644 libs/parser-combinators/parser-combinators.facts rename {contrib => libs}/parser-combinators/parser-combinators.html (100%) create mode 100644 libs/parser-combinators/search-replace.factor create mode 100644 libs/parser-combinators/search-replace.facts create mode 100644 libs/parser-combinators/simple-parsers.factor create mode 100644 libs/parser-combinators/simple-parsers.facts rename {contrib => libs}/parser-combinators/tests.factor (98%) rename {contrib => libs}/partial-continuations.factor (100%) create mode 100644 libs/porter-stemmer/load.factor rename {library/help => libs/porter-stemmer}/porter-stemmer.factor (100%) rename {library/help => libs/porter-stemmer}/porter-stemmer.facts (66%) rename {library/test/help => libs/porter-stemmer/test}/output.txt (100%) rename {library/test/help => libs/porter-stemmer/test}/porter-stemmer.factor (95%) rename {library/test/help => libs/porter-stemmer/test}/voc.txt (100%) rename {contrib => libs}/postgresql/libpq.factor (100%) rename {contrib => libs}/postgresql/load.factor (79%) rename {contrib => libs}/postgresql/postgresql-test.factor (100%) rename {contrib => libs}/postgresql/postgresql.factor (100%) rename {contrib => libs}/process/load.factor (80%) rename {contrib => libs}/process/os-unix.factor (100%) rename {contrib => libs}/process/os-windows.factor (100%) rename {contrib => libs}/sequences.factor (97%) rename {contrib => libs}/serialize/load.factor (76%) rename {contrib => libs}/serialize/serialize.factor (98%) rename {contrib => libs}/serialize/serialize.facts (100%) rename {contrib => libs}/serialize/tests.factor (100%) create mode 100644 libs/shuffle/load.factor create mode 100644 libs/shuffle/shuffle.factor create mode 100644 libs/shuffle/test/shuffle.factor create mode 100644 libs/slate/load.factor rename {contrib => libs}/slate/slate.factor (82%) rename {contrib => libs}/splay-trees/load.factor (70%) rename {contrib => libs}/splay-trees/splay-trees.factor (97%) rename {contrib => libs}/splay-trees/tests.factor (100%) rename {contrib => libs}/sqlite/libsqlite.factor (58%) rename {contrib => libs}/sqlite/load.factor (86%) rename {contrib => libs}/sqlite/sqlite.factor (100%) rename {contrib => libs}/sqlite/sqlite.facts (100%) rename {contrib => libs}/sqlite/test.factor (97%) rename {contrib => libs}/sqlite/test.txt (100%) rename {contrib => libs}/sqlite/tuple-db-tests.factor (95%) rename {contrib => libs}/sqlite/tuple-db.factor (99%) rename {contrib => libs}/sqlite/tuple-db.facts (98%) rename {contrib => libs}/textmate/Factor.tmbundle/Syntaxes/Factor.tmLanguage (99%) rename {contrib => libs}/textmate/Factor.tmbundle/Syntaxes/HTML (Factor).tmLanguage (100%) rename {contrib => libs}/textmate/Factor.tmbundle/info.plist (100%) create mode 100644 libs/textmate/load.factor rename {contrib => libs}/textmate/textmate.factor (100%) rename {contrib => libs}/topology/hopf.factor (100%) rename {contrib => libs}/topology/laplacian.factor (100%) rename {contrib => libs}/topology/linear.factor (100%) rename {contrib => libs}/topology/load.factor (90%) rename {contrib => libs}/topology/matrix.factor (100%) rename {contrib => libs}/topology/simplex.factor (100%) rename {contrib => libs}/topology/test/hopf.factor (100%) rename {contrib => libs}/topology/test/laplacian.factor (100%) rename {contrib => libs}/topology/test/matrix.factor (100%) rename {contrib => libs}/topology/test/simplex.factor (100%) rename {contrib => libs}/units/constants.factor (100%) rename {contrib => libs}/units/dimensioned.factor (97%) rename {contrib => libs}/units/load.factor (84%) rename {contrib => libs}/units/si-units.factor (100%) rename {contrib => libs}/units/test/units.factor (100%) rename {contrib => libs}/usb/load.factor (93%) rename {contrib => libs}/usb/usb-common.factor (90%) rename {contrib => libs}/usb/usb-macosx.factor (100%) rename {contrib => libs}/usb/usb-unix.factor (100%) rename {contrib => libs}/usb/usb-win32.factor (100%) rename {contrib => libs}/usb/usb.factor (100%) rename {contrib => libs}/usb/usb.facts (100%) rename {contrib => libs}/vars.factor (97%) rename {contrib => libs}/vim/factor.vim (100%) rename {contrib => libs}/vim/factor.vim.fgen (100%) create mode 100644 libs/vim/generate-vim-syntax.factor create mode 100644 libs/vim/gvim7.factor create mode 100644 libs/vim/load.factor rename {contrib => libs}/vim/vim.factor (89%) rename {contrib => libs}/vim/vim.facts (97%) rename {contrib => libs}/x11/concurrent-widgets.factor (100%) rename {contrib => libs}/x11/draw-string.factor (100%) rename {contrib => libs}/x11/load.factor (65%) rename {contrib => libs}/x11/rectangle.factor (100%) rename {contrib => libs}/x11/x.factor (100%) create mode 100644 libs/xml-rpc/example.factor rename {contrib/xml => libs/xml-rpc}/load.factor (52%) create mode 100644 libs/xml-rpc/test.factor create mode 100644 libs/xml-rpc/xml-rpc.factor create mode 100644 libs/xml-rpc/xml-rpc.facts create mode 100644 libs/xml/char-class.factor create mode 100644 libs/xml/data.factor create mode 100644 libs/xml/errors.factor create mode 100644 libs/xml/load.factor create mode 100644 libs/xml/presentation.factor create mode 100644 libs/xml/state-parser.factor create mode 100644 libs/xml/test/arithmetic.factor create mode 100644 libs/xml/test/soap.factor create mode 100644 libs/xml/test/soap.xml create mode 100644 libs/xml/test/templating.factor create mode 100644 libs/xml/test/test.factor rename {contrib/xml => libs/xml/test}/test.xml (73%) create mode 100644 libs/xml/tokenize.factor create mode 100644 libs/xml/utilities.factor create mode 100644 libs/xml/writer.factor create mode 100644 libs/xml/xml.facts create mode 100644 libs/yahoo.factor rename {contrib => unmaintained}/lambda/TODO.txt (100%) rename {contrib => unmaintained}/lambda/core.factor (95%) rename {contrib => unmaintained}/lambda/lambda.factor (100%) rename {contrib => unmaintained}/lambda/load.factor (57%) rename {contrib => unmaintained}/lambda/nodes.factor (100%) rename {contrib => unmaintained}/lambda/parser.factor (100%) rename {contrib => unmaintained}/lambda/test/lambda.factor (100%) create mode 100644 vm/Config.amd64 create mode 100644 vm/Config.freebsd.amd64 create mode 100644 vm/Config.freebsd.x86 create mode 100644 vm/Config.linux.x86 create mode 100644 vm/Config.macosx.x86 create mode 100644 vm/Config.x86 create mode 100644 vm/cpu-amd64.S create mode 100644 vm/cpu-x86.S create mode 100644 vm/os-linux-ppc.h diff --git a/Makefile b/Makefile index 75a73e5af8..b717a5603b 100644 --- a/Makefile +++ b/Makefile @@ -3,16 +3,16 @@ CC = gcc BINARY = f IMAGE = factor.image BUNDLE = Factor.app -VERSION = 0.86 +VERSION = 0.87 DISK_IMAGE_DIR = Factor-$(VERSION) DISK_IMAGE = Factor-$(VERSION).dmg LIBPATH = -L/usr/X11R6/lib ifdef DEBUG - CFLAGS = -pg -O1 + CFLAGS = -g -std=gnu99 STRIP = touch else - CFLAGS = -Wall -O3 -ffast-math -fomit-frame-pointer $(SITE_CFLAGS) + CFLAGS = -Wall -O3 -ffast-math -std=gnu99 $(SITE_CFLAGS) STRIP = strip endif @@ -40,7 +40,8 @@ OBJS = $(PLAF_OBJS) \ default: @echo "Run 'make' with one of the following parameters:" @echo "" - @echo "freebsd" + @echo "freebsd-x86" + @echo "freebsd-amd64" @echo "linux-x86" @echo "linux-amd64" @echo "linux-ppc" @@ -62,8 +63,11 @@ default: @echo "" @echo "export SITE_CFLAGS=\"-march=pentium4 -ffast-math\"" -freebsd: - $(MAKE) $(BINARY) CONFIG=vm/Config.freebsd +freebsd-x86: + $(MAKE) $(BINARY) CONFIG=vm/Config.freebsd.x86 + +freebsd-amd64: + $(MAKE) $(BINARY) CONFIG=vm/Config.freebsd.amd64 macosx-freetype: ln -sf libfreetype.6.dylib \ @@ -73,10 +77,10 @@ macosx-ppc: macosx-freetype $(MAKE) $(BINARY) CONFIG=vm/Config.macosx.ppc macosx-x86: macosx-freetype - $(MAKE) $(BINARY) CONFIG=vm/Config.macosx + $(MAKE) $(BINARY) CONFIG=vm/Config.macosx.x86 linux-x86: - $(MAKE) $(BINARY) CONFIG=vm/Config.linux + $(MAKE) $(BINARY) CONFIG=vm/Config.linux.x86 $(STRIP) $(BINARY) linux-amd64: @@ -124,6 +128,7 @@ macosx.dmg: -o -name '*.fgen' \ -o -name '*.tex' \ -o -name '*.fhtml' \ + -o -name '*.furnace' \ -o -name '*.xml' \ -o -name '*.js' \) \ -exec ./cp_dir {} $(DISK_IMAGE_DIR)/Factor/{} \; @@ -140,7 +145,6 @@ clean: rm -f vm/*.o clean.app: - rm -rf $(BUNDLE)/Contents/Resources/ rm -f $(BUNDLE)/Contents/MacOS/Factor .c.o: diff --git a/README.txt b/README.txt index 082406f069..1d7e7bac58 100644 --- a/README.txt +++ b/README.txt @@ -160,16 +160,23 @@ the command prompt: f.exe boot.image.pentium4 (or boot.image.x86) -Once bootstrapped, double-clicking f.exe starts the Factor UI. There is -no option to run the listener in the command prompt on Windows. +Once bootstrapped, double-clicking f.exe starts the Factor UI. + +To run the listener in the command prompt: + + f.exe -shell=tty * Source organization - doc/ - the developer's handbook, and various other bits and pieces - contrib/ - various handy libraries not part of the core - examples/ - small examples illustrating various language features +The following four directories are managed by the module system; consult +the documentation for details: + + apps/ - user-contributed applications + libs/ - user-contributed libraries + demos/ - small examples illustrating various language features + core/ - sources for the library, written in Factor + fonts/ - TrueType fonts used by UI - library/ - sources for the library, written in Factor vm/ - sources for the Factor runtime, written in C * Community @@ -190,10 +197,6 @@ Doug Coleman: Mersenne Twister RNG, Windows port Eduardo Cavazos: X11 binding Joshua Grams: PowerPC instruction cache flush code Mackenzie Straight: Windows port -Trent Buck: Debian package - -A number of contributed libraries not part of the core can be found in -contrib/. See contrib/README.txt for details. Have fun! diff --git a/TODO.FACTOR.txt b/TODO.txt similarity index 55% rename from TODO.FACTOR.txt rename to TODO.txt index 203dd0616c..239638743d 100644 --- a/TODO.FACTOR.txt +++ b/TODO.txt @@ -1,50 +1,61 @@ + 0.87: -- fix search unit test +- error popup obscures input area +- cocoa: international keys don't work +- embedded.factor is O(n^2) + ++ 0.88: + +- models: don't do redundant work +- test factor on linux/ppc +- poorly documented vocabs: + - alien + - cocoa + - command-line + - compiler + - completion + - image + - interpreter + - objc + - optimizer +- grid-lines are rendered incorrectly +- lisppaste gui +- growable data heap +- variable width word wrap +- graphical crossref tool +- inspector where slot values can be changed +- compiled call traces do not work if the runtime is built with + -fomit-frame-pointer on ppc +- use crc32 instead of modification date in reload-modules +- top level window positioning on ms windows - these things are "Too Slow": - - all-words - make-image - workspace-window -- menu should stay up if mouse button released -- roundoff is still not quite right with tracks -- grid displays quickly now, but constructing large amounts of gadgets - is slow: eg, 10000 [ dup number>string ] map describe -- completion is not ideal: eg, C+e "buttons" -- slider needs to be modelized -- better help result ranking -- help search looks funny -- variable width word wrap -- graphical module manager tool -- graphical crossref tool -- ui browser: show currently selected vocab & words + - apropos + - 10000 [ dup number>string ] map describe in the UI + - available-modules + - string-lines + - md5, crc32 + - all-words [ word-name ] map prune [ words-named ] map + - 100000 [ "\"hello\" not" eval drop ] times - auto-update browser and help when sources reload -- amd64 structs-by-value bug -- intrinsic fixnum>float float>fixnum - mac intel: struct returns from objc methods -- faster apropos -- compiled call traces -- workspace window takes too long to come up - new windows don't always have focus, eg focus follows mouse -- dataflow for [ ] map [ ] subset looks weird (wrong?) -- listener commands from a menu should not include 'hide-glass' etc -- bogus compile errors? - recompile get/set/>n/n>/ndrop if needed - cross-word type inference -- callback scheduling issue -- windows crash -- ui docs - some kind of declarative wiring framework for ui -- overhaul models, set-model* is crap -- allow rebinding styles -- fix windows gcc issue -- robustify stepper -- see if step back past a throw works -- empty callstack: should throw an exception instead of being a critical error +- if we're printing a block on multiple lines, break at some words like + set off on % # , ... and assembler opcodes +- don't end lines with literals, shuffle words or symbols? +- see should try to not show ; on a line by itself +- IN: on its own line if the entire 'see' form doesn't fit +- command buttons: indicate shortcuts +- how do we refer to command shortcuts in the docs? + ui: -- some way of intercepting all gestures -- how do we refer to command shortcuts in the docs? -- fix top level window positioning +- browser tool: dropdown menu button for definition operations +- copying pane output - editor: - autoscroll - transpose char/word/line @@ -52,54 +63,35 @@ - see if its possible to only repaint dirty regions - structure editor -+ module system: ++ compiler/ffi: -- track a list of assets loaded from each module's file - C types should be words - TYPEDEF: float { ... } { ... } ; ==> \ float T{ c-type ... } "c-type" swp - TYPEDEF: float FTFloat ; ==> \ float \ FTFloat "c-type" swp - make typedef aliasing explicit - seeing a C struct word should show its def -- file out - -+ compiler/ffi: - +- amd64 structs-by-value bug - %allot-bignum-signed-2 is broken on both platforms -- we may be able to remove the dlsym primitive - [ [ dup call ] dup call ] infer hangs - stdcall callbacks - callstack overflow when compiling mutually recursive inline words -- test what is done in the case of an invalid declaration on an inline - recursive -- ppc64 backend - arm backend - float= doesn't consider nans equal - C functions returning structs by value - compiled continuations -+ prettyprinter: - -- clean it up -- if we're printing a block on multiple lines, break at some words like - set off on % # , ... and assembler opcodes -- don't end lines with literals, shuffle words or symbols? -- see should try to not show ; on a line by itself -- IN: on its own line if the entire 'see' form doesn't fit -- don't build entire tree to print first - + misc: +- if a word drops the stack pointer below the bottom, then an error + won't be thrown until the next word accesses the stack +- prettyprinter: don't build entire tree to print first +- automatic help/effects for slot accessors +- tuple shape changes - should be possible to reload any source file in library -- growable data heap - minor GC takes too long now, we should card mark code heap - buffer-ptr should be an alien - swap nappend ==> nappend -- gdb triggers 'multiple i/o ops on port' error - incremental GC - UDP - slice: if sequence or seq start is changed, abstraction violation - hashed generic method dispatch - -+ httpd: - -- remaining HTML issues need fixing diff --git a/apps/README.txt b/apps/README.txt new file mode 100644 index 0000000000..67b44bb6c8 --- /dev/null +++ b/apps/README.txt @@ -0,0 +1,29 @@ +This directory contains Factor code that is not part of the core +library, but is useful enough to ship with the Factor distribution. + +Modules can be loaded from the listener: + + "apps/modulename" require + +Available applications: + +- automata -- Graphics demo for the UI (Eduardo Cavazos) +- benchmarks -- Various performance benchmarks (Slava Pestov) +- boids -- Graphics demo for the UI (Eduardo Cavazos) +- factory -- X11 window manager (Eduardo Cavazos) +- furnace-fjsc -- Web frontend for libs/fjsc (Chris Double) +- furnace-onigiri -- Weblog engine (Matthew Willis) +- furnace-pastebin -- demo app for Furnace (Slava Pestov) +- help-lint -- online documentation typo checker (Slava Pestov) +- hexdump -- Hexdump routine (Doug Coleman) +- lindenmayer -- L-systems tool (Eduardo Cavazos) +- lisppaste -- Lisppaste XML-RPC demo (Slava Pestov) +- mandel -- Mandelbrot fractal demo (Slava Pestov) +- random-tester -- Random compiler tester (Doug Coleman) +- raytracer -- Raytracer demo (Slava Pestov) +- rss -- An RSS1, RSS2 and Atom parser and aggregator (Chris Double, Daniel Ehrenberg) +- show-dataflow -- Code to print compiler dataflow IR to the console, or show it in the UI (Slava Pestov) +- space-invaders -- Intel 8080-based Space Invaders arcade machine emulator (Chris Double) +- tetris -- Tetris game (Alex Chapman) +- turing -- Turing machine demo (Slava Pestov) +- wee-url -- Web app to make short URLs from long ones (Doug Coleman) diff --git a/apps/all.factor b/apps/all.factor new file mode 100644 index 0000000000..f62691251f --- /dev/null +++ b/apps/all.factor @@ -0,0 +1,14 @@ +USING: words kernel modules ; + +REQUIRES: apps/automata apps/benchmarks apps/boids +apps/factorbot apps/furnace-fjsc apps/furnace-onigiri +apps/furnace-pastebin apps/help-lint apps/hexdump +apps/lindenmayer apps/lisppaste apps/mandel apps/random-tester +apps/raytracer apps/rss apps/space-invaders apps/tetris +apps/turing apps/show-dataflow apps/wee-url ; + +"x11" vocab [ + "apps/factory" require +] when + +PROVIDE: apps/all ; diff --git a/contrib/automata.factor b/apps/automata.factor similarity index 96% rename from contrib/automata.factor rename to apps/automata.factor index f0e63ddf51..390f61d262 100644 --- a/contrib/automata.factor +++ b/apps/automata.factor @@ -1,4 +1,4 @@ -REQUIRES: contrib/vars contrib/slate contrib/lindenmayer/opengl ; +REQUIRES: libs/vars libs/slate apps/lindenmayer/opengl ; USING: kernel namespaces hashtables sequences generic math arrays threads opengl gadgets @@ -153,7 +153,7 @@ init slate> over set-delegate interesting random-item set-rule ; -: automata-window ( -- ) "Automata" open-titled-window ; +: automata-window ( -- ) "Automata" open-window ; automata-gadget H{ { T{ key-down f f "1" } [ slate-ns [ start-center ] bind ] } @@ -167,4 +167,4 @@ automata-gadget H{ ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -PROVIDE: contrib/automata ; \ No newline at end of file +PROVIDE: apps/automata ; \ No newline at end of file diff --git a/contrib/benchmarks/ack.factor b/apps/benchmarks/ack.factor similarity index 100% rename from contrib/benchmarks/ack.factor rename to apps/benchmarks/ack.factor diff --git a/contrib/benchmarks/continuations.factor b/apps/benchmarks/continuations.factor similarity index 100% rename from contrib/benchmarks/continuations.factor rename to apps/benchmarks/continuations.factor diff --git a/contrib/benchmarks/empty-loop.factor b/apps/benchmarks/empty-loop.factor similarity index 100% rename from contrib/benchmarks/empty-loop.factor rename to apps/benchmarks/empty-loop.factor diff --git a/contrib/benchmarks/fac.factor b/apps/benchmarks/fac.factor similarity index 100% rename from contrib/benchmarks/fac.factor rename to apps/benchmarks/fac.factor diff --git a/contrib/benchmarks/fib.factor b/apps/benchmarks/fib.factor similarity index 100% rename from contrib/benchmarks/fib.factor rename to apps/benchmarks/fib.factor diff --git a/contrib/benchmarks/hashtables.factor b/apps/benchmarks/hashtables.factor similarity index 100% rename from contrib/benchmarks/hashtables.factor rename to apps/benchmarks/hashtables.factor diff --git a/contrib/benchmarks/help.factor b/apps/benchmarks/help.factor similarity index 83% rename from contrib/benchmarks/help.factor rename to apps/benchmarks/help.factor index 858b497639..1ed70b85d7 100644 --- a/contrib/benchmarks/help.factor +++ b/apps/benchmarks/help.factor @@ -1,5 +1,5 @@ USING: gadgets-panes hashtables help io kernel namespaces -prettyprint sequences test threads words ; +prettyprint sequences errors threads words test ; [ all-articles [ diff --git a/contrib/benchmarks/iteration.factor b/apps/benchmarks/iteration.factor similarity index 100% rename from contrib/benchmarks/iteration.factor rename to apps/benchmarks/iteration.factor diff --git a/contrib/benchmarks/load.factor b/apps/benchmarks/load.factor similarity index 90% rename from contrib/benchmarks/load.factor rename to apps/benchmarks/load.factor index 52b2e43264..89c62a19c6 100644 --- a/contrib/benchmarks/load.factor +++ b/apps/benchmarks/load.factor @@ -1,4 +1,4 @@ -PROVIDE: contrib/benchmarks +PROVIDE: apps/benchmarks { +tests+ { "empty-loop.factor" "fac.factor" diff --git a/contrib/benchmarks/prettyprint.factor b/apps/benchmarks/prettyprint.factor similarity index 100% rename from contrib/benchmarks/prettyprint.factor rename to apps/benchmarks/prettyprint.factor diff --git a/contrib/benchmarks/reverse-complement-test-in.txt b/apps/benchmarks/reverse-complement-test-in.txt similarity index 100% rename from contrib/benchmarks/reverse-complement-test-in.txt rename to apps/benchmarks/reverse-complement-test-in.txt diff --git a/contrib/benchmarks/reverse-complement-test-out.txt b/apps/benchmarks/reverse-complement-test-out.txt similarity index 100% rename from contrib/benchmarks/reverse-complement-test-out.txt rename to apps/benchmarks/reverse-complement-test-out.txt diff --git a/contrib/benchmarks/reverse-complement.factor b/apps/benchmarks/reverse-complement.factor similarity index 100% rename from contrib/benchmarks/reverse-complement.factor rename to apps/benchmarks/reverse-complement.factor diff --git a/contrib/benchmarks/sort.factor b/apps/benchmarks/sort.factor similarity index 100% rename from contrib/benchmarks/sort.factor rename to apps/benchmarks/sort.factor diff --git a/contrib/benchmarks/strings.factor b/apps/benchmarks/strings.factor similarity index 100% rename from contrib/benchmarks/strings.factor rename to apps/benchmarks/strings.factor diff --git a/contrib/benchmarks/vectors.factor b/apps/benchmarks/vectors.factor similarity index 100% rename from contrib/benchmarks/vectors.factor rename to apps/benchmarks/vectors.factor diff --git a/contrib/boids.factor b/apps/boids.factor similarity index 97% rename from contrib/boids.factor rename to apps/boids.factor index 45b789f3e9..4c4a626033 100644 --- a/contrib/boids.factor +++ b/apps/boids.factor @@ -1,7 +1,7 @@ -REQUIRES: contrib/math - contrib/vars - contrib/lindenmayer/opengl - contrib/slate ; +REQUIRES: libs/math + libs/vars + apps/lindenmayer/opengl + libs/slate ; USING: kernel namespaces math sequences arrays threads opengl gadgets math-contrib vars opengl-contrib slate ; @@ -267,7 +267,7 @@ stop? get [ ] [ run ] if ; >slate namespace slate> set-slate-ns [ display ] >action -slate> "Boids" open-titled-window ; +slate> "Boids" open-window ; : init-boids ( -- ) 50 random-boids >boids ; @@ -275,4 +275,4 @@ slate> "Boids" open-titled-window ; : init ( -- ) init-slate init-variables init-world-size init-boids stop? off ; -PROVIDE: contrib/boids ; \ No newline at end of file +PROVIDE: apps/boids ; \ No newline at end of file diff --git a/examples/factorbot.factor b/apps/factorbot.factor similarity index 86% rename from examples/factorbot.factor rename to apps/factorbot.factor index db4d5ee2f4..f0611ba901 100644 --- a/examples/factorbot.factor +++ b/apps/factorbot.factor @@ -1,6 +1,6 @@ ! Simple IRC bot written in Factor. -REQUIRES: contrib/httpd ; +REQUIRES: libs/httpd ; USING: errors generic hashtables help html http io kernel math memory namespaces parser prettyprint sequences strings threads @@ -76,7 +76,7 @@ M: ping handle-irc ( line -- ) : factorbot-loop [ factorbot ] try 30000 sleep factorbot-loop ; : multiline-respond ( string -- ) - lines [ respond ] each ; + string-lines [ respond ] each ; : object-href "http://factorcode.org" swap browser-link-href append ; @@ -93,24 +93,16 @@ IN: factorbot-commands ] [ nip [ dup summary " -- " - rot object-href append3 respond + rot object-href 3append respond ] each ] if ; : memory ( text -- ) drop [ room. ] string-out multiline-respond ; -: search ( text -- ) - search-help dup empty? [ - not-found - ] [ - first first dup article-title - " -- " rot object-href append3 respond - ] if ; - : quit ( text -- ) drop speaker get "slava" = [ disconnect ] when ; -PROVIDE: examples/factorbot ; +PROVIDE: apps/factorbot ; -MAIN: examples/factorbot factorbot ; +MAIN: apps/factorbot factorbot ; diff --git a/contrib/factory/README.txt b/apps/factory/README.txt similarity index 74% rename from contrib/factory/README.txt rename to apps/factory/README.txt index e06749f361..2a18a5db31 100644 --- a/contrib/factory/README.txt +++ b/apps/factory/README.txt @@ -1,11 +1,3 @@ ----------------------------------------------------------------------- -Loading factory ----------------------------------------------------------------------- - -Putting factory into your image is as simple as this: - - "contrib/factory" require save - ---------------------------------------------------------------------- Running factory in Xnest ---------------------------------------------------------------------- @@ -17,7 +9,7 @@ can use 2 or greater. Start factor and launch factory on the appropriate display: - "contrib/factory" run-module + "libs/factory" run-module In a terminal, start an application on the appropriate display: diff --git a/contrib/factory/factory.factor b/apps/factory/factory.factor similarity index 100% rename from contrib/factory/factory.factor rename to apps/factory/factory.factor diff --git a/apps/factory/load.factor b/apps/factory/load.factor new file mode 100644 index 0000000000..977a1c6683 --- /dev/null +++ b/apps/factory/load.factor @@ -0,0 +1,7 @@ +REQUIRES: libs/process libs/concurrency libs/x11 libs/vars ; + +PROVIDE: apps/factory { +files+ { "factory.factor" } } ; + +USE: factory + +MAIN: apps/factory f start-factory ; diff --git a/apps/furnace-fjsc/furnace-fjsc.factor b/apps/furnace-fjsc/furnace-fjsc.factor new file mode 100644 index 0000000000..fe9f6f6a14 --- /dev/null +++ b/apps/furnace-fjsc/furnace-fjsc.factor @@ -0,0 +1,76 @@ +! Copyright (C) 2006 Chris Double. All Rights Reserved. +! See http://factorcode.org/license.txt for BSD license. +! +IN: furnace:fjsc +USING: kernel html furnace xml xml-writer io httpd sequences + namespaces file-responder parser-combinators lazy-lists + fjsc ; + +: script ( path -- ) + #! given a path to a javascript file, output the + #! script tag that references it. + ; + +: fjsc-page ( scripts title quot -- ) + #! Display a web page importing the given script + #! tags and using the title. The body of the page + #! is generated by calling the quotation. + -rot xhtml-preamble + chars>entities + + + write + [ script ] each + + + call + + ; + +: fjsc-render ( template title -- ) + #! Render the fjsc page importing the required + #! scripts. + serving-html { + "/responder/fjsc-resources/jquery.js" + "/responder/fjsc-resources/bootstrap.js" + } swap [ + [ + f swap render-template + ] fjsc-page + ] with-html-stream ; + +: compile ( code -- ) + #! Compile the facor code as a string, outputting the http + #! response containing the javascript. + serving-text + 'expression' parse car parse-result-parsed fjsc-compile + write flush ; + +! The 'compile' action results in an URL that looks like +! 'responder/fjsc/compile'. It takes one query or post +! parameter called 'code'. It calls the 'compile' word +! passing the parameter to it on the stack. +\ compile { + { "code" v-required } +} define-action + +: repl ( -- ) + #! The main 'repl' page. + f "repl" "Factor to Javascript REPL" fjsc-render ; + +! An action called 'repl' +\ repl { } define-action + +! Create the web app, providing access +! under '/responder/fjsc' which calls the +! 'repl' action. +"fjsc" "repl" "apps/furnace-fjsc" web-app + +! An URL to the javascript resource files used by +! the 'fjsc' responder. +"fjsc-resources" [ + [ + "libs/fjsc/resources/" resource-path "doc-root" set + file-responder + ] with-scope +] add-simple-responder diff --git a/apps/furnace-fjsc/load.factor b/apps/furnace-fjsc/load.factor new file mode 100644 index 0000000000..cc07b5a8b5 --- /dev/null +++ b/apps/furnace-fjsc/load.factor @@ -0,0 +1,14 @@ +! Copyright (C) 2006 Chris Double. All Rights Reserved. +! See http://factorcode.org/license.txt for BSD license. +! +REQUIRES: libs/furnace libs/fjsc ; + +PROVIDE: apps/furnace-fjsc +{ + +files+ { + "furnace-fjsc.factor" + } +} { + +tests+ { + } +} ; diff --git a/apps/furnace-fjsc/repl.furnace b/apps/furnace-fjsc/repl.furnace new file mode 100644 index 0000000000..ac4ca9c316 --- /dev/null +++ b/apps/furnace-fjsc/repl.furnace @@ -0,0 +1,41 @@ + + + + +
+

Enter Factor Code Here

+
+ + +
+

Compiled Code

+ +

Stack

+
+
+

Playground

+
+
+
+

More information on the Factor to Javascript compiler can be found at these blog posts: +

+

+

Some useful words: +

+
vocabs ( -- seq )
+
Return a sequence of available vocabularies
+
words ( string -- seq )
+
Return a sequence of words in the given vocabulary
+
all-words ( -- seq )
+
Return a sequence of all words
+
+

+

The contents of bootstrap.factor have been loaded on startup.

+
diff --git a/apps/furnace-onigiri/load.factor b/apps/furnace-onigiri/load.factor new file mode 100644 index 0000000000..2a7478ffcc --- /dev/null +++ b/apps/furnace-onigiri/load.factor @@ -0,0 +1,11 @@ +! Copyright (C) 2006 Matthew Willis. All Rights Reserved. +! See http://factorcode.org/license.txt for BSD license. +! +REQUIRES: libs/furnace libs/sqlite libs/calendar libs/crypto libs/farkup +libs/basic-authentication ; + +PROVIDE: apps/furnace-onigiri +{ +files+ { + "onigiri.factor" + "onigiri.facts" +} } ; \ No newline at end of file diff --git a/apps/furnace-onigiri/onigiri.factor b/apps/furnace-onigiri/onigiri.factor new file mode 100644 index 0000000000..e4afd6880c --- /dev/null +++ b/apps/furnace-onigiri/onigiri.factor @@ -0,0 +1,278 @@ +! Copyright (C) 2006 Matthew Willis. All Rights Reserved. +! See http://factorcode.org/license.txt for BSD license. +! +USING: httpd threads kernel namespaces furnace sqlite tuple-db +sequences html strings math hashtables crypto io file-responder calendar +prettyprint parser errors sha2 basic-authentication ; + +IN: furnace:onigiri + +! start should be removed after doublec's responder-url hits the main repos +SYMBOL: responder-url +"/" responder-url set +! end + +TUPLE: entry title stub body created updated ; +entry default-mapping set-mapping + +: any-entry ( -- entry ) + ! useful for tuple-db searching + f f f f f ; + +TUPLE: onigiri-meta value key ; +onigiri-meta default-mapping set-mapping + +TUPLE: user name password level ; +user default-mapping set-mapping + +DEFER: onigiri +: setup-entries ( db-name -- ) + ! create the entries table + sqlite-open dup entry create-tuple-table sqlite-close ; + +: setup-meta ( port db-name -- ) + ! create the onigiri metadata table + ! the port data is necessary, all other data must be entered manually + ! until we get the CRUD interface + sqlite-open [ onigiri-meta create-tuple-table ] keep + swap dupd number>string "port" save-tuple sqlite-close ; + +: setup-users ( db-name -- ) + ! create the users table, adding a default admin user with password admin + sqlite-open dup user create-tuple-table dup + "admin" dup string>sha-256-string over save-tuple sqlite-close ; + +: load-onigiri-meta ( -- ) + "db" \ onigiri get hash + f f find-tuples + [ + dup onigiri-meta-value swap onigiri-meta-key + \ onigiri get set-hash + ] each ; + +: remove-onigiri-meta ( -- ) + ! probably shouldn't use this directly + "db" \ onigiri get hash dup f f find-tuples + [ delete-tuple ] each-with ; + +: save-onigiri-meta ( -- ) + remove-onigiri-meta + "db" \ onigiri get [ hash ] keep hash-keys + [ + dup \ onigiri get hash dup string? + [ swap save-tuple ] + [ 3drop ] if + ] each-with ; + +: title>stub ( title -- stub ) + ! creates a url friendly name based on the title + " " split [ [ alpha? ] subset ] map "" swap remove "-" join ; + +: action>url ( action -- url ) + responder-url get swap append ; + +: stub>url ( stub -- url ) + "entry-show?entry=" swap append action>url ; + +: stub>entry ( stub -- entry ) + [ + "db" \ onigiri get hash swap any-entry [ set-entry-stub ] keep + find-tuples dup empty? [ drop f ] [ first ] if + ] [ f ] if* ; + +: name>user ( name -- user ) + [ + "db" \ onigiri get hash swap f f find-tuples + dup empty? [ drop f ] [ first ] if + ] [ f ] if* ; + +: key>meta ( key -- onigiri-meta ) + [ + "db" \ onigiri get hash f rot find-tuples + dup empty? [ drop f ] [ first ] if + ] [ f ] if* ; + +: compose-entry ( title body-lines -- ) + "\n" join over title>stub swap + millis number>string dup + "db" \ onigiri get hash swap insert-tuple ; + +: millis>timestamp ( millis -- timestamp ) + 1000 /f seconds unix-1970 swap +dt ; + +: atom ( -- ) + "text/xml" serving-content + f "atom" render-template ; + +: css-path ( -- path ) + ! "text/css" serving-content + "css" \ onigiri get hash [ "onigirihouse" ] unless* + "apps/furnace-onigiri/resources/" swap ".css" 3append resource-path ; + +: css ( -- ) + "text/css" serving-content css-path [ + [ + file-vocabs + dup file set ! so that reload works properly + dup contents write + ] with-scope + ] assert-depth drop ; + +TUPLE: onigiri-layout title quot ; +: onigiri-document ( title quot -- ) + "front" render-template ; + +: entry-list ( -- ) + "title" \ onigiri get hash + serving-html [ + [ + "db" \ onigiri get hash any-entry find-tuples + [ [ entry-created string>number ] 2apply <=> neg ] sort + [ "entry" render-template ] each + ] onigiri-document + ] with-html-stream ; + +: entry-show ( stub -- ) + stub>entry + [ + dup "title" \ onigiri get hash + " - " rot entry-title 3append swap + serving-html [ + [ + "entry" render-template + ] curry onigiri-document + ] with-html-stream + ] [ + "title" \ onigiri get hash " - Entry not found" append + serving-html [ + [ f "no-entry" render-template ] onigiri-document + ] with-html-stream + ] if* ; + +: entry-edit ( stub -- ) + [ + any-entry [ set-entry-stub ] keep "db" \ onigiri get hash + swap find-tuples dup length zero? + [ drop any-entry "new entry"] [ first dup entry-title ] if + ] [ any-entry "new entry" ] if* + "title" \ onigiri get hash " - editing " append swap append + serving-html swap [ + [ + "edit" render-template + ] curry onigiri-document + ] with-html-stream ; + +: entry-update ( body title stub -- ) + "onigiri-users" [ + [ + stub>entry [ any-entry ] unless* + ] [ any-entry over title>stub swap [ set-entry-stub ] keep ] if* + [ set-entry-title ] keep + [ CHAR: \r rot remove swap set-entry-body ] keep + millis number>string swap [ set-entry-updated ] 2keep + dup entry-created [ nip ] [ [ set-entry-created ] keep ] if + "db" \ onigiri get hash swap [ save-tuple ] keep + entry-stub "entry-show?entry=" swap append permanent-redirect + ] with-basic-authentication ; + +: entry-delete ( stub -- ) + "onigiri-users" [ + stub>entry [ + "db" \ onigiri get hash swap delete-tuple + ] when* + "entry-list" permanent-redirect + ] with-basic-authentication ; + +: user-list ( -- ) + "onigiri-users" [ + serving-html [ + f "admin-header" render-template + f "user-list" render-template + f "admin-footer" render-template + ] with-html-stream + ] with-basic-authentication ; + +: user-edit ( name -- ) + "onigiri-users" [ + serving-html [ + f "admin-header" render-template + dup [ name>user nip ] when* "user-edit" render-template + f "admin-footer" render-template + ] with-html-stream + ] with-basic-authentication ; + +: user-update ( name password level -- ) + "onigiri-admin" [ + pick name>user + [ + tuck set-user-level swap string>sha-256-string over + set-user-password nip + ] + [ swap string>sha-256-string swap ] if* + "db" \ onigiri get hash swap save-tuple + "user-list" permanent-redirect + ] with-basic-authentication ; + +: user-delete ( name -- ) + "onigiri-admin" [ + name>user [ "db" \ onigiri get hash swap delete-tuple ] when* + "user-list" permanent-redirect + ] with-basic-authentication ; + +: meta-list ( -- ) + "onigiri-users" [ + serving-html [ + f "admin-header" render-template + f "meta-list" render-template + f "admin-footer" render-template + ] with-html-stream + ] with-basic-authentication ; + +: meta-update ( value key -- ) + "onigiri-admin" [ + \ onigiri get set-hash "meta-list" permanent-redirect + ] with-basic-authentication ; + +: register-actions ( -- ) + \ entry-list { } define-action + \ entry-show { { "entry" } } define-action + \ entry-edit { { "entry" } } define-action + \ entry-update { { "body" } { "title" } { "stub" } } define-action + \ entry-delete { { "entry" } } define-action + \ user-list { } define-action + \ user-edit { { "name" } } define-action + \ user-update { { "name" } { "password" } { "level" } } define-action + \ user-delete { { "name" } } define-action + \ meta-list { } define-action + \ meta-update { { "value" } { "key" } } define-action + \ atom { } define-action + \ css { } define-action + "onigiri" "entry-list" "apps/furnace-onigiri/templates/" web-app ; + +: setup-onigiri ( port db-name -- ) + tuck setup-meta dup setup-entries setup-users ; + +: stop-onigiri ( -- ) + ! save metadata, close the db, remove the onigirihouse responder, + ! and if it was the default responder, make "file" the default responder + save-onigiri-meta + "db" \ onigiri get hash sqlite-close + "onigiri" responders get remove-hash + "responder" "default" responders get hash hash + "onigiri" = [ "file" set-default-responder ] when ; + +: onigiri ( db-name -- ) + ! open the db, load metadata from the db, start httpd [optionally, + ! with onigiri as the default responder] + H{ } clone \ onigiri set + sqlite-open "db" \ onigiri get set-hash + load-onigiri-meta register-actions + "onigiri-as-default-responder" \ onigiri get hash "true" = + [ "onigiri" set-default-responder ] when + "port" \ onigiri get hash string>number [ httpd ] in-thread drop + ! add the onigiri users realm + [ f "db" \ onigiri get hash swap find-tuples empty? not ] + "onigiri-users" add-realm + ! add the onigiri admins realm + [ "admin" "db" \ onigiri get hash swap find-tuples empty? not ] + "onigiri-admin" add-realm ; \ No newline at end of file diff --git a/contrib/hardware-info/os-unix.factor b/apps/furnace-onigiri/onigiri.facts similarity index 100% rename from contrib/hardware-info/os-unix.factor rename to apps/furnace-onigiri/onigiri.facts diff --git a/apps/furnace-onigiri/onigiri.todo b/apps/furnace-onigiri/onigiri.todo new file mode 100644 index 0000000000..15ceb7b956 --- /dev/null +++ b/apps/furnace-onigiri/onigiri.todo @@ -0,0 +1,38 @@ +Better xhtml structure +Adsense +*UI for metadata +Plugins +Themes +Recent posts sidebar +Links sidebar +Widgets (Onigirihouse feels ...) +Tagging +Pretty URL's +Develop protocol for metadata and their defaults +Use wiky to do client-side wikistyle +Change furnace to /controller/action/argument1/argument2/.../ style +Have posts correlated with users +Figure out which user is logged in from inside an action + +----DONE----- + +by 12/31/2006 +Atom +Individual post pages +Timestamping and ordering +Rename onigirihouse => onigiri +Store blog metadata in db +Markdown for entries +Make Atom feed validate (Add id, updated to atom) +Store URL +UI for posting +Posting interface +Switch to plug-in CSS + +1/1/07 +Stopped using farkup (for now) +Moved to controller-action naming convention + +1/2/07 +Added Users +Added CRUD for Users, multiple levels of users \ No newline at end of file diff --git a/apps/furnace-onigiri/resources/onigirihouse.css b/apps/furnace-onigiri/resources/onigirihouse.css new file mode 100644 index 0000000000..89f26645f8 --- /dev/null +++ b/apps/furnace-onigiri/resources/onigirihouse.css @@ -0,0 +1,7 @@ +body { font: 14px "Trebuchet MS", Arial, Helvetica, sans-serif; } +h1, h2, h3, h4, h5, h6 { font-family: lucida grande ; } +#header { text-align: center ; } +#container { max-width: 720px ; margin: 0 auto; padding: 20px; } +.entry { margin-bottom: 75px ; } +a { color: #5C832F; text-decoration: none; } +a:hover { text-decoration: underline; } \ No newline at end of file diff --git a/apps/furnace-onigiri/templates/admin-footer.furnace b/apps/furnace-onigiri/templates/admin-footer.furnace new file mode 100644 index 0000000000..17c7245b64 --- /dev/null +++ b/apps/furnace-onigiri/templates/admin-footer.furnace @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/apps/furnace-onigiri/templates/admin-header.furnace b/apps/furnace-onigiri/templates/admin-header.furnace new file mode 100644 index 0000000000..0df8a60a44 --- /dev/null +++ b/apps/furnace-onigiri/templates/admin-header.furnace @@ -0,0 +1,15 @@ + + + + <% USING: namespaces io kernel hashtables furnace:onigiri furnace ; %> + Onigiri Admin + + + + + + +
\ No newline at end of file diff --git a/apps/furnace-onigiri/templates/analytics.furnace b/apps/furnace-onigiri/templates/analytics.furnace new file mode 100644 index 0000000000..f0e57b41ff --- /dev/null +++ b/apps/furnace-onigiri/templates/analytics.furnace @@ -0,0 +1,8 @@ +<% USING: io namespaces hashtables furnace:onigiri ; %> + + + \ No newline at end of file diff --git a/apps/furnace-onigiri/templates/atom.furnace b/apps/furnace-onigiri/templates/atom.furnace new file mode 100644 index 0000000000..1b7e029866 --- /dev/null +++ b/apps/furnace-onigiri/templates/atom.furnace @@ -0,0 +1,24 @@ + + + <% USING: io namespaces httpd furnace:onigiri tuple-db + math kernel sequences hashtables html calendar ; %> + <% "title" \ onigiri get hash write %> + url write %>"/> + + <% "author" \ onigiri get hash write %> + + <% "atom" action>url write %> + <% "db" \ onigiri get hash any-entry find-tuples + [ [ entry-updated string>number ] 2apply <=> neg ] sort + dup empty? [ %> + <% dup first entry-updated string>number millis>timestamp timestamp>rfc3339 write %><% ] unless + [ [ entry-created string>number ] 2apply <=> neg ] sort + [ %> + + <% dup entry-title write %> + <% dup entry-stub stub>url dup write %> + <% over entry-updated string>number millis>timestamp timestamp>rfc3339 write %> + + <% entry-body write %> + <% ] each %> + \ No newline at end of file diff --git a/apps/furnace-onigiri/templates/edit.furnace b/apps/furnace-onigiri/templates/edit.furnace new file mode 100644 index 0000000000..3c43a2ebb0 --- /dev/null +++ b/apps/furnace-onigiri/templates/edit.furnace @@ -0,0 +1,9 @@ +<% USING: namespaces io kernel sequences furnace:onigiri ; %> + +
+ <% "stub" get [ %>"/><% ] when %> + + + <% "stub" get [ %><% ] when %> +
Title:"/>
Body:
"/>url write %>">Delete
+
diff --git a/apps/furnace-onigiri/templates/entry.furnace b/apps/furnace-onigiri/templates/entry.furnace new file mode 100644 index 0000000000..e70e1a138f --- /dev/null +++ b/apps/furnace-onigiri/templates/entry.furnace @@ -0,0 +1,10 @@ +<% USING: furnace:onigiri io namespaces math calendar html kernel ; %> + +
+

url write %>"><% "title" get write %>

+ +

posted <% "created" get string>number 1000 /f seconds + unix-1970 swap +dt >local-time timestamp>string write %> ">(edit)

+ +<% "body" get write-html %> +
\ No newline at end of file diff --git a/apps/furnace-onigiri/templates/front.furnace b/apps/furnace-onigiri/templates/front.furnace new file mode 100644 index 0000000000..db039daaed --- /dev/null +++ b/apps/furnace-onigiri/templates/front.furnace @@ -0,0 +1,25 @@ + + + + <% USING: namespaces io kernel hashtables furnace:onigiri furnace ; %> + <% "title" get write %> + + + + + + + +
+<% "quot" get call %> + +<% "analytics" \ onigiri get hash [ f "analytics" render-template ] when %> +
+ + diff --git a/apps/furnace-onigiri/templates/meta-list.furnace b/apps/furnace-onigiri/templates/meta-list.furnace new file mode 100644 index 0000000000..722d9b2591 --- /dev/null +++ b/apps/furnace-onigiri/templates/meta-list.furnace @@ -0,0 +1,22 @@ +<% USING: furnace:onigiri namespaces hashtables sequences kernel strings io ; %> + +

Add/Change Onigiri Metadata

+ + + + + + + + +<% \ onigiri get hash-keys [ %> + + <% dup \ onigiri get hash dup string? [ %> + + + + <% ] [ 2drop ] if %> + +<% ] each %> + +
KeyValue
<% swap write %><% write %>
\ No newline at end of file diff --git a/apps/furnace-onigiri/templates/no-entry.furnace b/apps/furnace-onigiri/templates/no-entry.furnace new file mode 100644 index 0000000000..8f6fcd7679 --- /dev/null +++ b/apps/furnace-onigiri/templates/no-entry.furnace @@ -0,0 +1,5 @@ +<% USING: furnace:onigiri io hashtables namespaces ; %> + +

The entry you are searching for could not be found.

+ +

url write %>">Back to <% "title" \ onigiri get hash write %>

\ No newline at end of file diff --git a/apps/furnace-onigiri/templates/user-edit.furnace b/apps/furnace-onigiri/templates/user-edit.furnace new file mode 100644 index 0000000000..7a404b22f0 --- /dev/null +++ b/apps/furnace-onigiri/templates/user-edit.furnace @@ -0,0 +1,15 @@ +<% USING: furnace:onigiri namespaces io kernel ; %> + +
url write %>" method=post> + + + + + + + + +
Name:"/>
Password:
Level:
+
\ No newline at end of file diff --git a/apps/furnace-onigiri/templates/user-list.furnace b/apps/furnace-onigiri/templates/user-list.furnace new file mode 100644 index 0000000000..51e251bb8e --- /dev/null +++ b/apps/furnace-onigiri/templates/user-list.furnace @@ -0,0 +1,15 @@ +<% USING: furnace:onigiri namespaces io hashtables tuple-db kernel sequences ; %> + + + + +<% "db" \ onigiri get hash f f f find-tuples [ %> + + + + +<% ] each %> + +
NameLevel
<% dup user-name write %><% dup user-level write %>editdelete
+ +

url write %>">Add New User

diff --git a/contrib/furnace-pastebin/annotate-paste.fhtml b/apps/furnace-pastebin/annotate-paste.furnace similarity index 100% rename from contrib/furnace-pastebin/annotate-paste.fhtml rename to apps/furnace-pastebin/annotate-paste.furnace diff --git a/contrib/furnace-pastebin/annotation.fhtml b/apps/furnace-pastebin/annotation.furnace similarity index 100% rename from contrib/furnace-pastebin/annotation.fhtml rename to apps/furnace-pastebin/annotation.furnace diff --git a/apps/furnace-pastebin/load.factor b/apps/furnace-pastebin/load.factor new file mode 100644 index 0000000000..e112f63509 --- /dev/null +++ b/apps/furnace-pastebin/load.factor @@ -0,0 +1,4 @@ +REQUIRES: libs/furnace ; + +PROVIDE: apps/furnace-pastebin +{ +files+ { "pastebin.factor" } } ; diff --git a/contrib/furnace-pastebin/new-paste.fhtml b/apps/furnace-pastebin/new-paste.furnace similarity index 100% rename from contrib/furnace-pastebin/new-paste.fhtml rename to apps/furnace-pastebin/new-paste.furnace diff --git a/contrib/furnace-pastebin/paste-list.fhtml b/apps/furnace-pastebin/paste-list.furnace similarity index 100% rename from contrib/furnace-pastebin/paste-list.fhtml rename to apps/furnace-pastebin/paste-list.furnace diff --git a/contrib/furnace-pastebin/paste-summary.fhtml b/apps/furnace-pastebin/paste-summary.furnace similarity index 100% rename from contrib/furnace-pastebin/paste-summary.fhtml rename to apps/furnace-pastebin/paste-summary.furnace diff --git a/contrib/furnace-pastebin/pastebin.factor b/apps/furnace-pastebin/pastebin.factor similarity index 96% rename from contrib/furnace-pastebin/pastebin.factor rename to apps/furnace-pastebin/pastebin.factor index 2378487321..4cbdeb8e11 100644 --- a/contrib/furnace-pastebin/pastebin.factor +++ b/apps/furnace-pastebin/pastebin.factor @@ -72,4 +72,4 @@ C: pastebin ( -- pastebin ) \ annotate-paste [ "n" show-paste ] define-redirect -"pastebin" "paste-list" "contrib/furnace-pastebin" web-app +"pastebin" "paste-list" "apps/furnace-pastebin" web-app diff --git a/contrib/furnace-pastebin/show-paste.fhtml b/apps/furnace-pastebin/show-paste.furnace similarity index 100% rename from contrib/furnace-pastebin/show-paste.fhtml rename to apps/furnace-pastebin/show-paste.furnace diff --git a/apps/help-lint.factor b/apps/help-lint.factor new file mode 100644 index 0000000000..93005d1eda --- /dev/null +++ b/apps/help-lint.factor @@ -0,0 +1,115 @@ +! Copyright (C) 2006 Slava Pestov. +! See http://factorcode.org/license.txt for BSD license. +IN: help-lint +USING: sequences parser kernel errors help words modules strings +namespaces io prettyprint tools definitions generic ; + +! A quick and dirty tool to check documentation in an automated +! fashion. + +! - ensures examples run and produce stated output +! - ensures $see-also elements don't contain duplicate entries +! (I always make this mistake!) +! - ensures $module-link elements point to modules which +! actually exist +! - ensures that $values match the stack effect declaration +! - ensures that word help articles render (this catches broken +! links, improper nesting, etc) + +: check-example ( element -- ) + 1 tail + [ 1 head* "\n" join eval>string "\n" ?tail drop ] keep + peek assert= ; + +: check-examples ( word element -- ) + nip \ $example swap elements [ check-example ] each ; + +: extract-values ( element -- seq ) + \ $values swap elements dup empty? [ + drop { } + ] [ + first 1 tail [ first ] map prune natural-sort + ] if ; + +: effect-values ( word -- seq ) + stack-effect dup effect-in swap effect-out + append [ string? ] subset prune natural-sort ; + +: check-values ( word element -- ) + \ $shuffle over elements empty? + \ $values-x/y over elements empty? not and + pick "declared-effect" word-prop and [ + extract-values >r effect-values r> assert= + ] [ + 2drop + ] if ; + +: check-see-also ( word element -- ) + nip \ $see-also swap elements [ + 1 tail dup prune [ length ] 2apply assert= + ] each ; + +: check-modules ( word element -- ) + nip \ $module-link swap elements [ + second + \ available-modules get member? + [ "Missing module" throw ] unless + ] each ; + +: check-rendering ( word element -- ) + drop [ help ] string-out drop ; + +: all-word-help ( -- seq ) + all-words [ word-help ] subset ; + +TUPLE: word-help-error word ; + +C: word-help-error + [ set-delegate ] keep + [ set-word-help-error-word ] keep ; + +DEFER: check-help + +: fix-help ( error -- ) + dup delegate error. + word-help-error-word edit + "Press ENTER when done." print flush readln drop + reload-modules + check-help ; + +: check-1 ( word -- ) + [ + dup word-help [ + 2dup check-examples + 2dup check-values + 2dup check-see-also + 2dup check-modules + 2dup check-rendering + ] assert-depth 2drop + ] [ + throw + ] recover ; + +: check-help ( -- ) + [ + [ + available-modules [ module-name ] map + \ available-modules set + all-word-help [ check-1 ] each + ] with-scope + ] [ + fix-help check-help + ] recover ; + +: unlinked-words ( -- seq ) + all-word-help [ parents empty? ] subset ; + +: linked-undocumented-words ( -- seq ) + all-words + [ word-help not ] subset + [ parents empty? not ] subset + [ "predicating" word-prop not ] subset ; + +PROVIDE: apps/help-lint ; + +MAIN: apps/help-lint check-help ; diff --git a/contrib/hexdump/hexdump.factor b/apps/hexdump/hexdump.factor similarity index 84% rename from contrib/hexdump/hexdump.factor rename to apps/hexdump/hexdump.factor index 15fe9418c3..d072e81bab 100644 --- a/contrib/hexdump/hexdump.factor +++ b/apps/hexdump/hexdump.factor @@ -1,4 +1,5 @@ -USING: io kernel math namespaces prettyprint sequences strings ; +USING: arrays io kernel math namespaces prettyprint sequences +strings ; IN: hexdump-internals : header. ( len -- ) @@ -8,7 +9,7 @@ IN: hexdump-internals : h-pad. ( digit -- ) >hex 2 CHAR: 0 pad-left write ; : line. ( str n -- ) offset. [ [ h-pad. " " write ] each ] keep - 16 over length - [ " " write ] times + 16 over length - " " concat write [ dup printable? [ drop CHAR: . ] unless ch>string write ] each terpri ; diff --git a/contrib/hexdump/load.factor b/apps/hexdump/load.factor similarity index 75% rename from contrib/hexdump/load.factor rename to apps/hexdump/load.factor index 1fd82280ef..548ac5204a 100644 --- a/contrib/hexdump/load.factor +++ b/apps/hexdump/load.factor @@ -1,3 +1,3 @@ -PROVIDE: contrib/hexdump +PROVIDE: apps/hexdump { +files+ { "hexdump.factor" } } { +tests+ { "test/hexdump.factor" } } ; diff --git a/contrib/hexdump/test/hexdump.factor b/apps/hexdump/test/hexdump.factor similarity index 100% rename from contrib/hexdump/test/hexdump.factor rename to apps/hexdump/test/hexdump.factor diff --git a/contrib/lindenmayer/camera-slate.factor b/apps/lindenmayer/camera-slate.factor similarity index 100% rename from contrib/lindenmayer/camera-slate.factor rename to apps/lindenmayer/camera-slate.factor diff --git a/contrib/lindenmayer/camera.factor b/apps/lindenmayer/camera.factor similarity index 100% rename from contrib/lindenmayer/camera.factor rename to apps/lindenmayer/camera.factor diff --git a/contrib/lindenmayer/lindenmayer.factor b/apps/lindenmayer/lindenmayer.factor similarity index 98% rename from contrib/lindenmayer/lindenmayer.factor rename to apps/lindenmayer/lindenmayer.factor index 64c0622877..8035bc77c3 100644 --- a/contrib/lindenmayer/lindenmayer.factor +++ b/apps/lindenmayer/lindenmayer.factor @@ -1,12 +1,12 @@ ! Eduardo Cavazos - wayo.cavazos@gmail.com -REQUIRES: contrib/math - contrib/vars - contrib/slate - contrib/lindenmayer/opengl - contrib/lindenmayer/turtle - contrib/lindenmayer/camera - contrib/lindenmayer/camera-slate ; +REQUIRES: libs/math + libs/vars + libs/slate + apps/lindenmayer/opengl + apps/lindenmayer/turtle + apps/lindenmayer/camera + apps/lindenmayer/camera-slate ; USING: kernel alien namespaces arrays vectors math opengl sequences threads hashtables strings gadgets @@ -294,7 +294,7 @@ reset-turtle : init-slate ( -- ) >slate namespace slate> set-slate-ns -slate> "L-system" open-titled-window +slate> "L-system" open-window [ display ] >action ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/apps/lindenmayer/load.factor b/apps/lindenmayer/load.factor new file mode 100644 index 0000000000..aa8219e047 --- /dev/null +++ b/apps/lindenmayer/load.factor @@ -0,0 +1,2 @@ +PROVIDE: apps/lindenmayer +{ +files+ { "lindenmayer.factor" } } ; \ No newline at end of file diff --git a/contrib/lindenmayer/opengl.factor b/apps/lindenmayer/opengl.factor similarity index 97% rename from contrib/lindenmayer/opengl.factor rename to apps/lindenmayer/opengl.factor index 44138c369f..38ae09ed9a 100644 --- a/contrib/lindenmayer/opengl.factor +++ b/apps/lindenmayer/opengl.factor @@ -1,4 +1,4 @@ -REQUIRES: contrib/alien ; +REQUIRES: libs/alien ; USING: kernel sequences opengl alien-contrib ; IN: opengl-contrib diff --git a/contrib/lindenmayer/turtle.factor b/apps/lindenmayer/turtle.factor similarity index 98% rename from contrib/lindenmayer/turtle.factor rename to apps/lindenmayer/turtle.factor index 50032f6cc7..b8432f3314 100644 --- a/contrib/lindenmayer/turtle.factor +++ b/apps/lindenmayer/turtle.factor @@ -1,4 +1,4 @@ -REQUIRES: contrib/math contrib/vars ; +REQUIRES: libs/math libs/vars ; USING: kernel math namespaces sequences arrays math-contrib vars ; IN: turtle diff --git a/apps/lisppaste.factor b/apps/lisppaste.factor new file mode 100644 index 0000000000..545a8866b5 --- /dev/null +++ b/apps/lisppaste.factor @@ -0,0 +1,15 @@ +IN: lisppaste +REQUIRES: libs/xml-rpc ; +USING: arrays kernel xml-rpc ; + +: url "http://www.common-lisp.net:8185/RPC2" ; + +: channels ( -- seq ) + { } "listchannels" url invoke-method ; + +: lisppaste ( seq -- response ) + ! seq is { channel user title contents } + ! or { channel user title contents annotation-number } + "newpaste" url invoke-method ; + +PROVIDE: apps/lisppaste ; diff --git a/examples/mandel/load.factor b/apps/mandel/load.factor similarity index 52% rename from examples/mandel/load.factor rename to apps/mandel/load.factor index 26a695bd34..269a8de5d9 100644 --- a/examples/mandel/load.factor +++ b/apps/mandel/load.factor @@ -1,8 +1,8 @@ -PROVIDE: examples/mandel +PROVIDE: apps/mandel { +files+ { "mandel.factor" } } { +tests+ { "tests.factor" } } ; USE: mandel USE: test -MAIN: examples/mandel [ "mandel.pnm" run>file ] time ; +MAIN: apps/mandel [ "mandel.pnm" run>file ] time ; diff --git a/examples/mandel/mandel.factor b/apps/mandel/mandel.factor similarity index 100% rename from examples/mandel/mandel.factor rename to apps/mandel/mandel.factor diff --git a/examples/mandel/tests.factor b/apps/mandel/tests.factor similarity index 100% rename from examples/mandel/tests.factor rename to apps/mandel/tests.factor diff --git a/apps/random-tester/load.factor b/apps/random-tester/load.factor new file mode 100644 index 0000000000..dddeff2a7b --- /dev/null +++ b/apps/random-tester/load.factor @@ -0,0 +1,9 @@ +REQUIRES: libs/lazy-lists libs/shuffle ; +PROVIDE: apps/random-tester +{ +files+ { + "utils.factor" + "random.factor" + "random-tester.factor" + "random-tester2.factor" + "type.factor" +} } ; diff --git a/contrib/random-tester/random-tester.factor b/apps/random-tester/random-tester.factor similarity index 87% rename from contrib/random-tester/random-tester.factor rename to apps/random-tester/random-tester.factor index 4fc64b9d0e..ab24e6554b 100644 --- a/contrib/random-tester/random-tester.factor +++ b/apps/random-tester/random-tester.factor @@ -105,10 +105,6 @@ IN: random-tester : 2-complex>complex { * + - /f } ; - - - - SYMBOL: last-quot SYMBOL: first-arg SYMBOL: second-arg @@ -178,10 +174,10 @@ SYMBOL: second-arg ! RANDOM QUOTATIONS TO TEST -: random-1-integer>x-quot ( -- quot ) 1-integer>x nth-rand unit ; -: random-1-ratio>x-quot ( -- quot ) 1-ratio>x nth-rand unit ; -: random-1-float>x-quot ( -- quot ) 1-float>x nth-rand unit ; -: random-1-complex>x-quot ( -- quot ) 1-complex>x nth-rand unit ; +: random-1-integer>x-quot ( -- quot ) 1-integer>x pick-one unit ; +: random-1-ratio>x-quot ( -- quot ) 1-ratio>x pick-one unit ; +: random-1-float>x-quot ( -- quot ) 1-float>x pick-one unit ; +: random-1-complex>x-quot ( -- quot ) 1-complex>x pick-one unit ; : test-1-integer>x ( -- ) random-integer random-1-integer>x-quot 1-interpreted-vs-compiled-check ; @@ -193,18 +189,18 @@ SYMBOL: second-arg random-complex random-1-complex>x-quot 1-interpreted-vs-compiled-check ; -: random-1-float>float-quot ( -- obj ) 1-float>float nth-rand unit ; -: random-2-float>float-quot ( -- obj ) 2-float>float nth-rand unit ; +: random-1-float>float-quot ( -- obj ) 1-float>float pick-one unit ; +: random-2-float>float-quot ( -- obj ) 2-float>float pick-one unit ; : nrandom-2-float>float-quot ( -- obj ) [ 5 [ { - [ 2-float>float nth-rand , random-float , ] - [ 1-float>float nth-rand , ] + [ 2-float>float pick-one , random-float , ] + [ 1-float>float pick-one , ] } do-one ] times - 2-float>float nth-rand , + 2-float>float pick-one , ] [ ] make ; : test-1-float>float ( -- ) @@ -220,8 +216,8 @@ SYMBOL: second-arg : test-1-integer>x-runtime ( -- ) random-integer random-1-integer>x-quot 1-runtime-check ; -: random-1-integer>x-throws-quot ( -- obj ) 1-integer>x-throws nth-rand unit ; -: random-1-ratio>x-throws-quot ( -- obj ) 1-ratio>x-throws nth-rand unit ; +: random-1-integer>x-throws-quot ( -- obj ) 1-integer>x-throws pick-one unit ; +: random-1-ratio>x-throws-quot ( -- obj ) 1-ratio>x-throws pick-one unit ; : test-1-integer>x-throws ( -- obj ) random-integer random-1-integer>x-throws-quot 1-interpreted-vs-compiled-check-catch ; @@ -234,16 +230,9 @@ SYMBOL: second-arg : test-2-integer>x-throws ( -- ) [ random-integer , random-integer , - 2-x>y-throws nth-rand , + 2-x>y-throws pick-one , ] [ ] make 2-interpreted-vs-compiled-check-catch ; -! : test-^-shift ( -- ) -! [ - ! 100 random-int 50 - , - ! 100 random-int 50 - , - ! { ^ shift } nth-rand , - ! ] [ ] make 2-interpreted-vs-compiled-check-catch ; - ! : test-^-ratio ( -- ) ! [ ! random-ratio , random-ratio , \ ^ , @@ -251,27 +240,27 @@ SYMBOL: second-arg : test-0-float?-when [ - random-number , \ dup , \ float? , 1-float>x nth-rand unit , \ when , + random-number , \ dup , \ float? , 1-float>x pick-one unit , \ when , ] [ ] make 0-runtime-check ; : test-1-integer?-when random-integer [ - \ dup , \ integer? , 1-integer>x nth-rand unit , \ when , + \ dup , \ integer? , 1-integer>x pick-one unit , \ when , ] [ ] make 1-interpreted-vs-compiled-check ; : test-1-ratio?-when random-ratio [ - \ dup , \ ratio? , 1-ratio>x nth-rand unit , \ when , + \ dup , \ ratio? , 1-ratio>x pick-one unit , \ when , ] [ ] make 1-interpreted-vs-compiled-check ; : test-1-float?-when random-float [ - \ dup , \ float? , 1-float>x nth-rand unit , \ when , + \ dup , \ float? , 1-float>x pick-one unit , \ when , ] [ ] make 1-interpreted-vs-compiled-check ; : test-1-complex?-when random-complex [ - \ dup , \ complex? , 1-complex>x nth-rand unit , \ when , + \ dup , \ complex? , 1-complex>x pick-one unit , \ when , ] [ ] make 1-interpreted-vs-compiled-check ; @@ -308,5 +297,5 @@ SYMBOL: second-arg test-1-complex?-when ! full-gc ! code-gc - } nth-rand dup . execute terpri ; + } pick-one dup . execute terpri ; diff --git a/apps/random-tester/random-tester2.factor b/apps/random-tester/random-tester2.factor new file mode 100644 index 0000000000..5407ccc7a5 --- /dev/null +++ b/apps/random-tester/random-tester2.factor @@ -0,0 +1,163 @@ +USING: compiler errors inference interpreter io +kernel math memory namespaces prettyprint random-tester +sequences tools words ; +USING: arrays definitions generic graphs hashtables ; +IN: random-tester2 + +SYMBOL: wordbank +: w1 + { + die + set-walker-hook exit + + xref-words + + times repeat (repeat) + supremum infimum assoc rassoc norm-sq + product sum curry remove-all member? subseq? + + (next-power-of-2) (^) d>w/w w>h/h millis + (random-int) ^n integer, first-bignum + most-positive-fixnum ^ init-random next-power-of-2 + most-negative-fixnum + + clear-hash build-graph + + >r r> + + set-callstack set-word set-word-prop + set-catchstack set-namestack set-retainstack + set-continuation-retain continuation-catch + set-continuation-name catchstack retainstack + set-no-math-method-generic + set-no-math-method-right + set-check-method-class + set-check-create-name + set-nested-style-stream-style + set-pathname-string + set-check-create-vocab + check-create? + reset-generic forget-class + create forget-word forget-vocab forget forget-tuple + remove-word-prop empty-method + continue-with + + define-compound define make-generic + define-method define-predicate-class + define-tuple define-temp define-tuple-slots + define-writer define-predicate define-generic + ?make-generic define-reader define-slot define-slots + define-typecheck define-slot-word define-union + define-generic* with-methods define-constructor + predicate-word condition-continuation define-symbol + + ndrop + + set-word-def set-word-name + set-word-props set-word-primitive + + stdio + close readln (readln) read1 read with-server + stream-read stream-readln stream-read1 lines (lines) + contents stream-copy stream-flush + stream-format set-line-reader-cr + + double>bits float>bits >bignum + + intern-slots class-predicates delete (delete) prune memq? + normalize norm vneg vmax vmin v- v+ [v-] + + bin> oct> le> be> hex> string>number + + gensym random-int counter + + ! + init-namespaces unxref-word set-global set off on + nest + set-restart-obj + +@ inc dec + + changed-words + callstack namespace namestack global vocabularies + + path+ parent-dir + + .s . word-xt. + + continue-with + set-delegate + + closure + + tabular-output simple-slots + + join concat (group) + } + { "arrays" "errors" "generic" "graphs" "hashtables" "io" + "kernel" "math" "namespaces" + "queues" "strings" "sequences" "vectors" "words" } + [ words ] map concat diff ; + +w1 wordbank set-global + +: databank + { + ! V{ } H{ } V{ 3 } { 3 } { } "" "asdf" + pi 1/0. -1/0. 0/0. [ ] + f t "" 0 0.0 3.14 2 -3 -7 20 3/4 -3/4 1.2/3 3.5 + C{ 2 2 } C{ 1/0. 1/0. } + } ; + +: setup-test ( #data #code -- data... quot ) + #! variable stack effect + >r [ databank pick-one ] times r> + [ drop wordbank get pick-one ] map >quotation ; + +SYMBOL: before +SYMBOL: after +SYMBOL: quot +SYMBOL: err +err off + +: test-compiler ( data... quot -- ... ) + err off + dup quot set + datastack clone dup pop* before set + [ call ] catch drop datastack clone after set + clear + before get [ ] each + quot get [ compile-1 ] [ err on ] recover ; + +: do-test ( data... quot -- ) + .s flush test-compiler + err get [ + datastack after get 2dup = [ + 2drop + ] [ + [ . ] each + "--" print + [ . ] each quot get . + "not =" throw + ] if + ] unless + clear ; + +: random-test ( #data #code -- ) + setup-test do-test ; + +: run-random-tester2 + 100000000000000 [ 6 3 random-test ] times ; + + +! A worthwhile test that has not been run extensively +1000 [ drop gensym ] map "syms" set + +: pick-one [ length random-int ] keep nth ; + +: fooify-test + "syms" get pick-one + 2000 random-int >quotation + over set-word-def + 100 random-int zero? [ code-gc ] when + compile fooify-test ; + diff --git a/contrib/random-tester/random.factor b/apps/random-tester/random.factor similarity index 94% rename from contrib/random-tester/random.factor rename to apps/random-tester/random.factor index 39673c1b0a..fe614aebdb 100644 --- a/contrib/random-tester/random.factor +++ b/apps/random-tester/random.factor @@ -22,7 +22,7 @@ IN: random-tester random-int 2 swap ^ random-int ; : random-seq ( -- seq ) - { [ ] { } V{ } "" } nth-rand + { [ ] { } V{ } "" } pick-one [ max-length random-int [ max-value random-int , ] times ] swap make ; : random-string @@ -56,7 +56,7 @@ SYMBOL: special-complexes coin-flip [ random-fixnum ] [ - coin-flip [ random-bignum ] [ special-integers nth-rand ] if + coin-flip [ random-bignum ] [ special-integers pick-one ] if ] if ; : random-positive-integer ( -- int ) @@ -70,7 +70,7 @@ SYMBOL: special-complexes 1000000000 dup [ random-int ] 2apply 1+ / coin-flip [ neg ] when dup [ drop random-ratio ] unless 10% [ drop 0 ] when ; : random-float ( -- float ) - coin-flip [ random-ratio ] [ special-floats nth-rand ] if + coin-flip [ random-ratio ] [ special-floats pick-one ] if coin-flip [ .0000000000000000001 /f ] [ coin-flip [ .00000000000000001 * ] when ] if >float ; diff --git a/apps/random-tester/type.factor b/apps/random-tester/type.factor new file mode 100644 index 0000000000..fa623a736f --- /dev/null +++ b/apps/random-tester/type.factor @@ -0,0 +1,88 @@ +USING: errors generic io kernel lazy-lists math memory namespaces +prettyprint random-tester2 sequences tools words ; +IN: random-tester + +: inert ; +TUPLE: inert-object ; + +: inputs ( -- seq ) + { + 0 -1 -1000000000000000000000000 + ! -268435457 + inert + ! T{ inert-object f } + -29/2 1000000000000000000000000000000/1111111111111111111111111111111111111111111 + 3/4 + -1000000000000000000000000/111111111111111111 + -3.14 1/0. 0.0 -1/0. 3.14 0/0. + C{ 1 -1 } + W{ 55 } + { } + f t + H{ } + V{ 1 0 65536 } + "" + SBUF" " + [ ] + ! DLL" libm.dylib" + ! ALIEN: 1 + T{ inert-object f } + } ; + +: word-inputs ( word -- seq ) + [ stack-effect effect-in length ] [ drop 0 ] recover + inputs swap ; + +: type-error? ( exception -- ? ) + [ swap execute or ] curry + >r { no-method? no-math-method? } f r> reduce ; + +: maybe-explode + dup sequence? [ [ ] each ] when ; inline + +TUPLE: success quot inputs outputs ; + +SYMBOL: err +SYMBOL: type-error +SYMBOL: params +SYMBOL: last-time +SYMBOL: quot +: throws? ( data... quot -- ? ) + dup quot set + err off type-error off + >r + dup clone params set + maybe-explode + r> + ! .s flush + dup last-time get = [ dup . flush dup last-time set ] unless + [ call ] [ err on ] recover + err get [ + dup type-error? dup [ + ! .s + ] unless + type-error set + ] [ + datastack clone >r quot get params get r> + , + ] if clear type-error get ; + +: test-inputs ( word -- seq ) + [ + [ word-inputs ] keep + unit [ + throws? not clear + ] curry each-permutation + ] { } make ; + +: (test1) + [ + [ stack-effect effect-in length ] catch [ 4 < ] unless + ! ] subset [ [ [ test-inputs , full-gc ] { } make , ] each ] { } make ; + ! ] subset [ [ [ test-inputs , ] { } make , ] each ] { } make ; + ] subset [ test-inputs clear ] each ; + +: test1 + wordbank get (test1) ; + +! full-gc finds corrupted memory faster diff --git a/apps/random-tester/utils.factor b/apps/random-tester/utils.factor new file mode 100644 index 0000000000..8d24036563 --- /dev/null +++ b/apps/random-tester/utils.factor @@ -0,0 +1,73 @@ +USING: kernel math sequences namespaces errors hashtables words +arrays parser compiler syntax io optimizer inference shuffle +tools prettyprint ; +IN: random-tester + +: pick-one ( seq -- elt ) + [ length random-int ] keep nth ; + +! HASHTABLES +: random-hash-entry ( hash -- key value ) + hash>alist pick-one first2 ; + +: coin-flip ( -- bool ) 2 random-int zero? ; +: do-one ( seq -- ) pick-one call ; inline + +: nzero-array ( seq -- ) + dup length >r 0 r> [ pick set-nth ] each-with drop ; + +: zero-array + [ drop 0 ] map ; + +TUPLE: p-list seq max count count-vec ; +: make-p-list ( seq n -- tuple ) + >r dup length [ 1- ] keep r> + [ ^ 0 swap 2array ] keep + zero-array ; + +: inc-seq ( seq max -- ) + 2dup [ < ] curry find-last over -1 = [ + 3drop nzero-array + ] [ + nipd 1+ 2over swap set-nth + 1+ over length rot nzero-array + ] if ; + +: inc-count ( tuple -- ) + [ p-list-count first2 >r 1+ r> 2array ] keep + set-p-list-count ; + +: get-permutation ( tuple -- seq ) + [ p-list-seq ] keep p-list-count-vec [ swap nth ] map-with ; + +: p-list-next ( tuple -- seq/f ) + dup p-list-count first2 < [ + [ + [ get-permutation ] keep + [ p-list-count-vec ] keep p-list-max + inc-seq + ] keep inc-count + ] [ + drop f + ] if ; + +: (permutations) ( tuple -- ) + dup p-list-next [ , (permutations) ] [ drop ] if* ; + +: permutations ( seq n -- seq ) + make-p-list + [ + (permutations) + ] { } make ; + +: (each-permutation) ( tuple quot -- ) + over p-list-next [ + [ rot drop swap call ] 3keep + drop (each-permutation) + ] [ + 2drop + ] if* ; inline + +: each-permutation ( seq n quot -- ) + >r make-p-list r> (each-permutation) ; + diff --git a/examples/raytracer.factor b/apps/raytracer.factor similarity index 97% rename from examples/raytracer.factor rename to apps/raytracer.factor index 04eaedd1c7..7d2063e91f 100644 --- a/examples/raytracer.factor +++ b/apps/raytracer.factor @@ -161,6 +161,6 @@ DEFER: create ( level c r -- scene ) "Generating " write dup write "..." print [ run write ] with-stream ; -PROVIDE: examples/raytracer ; +PROVIDE: apps/raytracer ; -MAIN: examples/raytracer [ "raytracer.pnm" run>file ] time ; +MAIN: apps/raytracer [ "raytracer.pnm" run>file ] time ; diff --git a/apps/rss/atom.xml b/apps/rss/atom.xml new file mode 100644 index 0000000000..d0195661ce --- /dev/null +++ b/apps/rss/atom.xml @@ -0,0 +1,45 @@ + + + dive into mark + + A <em>lot</em> of effort + went into making this effortless + + 2005-07-31T12:29:29Z + tag:example.org,2003:3 + + + Copyright (c) 2003, Mark Pilgrim + + Example Toolkit + + + Atom draft-07 snapshot + + + tag:example.org,2003:3.2397 + 2005-07-31T12:29:29Z + 2003-12-13T08:29:29-04:00 + + Mark Pilgrim + http://example.org/ + f8dy@example.com + + + Sam Ruby + + + Joe Gregorio + + +
+

[Update: The Atom draft is finished.]

+
+
+
+
diff --git a/apps/rss/load.factor b/apps/rss/load.factor new file mode 100644 index 0000000000..fce842e18f --- /dev/null +++ b/apps/rss/load.factor @@ -0,0 +1,10 @@ +REQUIRES: libs/http-client libs/httpd libs/sqlite libs/xml + libs/parser-combinators ; +PROVIDE: apps/rss +{ +files+ { + "rss.factor" + "rss-reader.factor" +} } +{ +tests+ { + "test.factor" +} } ; diff --git a/contrib/rss/readme.txt b/apps/rss/readme.txt similarity index 100% rename from contrib/rss/readme.txt rename to apps/rss/readme.txt diff --git a/contrib/rss/rss-reader.factor b/apps/rss/rss-reader.factor similarity index 94% rename from contrib/rss/rss-reader.factor rename to apps/rss/rss-reader.factor index b6ed9ad626..ee7d5d9079 100644 --- a/contrib/rss/rss-reader.factor +++ b/apps/rss/rss-reader.factor @@ -72,20 +72,20 @@ SYMBOL: db ] show 2drop ; : rss>reader-feed ( url rss -- reader-feed ) - [ rss-title ] keep rss-link ; + [ feed-title ] keep feed-link ; : rss-entry>reader-entry ( url entry -- reader-entry ) - [ rss-entry-link ] keep - [ rss-entry-title ] keep - [ rss-entry-description ] keep - rss-entry-pub-date + [ entry-link ] keep + [ entry-title ] keep + [ entry-description ] keep + entry-pub-date ; : update-feed-database ( url -- ) dup remove-feed - dup rss-get + dup news-get 2dup rss>reader-feed db get swap save-tuple - rss-entries [ + feed-entries [ dupd rss-entry>reader-entry dup >r reader-entry-link f f f db get swap find-tuples [ db get swap delete-tuple ] each r> db get swap save-tuple diff --git a/apps/rss/rss.factor b/apps/rss/rss.factor new file mode 100644 index 0000000000..6b36fec462 --- /dev/null +++ b/apps/rss/rss.factor @@ -0,0 +1,89 @@ +! Copyright (C) 2006 Chris Double. +! See http://factorcode.org/license.txt for BSD license. +IN: rss +USING: kernel http-client xml xml-utils xml-data errors io strings + sequences xml-writer parser-combinators lazy-lists ; + +: ?children>string ( tag/f -- string/f ) + [ children>string ] [ f ] if* ; + +LAZY: '&' ( -- parser ) + "&" token + [ blank? ] satisfy &> + [ "&" swap add ] <@ ; + +: &>& ( string -- string ) + '&' replace ; + +TUPLE: feed title link entries ; +TUPLE: entry title link description pub-date ; + +: rss1.0 ( xml -- feed ) + [ + "channel" find-tag + [ "title" find-tag children>string ] keep + "link" find-tag children>string + ] keep + "item" find-tags [ + [ "title" find-tag children>string ] keep + [ "link" find-tag children>string ] keep + [ "description" find-tag children>string ] keep + f "date" "http://purl.org/dc/elements/1.1/" + find-name-tag ?children>string + + ] map ; + +: rss2.0 ( xml -- feed ) + "channel" find-tag + [ "title" find-tag children>string ] keep + [ "link" find-tag children>string ] keep + "item" find-tags [ + [ "title" find-tag children>string ] keep + [ "link" find-tag ] keep + [ "guid" find-tag dupd ? children>string ] keep + [ "description" find-tag children>string ] keep + "pubDate" find-tag children>string + ] map ; + +: atom1.0 ( xml -- feed ) + [ "title" find-tag children>string ] keep + [ "link" find-tag "href" prop-name-tag first ] keep + "entry" find-tags [ + [ "title" find-tag children>string ] keep + [ "link" find-tag "href" prop-name-tag first ] keep + [ + dup "content" find-tag + [ nip ] [ "summary" find-tag ] if* + dup tag-children [ tag? ] contains? + [ tag-children [ write-chunk ] string-out ] + [ children>string ] if + ] keep + dup "published" find-tag + [ nip ] [ "updated" find-tag ] if* + children>string + ] map ; + +: feed ( xml -- feed ) + dup name-tag { + { [ dup "RDF" = ] [ drop rss1.0 ] } + { [ dup "rss" = ] [ drop rss2.0 ] } + { [ "feed" = ] [ atom1.0 ] } + { [ t ] [ "Invalid newsfeed" throw ] } + } cond ; + +: read-feed ( string -- feed ) + ! &>& ! this will be uncommented when parser-combinators are fixed + string>xml feed ; + +: load-news-file ( filename -- feed ) + #! Load an news syndication file and process it, returning + #! it as an feed tuple. + [ contents read-feed ] keep stream-close ; + +: news-get ( url -- feed ) + #! Retrieve an news syndication file, return as a feed tuple. + http-get rot 200 = [ + nip read-feed + ] [ + 2drop "Error retrieving newsfeed file" throw + ] if ; diff --git a/apps/rss/rss1.xml b/apps/rss/rss1.xml new file mode 100644 index 0000000000..78a253b722 --- /dev/null +++ b/apps/rss/rss1.xml @@ -0,0 +1,67 @@ + + + + + + Meerkat + http://meerkat.oreillynet.com + Meerkat: An Open Wire Service + The O'Reilly Network + Rael Dornfest (mailto:rael@oreilly.com) + Copyright © 2000 O'Reilly & Associates, Inc. + 2000-01-01T12:00+00:00 + hourly + 2 + 2000-01-01T12:00+00:00 + + + + + + + + + + + + + + + Meerkat Powered! + http://meerkat.oreillynet.com/icons/meerkat-powered.jpg + http://meerkat.oreillynet.com + + + + XML: A Disruptive Technology + http://c.moreover.com/click/here.pl?r123 + + XML is placing increasingly heavy loads on the existing technical + infrastructure of the Internet. + + The O'Reilly Network + Simon St.Laurent (mailto:simonstl@simonstl.com) + Copyright © 2000 O'Reilly & Associates, Inc. + XML + XML.com + NASDAQ + XML + + + + Search Meerkat + Search Meerkat's RSS Database... + s + http://meerkat.oreillynet.com/ + search + regex + + + diff --git a/apps/rss/test.factor b/apps/rss/test.factor new file mode 100644 index 0000000000..8ddc964bec --- /dev/null +++ b/apps/rss/test.factor @@ -0,0 +1,37 @@ +USING: rss io test ; +IN: temporary + +[ T{ + feed + f + "Meerkat" + "http://meerkat.oreillynet.com" + V{ + T{ + entry + f + "XML: A Disruptive Technology" + "http://c.moreover.com/click/here.pl?r123" + "\n XML is placing increasingly heavy loads on the existing technical\n infrastructure of the Internet.\n " + f + } + } +} ] [ "apps/rss/rss1.xml" resource-path load-news-file ] unit-test +[ T{ + feed + f + "dive into mark" + "http://example.org/" + V{ + T{ + entry + f + "Atom draft-07 snapshot" + "http://example.org/2005/04/02/atom" + "\n
\n

[Update: The Atom draft is finished.]

\n
\n " + + "2003-12-13T08:29:29-04:00" + } + } +} ] [ "apps/rss/atom.xml" resource-path load-news-file ] unit-test +[ " & & hi" ] [ " & & hi" &>& ] unit-test diff --git a/apps/show-dataflow/load.factor b/apps/show-dataflow/load.factor new file mode 100644 index 0000000000..d6d6bb80ca --- /dev/null +++ b/apps/show-dataflow/load.factor @@ -0,0 +1,3 @@ +PROVIDE: apps/show-dataflow +{ +files+ { "print-dataflow.factor" "show-dataflow.factor" } } +{ +tests+ { "tests.factor" } } ; diff --git a/examples/print-dataflow/print-dataflow.factor b/apps/show-dataflow/print-dataflow.factor similarity index 87% rename from examples/print-dataflow/print-dataflow.factor rename to apps/show-dataflow/print-dataflow.factor index 4abb99c666..5735aabd69 100644 --- a/examples/print-dataflow/print-dataflow.factor +++ b/apps/show-dataflow/print-dataflow.factor @@ -1,7 +1,9 @@ -IN: print-dataflow +! Copyright (C) 2006, 2007 Slava Pestov. +! See http://factorcode.org/license.txt for BSD license. +IN: show-dataflow USING: generic hashtables inference io kernel kernel-internals -math namespaces prettyprint sequences styles vectors words -optimizer ; +math namespaces prettyprint prettyprint-internals sequences +styles vectors words optimizer ; ! A simple tool for turning dataflow IR into quotations, for ! debugging purposes. @@ -11,7 +13,7 @@ GENERIC: node>quot ( ? node -- ) TUPLE: comment node text ; M: comment pprint* - "( " over comment-text " )" append3 + "( " over comment-text " )" 3append swap comment-node presented associate styled-text ; @@ -79,7 +81,7 @@ M: object node>quot dup class word-name comment, ; : dataflow>quot ( node ? -- quot ) [ swap (dataflow>quot) ] [ ] make ; -: dataflow. ( quot ? -- ) +: print-dataflow ( quot ? -- ) #! Print dataflow IR for a quotation. Flag indicates if #! annotations should be printed or not. >r dataflow optimize r> dataflow>quot . ; diff --git a/library/ui/tools/dataflow.factor b/apps/show-dataflow/show-dataflow.factor similarity index 80% rename from library/ui/tools/dataflow.factor rename to apps/show-dataflow/show-dataflow.factor index 5d4a2c17b5..730d701414 100644 --- a/library/ui/tools/dataflow.factor +++ b/apps/show-dataflow/show-dataflow.factor @@ -1,11 +1,11 @@ -! Copyright (C) 2006 Slava Pestov. +! Copyright (C) 2006, 2007 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -IN: gadgets-dataflow +IN: show-dataflow USING: namespaces arrays sequences io inference math kernel generic prettyprint words gadgets opengl gadgets-panes gadgets-labels gadgets-theme gadgets-presentations gadgets-buttons gadgets-borders gadgets-scrolling -gadgets-workspace optimizer models help ; +optimizer models help ; GENERIC: node>gadget* ( height node -- gadget ) @@ -78,8 +78,7 @@ TUPLE: node-gadget value height ; C: node-gadget ( gadget node height -- gadget ) [ set-node-gadget-height ] keep [ set-node-gadget-value ] keep - swap over set-gadget-delegate - dup faint-boundary ; + swap over set-gadget-delegate ; M: node-gadget pref-dim* dup delegate pref-dim @@ -111,10 +110,6 @@ M: #push node-presents >#push< first ; ] 2map ; -: ( node -- gadget ) - class [ word-name